mcpField
S
setup-stylus-contracts

setup-stylus-contracts

github.com/openzeppelin开发219213 次安装2 天前更新
代码仓库

关于 setup-stylus-contracts

为 Rust 开发者提供 Stylus 合约设置指引,涵盖工具链、OpenZeppelin 依赖、代码模式及构建部署流程。

主要功能

  1. 01安装 Rust、WASM 目标和 cargo-stylus
  2. 02配置 OpenZeppelin Stylus 依赖
  3. 03遵循合约导入与接口模式
  4. 04检查合约、导出 ABI 并部署

适用场景

  1. 01初始化新的 Stylus 合约项目
  2. 02为合约添加 OpenZeppelin 组件
  3. 03检查 WASM 编译并导出 ABI
  4. 04部署合约到 Arbitrum Stylus

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/openzeppelin/openzeppelin-skills --skill setup-stylus-contracts

安装后在 Claude Code 中输入/setup-stylus-contracts确认已加载。

详细介绍

Stylus 设置

Rust 和 Cargo Stylus 设置

安装 Rust 工具链和 WASM 目标:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add wasm32-unknown-unknown

安装 Cargo Stylus CLI:

cargo install --force cargo-stylus

创建新的 Stylus 项目:

cargo stylus new my_project

需要 Rust nightly 工具链。项目应包含一个 rust-toolchain.toml,指定 nightly 通道、rust-src 组件和 wasm32-unknown-unknown 目标。请查看 rust-contracts-stylus repo,了解当前推荐的 nightly 日期。

添加 OpenZeppelin 依赖项

添加依赖项前,请从 crates.io/crates/openzeppelin-stylus 查询当前版本。将其添加到 Cargo.toml:

[dependencies]
openzeppelin-stylus = "=<VERSION>"

启用 export-abi 功能标志以生成 ABI:

[features]
export-abi = ["openzeppelin-stylus/export-abi"]

此 crate 必须同时编译为库和 cdylib:

[lib]
crate-type = ["lib", "cdylib"]

导入约定

导入时使用 openzeppelin_stylus(下划线)作为 crate 根路径:

use openzeppelin_stylus::token::erc20::{Erc20, IErc20};
use openzeppelin_stylus::access::ownable::{Ownable, IOwnable};
use openzeppelin_stylus::utils::pausable::{Pausable, IPausable};
use openzeppelin_stylus::utils::introspection::erc165::IErc165;

合约在主结构体上使用 #[storage] 和 #[entrypoint],并将 OpenZeppelin 组件嵌入为字段:

#[entrypoint]
#[storage]
struct MyToken {
    erc20: Erc20,
    ownable: Ownable,
}

使用 #[public] 和 #[implements(...)] 暴露公共方法。规范模式使用空 impl 块注册分发,并使用单独的 trait impl 块:

#[public]
#[implements(IErc20<Error = erc20::Error>, IOwnable<Error = ownable::Error>)]
impl MyToken {}

#[public]
impl IErc20 for MyToken {
    type Error = erc20::Error;
    // delegate to self.erc20 ...
}

顶层模块:access、finance、proxy、token、utils。

构建和部署基础

验证合约能否编译为有效的 Stylus WASM:

cargo stylus check

导出 Solidity ABI:

cargo stylus export-abi

部署到 Arbitrum Stylus 端点:

cargo stylus deploy --endpoint="<RPC_URL>" --private-key-path="<KEY_FILE>"

评论

支持 Markdown