繁体   English   中英

当试图从智能合约中提取 BUSD 时出现 Gas Estimate Error - JSON-RPC: 32000

[英]when trying to withdraw BUSD from a smart contract am gettting Gas Estimate Error - JSON-RPC : 32000

我想将 BUSD 发送到智能合约,然后只有所有者才能从该智能合约中提取这些 BUSD。 有人可以帮我编程吗?

我在下面尝试过,但认为它不会起作用。

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

import "../IERC20.sol";

contract TestBUSD {

    IERC20 tokenContract;
    address private owner;
    uint bal;

    constructor() payable {
        tokenContract = IERC20(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
        owner = msg.sender;
    }

    receive() external payable {}

    modifier OnlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function Approvetokens(uint256 _tokenamount) public returns(bool){
       tokenContract.approve(address(this), _tokenamount);
       return true;
   }

    function GetUserTokenBalance() public view returns(uint256){ 
       return tokenContract.balanceOf(msg.sender);
   }

    function deposit(uint256 _tokenamount) payable public {
        tokenContract.transferFrom(msg.sender, address(this), _tokenamount);
        bal += msg.value;
    }

    function getOwner() public view returns (address) {    
        return owner;
    }
    
    function withdrawToken(address _tokenContract, uint256 _amount) payable external {
        require(msg.sender == owner, "Only owner can withdraw!");
        IERC20(_tokenContract);
        tokenContract.transfer(msg.sender, _amount);
    }
}

tokenContract地址在 BSC 测试网上不持有任何智能合约(在主网上的同一地址上存在BUSD代币)。

您的withdrawToken() function 向tokenContract地址发送一个内部交易,试图执行它的 function transfer() ,并期望从此内部交易返回一个bool (如IERC20接口中所声明的)。 但是,由于该地址上没有合约,因此不会产生任何响应——内部交易失败,导致主交易也失败。

如果你想在 BSC 测试网上专门测试你的合约,你需要使用一个部署了 ERC20 代币的代币地址。 据我所知,目前测试网上没有正式的 BUSD 版本,所以你可能不得不使用其他代币或你自己的虚拟代币。

或者,如果您只想在非主网网络上测试与 BSUD 交互的合约,我建议您在本地模拟器中分叉主网

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM