トークンの作成: RSKでスマートコントラクト開発 (2/3)

Truffleのインストール

  • Truffleとは、ブロックチェーンのためのテスト・フレームワークとアセットパイプラインを提供する開発環境です。

Truffleプロジェクトの初期化

1. 新しいフォルダーを開いて npm プロジェクトを初期化する

  • コマンドの実行:

2. Openzeppelin-Solidityをインストール

これらのライブラリはトークンのメインライブラリだけでなく、オーナーシップのためのライブラリ、安全なmath、その他多くの関数をインストールします。これらのライブラリは、高度なセキュリティー基準を達成しているため、このライブラリに依存するコントラクトを正しく使用すれば、ハッキングの影響を受けにくくなっています。

  • フォルダーの中で, libraries from OpenZeppelinをインポートします。
    1.12.0バージョンを使用してください。

3. truffle-hdwallet-providerをインストール

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

4. Truffleプロジェクトを実行

  • コマンドの実行
  • ターミナルに次のような結果が表示されれば, このステップは成功です:
     

    次のようなファイルストラクチャを確認することができます:

├── contracts
│ └── Migrations.sol
├── migrations
│ └── 1_initial_migration.js
├── test
└── truffle-config.js

エディター例:
editor shows

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

5. RSKアカウントの生成

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

  • 5.1 ランダムなニーモニックを生成します:

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

  • 5.2 アカウントを生成します:

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

5.2.2 接続を確認するためにTruffleコンソールを開いてください:

ここでは、TruffleにRSKパブリックテストノードての接続を命令し、先ほど生成されたアカウントの制御を行っています。
5.2.3 RSKアドレスを取得するには, コンソールに次のコードを入力し、ニーモニックでアンロックされたアドレスを確認します:

最後の行の文字列がアドレスです。

  • 5.3 このネットワークで資産を得る方法

RSK テストネットは無料のネットワークです。このネットワークを使って資産を取得するために、ファセット(faucet)を利用しましょう。ファセットとは、自分のアドレスを入力すれば、テスト目的のテストネット資産が自動的に送信されるサイトです。RSKファセットを使ってみましょう: https://faucet.testnet.rsk.co
get balance faucet
5.3.1 先ほど取得したアドレスを入力します。
5.3.2 表示されたコードを入力します。
5.3.3 フォームを提出します。
Submit form
5.3.4 成功ページが表示されます。
show us a successful page
5.3.5 コンソールで残高をチェックしてみましょう。
Truffleコンソールでこのコマンドを実行します:

このターミナルで表示されている行が取得した資産額です:

6. トークンの作成方法

  • 6.1    コントラクトに関するコードを書きましょう。

6.1.1 ‘YourNewTokens.sol’というファイルを作成します。
6.1.2 先ほど作成したファイルの中に下記のコードを記入します。

7. 上記のコードの説明

  • 7.1 Solidityのコンパイラバージョンを定義します。

  • 7.2 ライブラリ XXX.sol をコントラクトにインポートすることができます。

    ERC20トークンを生成するために、このレポジトリから2つのライブラリをインポートします: トークンの基本関数を持ち、すでにSafeMath.solのような多くのライブラリがインポートされているStandardToken.solと Ownable.solをインポートします。これらによってコントラクトの関数のオーナーコントロールを設定することができます。

  • 7.3 “is”を使用しコントラクトをStandardTokenとOwnableとして定義することで、ライブラリの属性と関数を受け継ぐことができます。

    その後、これらのライブラリとインポートされた上位ライブラリから全ての関数を取得します。

  • 7.4 次に、トークンの名前をYourNewTokenと定義し、シンボル、トークンの精密度のための18桁の少数( web3のEther変換機能のためのEthereumネットワーク標準)、そしてトークンの初期供給量1000を次のように設定します:

  • 7.5 また、作成者だけが指定された関数とインタラクトできるOwnableライブラリ・プロパティの使用方法を示す別の文字列(トークン機能に関連しない非公式変数)を作成します。これについては後程説明します。

  • 7.6 既に定義されたパラメータを、コンストラクタを執拗してトークンの変数に代入します。ここまで、コンストラクタはコントラクト同じ名前の関数として定義されていましたが、この時点から, 既存のメソッド置き換える「constructor()」という定義となります。以前のようなコンストラクタをコールする場合、Solidityコンパイラが警告を出してくれます。

  • 7.7 これにより、シンプルで標準的なトークンを使用できるようになりました。しかしここに前述したように、Ownableコントラクトを使用していくつかの機能を追加します。最初に、2つの関数を定義します:1つは非公開変数の状態を書き換えるものであり、オーナーの許可がある場合のみ有効です。もう1つは、文字列のメッセージを返す関数です。定義は次の通りです:

    7.7.1 どちらも公けであるため、誰でもコールを試すことはできます。しかし、最初のコールの場合、オーナーのアドレスのみがリバートをすることが出来ません。もしあなたがオーナーであり関数がコールされたのであれば、その文字列は変数Ownerに(大文字で)保存され、トランザクションでチェックできる真理値もリターンしてくれます。
    7.7.2 Owner変数は公けではなくGetterがないため、ブロックチェーンの状態を変更することなく変数値をリターンする関数が必要になります。これが2つ目の関数です。

  • 7.8 また、誰かがコントラクトを誤ってコールした場合のための、イベントを発信するフォールバック関数も作成します。

  • 7.9 最後に、コントラクトに破棄可能な機能を追加します。この場合、オーナーのみコントラクトを実行できます。

8. マイグレーションの作成

  • 8.1 ~/token/migrationsの中に2_deploy_token.jsという名前のファイルを作成します。
    Creating the Migration
  • 8.2 コードは次の通りです:

9. コントラクトのデプロイ

  • 9.1 Truffleコンソールに下記のコマンドでコントラクトをコンパイルします:

  • 9.2 次にコントラクトをマイグレートします。

  • 9.3 どちらのコマンドもこの一つのラインで実行することができます。

    マイグレーションコントラクトがますデプロイされます。Truffleはそれぞれのオペレーションのトランザクションハッシュを提供し、後でも詳細とログをチェックできるようにします。 これが受け取った完全なアウトプットです。

  • 9.4 コントラクトとのインタラクションはRSK Testnet explorerで確認できます。作成されたコントラクトとの全てのインタラクションがイクスプローラーで確認することが可能です。
    appear in the explorer
    appear in the explorer 2

さらなる詳細はこちらを参照してください。