setup-stellar-contracts について
Stellar の Soroban スマートコントラクト開発を始める人向けのセットアップスキルです。Rust と CLI の導入、OpenZeppelin 依存関係、基本パターン、ビルドとテストのコマンドを扱います。
主な機能
- 01Rust と Soroban ターゲットの設定
- 02Stellar CLI プロジェクトの初期化
- 03OpenZeppelin 依存関係の設定
- 04コントラクトのパターンとインポート
- 05WASM ビルドと 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
これにより、contracts/*/ にコントラクトが配置された Cargo ワークスペースが作成されます。
OpenZeppelin の依存関係
追加する前に、stellar-contracts リポジトリで最新バージョンを確認してください。ライブラリは活発に開発されているため、= を使って正確なバージョンを固定してください。
OpenZeppelin のクレートをルートの 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 }
利用可能なクレート:stellar-access、stellar-accounts、stellar-contract-utils、stellar-fee-abstraction、stellar-governance、stellar-macros、stellar-tokens。
コントラクトで実際に使用するクレートだけを追加してください。
stellar-macrosは proc-macro 属性(例:#[when_not_paused]、#[only_owner]、#[derive(Upgradeable)])を提供しており、ほとんどのコントラクトで必要です。
コードパターン
インポートでは、クレートのルートにアンダースコアを使用します(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
}
トレイトの実装には、トレイトごとに個別の impl ブロックを使用します(例:FungibleToken、Pausable)。#[when_not_paused] や #[only_owner] のようなガードマクロは、個々の関数に付与します。
プラットフォームに関する注意事項
- Stellar では読み取り操作は無料です。 書き込みを最小限にするよう最適化してください。読み取りと計算のコストは低いため、マイクロ最適化よりも、明快で読みやすいコードを優先してください。
- インスタンスストレージの TTL 延長は開発者の責任です。 OpenZeppelin ライブラリは他のストレージエントリの TTL 延長を処理しますが、期限切れを防ぐため、コントラクト自身の
instanceストレージエントリは延長する必要があります。
ビルドとテスト
コントラクトを WASM にビルドします。
stellar contract build
これは cargo build --target wasm32v1-none --release のショートカットです。出力は target/wasm32v1-none/release/ に生成されます。
テストを実行します。
cargo test
クレート内のユニットテストでは、
soroban-sdkの testutils が自動的に有効になります。