Hello, World!: RSKでスマートコントラクト開発 (1/3)

1. 開発環境の準備

  • このリンクからSolidityコンパイルをインストール
  • TruffleとGanacheをここでインストール

Truffleとは、ブロックチェーンのためのテスト・フレームワークとアセットパイプラインを提供する開発環境です。
Ganacheはコントラクトのデプロイ、アプリ開発、そしてテストの実行に使用することができる、パーソナルブロックチェーンです。

2. Truffleの使用方法

Truffleは、ブロックチェーンのためのテスト・フレームワークとアセットパイプラインを提供する開発環境です。このステップで基本知識を学んでみましょう。

Truffleを使えば, Solidityスマートコントラクトのコンパイル, JavaScriptを使ったブロックチェーンへのデプロイ、JavaScriptテストスーツの生成、そして統合型コンソールを使ってコントラクトとインタラクトすることができます。

3. 新たなTruffleプロジェクト生成

  • 新たなフォルダーを開きます。

  • Truffleプロジェクトを初期化します。

  • ターミナルに次のような結果が表示されれば, このステップは成功です。

次のようなファイルストラクチャを確認することができます:
├── contracts
│ └── Migrations.sol
├── migrations
│ └── 1_initial_migration.js
├── test
└── truffle-config.js

エディター例:

  • ./contracts: すべてのスマートコントラクトはこのフォルダーに保存されます。
  • ./migrations: デプロイスクリプトはこのフォルダーに保存されます。
  • ./test: テストスクリプトはこのフォルダーに保存されます。
  • ./truffle-config: Truffleの設定ファイルです。ここでインタラクトするネットワークを設定できます。

4. ブロックチェーンのローカル実行

  • コマンドの実行:
  • すでに生成されており利用可能なアカウントのリストを確認することができます:ブロックチェーンが実行されているポート(9545) も確認することができます。これはインメモリ・ブロックチェーンなので、他のユーザーが自動的に接続およびインタラクトすることはできません(テスト目的)。

このコンソールを閉じないでください! すべてのデータが消失されます!
ブロックチェーンネットワークに接続するには、ノードRPCエンドポイントを使用するようにTruffleを設定する必要があります(後のステップで確認)。

5. 最初のコントラクトを生成

  • Truffle開発コンソールで、このコマンドを実行し新しいコントラクトを作成します:
  • 新たなSimpleStorage.sol ファイルをコントラクトフォルダーで確認することができます:
    new SimpleStorage.sol
  • このファイルで, 次の行を入力してください:

6. ブロックチェーンネットワークへのデプロイ

次に、コントラクトをデプロイスクリプトに取り込みます。スクリプトはマイグレーションフォルダーにあります。

新しいマイグレーションフォルダーを作成し、「2_simple_storage.js」という名前を付けてみましょう。

  • 下記のようなコードを入力します:
    これらのデプロイJavaScriptファイルは、コンパイルされたコントラクトをデプロイするために実行されます。
  • Truffleコンソール内でコントラクトをコンパイルするためには、次のコマンドを実行してください:

Solidityコンパイラは、プロジェクトのコントラクトフォルダー内のすべての.solファイルをコンパイルします。このコンパイルは、ビルドフォルダーの.jsonファイルに保存されます。このファイルを見ると、バイトコードと呼ばれるフィールドを確認することができます。このバイトコードはブロックチェーンに保存されるデータであり、コントラクトプログラムです。

  • ついに、ローカルネットワークにコントラクトをデプロイします:
  • ターミナルは以下のような詳細を出力します:
    これでスマートコントラクトがブロックチェーンに接続されました!

7. スマートコントラクトとインタラクト

Truffleコンソールは最も単純なブロックチェーン開発関数を実装しているベーシックJavaScriptパイプラインです。

