关于 setup-stylus-contracts
为 Rust 开发者提供 Stylus 合约设置指引,涵盖工具链、OpenZeppelin 依赖、代码模式及构建部署流程。
主要功能
- 01安装 Rust、WASM 目标和 cargo-stylus
- 02配置 OpenZeppelin Stylus 依赖
- 03遵循合约导入与接口模式
- 04检查合约、导出 ABI 并部署
适用场景
- 01初始化新的 Stylus 合约项目
- 02为合约添加 OpenZeppelin 组件
- 03检查 WASM 编译并导出 ABI
- 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