ethereum - 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 合约发送交易时,该交易失败。我不知道为什么我不能通过这个合约发送代币。
解决方案
推荐阅读
- javascript - 用于否定父元素中的特定 HTML 元素的 JQuery 选择器
- scala - 在 scala spark 数据框中提取时间间隔
- python - 在 Python 中绘制曲线
- asp.net-core - 将 IHtmlHelper 与依赖注入一起使用
- powershell - PowerShell 脚本设置 IIS 环境变量
- javascript - 将 div 插入另一个用于移动设备的静态 div
- python - Pandas 按值分组并合并行
- r - 删除最终用户对列进行排序的能力
- python-3.x - pandas concat ValueError - 传递的值与索引暗示的不匹配
- c++ - MPI-Parallel HDF5:C++ 中的 H5Pset_fapl_mpio 等效项