setup-stylus-contracts について
Arbitrum Stylus コントラクトを開発する Rust 開発者向けのセットアップガイドです。ツールチェーン、OpenZeppelin の依存関係、実装規約、ビルドとデプロイの手順を扱います。
主な機能
- 01Rust、WASM ターゲット、cargo-stylus の導入
- 02OpenZeppelin Stylus 依存関係の設定
- 03コントラクトのインポートとインターフェース規約
- 04コントラクト検証、ABI 出力、デプロイ
活用シーン
- 01Stylus コントラクトプロジェクトの新規作成
- 02コントラクトへの OpenZeppelin コンポーネント追加
- 03WASM コンパイルの検証と ABI 出力
- 04Arbitrum 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 ツールチェーンが必要です。プロジェクトには、nightly チャネル、
rust-srcコンポーネント、wasm32-unknown-unknownターゲットを指定するrust-toolchain.tomlを含める必要があります。現在推奨されている nightly の日付は、rust-contracts-stylus repo で確認してください。
OpenZeppelin の依存関係の追加
追加する前に、crates.io/crates/openzeppelin-stylus で最新バージョンを確認します。Cargo.toml に追加します。
[dependencies]
openzeppelin-stylus = "=<VERSION>"
ABI を生成するために、export-abi 機能フラグを有効にします。
[features]
export-abi = ["openzeppelin-stylus/export-abi"]
クレートはライブラリと cdylib の両方としてコンパイルする必要があります。
[lib]
crate-type = ["lib", "cdylib"]
インポート規則
インポートでは、クレートのルートとして openzeppelin_stylus(アンダースコア)を使用します。
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 ブロックと、個別のトレイト実装ブロックを使用します。
#[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>"