【发布时间】:2022-01-08 09:10:15
【问题描述】:
这是代理模式上下文中的抽象合约:
abstract contract Initializable {
bool private _initialized;
bool private _initializing;
modifier initializer() {
require(_initializing || !_initialized, "Initializable: contract is already initialized");
bool isTopLevelCall = !_initializing;
if (isTopLevelCall) {
_initializing = true;
_initialized = true;
}
_;
if (isTopLevelCall) {
_initializing = false;
}
}
}
contract UpgradebleTest1 is Initializable {
uint public x;
function initialize(uint _x) public initializer {
x = _x;
}
}
我不明白 _initializing 和 isTopLevelCall 的必要性。仅使用 _initialized 进行控制还不够吗?
谢谢,
【问题讨论】:
标签: solidity proxy-pattern openzeppelin