Mapping

從子合約讀取和寫入私有變數

  • June 1, 2020

我有契約MyContract is ERC721MyContract需要使用此函式將字元串與現有令牌 URI 連接:

string(abi.encodePacked(_tokenURIs[_tokenId], _URI));

問題是所有代幣的 URI 都儲存在父 ERC721 合約的私有變數中,就像這樣

mapping(uint256 => string) private _tokenURIs;

氣體效率是這裡的一個關鍵要求MyContract不應呼叫標準的 ERC721 tokenURIgetter 函式:它需要直接訪問映射以便一步連接字元串(通過tokenURI函式連接將涉及三個步驟:獲取初始 URI 字元串、連接附加字元串、推送連接字元串)。

我想使用 ERC721 提供的標準 URI 函式。這是一個死胡同嗎?我可以簡單地將 _tokenURIs 映射從privateto更改為internal仍然符合 ERC721 嗎?是否有一種解決方法可以直接覆蓋_tokenURIs子契約的映射?

我可以簡單地將_tokenURIs映射從更改privateinternal並且仍然符合 ERC721 嗎?

是的,ERC721 標準(與任何其他標準一樣)定義了合約的 API,而不是其內部實現。

氣體效率是這裡的一個關鍵要求。

從 ERC721 合約繼承您的合約將允許您讀取該變數(在聲明它之後internal),而無需執行任何外部函式呼叫。

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