主页 > imtoken唯一官网 > openzeppelin的IERC20封装USDT的问题

openzeppelin的IERC20封装USDT的问题

imtoken唯一官网 2023-08-16 05:07:55

问题

使用openzeppelin的IERC20封装USDT,在合约中使用USDTtransfer方法失败!

原因

这是因为USDT的合约实现并不是标准ERC20代币的实现。 openzeppelin的ERC20传输协议是这样的

function transfer(address to, uint256 amount) external returns (bool);

而USDT的转账方式是这样的

function transfer(address to, uint value) public;

USDT的方法没有返回bool值,所以使用openzeppelin的IERC20接口包装USDT并使用transfer方法会失败。

合约交互可以转走usdt_okex转usdt_钱包转usdt几个小时没到账

解决方案

使用openzeppelin提供的SafeERC20提供的safeTransfer方法。 因为其他token或者solidity版本存在很多问题,没有按照标准协议实现,所以需要对ERC20 token的转账方式做一些安全处理。

具体步骤是:

导入 SafeERC20

import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

使用 SafeERC20

using SafeERC20 for IERC20;

钱包转usdt几个小时没到账_okex转usdt_合约交互可以转走usdt

使用 safeTransfer 方法

_usdt.safeTransfer(to, amount);

完整代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

合约交互可以转走usdt_okex转usdt_钱包转usdt几个小时没到账

import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract USDTTransfer { address private _usdtAddr = address(0xDbf8Bf15bb3438b7410d8f009d652508ffA97C7B);

钱包转usdt几个小时没到账_合约交互可以转走usdt_okex转usdt

constructor() {} IERC20 private _usdt; using SafeERC20 for IERC20; function safeTransferUSDT(address to, uint256 amount) public

okex转usdt_钱包转usdt几个小时没到账_合约交互可以转走usdt

returns (bool) { _usdt = IERC20(_usdtAddr); _usdt.safeTransfer(to, amount); return true; } }

我是 Victor合约交互可以转走usdt,Web3 爱好者! 希望能帮助更多人进入Web3的世界! 如有任何疑问合约交互可以转走usdt,请私信我!