首页 > 解决方案 > 来自 openzeppelin 的 `__{ContractName}_init_unchained` 的用途

问题描述

我一直在阅读有关可升级合同的 openzeppelin 文档:https ://docs.openzeppelin.com/contracts/4.x/upgradeable 。

它提到

每个 __{ContractName}_init 函数都嵌入了对所有父初始化器的线性化调用。因此,调用其中两个 init 函数可能会初始化同一个合约两次。

我不太明白为什么这会导致在初始化器修饰符的保护下两次初始化同一个合约。是不是因为父初始化函数可能会收到来自子合约的两个并行调用?

为什么通过定义一个额外的函数__{ContractName}_init_unchained可以缓解这个问题?

感谢任何解释,谢谢!:)

标签: ethereumsolidityopenzeppelin

解决方案


推荐阅读