Upgrades(升级)

该 crate 提供了与可升级性相关的接口和实用程序。

Core(核心)

IUpgradeable

use openzeppelin_upgrades::interface::IUpgradeable;

可升级合约的接口。

Functions(函数)

Functions(函数)

upgrade(new_class_hash: ClassHash) external

通过更新其 类哈希 来升级合约代码。

此函数通常受 访问控制机制保护。

IUpgradeAndCall

use openzeppelin::upgrades::interface::IUpgradeAndCall;

用于可升级合约的接口,该接口将升级与升级后上下文中的函数调用相结合。

Functions(函数)

upgrade_and_call(new_class_hash: ClassHash, selector: felt252, calldata: Span<felt252>) → Span<felt252> external

通过更新其 类哈希 来升级合约代码,并在升级后的上下文中调用 selector

此函数通常受 访问控制机制保护。

UpgradeableComponent

use openzeppelin_upgrades::upgradeable::UpgradeableComponent;

可升级组件。

Internal Implementations(内部实现)
Events(事件)

Internal Functions(内部函数)

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是列表中的第一个元素,而额外的函数调用是第二个。 使用这种方法,调用将从账户的上下文中执行,并且不能被抢跑。

发出一个 已升级 事件。

Events(事件)

Upgraded(class_hash: ClassHash) event

类哈希 被升级时发出。