Nft

從其他合約呼叫 ERC721 合約的 setApprovalForAll 失敗

  • March 18, 2022

我試圖從 MyContract 呼叫一些 ERC721 合約的 setApprovalForAll 。當使用者在我的契約中呼叫approveTransfer時,交易失敗,“程式碼”:-32603,“消息”:“處理交易時VM異常:恢復ERC721:批准給呼叫者”。當使用者在 NFT 合約中直接呼叫 setApprovalForAll 時,交易成功。我做錯了什麼?

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

import "@openzeppelin/contracts/token/ERC721/IERC721.sol";

contract MyContract {
   
   IERC721 public NftContract;

   constructor() {
       NftContract = IERC721(0x43709dE8b3e2869273C6a78418a227aC26e915bB);
   }


   function approveTransfer() public {
       NftContract.setApprovalForAll(address(this), true);
   }    
   ....
   ....
   ....

}

您需要在 nft contract 上呼叫 setApprovalForAll() 。因為部署者是所有者,並且您嘗試從該合約呼叫該函式,並且為此它還原,因為“合約”不是所有者。嘗試從 nft contract 呼叫 setApprovalForAll() 。它應該工作,讓我知道。

引用自:https://ethereum.stackexchange.com/questions/124115