Solidity 代码块的问题特别是 ROT 特定的代币销毁代码

问题描述

一直在努力学习基础知识并尝试实现 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,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 
  
  

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...