首页 > 解决方案 > 处理 WTRX 代币从智能合约中提取和存款

问题描述

您好,我想在我的智能合约中处理 WTRX(WETH,但在 tronchain 上)令牌。 deposit似乎有效,但问题出在withdrawboth功能上,这两个失败了REVERT opcode executed..

在我打电话之前,withdraw我已经从 WTRX 智能合约中批准了合约地址。

根据我的调查,我认为这是来自函数msg.sender.transfer(sad)内部wtrx.withdraw

有人知道如何解决这个问题并使这个功能起作用吗?谢谢!

WTRX 合约可以在这里找到:https ://tronscan.io/#/token20/TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR/code

我的合约代码:

contract TestTransfer {
function deposit(address payable wtrxAddr) public payable{
    WTRX wtrx = WTRX(wtrxAddr);

    // TRX to WTRX Token
    wtrx.deposit.value(msg.value)();

    // Transfer TRX to caller
    wtrx.transfer(msg.sender, msg.value);
}

function withdraw(address payable wtrxAddr, uint sad) public{
    WTRX wtrx = WTRX(wtrxAddr);

    // Transfer WTRX Token from owner to contract
    wtrx.transferFrom(msg.sender, address(this), sad);

    // WTRX Token to TRX
    wtrx.withdraw(sad);
    
    // Transfer TRX to caller
    msg.sender.transfer(sad);
}

function both(address payable wtrxAddr) public payable{
    WTRX wtrx = WTRX(wtrxAddr);
    // TRX to WTRX Token
    wtrx.deposit.value(msg.value)();
    
    // WTRX Token to TRX
    wtrx.withdraw(msg.value);

    // Transfer TRX to caller
    msg.sender.transfer(msg.value);
}

}

标签: blockchainsoliditysmartcontracts

解决方案


推荐阅读