空投合约不工作--VM错误:revert



我正在尝试实现此空投: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函数。

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

交易到空投。空投错误:VM错误:还原
revert事务已恢复到初始状态
注意:如果您发送值,则构造函数应该是应付的。调试事务以获取更多信息。

是什么原因导致了此问题,我如何进一步调试此问题?

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

  1. source没有足够的代币来支付所有转账
  2. 一个或多个目标地址无效
  3. approve没有正确完成(需要批准的是空投合同,而不是交易的发起人(

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

最新更新