Openzeppelin

openzeppelin 薄荷序列

  • August 9, 2019
// 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呼叫 in createToken,為什麼呼叫_mintinERC721Enumerable而不是_mintin ERC721

是因為在序列中的next中ERC721Enumerable繼承嗎?ERC721Full``ERC721

例如:ERC721 -> ERC721Enumerable。

我自己得到了答案。這是因為solidity使用c3線性化

解釋這一點的另一種簡化方法是,當呼叫在不同合約中多次定義的函式時,從右到左(在 Python 中從左到右)搜尋給定的鹼基

所以我有點正確,因為它從右到左搜尋。

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