Ethereum 空投合同无效
我正在尝试实施这一空投: 最初,我开始为我们的用例编写测试,但是空投没有工作Ethereum 空投合同无效,ethereum,solidity,smartcontracts,web3,Ethereum,Solidity,Smartcontracts,Web3,我正在尝试实施这一空投: 最初,我开始为我们的用例编写测试,但是空投没有工作 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 == value
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)));
}
}
什么可能导致此问题?如何进一步调试此问题?:)
谢谢,祝你今天愉快 错误可能有以下几个原因:
source
没有足够的令牌覆盖所有传输approve
操作不正确(需要批准的是空投合同,而不是交易的发起人)您可以通过删除
require
来缩小范围,并查看是否有任何删除成功(按照您的编码方式,一次失败将回滚整个交易)。您的帖子说您已经完成了“包括折扣”的过程。津贴
和批准
功能是两个不同的功能。你是否批准了你的空投合同来分发代币?是的!抱歉误解-恕我直言,我已批准从其他地址分发代币。:)这个错误可能有几个原因。1) source
没有足够的令牌覆盖所有传输。2) 一个或多个目标地址无效。3) approve
操作不正确(需要批准的是空投合同,而不是交易的发起人)。您可以通过删除require
来缩小它的范围,并查看任何删除是否成功(按照您的编码方式,一次失败将回滚整个事务)。嘿@AdamKipnis第三个选项是正确的!我批准的是合同所有者,而不是合同本身。请将此添加为答案,以便我可以批准它。:)
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.