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.