Upgrades(升级)
该 crate 提供了与可升级性相关的接口和实用程序。
Core(核心)
IUpgradeAndCall
use openzeppelin::upgrades::interface::IUpgradeAndCall;
用于可升级合约的接口,该接口将升级与升级后上下文中的函数调用相结合。
Functions(函数)
UpgradeableComponent
use openzeppelin_upgrades::upgradeable::UpgradeableComponent;
可升级组件。
Internal Implementations(内部实现)
Events(事件)
upgrade(ref self: ContractState, new_class_hash: ClassHash)
internal
通过更新合约 类哈希 来升级合约。
Requirements(要求):
-
new_class_hash
必须不为零。
发出一个 已升级 事件。
upgrade_and_call(ref self: ContractState, new_class_hash: ClassHash, selector: felt252, calldata: Span<felt252>) → Span<felt252>
internal
用 new_class_hash
替换合约的类哈希,然后从升级后的上下文中调用 selector
。
如果可用,此函数返回 selector
调用的未包装的 call_contract_syscall
返回值。
Requirements(要求):
-
new_class_hash
必须不为零。
函数调用来自升级后的合约本身,而不是账户。 |
类似于 upgrade_and_call 的行为也可以通过来自账户的一系列调用来实现,因为 SNIP-6 账户标准支持 multicall。
账户可以执行一系列调用,其中upgrade是列表中的第一个元素,而额外的函数调用是第二个。
使用这种方法,调用将从账户的上下文中执行,并且不能被抢跑。
|
发出一个 已升级 事件。
Upgraded(class_hash: ClassHash)
event
当 类哈希 被升级时发出。