Quickstart

事前準備を既に終え、Testnetにまずはサンプルコントラクトを簡易的にデプロイしたい開発者用に、コマンドリストをご用意しました。コンテキストや追加のhelpに関しては全体を網羅したドキュメントをご確認ください。

事前準備: 

  1. Rustをインストールしていること。次のコマンドでインストール済みであることを確認してください。rustup –version
    必要に応じて、シェルを再起動してください。
  2. cmakeをインストールしていること。このコマンド: cmake –versionでインストール済みであることを確認してください。

Ubuntuの場合は、このガイドに従ってください。

MacOSの場合は、このコマンド: brew install cmakeを使用してください。

  1. IDE(統合開発環境)を使える状態であること。Windowsの場合は、C++ビルドデベロッパーツールをダウンロードする必要があります。それ無しでは、cargo-casperをインストールできません。
  2. Gitをダウンロード済みであること

Steps:

  1. 以下のコマンドを用いて、Cargo Casperをインストールしてください
    cargo install cargo-casper
  2. Casperクライアントをインストールしてください
    cargo install casper-client
    casper-clientのインストール時に問題が発生した場合は、追加のライブラリが必要なのかもしれません。

MacOSの場合:

brew install pkg-config
brew install openssl

Ubuntuの場合:

sudo apt-get install pkg-config
sudo apt-get install openssl
sudo apt-get install libssl-dev

Note: opensslの開発用のパッケージががインストールされているかも確認してください。例えば、Ubuntuの場合は libssl-dev、Fedoraの場合は openssl-develです。

  1. ノードのクエリを行いcasper-clientのネットワーク上でのテストを実施し、最新のステート・ルート・ハッシュを取得します。
casper-client get-state-root-hash --node-address http://65.21.235.219:7777
  1. Casperアカウントのセットアップ
  2. シンプルなカウントーコントラクトをクローンもしくはGitHubからダウンロードしてください
    git clone https://github.com/casper-ecosystem/counter
  3. フォルダーに移動し、コントラクトをビルドするための依存関係を順ぴしてください。
cd counter
make prepare
  1. コントラクトとテストのビルド
    make test
  1. casper-clientのput-deployコマンドを使用してTestnetにコントラクトをインストールし、secret-keyには秘密鍵ファイルへのパスを置き換え、得られた出力結果からデプロイハッシュを記録
casper-client put-deploy \
--node-address [NODE_ADDRESS] \
--chain-name casper-test \
--secret-key [YOUR_PATH_TO_SECRET_KEY_FILE] \
--payment-amount 30000000000 \
--session-path contracts/counter-v1/target/wasm32-unknown-unknown/release/counter-v1.wasm
  1. 前回のコマンドから与えられたデプロイハッシュのデプロイ状態の確認
casper-client get-deploy --node-address [NODE_ADDRESS] [DEPLOY_HASH]
  1. 最新のステート・ルート・ハッシュの取得
casper-client get-state-root-hash --node-address [NODE_ADDRESS]
  1. Testnet上のアカウントのdeployタブを開き、デプロイの詳細を確認

Step 15に記載しているように、コマンドラインを使用したアカウントの確認を行う他手法もあります。

casper-client query-global-state \
--node-address [NODE_ADDRESS] \
--state-root-hash [STATE_ROOT_HASH] \
--key [PATH_TO_PUBLIC_KEY]

更に、–keyの引数のアカウントハッシュを用いる方法もあります。アカウントハッシュの取得は、ブロックエクスプローラ上にてアカウント詳細を確認、もしくは以下のコマンドを実行してください。

casper-client account-address --public-key [PATH_TO_PUBLIC_KEY]

そして、アカウントハッシュにてブロックチェーンにクエリします。

casper-client query-global-state \
--node-address [NODE_ADDRESS] \
--state-root-hash [STATE_ROOT_HASH] \
--key [ACCOUNT_HASH]
  1. これで、スマートコントラクトを扱えるようになりました。そして、その値を0から1にインクリメントできます。まずは、値が0であることを確認しましょう。出力結果にある”parsed”の値を見てください。下記のものが、期待する出力結果となります。
casper-client query-global-state \
--node-address [NODE_ADDRESS] \
--state-root-hash [STATE_ROOT_HASH] \
--key [ACCOUNT_HASH] \
-q "counter/count"

例)出力結果:

{
   "id": 8523290678829319485,
   "jsonrpc": "2.0",
   "result": {
       "api_version": "1.4.6",
       "block_header": null,
       "merkle_proof": "[85716 hex chars]",
       "stored_value": {
           "CLValue": {
               "bytes": "01000000",
               "cl_type": "I32",
               "parsed": 0
           }
       }
   }
}
  1. ここで、counter_incというエントリーポイントを呼び出し、カウントの値のインクリメントをします
casper-client put-deploy \
--node-address [NODE_ADDRESS] \
--chain-name [CHAIN_NAME] \
--secret-key [PATH_TO_YOUR_KEY] \
--payment-amount 100000000 \
--session-name "counter" \
--session-entry-point "counter_inc"
  1. 新しいステート・ルート・ハッシュを取得し、最新のブロックチェーンの状態のスナップショットを取得 ※最重要
casper-client get-state-root-hash --node-address [NODE_ADDRESS]
  1. ネットワークの状態をクエリ
casper-client query-state \
--node-address [NODE_ADDRESS] \
--state-root-hash [STATE_ROOT_HASH] \
--key [ACCOUNT_HASH] \
-q "counter/count"

全て想定通りに行った場合、値は1になっているはずです。以下の”parsed”の値をご確認ください。

{
   "id": 8523290678829319485,
   "jsonrpc": "2.0",
   "result": {
       "api_version": "1.4.6",
       "block_header": null,
       "merkle_proof": "[85716 hex chars]",
       "stored_value": {
           "CLValue": {
               "bytes": "01000000",
               "cl_type": "I32",
               "parsed": 1
           }
       }
   }
}

これで、Casper Testnet上のコントラクトへの呼び出しに成功し、値を0から1にインクリメントすることができたということにあります。そして、より中身のあるコントラクトを動かす為に必要となる全てのインフラは整いました。