Airdrop 合约不工作——虚拟机错误:恢复

问题描述 投票:0回答:1

我正在尝试实现这个Airdrop: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 debugger 中我发现问题出在线上

require(token.transferFrom(source, dests[i], values[i].mul(multiplier)));

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

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

交易到Airdrop.airdrop errored: VM error: revert.
revert 交易已经恢复到初始状态
注意:如果您发送值,构造函数应该是可支付的。调试交易以获取更多信息。

什么会导致这个问题,我该如何进一步调试?

ethereum solidity smartcontracts web3js
1个回答
2
投票

错误可能有以下几个原因:

  1. source
    没有足够的代币来支付所有的转账。
  2. 一个或多个目的地地址无效。
  3. approve
    没做对(需要审核的是空投合约,不是交易发起人)

您可以通过删除

require
来缩小范围,看看是否有任何下降成功(按照您的编码方式,一次失败将回滚整个事务)。

© www.soinside.com 2019 - 2024. All rights reserved.