Openzeppelin
openzeppelin 薄荷序列
// openzeppelin v5 contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata { constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) { // solhint-disable-previous-line no-empty-blocks } } contract Test is ERC721Full { // ctor... function createToken(...) public { _mint(msg.sender, id); } }
基本上,我有一個繼承 openzeppelin 契約的
ERC721Full
契約。我的問題是,何時
_mint
呼叫 increateToken
,為什麼呼叫_mint
inERC721Enumerable
而不是_mint
inERC721
?是因為在序列中的next中
ERC721Enumerable
繼承嗎?ERC721Full``ERC721
例如:ERC721 -> ERC721Enumerable。
我自己得到了答案。這是因為solidity使用c3線性化。
解釋這一點的另一種簡化方法是,當呼叫在不同合約中多次定義的函式時,從右到左(在 Python 中從左到右)搜尋給定的鹼基
所以我有點正確,因為它從右到左搜尋。