实用工具

OpenZeppelin Stylus Contracts 提供了大量可在你的项目中使用的实用工具。 有关完整列表,请查看 API 参考。 以下是一些更受欢迎的工具。

内省

通常,了解合约是否支持你想要使用的接口是很有帮助的。 ERC-165 是一个有助于进行运行时接口检测的标准。 Contracts for Stylus 提供了在合约中实现 ERC-165 的助手:

#[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: 多个代理共享一个信标合约,用于大规模升级实现合约地址。