コントラクトのインスタンスを取得してみましょう!マイグレーションでは, コントラクトインスタンスの名前をSimpleStorageと定義しています。この名前は、マイグレーションで宣言された名前です。このインスタンスを取得して、インタラクトしていきます。

  1. SimpleStorageコントラクトのインスタンスを取得します。
    これでSimpleStorage変数は先ほどデプロイされたコントラクトのインスタンスを取り込んでいます:
  2. get() メソッドをコールし、コントラクトのストレージを取得します。
    このメソッドはコントラクトのストレージを修正しないため、このコールによって資産が消費されることはありません。
  3. 次はストレージを修正してみましょう。コントラクトのストレージを修正するためには、ガスを支払わなければなりません。このガスは、アカウントバランスから差し引かれます。
  4. レスポンスを確認しましょう。
    トランザクションがレシートを生成します。これがブロックチェーンのトランザクションに対する答えになります。
  5. 実行を確認するために, ステップ2をもう一度実行してストレージが変更されたことを確認しましょう。

8. RSK上のスマートコントラクト

8.1 RSKアカウントの取得

RSKウォレットを生成するにはこちらのウェブアプリケーションを使ってください: https://iancoleman.io/bip39/. これは本当のウォレットとして使用されるものではありません; (秘密鍵を生成する安全な方法ではありません)。基本知識を学ぶためだけに使われます。

  1. 「Generate a random mnemonic」のボックスで「12」選択、生成します。
  2. 「Generate」をクリックします。
  3. 「BIP39 Mnemonic」のボックスに結果が表示されます。下記の画像のような12のランダムな単語が表示されます:
    Mnemonic field

8.2 TruffleにRSKパブリックノードを接続

RSKに接続するために, Truffleの設定を変更します。ここでは、任意のネットワークに接続できるプロバイダを使用しますが、アカウントのロックはローカルで解除します。truffle-hdwallet-provider (Node >= 7.6)を使用します。

Truffleプロジェクトのtruffle-config.js ファイルを開き、次のコードを上書きします:

ここでは、TruffleにRSKパブリックテストノードての接続を命令し、先ほど生成されたアカウントの制御を行っています。 “GasPrice” はネットワークに払う手数料の価格であり, “gas”とはトランザクション生成時に支払われるガスの最大値を示します。それぞれの数値はRSKネットワークで使用されているデフォルトです。これらの数値を間違って設定する場合、トランザクションがマイニングされなかったり、余分な資産が浪費される場合があります。
接続を確認するために、Truffleコンソールを開いてみましょう。

アウトプット:

なぜweb3.eth.blockNumberではないのでしょうか?ノードに接続するプロバイダを使用する時は、非同期的でなければならないからです。
このコンソールを閉じないでください。次のステップでも使用します。
8.3 RSKアカウントで資産を取得
アドレスを確認しましょう。下記のコードをコンソールに入力し、ニーモニックでどのようなアドレスがアンロックされたか確認しましょう。

アウトプット:

先ほど言及した設定はすでに使用されているため、使用可能なウォレットは一つだけです。コンソールの変数に保存しましょう。すぐにまた使います。

RSK テストネットは無料のネットワークです。このネットワークを使って資産を取得するために、ファセット(faucet)を利用しましょう。ファセットとは、自分のアドレスを入力すれば、テスト目的のテストネット資産が自動的に送信されるサイトです。RSKファセットを使ってみましょう: https://faucet.testnet.rsk.co.
Let's go to RSK Faucet

使用手順:

  1. 先ほど取得したアドレスを入力します。
  2. 表示されたコードを入力します。
  3. フォームを提出します。
    Submit form

これでテスト目的のRBTCが送信されます。
Congratulations

コンソールで残高を確認しましょう:

8.4 デプロイとインタラクト

コントラクトをデプロイをするために、ローカルネットワークで実行したものと同じようなステップを実行します。今回はパブリックネットワークにも発行されるため、もう少しだけ時間がかかります。

ステップ1:

注意: ビルドフォルダーがクリーンであることを確認してください。そうでない場合、次のようなアウトプットが表示され、ファイルがコンパイルされません:

ステップ2:

デプロイに時間がかかる場合があります。
すべてが完了すれば、次のようなアウトプットが確認できます:

一度コントラクトがデプロイされれば、プライベートブロックチェーンと同じようにデプロイされた() メソッドを利用することができます。コントラクトとのインタラクションはRSK Testnet explorerで確認できます。作成されたコントラクトとの全てのインタラクションがイクスプローラーで確認することが可能です。
appear in the explorer
appear in the explorer 2
さらなる詳細はこちらを参照してください。


原文:Hello World!