空投合约不起作用
Airdrop contract not working
我正在尝试实施此空投: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.
什么可能导致这个问题,我该如何进一步调试? :)
谢谢,祝你有愉快的一天!
错误可能有以下几个原因:
source
没有足够的代币来支付所有转账。
- 一个或多个目标地址无效。
approve
没做对(需要审核的是空投合约,不是交易发起方)
您可以通过删除 require
来缩小它的范围,并查看是否有任何删除成功(按照您的编码方式,一次失败将回滚整个事务)。
我正在尝试实施此空投: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.
什么可能导致这个问题,我该如何进一步调试? :) 谢谢,祝你有愉快的一天!
错误可能有以下几个原因:
source
没有足够的代币来支付所有转账。- 一个或多个目标地址无效。
approve
没做对(需要审核的是空投合约,不是交易发起方)
您可以通过删除 require
来缩小它的范围,并查看是否有任何删除成功(按照您的编码方式,一次失败将回滚整个事务)。