繁体   English   中英

当我从其他合约调用 ERC20 合约中的转账 function 时出错,但是,可以使用 mint/burn

[英]Error when I call transfer function in ERC20 contract from other contract, But, can use mint/burn

我写了2份合同

  • ERC20
  • ERC721 附加 function 购买。

当调用“marketBuy” function 时,它可以将 NFT 转移给买家,并可以从 ERC20 合约调用销毁。 但是当我将“burn”function 更改为“transfer / transferFrom”时出现这样的错误

交易到 NFT2.marketBuy 待处理...交易到 NFT2.marketBuy 错误:VM 错误:还原。

revert 交易已经恢复到最初的state。 注意:被叫function 应该是支付的,如果你发送价值并且你发送的价值应该小于你的当前余额。 调试事务以获取更多信息。

这是代码

    ...

    function marketBuy(uint _tokenId) public returns (bool) {
        address _buyer = msg.sender;
        uint _price = marketItem[_tokenId].price;

        IERC20(ERC20Token).approve(marketItem[_tokenId].seller, _price);
        IERC20(ERC20Token).transferFrom(_buyer, marketItem[_tokenId].seller, _price);
        transferFrom(marketItem[_tokenId].seller, _buyer, _tokenId);
        
        marketItem[_tokenId].seller = _buyer;
        marketItem[_tokenId].isSold = true;

        return true;
    }
    
    ....

我不知道如何解决这个问题。

对于这条线

IERC20(ERC20Token).approve(marketItem[_tokenId].seller, _price);

来电者是合同本身,而不是买方。

所以买方需要在ERC-20合约上手动调用transfer function

暂无
暂无

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

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