mcpField
S
setup-stellar-contracts

setup-stellar-contracts

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

关于 setup-stellar-contracts

面向 Stellar Soroban 智能合约开发者的环境配置技能,涵盖 Rust 与 CLI 安装、OpenZeppelin 依赖设置、常见合约模式以及构建和测试命令。

主要功能

  1. 01配置 Rust 与 Soroban 目标
  2. 02初始化 Stellar CLI 项目
  3. 03配置 OpenZeppelin 依赖
  4. 04介绍合约模式与导入写法
  5. 05构建 WASM 并运行 Cargo 测试

适用场景

  1. 01准备新的 Soroban 工作区
  2. 02为合约添加 OpenZeppelin crate
  3. 03将合约构建为 WASM
  4. 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 内的单元测试启用。

评论

支持 Markdown