mcpField
S
setup-stylus-contracts

setup-stylus-contracts

github.com/openzeppelin開発219213 回インストール2 日前に更新
リポジトリ

setup-stylus-contracts について

Arbitrum Stylus コントラクトを開発する Rust 開発者向けのセットアップガイドです。ツールチェーン、OpenZeppelin の依存関係、実装規約、ビルドとデプロイの手順を扱います。

主な機能

  1. 01Rust、WASM ターゲット、cargo-stylus の導入
  2. 02OpenZeppelin Stylus 依存関係の設定
  3. 03コントラクトのインポートとインターフェース規約
  4. 04コントラクト検証、ABI 出力、デプロイ

活用シーン

  1. 01Stylus コントラクトプロジェクトの新規作成
  2. 02コントラクトへの OpenZeppelin コンポーネント追加
  3. 03WASM コンパイルの検証と ABI 出力
  4. 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>"

コメント