Getting Started with Rust Casper コントラクト
これは、Casperスマートコントラクトの初期設定に必要な基本的なツールについてのガイドとなっています。また、サンプルスマートコントラクトをビルドし、ローカルマシン上での基本的なテストの実行を可能にします。
Casperブロックチェーンは、プログラミング言語であるRustをベースに構築され、WebAssemblyに変換されます。このガイドでは、はじめてのコントラクト作成手順について順番に説明していきます。開発環境の構築は、ここに記載のある通りに準備を終えておいてください。
プロジェクトの作成
cargo casper クレートを使用すると、新しいサンプルプロジェクトをとても簡単に作成できます。例えば、このチュートリアルのためにmy-projectという名前のプロジェクトを作成しようと思えば(必要に応じて別の名前を選択することも可能です)、このコマンドを実行するだけです。
cargo casper my-project
新規に作成されたmy-projectフォルダの中には、contractとtestsという2つのクレートがあります。これは、完成された基本的なスマートコントラクトであり、引数として渡された値をブロックチェーンに保存します。testsクレートは、Casper仮想マシンの実行環境と、基本的なスマートコントラクトのテストを提供しています。
再現性
今のところ、cargoではWebAssemblyを含むバイナリーファイルのクロスプラットフォームにおける再現性の提供はしていません。同じバイナリーファイルへのスマートコントラクトのコンパイルが可能であることは、例えば、ブロックチェーン上の格納されたスマートコントラクトが提示されたソースコードと一致していることを検証する際に重要となります。
この問題への対処として、cargo casper クレートが提供する rustc ラッパーがあります。これは、–wrapper オプションを使用すると有効になります。
cargo casper my_project --wrappernightly toolchainの使用
my-projectフォルダーへ移動し、rust-toolchainファイルを開きます。ファイルのコンテンツにRustのnightly versionが指定されています。以下は例です。
nightly-2022-08-03
最新のnightly toolchainを、Rustでスマートコントラクトを開発する上ではベストです。詳細は、Rust Documentation on Channels とRust Documentation on Toolchainsをご確認ください。
ここに挙げた例にある様に、ご自分のプロジェクトディレクトリの最上レベルに rust-toolchain を設定することを推奨します。
以下のコマンドでも nightly Rust toolchainをインストール可能です。
rustup toolchain install nightlyAvailable Casper Rust crates
Rustでのスマートコントラクト開発のサポート用に、以下のクレートが公開されています。
- Casper コントラクト – ブロックチェーンとのやり取りをサポートするライブラリ。スマートコントラクトを書く際に必要となるメインライブラリです。
- Casper Test Support – 自分のスマートコントラクトをテストできる仮想マシン
- Casper Types – Rustエコシステムを跨いで使用する型のライブラリ
クレートは、バイナリもしくはライブラリにコンパイル可能なコンパイレーション・ユニットです。
💡NOTE
クレートの一覧は、”必須となるRust Crate(クレート)”をご確認ください。
有効なAPIについてのドキュメント
各Casperクレートは、APIドキュメントとhttps://docs.rsに記載のある各関数のサンプルでつくられています。最新のコントラクトAPIドキュメントは、ここに書かれています。
WASMへのコンパイル
Casperブロックチェーンでは、WebAssembly (WASM)を実行環境にて使用しています。WASMのコンパイルターゲットとしてRustが用意されており、開発者はスマートコントラクトを開発する際にRustのエコシステムツールをすべて利用することができます。
- NOTE:Wasmは、C/C++、C#、Go、Julia、Lobster、およびZIGを含む他の言語の使用を可能にします。
my-projectフォルダーに移動し下記コマンドを実行すれば、スマートコントラクトをWASMにコンパイルできます。
cd my-project
make prepare
make build-contractこのパス my-project/contract/target/wasm32-unknown-unknown/release/contract.wasm に、コンパイルされたスマートコントラクトがあるかと思います。
Linting(リント)
Casperのコントラクトは、コントラクトをリントするClippy(クリッピ)などのRustツールをサポートしています。ご自由に利用ください。 また、make check-lintコマンドもコントラクトのリントに利用いただけます。my-projectフォルダー内で、このコマンドを実行してください。
make check-lintコントラクトのテスト
コントラクトの作成と共に、Casperクレートは、my-project/testsフォルダにサンプルテストを自動的に作成します。
Casperローカル環境では、コントラクトのテストを実施可能とするインメモリ仮想環境を提供しています。testクレートを実行する際、スマートコントラクトを自動的にリリースモードにてビルドし、Casperの実行環境にてtestsシリーズを実行します。カスタムビルドスクリプトは、build.rsにあります。もう少し詳しく知りたい場合は、ご利用ください。
Note:
テストスクリプトが自動的にコントラクトをビルドする為、開発中はmake build-contractではなく、make testというコマンドのみが必要となります。
テストが実行できたということは、スマートコントラクト環境が正しくセットアップできているということです。
make testコンパイル終了後は、テストが実行されターミナルに下記のようなメッセージが出力されるはずです。
running 2 tests
test tests::should_error_on_missing_runtime_arg ... ok
test tests::should_store_hello_world ... ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s簡単な例を挙げると、my-project/contract/src/main.rsをエディタで開き、コントラクトの KEY_NAME の値を変更した上で、make testコマンドを再実行します。すると、スマートコントラクトが再コンパイルされ、テストが失敗するはずです。
Video Walkthrough
このビデオチュートリアルは、このガイドのまとめとなっています。
Rustのリソース
下記Rustリソースは、どれも精巧ですのでかなりお薦めです。