我正在尝试实施此空投: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.
什么可能导致此问题,如何进一步调试? :) 谢谢,祝你有美好的一天!
答案 0 :(得分:2)
该错误可能是由于以下几个原因:
source
没有足够的令牌来覆盖所有转移。approve
的处理不正确(需要批准的是空投合同,而不是交易的发起人)。您可以通过删除require
来缩小范围,看看是否有任何丢弃成功(按照您的编码方式,一次失败将回滚整个事务)。