簡體   English   中英

使用 ERC20 代幣支付

[英]Paying with ERC20 token

我想建立一個 NFT,我可以用 ERC-20 代幣支付來鑄造它。 我目前正在多邊形上使用孟買測試網,並且正在使用Dummy ERC20 令牌對其進行測試。

這是目前我的構造函數:

ERC20 token;

constructor() ERC721("Token", "TKN") {
  token = ERC20(0xfe4F5145f6e09952a5ba9e956ED0C25e3Fa4c7F1);
}

這是我的薄荷功能:

  function mint() public returns (uint256) {
    uint256 tokenId = _tokenIds.current();
    require(tokenId <= MAX_TOKEN_ID);

    token.approve(address(this), NFT_PRICE);
    token.transfer(address(this), NFT_PRICE);

    _mint(msg.sender, tokenId);
    _setTokenURI(tokenId, TOKEN_URI);

    _tokenIds.increment();
    return tokenId;
  }

如果我刪除這 2 行代碼可以正常工作,它會生成 NFT:

token.approve(address(this), NFT_PRICE);
token.transfer(address(this), NFT_PRICE);

但是一旦我添加它,代碼就會中斷,它會給我以下氣體估計錯誤:

The transaction execution will likely fail. Do you want to force sending?
Internal JSON-RPC error. { "code": 3, "message": "execution reverted: ERC20: transfer amount exceeds balance", "data": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002645524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63650000000000000000000000000000000000000000000000000000" }

作為故障排除步驟,我還在我的 mint 函數中添加了這個,以確保我是從自己的錢包中調用的:

sender = msg.sender;

並創建了這個函數:

function tokenBalance(address addr) public view returns (uint256) {
   return token.balanceOf(addr);
}

如果我獲取發件人地址的代幣余額,它會給我以下值:

0: uint256: 2000000000000000000

因為邏輯不對。 您在mint函數中調用的approve函數是無用的:支出者需要從您的虛擬 ERC20 的合約中調用approve函數。

然后你可以從你的 mint 函數中調用transferFrom(msg.sender, address(this), NFT_PRICE)

暫無
暫無

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

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