微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?