批准代币并转账

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

下午好,我无法签订合约,以便用户在我的合约中批准并允许使用合约2中的代币,之后所有者可以将代币从执行批准者的钱包发送到另一个钱包

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

interface ERC20 {
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
}

contract TokenTransfer {
    address public tokenAddress;
    ERC20 public token;

    constructor(address _tokenAddress) {
        tokenAddress = _tokenAddress;
        token = ERC20(_tokenAddress);
    }

    function approveTokens(address spender, uint256 amount) external {
        require(token.approve(spender, amount), "Approval failed");
    }

    function transferTokens(address sender, address to, uint256 amount) external {
        require(token.transferFrom(sender, to, amount), "Transfer failed");
    }
}

帮助

solidity smartcontracts web3js
1个回答
0
投票

通过执行

token.approve(spender, amount)
,合约成为批准者,而不是用户。您应该让用户直接使用
spender
= 您的合约地址调用代币合约。

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