据我所知,对于UUPS代理:代理合同是来自ERC1967Proxy.sol的OpenZeppelin合同,而实现合同应该继承于OpenZeppelin合同中的UUPSUpgradeable.sol -可升级。
但是,恶意参与者似乎可以在部署程序之前轻松地初始化实现。我想在代理契约的构造函数中初始化admin。似乎我可以使用管理插槽:0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,然后允许管理员初始化函数-这是安全的吗?为什么在默认情况下不这样设置呢?
发布于 2023-01-16 23:58:15
这是ERC1967Proxy.sol的构造函数:
constructor(address _logic, bytes memory _data) payable {
_upgradeToAndCall(_logic, _data, false);
}_data param是对实现/逻辑契约的可选编码调用,您可以在部署时原子地调用初始化器函数(或对逻辑契约进行任意调用)。
https://ethereum.stackexchange.com/questions/143060
复制相似问题