Getting Started with Rust

これは、Casperスマートコントラクトの初期設定に必要な基本的なツールについてのガイドとなっています。また、スマートコントラクトのサンプルを作成し、ローカルマシン上での基本的なテストの実行を可能にします。

Casperブロックチェーンは、プログラミング言語であるRustをベースに構築され、WebAssemblyに変換されます。このガイドでは、はじめてのコントラクト作成手順について順番に説明していきます。開発環境の構築は、ここに記載のある通りに準備を終えておいてください。

プロジェクトの作成

Casperクレートを使用すると、新しいサンプルプロジェクトをとても簡単に作成できます。例えば、このチュートリアルのためにmy-projectという名前のプロジェクトを作成したいと思います(必要に応じて別の名前を選択することも可能です)。

cargo casper my-project

新規に作成されたmy-projectフォルダの中には、contracttestsという2つのクレートがあります。これは、完成された基本的なスマートコントラクトであり、引数として渡された値をブロックチェーンに保存します。testsクレートは、Casper仮想マシンの実行環境と、基本的なスマートコントラクトのテストを提供しています。

nightly 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 nightly

Available Casper Rust crates

Rustでのスマートコントラクト開発のサポート用に、以下のクレートが公開されています。

  • Casper コントラクト – ブロックチェーンとのやり取りをサポートするライブラリ。スマートコントラクトを書く際に必要となるメインライブラリです。
  • Casper Test Support – 自分のスマートコントラクトをテストできる仮想マシン
  • Casper Types – Rustエコシステムを跨いで使用する型のライブラリ

クレートは、バイナリもしくはライブラリにコンパイル可能な困憊レーションユニットです。

有効な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

コントラクトフォルダー内に、targetフォルダーがあり、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リソースは、どれも精巧ですのでかなりお薦めです。

  1. https://doc.rust-lang.org/book/foreword.html
  2. https://rustwasm.github.io/docs/book/
  3. https://doc.rust-lang.org/stable/rust-by-example