簡體   English   中英

我想鑄造並轉移 1 個 erc20(custom) 到鑄造者本身,只是為了跟蹤 erc20 交易

[英]I want to mint and transfer 1 erc20(custom) to the minter itself, just to track erc20 transaction

這是使用的代碼,我正在使用多邊形 tes.net 進行測試,approve function 工作正常但 transferFrom 不工作(錯誤:-32000)

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

import "@0xcert/ethereum-erc721/src/contracts/tokens/nf-token-metadata.sol";
import "@0xcert/ethereum-erc721/src/contracts/ownership/ownable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract newNFT is NFTokenMetadata, Ownable {
    ERC20 KOOLToken;

    constructor() {
        KOOLToken=ERC20(0xxxxxxxxxxxxxxxxxxxxxxxxxxx);
        nftName = "Test NFT 123";
        nftSymbol = "TNFT321";
    }

    function approve() public onlyOwner {
      KOOLToken.approve(address(msg.sender), 1);
    }

function transferFrom() public onlyOwner{
  KOOLToken.transferFrom(msg.sender,msg.sender, 1);
}

function mint(address _to, uint256 _tokenId, string calldata _uri) public onlyOwner {
  super._mint(_to, _tokenId);
  super._setTokenUri(_tokenId, _uri);
}
}

您的-32000錯誤是由 ERC20 合同中的還原引起的,因為 msg.sender 沒有足夠的津貼來花費。

根據EIP20transferFrom提供:

transferFrom 方法用於提取工作流程,允許合約代表您轉移代幣。 例如,這可以用於允許合同代表您轉移代幣和/或以子貨幣收取費用。 function 應該拋出,除非 _from 帳戶通過某種機制故意授權消息的發件人。

這意味着,即使msg.sender是此處的所有者,它也不是transferFrom的有效源地址,除非您之前對其調用approve

您可以批准msg.sender ,或者簡單地使用transfer function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM