一直在努力学习基础知识并尝试实现 RottenSwap 的令牌销毁部分(SushiSwap 的分支,更改了约 10 行代码)。基本上,当您发送交易时,它会将一个硬币 (ROT) 的 % 烧成另一个 (MAGGOT)。它让我可以在测试网和铸造代币上进行部署,但是在它们放入钱包后我无法发送它们,我收到如下错误:
<块引用>"错误:[ethjs-query] 格式化 RPC 输出时 '{"value":{"code":-32603,"data":{"code":-32000,"message":"intrinsic gas too低"}}}'",
我用 2000 gwei 和极高的 gas 限制尝试了它,但它仍然抛出错误,所以问题不是 gas。如果我删除 Rotten 特定的代码,那么它就可以工作(但显然没有令牌销毁功能。)
我决定用实际的 Rotten 代码尝试同样的事情,只是复制/粘贴 Maggot 和 Rotten 合约(见下文),部署在测试网上,同样的事情:可以铸造代币,但尝试交易硬币会引发错误,除非我删除了 Rotten 特定的代码(也在下面)。我还去了 GitHub 并尝试了那里的文件,结果相同 - 只有在我删除该特定代码块时才有效。
任何人都知道可能导致这种情况的原因是什么?我正在使用 Remix 和 MetaMask,但问题似乎出在上面的代码块上,因为一旦删除,一切都会正常运行。
在部署 Maggot 时,我将“地址 _res”设置为我用来部署它的钱包 - 不确定这是否正确,但我只想把它放在那里。
在部署 Rotten 时,我将 'uint8' 设置为 40,据我所知,这将令牌消耗设置为 2.5% (100/unit8)。同时将“address _maggot”设置为我的测试网 Maggot 合约地址。
有人有什么想法吗?这不是最重要的问题,因为我只是在胡闹,但有点难住为什么复制一份已经有效的合同是行不通的。
烂合同:https://etherscan.io/address/0xd04785c4d8195e4a54d9dec3a9043872875ae9e2#code
蛆合约:https://etherscan.io/address/0x163c754ef4d9c03fc7fa9cf6dd43bfc760e6ce89#code
腐烂的特定代码:
// rotten sushi is an exact copy of sushi except for the
// following code, which implements a "rot" every transfer
// https://etherscan.io/token/0x6b3595068778dd592e39a122f4f5a5cf09c90fe2
// the rot burns 1% of the transfer amount, and gives the
// recipient the equivalent MAGGOT token
using SafeMath for uint256;
// the maggot token that gets generated when transfers occur
MaggotToken public maggot;
// the amount of burn to maggot during every transfer, i.e. 100 = 1%, 50 = 2%, 40 = 2.5%
uint8 public maggotDivisor;
constructor(MaggotToken _maggot, uint8 _maggotDivisor) public {
require(_maggotDivisor > 0, "Rotten: maggotDivisor must be bigger than 0");
maggot = _maggot;
maggotDivisor = _maggotDivisor;
}
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
// maggot amount is 1%
uint256 maggotAmount = amount.div(maggotDivisor);
// recipient receives 1% maggot tokens
maggot.mint(recipient, maggotAmount);
// sender loses the 1% of the ROT
_burn(msg.sender, maggotAmount);
// sender transfers 99% of the ROT
return super.transfer(recipient, amount.sub(maggotAmount));
}
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
// maggot amount is 1%
uint256 maggotAmount = amount.div(maggotDivisor);
// recipient receives 1% maggot tokens
maggot.mint(recipient, maggotAmount);
// sender loses the 1% of the ROT
_burn(sender, maggotAmount);
// sender transfers 99% of the ROT
return super.transferFrom(sender, recipient, amount.sub(maggotAmount));
}
// END OF ROTTEN SUSHI SPECIFIC CODE