关于 setup-stellar-contracts
面向 Stellar Soroban 智能合约开发者的环境配置技能,涵盖 Rust 与 CLI 安装、OpenZeppelin 依赖设置、常见合约模式以及构建和测试命令。
主要功能
- 01配置 Rust 与 Soroban 目标
- 02初始化 Stellar CLI 项目
- 03配置 OpenZeppelin 依赖
- 04介绍合约模式与导入写法
- 05构建 WASM 并运行 Cargo 测试
适用场景
- 01准备新的 Soroban 工作区
- 02为合约添加 OpenZeppelin crate
- 03将合约构建为 WASM
- 04运行项目内的合约测试
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ openzeppelin/ openzeppelin-skills --skill setup-stellar-contracts安装后在 Claude Code 中输入/setup-stellar-contracts确认已加载。
详细介绍
Stellar 设置
Soroban/Stellar 开发设置
安装 Rust 工具链(v1.84.0+)和 Soroban WASM 目标:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add wasm32v1-none
安装 Stellar CLI:
curl -fsSL https://github.com/stellar/stellar-cli/raw/main/install.sh | sh
创建新的 Soroban 项目:
stellar contract init my_project
此操作会创建一个 Cargo 工作区,其中的合约位于 contracts/*/。
OpenZeppelin 依赖项
添加依赖项前,请先从 stellar-contracts repo 查找当前版本。由于该库仍在积极开发中,请使用 = 固定确切版本。
将 OpenZeppelin crate 添加到根目录 Cargo.toml 的 [workspace.dependencies] 下:
[workspace.dependencies]
stellar-tokens = "=<VERSION>"
stellar-access = "=<VERSION>"
stellar-contract-utils = "=<VERSION>"
stellar-macros = "=<VERSION>"
然后在各合约的 contracts/*/Cargo.toml 中引用它们:
[dependencies]
soroban-sdk = { workspace = true }
stellar-tokens = { workspace = true }
stellar-access = { workspace = true }
stellar-contract-utils = { workspace = true }
stellar-macros = { workspace = true }
可用的 crate:stellar-access、stellar-accounts、stellar-contract-utils、stellar-fee-abstraction、stellar-governance、stellar-macros、stellar-tokens。
仅添加合约实际使用的 crate。
stellar-macros提供过程宏属性(例如#[when_not_paused]、#[only_owner]、#[derive(Upgradeable)]),大多数合约都需要它。
代码模式
导入时使用下划线作为 crate 根路径(Rust 约定):
use stellar_tokens::fungible::{Base, FungibleToken};
use stellar_tokens::fungible::burnable::FungibleBurnable;
use stellar_access::ownable::Ownable;
use stellar_contract_utils::pausable::Pausable;
use stellar_macros::when_not_paused;
合约在结构体上使用 #[contract],并在 impl 块上使用 #[contractimpl](来自 soroban_sdk):
use soroban_sdk::{contract, contractimpl, Env};
#[contract]
pub struct MyToken;
#[contractimpl]
impl MyToken {
// Implement trait methods here
}
每个 trait 都使用单独的 impl 块来实现(例如,FungibleToken、Pausable)。诸如 #[when_not_paused] 和 #[only_owner] 的守卫宏会修饰各个函数。
平台说明
- 在 Stellar 上,读取操作免费。 应优先减少写入;读取和计算的成本很低。相比微优化,应优先编写清晰易读的代码。
- 实例存储 TTL 的延长由开发者负责。 OpenZeppelin 库会为其他存储条目处理 TTL 延长,但合约必须延长自己的
instance存储条目的 TTL,以防其过期。
构建与测试
将合约构建为 WASM:
stellar contract build
这是 cargo build --target wasm32v1-none --release 的快捷方式。输出位于 target/wasm32v1-none/release/。
运行测试:
cargo test
soroban-sdk的 testutils 会自动为 crate 内的单元测试启用。