Mapping
從子合約讀取和寫入私有變數
我有契約
MyContract is ERC721
。MyContract
需要使用此函式將字元串與現有令牌 URI 連接:string(abi.encodePacked(_tokenURIs[_tokenId], _URI));
問題是所有代幣的 URI 都儲存在父 ERC721 合約的私有變數中,就像這樣
mapping(uint256 => string) private _tokenURIs;
氣體效率是這裡的一個關鍵要求。
MyContract
不應呼叫標準的 ERC721tokenURI
getter 函式:它需要直接訪問映射以便一步連接字元串(通過tokenURI
函式連接將涉及三個步驟:獲取初始 URI 字元串、連接附加字元串、推送連接字元串)。我想使用 ERC721 提供的標準 URI 函式。這是一個死胡同嗎?我可以簡單地將 _tokenURIs 映射從
private
to更改為internal
仍然符合 ERC721 嗎?是否有一種解決方法可以直接覆蓋_tokenURIs
子契約的映射?
我可以簡單地將
_tokenURIs
映射從更改private
為internal
並且仍然符合 ERC721 嗎?是的,ERC721 標準(與任何其他標準一樣)定義了合約的 API,而不是其內部實現。
氣體效率是這裡的一個關鍵要求。
從 ERC721 合約繼承您的合約將允許您讀取該變數(在聲明它之後
internal
),而無需執行任何外部函式呼叫。