在 solidity smartcontract ( ERC-20 ) 中使用 TransferFrom

use TransferFrom in solidity smartcontract ( ERC-20 )

我需要编写一个智能合约,在这个智能合约中,用户可以向 ERC-20 网络中的每个账户发送令牌。

sender :0x5C2879Ec550e2F65D557b540B7DEAB3A6d478d62

recipient : 0xB643992c9fBcb1Cb06b6C9eb278b2ac35e6a2711

token Address : 0xa36085F69e2889c224210F603D836748e7dC0088

Kovan 测试网

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";

contract DexB is ERC20("KiaDex","DEX") {

   function SendTokenFromAddress(address token,address sender,address recipient,uint256 amount)
    external {

        IERC20 token = IERC20(token);
        token.allowance(sender,address(token));
        token.approve(sender,amount);
        require(token.balanceOf(sender) >=amount , "your balance is low" ) ;
        token.transferFrom(sender,recipient, amount);
        
    }
}

当我想从这个地址 0x5C2879Ec550e2F65D557b540B7DEAB3A6d478d62 向这个地址 0xB643992c9fBcb1Cb06b6C9eb278b2ac35e6a2711 发送令牌时,它不起作用并向我显示此消息,然后显示交易不成功:

**有什么问题吗?我怎样才能可靠地从用户地址到用户地址发送令牌? **

发件人,在您的例子中是 0x5C2879Ec550e2F65D557b540B7DEAB3A6d478d62,需要批准调用 sendTokenFromAddress 函数的钱包地址。合约不能代表需要发送代币的账户这样做。