ethereum - 来自 openzeppelin 的 `__{ContractName}_init_unchained` 的用途
问题描述
我一直在阅读有关可升级合同的 openzeppelin 文档:https ://docs.openzeppelin.com/contracts/4.x/upgradeable 。
它提到
每个 __{ContractName}_init 函数都嵌入了对所有父初始化器的线性化调用。因此,调用其中两个 init 函数可能会初始化同一个合约两次。
我不太明白为什么这会导致在初始化器修饰符的保护下两次初始化同一个合约。是不是因为父初始化函数可能会收到来自子合约的两个并行调用?
为什么通过定义一个额外的函数__{ContractName}_init_unchained
可以缓解这个问题?
感谢任何解释,谢谢!:)
解决方案
推荐阅读
- reactjs - NativeBase 的“图标和扩展图标样式”未显示
- c - 关于 C 中的 LinkedList 类型参数的一些混淆
- python - 有没有办法在 altair 图表上添加单个注释?
- ios - 可编码协议错误“给定的数据不是有效的 JSON。”
- reactjs - 使用 ra-data-json-server 不会触发 getManyReference
- python - 连接到 hadoop 数据库表
- python - 有没有办法用 gspread 更新谷歌表格过滤器视图范围?
- python - virtualenv virtualenvwrapper virtualenv:错误:无法识别的参数:--no-site-packages
- c# - MongoDB C# 驱动程序 - 使用未加入数组的查找(聚合)
- django - Django 测试未在测试数据库上运行