はじめに
本連載では、カスタムブロックチェーンを構築するためのフレームワークであるSubstrateの概要と使い方について、全6回で解説します。
第3回では、Substrateのノードを操作するGUIの使い方について紹介します。
本記事は、過去にコンセンサス・ベイスが主宰していたオンラインサロンの記事です。記事は2017年~2018年にかけて執筆されたため、一部は、既に古くなっている可能性があります。あらかじめご了承ください。
Polkadot/Substrate Portalの基本
Substrateのノードを操作するGUIとして最も使いやすいツールは、https://polkadot.js.org/apps にホスティングされている Polkadot/Substrate Portalです。ホスティングされたアプリを用いてローカルのノードと通信することもできますし、コードをダウンロードしてローカルでアプリケーションを立ち上げることもできます。
コマンド1を用いてローカルでSubstrateのdevチェーンを実行し、Google ChromeからPolkadot/Substrate Portalのアプリケーションを開きます。
コマンド1. substrate devチェーンの起動
$ substrate --dev
Explorerパネル
Polkadot/Substrate Portalアプリケーションを用いて、Substrateチェーンの状態の確認やトランザクションの発行ができます。図1のとおり、サイドバーのExplorerパネルを開くと、ChainやBlock、Nodeの情報をリアルタイムに閲覧することができます。
図1. ExplorerパネルによるChain, Block, Node情報の確認
Transferパネル
サイドバーのTransferパネルをクリックすると、Substrateの基軸通貨であるUnitを送金することができます。GUI上から送金元のアカウントと送金先のアドレス、送金する額を設定し、トランザクションを発行します。
アカウントやアドレスには、あらかじめアプリケーションで設定されているAliceやBobなどのアカウントが選択肢として表示されています。すでに残高を保持しているAliceなどのアカウントを送金元に設定し、トランザクションを発行してみましょう。
図2. Transferパネルから送金トランザクションの実行
送金トランザクションが正しく実行されると、右上にイベントの通知が表示されます。
図3. 送金トランザクション実行時のイベント通知
ExplorerのBlock detailsから、トランザクションが取り込まれたブロックを確認してみます。extrinsics欄に、実行されたbalances.transferの情報や、events欄に通知されたイベントの情報が確認できます。
図4. Block detailsからブロックの詳細情報の確認
Accountsパネル
アプリケーションのAccountsパネルから、存在しているアカウントの情報の確認や、新しいアカウントの作成などができます。
Create Accountボタンをクリックして、新しいアカウントを作成してみましょう。アカウントの名前や復元のためのニーモニック、アカウントをロックするパスワードなどを設定し、Saveをおこないます。
図5. Accountsパネルから新しいアカウントの作成
無事にアカウントが作成されると、アカウント一覧に表示されます。新しいアカウントは残高が0なので、AliceアカウントからUnitを送金してみましょう。Transferパネルから送金画面を開き、新しいアカウントに10 Unitを送金してみます。
図6. 新しいアカウントへ10 Unitを送金
しばらく待つと、右上にイベントの通知が表示され、送金が失敗したことが分かります。
図7. 送金トランザクションの失敗通知
失敗した理由を調べるため、チェーンを実行しているコンソールに戻り、ログを確認してみましょう。
該当するトランザクションを実行したとき、「Runtime: value too low to create account」というログが表示されていることが分かります。
ログ1. コンソールからエラーログの確認
2019-05-31 19:56:20 Pre-sealed block for proposal at 154. Hash now 0xc5eb9b014cac8297890583188fe06134d573884b5531adef0aa96072526dfa2c, previously 0x2f1769079ea11728477897a2bc035f8eb616db7ef205bedd1bb9fc54f78b01e7.
Runtime: value too low to create account
デフォルトのdevチェーンでは、アカウントを作成するための最低限のデポジット額が設定されています。GUIから、その値を確認してみましょう。
Chain stateパネル
Chain stateパネルは、チェーン内のさまざまな状態の値を確認する機能を提供します。
selected state queryから「balances」を設定し、existentialDeposit()を選択して「+」ボタンをクリックします。データの取得に成功すると、フォームの下に取得した値が表示されます。
この例では、existentialDepositが500となっているため、Aliceアカウントから新しいアカウントに500 Unit以上送金することで、正しくトランザクションを実行できるはずです。
図8. アカウント作成のための最低デポジット額の確認
Polkadot/Substrate Portalの発展的な使い方
新しいアカウントに残高を設定する方法は、既存のアカウントから送金してもらう以外に、残高の値を強制的に上書きする方法もあります。
Extrinsicsパネル
Extrinsicsパネルでは、チェーンに備わっているさまざまな機能を実行できます。送金のトランザクションも、balancesのtransferから実行することができます。
アカウントの残高を上書きする機能は、balancesのsetBalanceから実行できます。Aliceアカウントから、新しいアカウントの残高を1 Tera Unitに設定するトランザクションを実行してみます。
図9. Extrinsicsからbalances.setBalanceの実行
上記の手順でトランザクションを実行しても、失敗の通知が表示されるはずです。ログからエラーの原因を調べてみると、「Runtime: bad origin: expected to be a root origin」というメッセージが出力されていることが分かります。
ログ2. エラーログの確認
2019-05-31 20:00:00 Pre-sealed block for proposal at 176. Hash now 0xaf26b4d1b47e7456c7205646eaf90be32e276af947da2329b91480534adb13a5, previously 0x664d798e9beb5a017c19be32a6750c2659efcce6243bae456816643fbe5fd0ca.
Runtime: bad origin: expected to be a root origin
Sudoパネル
アカウントの残高を上書きするsetBalance機能は、特別な権限による実行が必要です。Extrinsicsの下にあるSudoパネルからは、スーパーユーザー権限で機能を実行できます。
図10. SudoパネルからsetBalanceの実行
同様のパラメタでsetBalanceを実行すると、今度は正常にトランザクションが実行されるはずです。
Accountsパネルを開き、新しいアカウントの残高を確認すると、正しく1.000T Unitに更新されていることが分かります。
図11. Accountsパネルから、新しいアカウントの残高を確認
Democracyパネル
setBalance機能のトランザクションは、Sudoによる実行だけでなく、Proposalを用いた実行も可能です。
Democracyパネルを開き、新しいアカウントを実行者として、自身の残高を 10 Tera Unitに更新するProposalを提出します。
図12. DemocracyからsetBalanceのproposalを提出
Proposalを提出してしばらく経つと、投票のステータスに切り替わります。投票するアカウントを選択し、「Aye(賛成)」「Nay(反対)」の投票ができる表示に切り替わるので、Ayeを選択して投票します。
さらにそのまましばらく待つと、投票結果からProposalが受理され、setBalanceの実行が完了します。Accoutsパネルで新しいアカウントの残高が 10T Unitsに更新されていることを確認してみましょう。
図13. 投票画面の表示
Stakingパネル
その他、紹介しきれなかったパネルの機能を簡単に紹介しておきます。
Stakingパネルでは、新しいブロックを生成するValidatorの状態や、Validatorに選出されるための資金のStakingなどの操作ができます。
図14. Stakingパネルの表示
Toolboxパネル
Toolboxパネルでは、RPCエンドポイントとの通信や、ハッシュ関数、署名のユーティリティを実行できます。
図15. Toolboxパネルの表示
Javascriptパネル
Javascriptパネルでは、Javascriptのコードを用いてフロントエンドからノードと通信することができます。
図16. Javascriptパネル
その他のGUI
Substrateでは、Polkadot/Substrate Portal以外に、oo7と呼ばれるフレームワークを用いたUIのテンプレートも提供されています。
コマンド1を用いて、substrate-uiのテンプレートをローカルにダウンロードし、サーバを立ち上げます。
コマンド1. substrate-uiのセットアップ
$ substrate-ui-new substrate-helloworld
$ cd substrate-helloworld-ui
$ yarn run dev
Google Chromeでlocalhost:8000にアクセスすると、正常に動作すれば図17に示すようなSubstrate-UIの画面が表示されます。
ただし、ローカルで立ち上げているノードのバージョンとSubstrate-UIのバージョンがずれていると、うまく起動しない場合もあります。その場合、ローカルのノードは一度停止して、公式でホスティングされているノードに接続してみてください。
図17. Substrate-UIの画面
Substrateを用いて新しいアプリケーションを実装する場合、簡単にGUIを作成するにはSubstrate-UIを利用すると便利です。
第4回では、Polkadotjsを用いたクライアント操作や、JavaScriptでSubstrateのノードと通信する機能の実装をおこないます。
以上
参考文献:
- What is Substrate? – Parity
https://www.parity.io/what-is-substrate/ - Substrate Developer Hub
https://docs.substrate.dev/ - Substrate: The platform for blockchain innovators – Github
https://github.com/paritytech/substrate - polkadot-js/app – Github
https://github.com/polkadot-js/apps
免責事項
本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。
技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。
ブロックチェーン学習に最適の書籍の紹介
図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書
本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)
会社紹介
弊社(コンセンサス・ベイス株式会社)は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。
会社ホームページ
https://www.consensus-base.com/