如何将多边形链上的USDT从一个EOA账户转移到另一个EOA账户

问题描述 投票:0回答:1

我相信我必须使用ERC20的transferFrom功能。但我没有获得成功。 我还想知道这种方法是否会显示我的合约地址的链上交易量,或者我需要将流程更改为 EOA->智能合约->EOA。

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8;

interface IERC20 {
    function transfer(address _to, uint256 _value) external returns     (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
}

contract MyContract {

    function sendUSDT(address _from, address _to, uint256 _amount) external returns (bool) {
        IERC20 usdt = IERC20(address(0x2F7b97837F2D14bA2eD3a4B2282e259126A9b848));// mumbai testnet
        return usdt.transferFrom(_from, _to, _amount);
    }
    
    function approve(address spender, uint256 value) external returns(bool) {
        IERC20 usdt = IERC20(address(0x2F7b97837F2D14bA2eD3a4B2282e259126A9b848));
        return usdt.approve(spender, value);
    }

    function balanceOf(address account) external view returns (uint256){
        IERC20 usdt = IERC20(address(0x2F7b97837F2D14bA2eD3a4B2282e259126A9b848));
        return usdt.balanceOf(account);
    }

}
polygon erc20
1个回答
0
投票

我相信我必须使用ERC20的

transferFrom
功能

正确。但在此之前,您的合约需要得到用户的批准才能使用他们的代币。所以这是一个两次交易的过程。

第一笔交易: 用户需要直接在代币合约上执行

approve()
功能——而不是通过你的合约。

第二笔交易:只有这样你才能通过合约将用户的代币

transferFrom()
转移到另一个地址。


按照您现在编写合同的方式,您实际上是在批准

spender
支出您的合同所拥有的
value
代币。
    

© www.soinside.com 2019 - 2024. All rights reserved.