// 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在createToken中被调用时,为什么在ERC721Enumerable中调用_mint而不是在ERC721中调用_mint?
是因为ERC721Enumerable是在ERC721Full中继承的,在序列中是在ERC721旁边继承的吗?
例: ERC721 -> ERC721Enumerable.
发布于 2019-08-09 23:26:59
我自己找到答案了。这是因为solidity使用c3线性化。
另一种简单的解释方法是,当一个函数在不同的契约中多次被调用时,就会从右到左(在Python中从左到右)搜索给定的基。
所以我是对的,它从右向左搜索。
https://ethereum.stackexchange.com/questions/73801
复制相似问题