实用工具
这个 crate 提供了各种组件和库,其中包含用于处理常见任务的实用工具函数。
核心
utils
use openzeppelin_utils;
包含库的核心实用程序模块。
成员
deployments
use openzeppelin_utils::deployments;
包含用于通过 deploy_syscall 和 通用部署合约 (UDC)计算合约地址的实用程序函数模块。
成员
DeployerInfo(caller_address: ContractAddress, udc_address: ContractAddress)
struct
包含在 utils::calculate_contract_address_from_udc 中进行依赖来源的部署计算所需的参数的结构体。
calculate_contract_address_from_deploy_syscall(salt: felt252, class_hash: ClassHash, constructor_calldata: Span<felt252>, deployer_address: ContractAddress) → ContractAddress
function
当将给定参数传递给 deploy_syscall 时,返回合约地址。
compute_hash_on_elements(data: Span<felt252>) → felt252
function
使用`data`的元素创建 Pedersen 哈希链,并返回最终哈希。
calculate_contract_address_from_udc(salt: felt252, class_hash: ClassHash, constructor_calldata: Span<felt252>, deployer_info: Option<DeployerInfo>) → ContractAddress
function
返回 UDC 部署计算的合约地址。
独立来源的部署(从零部署)应将 Option::None
作为 deployer_info
传递。
依赖来源的部署使用 caller_address
(DeployerInfo 的成员)对 salt
进行哈希处理,并将哈希后的 salt 作为 contract_address_salt
参数传递给内部的 deploy_syscall。
contract_clock
use openzeppelin_utils::contract_clock;
提供 EIP-6372 标准的 trait,以及基于区块号或区块时间戳的默认时钟实现。
特性
ERC6372Clock
{github-icon}
use openzeppelin_utils::contract_clock::ERC6372Clock;
EIP-6372 标准的 trait,它允许灵活的内部时钟实现——基于区块时间戳、区块号或自定义逻辑。
serde
use openzeppelin_utils::serde;
包含与 Cairo 数据结构的序列化和反序列化相关的实用程序的模块。
成员
SerializedAppend
trait
导入此 trait 允许将 Cairo 数据结构的序列化表示形式附加到已实现 Serde
trait 的 felt252
缓冲区。
使用示例:
use openzeppelin_utils::serde::SerializedAppend;
use starknet::ContractAddress;
fn to_calldata(recipient: ContractAddress, amount: u256) -> Array<felt252> {
let mut calldata = array![];
calldata.append_serde(recipient);
calldata.append_serde(amount);
calldata
}
请注意,append_serde
方法自动用于 felts 数组,并且它接受任何实现 Serde
trait 的数据结构。
密码学
NoncesComponent
use openzeppelin_utils::cryptography::nonces::NoncesComponent;
此组件提供了一种简单的机制来处理一组地址的增量 nonce。它通常用于防止合约接受签名作为输入时的重放攻击。
可嵌入的实现
NoncesImpl
内部实现