首页 > 解决方案 > solidity - 我想通过 delegatecall 从我的 ERC20 代币合约中调用传输函数

问题描述

我想使用delegatecall通过一笔交易发送许多参与空投我的代币的人,所以我试图调用我在MultiSend合约中部署的ERC20代币合约中声明的transfer()函数。第一个代码是 Multisend Contract

 contract MultiSend {                                                
  function multiSend(address _token, address[] addresses, uint256 amount) public {

for(uint i = 0; i < addresses.length; i++) {
  require(_token.delegatecall(bytes32(keccak256("transfer(address, uint256)")), addresses[i], amount));
}

} }

下面的代码是我的 ERC20 代币合约中的 transfer()。

    function transfer(address _to, uint256 _value)
public
returns (bool) {
    unlockBalance(msg.sender);

    locker storage l = lockerList[msg.sender];

    if (l.isLocker) {
        require(_value <= balances[msg.sender].available);
        require(_to != address(0));

        balances[msg.sender].available = balances[msg.sender].available.sub(_value);
        addLockedUpTokens(_to, _value, l.lockUpPeriod, l.unlockCount);
    } else { 
        require(_value <= balances[msg.sender].available);
        require(_to != address(0));

        balances[msg.sender].available = balances[msg.sender].available.sub(_value);
        balances[_to].available = balances[_to].available.add(_value);
    }
    emit Transfer(msg.sender, _to, _value);

    return true;
}

我成功部署了 MultiSend 合约,ERC20 代币合约也可以独立运行。但是,当我尝试通过 MultiSend 合约发送交易时,该交易失败。我不知道为什么我不能通过这个合约发送代币。

标签: ethereumsolidity

解决方案


推荐阅读