Solidity

如何進行從 openzeppelin erc721 合約繼承的應付 transferFrom 函式

  • February 3, 2022

我剛剛完成了加密殭屍教程https://cryptozombies.io/並希望讓它在本地工作,但也使用 solc 0.8.0。編譯給我帶來了很多錯誤,其中許多我只需要在我的覆蓋中將外部更改為 public 並添加覆蓋修飾符。但是,有一個問題我不確定如何解決。該合約繼承自 ERC721 的 @openzeppelin/contracts 版本。我在使用應付修飾符時遇到問題的兩個功能。

 function transferFrom(address _from, address _to, uint256 _tokenId) public payable override {
   require (zombieToOwner[_tokenId] == msg.sender || zombieApprovals[_tokenId] == msg.sender);
   _transfer(_from, _to, _tokenId);
 }

 function approve(address _approved, uint256 _tokenId) public payable override onlyOwnerOf(_tokenId) {
   zombieApprovals[_tokenId] = _approved;
   emit Approval(msg.sender, _approved, _tokenId);
 }

我在編譯過程中遇到錯誤..

TypeError: Overriding function changes state mutability from "nonpayable" to "payable".

所以我發現在ERC721合約中,這些功能都沒有標記為應付。

所以我的問題是我是否刪除了函式覆蓋中的應付修飾符?我認為這意味著函式/tx 不能攜帶乙太值。或者我是否將修飾符添加到我繼承的契約中的函式?如果(根據我的閱讀)solidity 期望它們出現在這兩個函式中,為什麼函式缺少這些修飾符?還是我錯過了什麼?我不確定如何進行,因此我們將不勝感激任何幫助!

僅在您明確發送 WETH 時使用應付。發送代幣或 NFT 不會繼承地花費 WETH(僅 gas)。如果轉移函式呼叫另一個函式,它將從被呼叫函式繼承應付

我也有這個確切的問題。問題是能夠整合版稅在我的項目上,然後試圖在 Opensea 上出售它,但沒有支付版稅。我將在此處發布連結。我希望你能讓它工作。如果你能讓它工作,你能不能就這個版稅提供回饋……連結是:https ://eips.ethereum.org/EIPS/eip-2981

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