我正在尝试实现这个空投: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.是什么导致了这个问题,我如何进一步调试呢?:)谢谢,祝您愉快!
发布于 2018-08-07 13:42:55
错误可能有以下几个原因:
source没有足够的令牌来覆盖所有的传输。approve没有正确完成(需要批准的是空投合同,而不是事务的发起者)。您可以通过删除require来缩小其范围,并查看是否有任何下降(按照您编写的方式,一个失败将回滚整个事务)。
https://stackoverflow.com/questions/51701409
复制相似问题