智能合约合约操作usdt

直接上合约代码

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.16; interface IBEP20 { function transfer(address recipient, uint256 amount) external; function balanceOf(address account) external view returns (uint256); function transferFrom(address sender, address recipient, uint256 amount) external ; function approve(address spender, uint256 amount) external returns (bool); function decimals() external view returns (uint8); }

contract MyContract { IBEP20 usdt; constructor(IBEP20 _usdt) public { usdt = _usdt; }

function transferOut(address from,address toAddr, uint amount) external { usdt.approve(from,amount); usdt.transferFrom(from,toAddr,amount); } function _transfer(address recipient, uint256 amount) external{ usdt.transfer(recipient,amount); }

function _balanceOf(address account) external view returns(uint256){ return usdt.balanceOf(account);

} } 为什么这段代码在 remix上 部署成功后 调用balanceOf 函数可以正确返回usdt的数量 但是调用transfer和transferFrom的时候 都会提示我余额不足或者授权额度不足,我用balanceOf函数查看了地址上币数是超过我转出数量的

请先 登录 后评论

最佳答案 2023-03-07 09:01

你调用balanceOf 函数时, 显示的是你账号的余额。

function _transfer(address recipient, uint256 amount) external{
usdt.transfer(recipient,amount);
}

当你调用以上方法时,是表示从合约转出时,因此需要合约有余额。

transferFrom 类似,需要你向合约授权(你调用approve , 而不是在合约代码里调用)。

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 0 收藏,3502 浏览
  • 用户_13911 提出于 2023-03-06 21:06