Solidity

ERC721 合約 - 為什麼 _safeMint() 總是立即呼叫另一個 _safeMint()?

  • August 30, 2022

當需要進行實際的minting時,似乎每個ERC721合約都呼叫該函式的2參數版本, _safeMint()然後該函式又立即在內部呼叫3參數版本的_safeMint().

這就是我的意思——這是直接來自 OpenZeppelin 官方ERC721.sol合約的程式碼:

// The 2-argument version:
function _safeMint(address to, uint256 quantity) internal {
  // Immediately call the 3-argument version:
  _safeMint(to, quantity, "");
}



// And here's that 3-argument version:
function _safeMint(address to, uint256 quantity, bytes memory _data) internal {
  // minting logic/code, usually eventually calling:
  _mint();
}

所以就像我說的,我一次又一次地看到這種模式,幾乎在所有的鑄幣契約中。

所以我想知道我們是否有任何理由不能直接從我們的合約中呼叫 3 參數版本並跳過那個 2 參數版本——因為它似乎所做的就是呼叫 3 參數版本——並且做完了嗎?

特別是如果我們知道我們永遠不會對必須data傳入的參數有任何真正的價值,因此""我們自己可以愉快地通過它嗎?

您可以立即呼叫 3 參數方法。

為方便開發,為雙參數版本提供了預設值。這樣,您無需弄清楚在_data不使用時需要應用哪些預設值。

2 參數版本呼叫三參數版本的原因也是為了可維護性。如果 3 參數版本被覆蓋,您仍然希望 2 參數版本呼叫具有預設值的 3 參數版本_data

這種模式稱為重載,在 Java 等 OOP 語言中很常見。 https://www.mygreatlearning.com/blog/method-overloading-in-java

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