空投合同无效

时间:2018-08-06 06:04:42

标签: ethereum solidity smartcontracts web3

我正在尝试实施此空投:https://github.com/odemio/airdropper/blob/master/Airdropper.sol 最初,我开始为我们的用例编写测试,但是空投无效。

function airdrop(address source, address[] dests, uint[] values) public onlyOwner {
    // This simple validation will catch most mistakes without consuming
    // too much gas.
    require(dests.length == values.length);

    for (uint256 i = 0; i < dests.length; i++) {
        require(token.transferFrom(source, dests[i], values[i].mul(multiplier)));
    }
}

然后我搬到Remix进行整个空投过程,包括我们的合同部署,代币铸造和津贴。

在Remix调试器中,我发现问题出在网上 require(token.transferFrom(source, dests[i], values[i].mul(multiplier)));

我还在Remix上使用相同的值直接在合约上测试了transferFrom函数。

我尝试空投时遇到的错误是:

transact to Airdrop.airdrop errored: VM error: revert. 
revert The transaction has been reverted to the initial state. 
Note: The constructor should be payable if you send value. Debug the transaction to get more information.

什么可能导致此问题,如何进一步调试? :) 谢谢,祝你有美好的一天!

1 个答案:

答案 0 :(得分:2)

该错误可能是由于以下几个原因:

  1. source没有足够的令牌来覆盖所有转移。
  2. 一个或多个目标地址无效。
  3. approve的处理不正确(需要批准的是空投合同,而不是交易的发起人)。

您可以通过删除require来缩小范围,看看是否有任何丢弃成功(按照您的编码方式,一次失败将回滚整个事务)。

相关问题