我想使用委托调用来发送许多通过一次交易参与空投我令牌的人,因此我试图调用在MultiSend合同中部署的ERC20令牌合同中声明的transfer()函数。第一个代码是多发送合同
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合同发送交易时,该交易失败。我不知道为什么我不能通过此合同发送令牌。