ここから始めるPlasm Network:第一回:Plasm Networkとは何か~ノード起動方法まで
はじめに
皆さんこんにちは。Fintertechでエンジニアとして業務をしている高橋です。
今日は公式アンバサダーとして活動をさせて頂いているPlasm Networkについて紹介させて下さい。特に具体的な動かし方やスマートコントラクトの実装方法といったエンジニア寄りのお話をさせて頂きます。一回では説明し切れませんので、シリーズとして何回かに分けて紹介させて頂きます。
Plasm Networkとの出会い
私が最初にPlasm Networkと出会ったのは2020年の1月で、このブログにも時々登場する弊社の川浪からPolkadotを教えて貰う時に「Polkadotに接続を目指す日本のスタートアップがある」とPlasm Networkの主導企業であるStake Technologiesを紹介して貰ったのがきっかけでした。
私は昨年1月にFintertechに転職するまでの間、日本の大手企業のシステムの受託開発を仕事にしてきたのもあり、コンソーシアムチェーンに注目してきました。ビジネスフローを実装しやすくフレームワーク化しているCordaに特に注目してきました。ここでは詳細は割愛させて頂きますが、Polkadotのコンセプトを読み、ブロックチェーンフレームワークであるSubstrateを学びPlasm Networkに出会った事で、パブリックブロックチェーン、ひいてはWeb3.0の将来性に魅了され、今ではすっかりWeb3.0に傾倒しています。それでも、多くの企業がCordaを採用する気持ちも理解出来るので、引続きCordaもやっていくつもりでいます。実はCorda Certified Developerでもあります。
Plasm Network紹介記事の目次
(1) Plasm Networkとは何か~ノード起動方法まで ★今回
(2) テストネットValidatorになる方法
(3) WASMベース(ink!)のスマートコントラクトの開発とデプロイ方法
(4) solidityをWASMに変換してスマートコントラクトをデプロイする方法
(5) EVMベース(Remix)でのスマートコントラクトの開発とデプロイ方法
Plasm Networkとは何か
今回は初回のため、Plasm Networkとは何かについて簡単に紹介させて頂きます。主な特徴を箇条書きにしてみたいと思います。
Plasm Networkは・・・
・Polkadotに接続を目指すレイヤー1ブロックチェーンである。
・レイヤー2ソリューションである。
・WASMベース、EVMベースの2つのスマートコントラクトをサポートする。
・Dapps RewardsやLockDrop等の独自機能が実装されている。
・ブロックチェーンフレームワークSubstrateで実装されている。
彼らのレイヤー2ソリューションは、ブロックチェーンのスケーラビリティ問題の解決を目指すPlasmaが抱える問題を解決することを目指したものです。
私は、彼らが提供するレイヤー2ソリューションが、目下パブリックブロックチェーン最大の課題であるスケーラビリティとガス代について解決してくれるものと信じています。そして、それらの課題が解決した時、Web3.0への道は大きく開かれると思っています。
詳しくはPlasm Networkのホームページをご参照下さい。また、ホワイトペーパーの日本語版があるので、是非そちらも読んでみて下さい。
Plasm Networkのノードの動かし方
今回はPlasm Networkを触っていく上で最も基本的な事項であるNodeのコンパイル及びローカルでの起動について説明をさせて頂きます。今後、Plasm Networkを動かしていく上で必要となりますので、詳細に説明をしていくつもりですので、是非、皆様もやってみて下さい。
また、技術的な質問は、TelegramとDiscordにPlasm Networkの日本語チャンネルがありますので、そちらからご質問下さい。
今回の目次
(1) Rustの環境構築
(2) Plasm Nodeのソースコードをコンパイルする
(3) Plasm Nodeを起動する
(4) WEB UIからNodeを操作する~送金してみる~
(5) WEB UIからNodeを操作する~チェーン関数を呼ぶ「アカウント名変更」~
(1) Rustの環境構築
それでは早速はじめていきます。Plasm NetworkはRustで実装されているので、コンパイルするためにはRustの実装環境を作成する必要があります。
作成するために以下のコマンドを実行して下さい。
※Linux系のコンピューターの前提で記載していきます。Windows環境しかお持ちでない方はwslのUbuntu18.04を使って頂ければと思います。Windowsでも動かすことは可能です。
sudo apt update
sudo apt install -y cmake pkg-config libssl-dev git build-essential clang libclang-dev curl libz-dev
curl https://sh.rustup.rs -sSf | sh
source ~/.cargo/env
rustup uninstall nightly
rustup update nightly-2020-10-06
rustup target add wasm32-unknown-unknown --toolchain nightly-2020-10-06
mv ~/.rustup/toolchains/nightly-2020-10-06-x86_64-unknown-linux-gnu/ ~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/
(2) Plasm Nodeのソースコードをコンパイルする
Rustのコンパイル環境が出来たら、GithubからPlasm Nodeのソースコードを取得しましょう。
git clone https://github.com/PlasmNetwork/Plasm.git
cloneが完了すると「Plasm」というディレクトリが作成されますので、その中に移動してコンパイルするためのコマンドを実行します。
※git submoduleコマンドはgithub上でリンク参照になっているモジュールについてローカルに取得するために使用しています。
※ここでは「Frontier」(https://github.com/paritytech/frontier)というParity Technologiesが実装しているEthereumとの互換性を提供する機能をリンクしています。
cd Plasm
git submodule init
git submodule update
cargo +nightly build --release
ビルドが完了しますと以下の画像のように「plasm-node」が作成されていることを確認出来るはずです。
※PCのマシンパワーにもよりますが、10分以上は時間が必要だと思います。
※参考サイトのリンクを記載させて頂きます。「substrateの開発環境設定方法」、「ビルドエラーに関するIssue」
(3) Plasm Nodeを起動する。
コンパイルが完了したら、早速Nodeを実行してみましょう。以下のコマンドを使用して開発モードで実行します。
./Plasm/target/release/plasm-node --dev
※過去にNodeを実行したことがある場合で、コンソールにエラーが出力される場合は以下のコマンドを使用して、ローカルのデータベースを一度削除して下さい。
./Plasm/target/release/plasm-node purge-chain --dev
以下の画像のようにコンソールにログが出力され、ブロック数がカウントアップされはじめるとNodeの起動は成功です。
(4) WEB UIからNodeを操作する~送金してみる~
まずは、上記で起動したPlasm NodeにWebのインターフェースからアクセスしてみましょう。Plasm NetworkのようにSubstrateベースで実装されているチェーンはWebから簡単にアクセス出来るようにアプリケーションが用意されています。
Plasm Nodeにアクセスする
以下のような画面が出力されると思います。ローカルテスト用のトークンであるUnitを保持しているアカウントが複数あるのも確認出来ます。
アカウントの一覧画面を見て下さい。Substrateベースのブロックチェーンでは開発専用としてデフォルトのアカウント(AliceやBob)が準備されています。
アカウントの一覧の「送信」ボタンを押すと以下のような画面が出ると思います。
テストトークンの残高のあるアカウントからであればどれからでも送信出来ますので、やってみて下さい。トランザクションが成功すると即座に送金が完了し、ブロックチェーン上での送金が体験できると思います。
※実際のトークンが送信されるわけではありませんので、安心して実行して下さい。
※但し、DOTやPLM、その他の本番のトークンを既にお持ちの方はくれぐれも本番のネットワーク操作と混同しないように注意して下さい。
(5) WEB UIからNodeを操作する~チェーン関数を呼ぶ「アカウント名変更」~
折角なので、もう少しチェーンを触ってみることにしましょう。Plasm NetworkのようにSubstrateをベースに実装されているチェーンは様々機能を持っており、それら全てに上記のWebインターフェースから触れる事が出来ます。
色々な機能が実装されていますが、今回は最も簡単なものの一つである「Nicks Pallet」を動かしてみたいと思います。
Nicks Palletとは、Substrateがデモンストレーション用に準備しているモジュールであり、オンチェーン上でアカウント変更の履歴が残るように設計されています。ただし、あくまでデモ用であり、本番で使用することを想定したものにはなっていない点に注意が必要です。
以下の画面のように「ディベロッパー」「Extrinsics」を選択して下さい。
以下の画面のように選択します。
選択されたアカウントを使用する:Alice
次のExtrinsicsを提出する:Nicks setName
※「提出する」はsubmitを日本語訳したものになります。
Nameの箇所ですが、ここは文字列を16進数にして設定する必要があります。今回は「高橋」を変換した「0x74616b616861736869」を設定してみて下さい。
参考として以下にPython2系を使用した変換方法をのせておきます。
早速コールしてみて下さい。
私はAliceでコールしました。
その後アカウントを見ると、Aliceであったアカウントが、”takahashi”になっていることが確認できるはずです。
Extrinsicsで呼んだ関数の結果は「チェーン状態」から確認出来ます。以下の画面は「チェーン状態」で「Nicks」を選択して値を確認した例になります。
まとめ
今回は、Plasm Networkの動かし方の紹介第一弾として、Nodeの動かし方をご紹介させて頂きました。
次回は、今回コンパイルしたNodeを使って、Plasm Networkのテストネットの一つであるDustyに自分のNodeを参加させるところと、実際にDustyテストネットのValidatorになる方法をご紹介させて頂きます。
Plasm Networkに興味を持って頂けましたら、是非TwitterやTelegram、DiscordでPlasm Networkをフォローしてみて下さい。TelegramやDiscordには日本語チャンネルもありますし、私もそこで活動していますので、ご不明点や色々な質問をしてみて下さい。