solidity ERC20 transferFrom没有错误,但不执行

2022-01-25 07:45:21 标签 solidityerc20

我有一个Solidity代码,旨在与myToken交换BUSD (ERC20),它调用了一个BUSD。 transferfrom()和一个myToken。transfer(),但尽管核心执行没有错误,只有myToken被转移。

账户已批准,有足够的余额。

你能指出错误吗?

bytes4 private constant SELECTOR_TRANSFER = bytes4(keccak256(bytes('transfer(address,uint256)')));
bytes4 private constant SELECTOR_TRANSFERFROM = bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
  function _myTokenTransfer(uint256 amount) private {
      _safeTransfer(myToken_addr, _msgSender(), amount);
  }
  
  function _busdTransfer(uint256 amount) private {
      _safeTransferFrom(busd_addr, _msgSender(), address(this), amount);
  }
  function _safeTransferFrom(address token, address from, address to, uint value) private {
      (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR_TRANSFERFROM, from , to, value));
      require(success && (data.length == 0 || abi.decode(data, (bool))), 'myTokenPrivateSale: TRANSFERFROM_FAILED');
  }
  
  function _safeTransfer(address token, address to, uint value) private {
      (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR_TRANSFER, to, value));
      require(success && (data.length == 0 || abi.decode(data, (bool))), 'myTokenPrivateSale: TRANSFER_FAILED');
  }
  
}

# # #你busd_addr is unset (设置(即。0x0).

)。

当_safeTransferFrom()函数被执行时,它会向0x0地址发送一个内部事务。事务不会恢复(没有会在0x0地址上抛出异常的契约),也不会返回任何数据(同样也没有会返回任何数据的契约)。

(bool success, bytes memory data)
// `success` is true because it didn't revert
// `data` is 0x00, the default value

然后验证通过,就好像它是成功的一样。

require(success && (data.length == 0 || ...));
// `success` is true
// `data.length` is 0, so the rest of the OR condition is ignored

我看到您执行了setBUSD()函数。但是这个函数没有设置_safeTransferFrom()函数中使用的busd_addr值。(它只设置busd和busd_set。)

目前还没有办法在代码中设置busd_addr值。因此,您需要在代码中进行适当的更改——在setBUSD()函数中设置busd_addr值,然后重新部署您的合同。

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码