实用工具
OpenZeppelin Stylus Contracts 提供了大量可在你的项目中使用的实用工具。 有关完整列表,请查看 API 参考。 以下是一些更受欢迎的工具。
内省
通常,了解合约是否支持你想要使用的接口是很有帮助的。
ERC-165
是一个有助于进行运行时接口检测的标准。
Contracts for Stylus 提供了在合约中实现 ERC-165 的助手:
-
IERC165
— 这是 ERC-165 trait,定义了supportsInterface
。为了实现 ERC-165 接口检测,你应该在合约中手动公开supportsInterface
函数。
#[entrypoint]
#[storage]
struct Erc721Example {
erc721: Erc721,
}
#[public]
#[implements(IErc721<Error = Error>, IErc165)]
impl Erc721Example {
// ...
}
#[public]
impl IErc165 for Erc721Example {
fn supports_interface(&self, interface_id: B32) -> bool {
self.erc721.supports_interface(interface_id)
}
}
#[public]
impl IErc721 for Erc721Example {
// ...
}
结构体
某些用例需要比 alloy 和 Stylus sdk 原生提供的数组和映射更强大的数据结构。 Contracts for Stylus 提供了这些库来增强数据结构管理:
-
BitMaps
: 在存储中存储压缩的布尔值。 -
Checkpoints
: 使用内置查找来检查点值。
代理模式
代理合约允许你分离存储和逻辑,从而实现可升级性和 Gas 优化。该库提供了 IProxy
trait 用于实现底层代理模式:
-
IProxy
: 使用delegate_call
的基本代理模式,用于可升级合约。 -
ERC-1967
: 具有特定存储插槽的标准化代理模式。 -
Beacon Proxy
: 多个代理共享一个信标合约,用于大规模升级实现合约地址。