ParityでPoAのプライベートネットをローカル環境に構築する方法

Takeharu.K
Acompany
Published in
7 min readMay 30, 2019

はじめに

こんにちは.株式会社AcompanyでCTOを務めている近藤(Takeharu.K)です.今回は,Ethereumのクライアントソフトウェアの1つであるParityを用いたプライベートネットを,ローカル環境に構築する方法について紹介します.

最小構成のプライベートネットを構築するため,バリデータノード2つとユーザーアカウント1つとします.

今回作成するプライベートネットはPoAという,信頼できるノードがバリデータである場合に使用できるコンセンサスを用いて構成します.

閉じた環境でEthereumチェーンを作成する場合にはPoAを選択することで,不要なハッシュ計算が行われないので経済的であり,トランザクションも高速に処理できます.

一方で,性善説が成り立たないようなオープンな環境では,脆弱な構成であるため,注意が必要です.

それでは構成方法をみていきます.

手順

  1. Parityのインストール
  2. プライベートネットの設定
  3. ノードの設定
  4. アカウント作成
  5. ノードの起動
  6. ノード間の接続
  7. トランザクションの送信

1. Parityのインストール

Mac(Homebrewインストール済み) or Ubuntu

$ bash <(curl https://get.parity.io -L)

Linux or Mac or Windows

ここからダウンロードして実行権限を与えます.

2. プライベートネットの設定

まず,プライベートネットの設定ファイル(demo-spec.json)を作成します.

  • engine : PoAのエンジンであるAura(Authority Round Algorithm)を指定
  • stepDuration : ブロック生成間隔は5秒に指定
  • validators : ブロック生成を行うノードのアカウントアドレスを記載
  • params : 標準のパラメータ設定
  • genesis : PoAの標準値
  • accounts : Ethereumの組み込みスマートコントラクトアドレスを設定

3. ノードの設定

2つのノード設定ファイル(node0.toml, node1.toml)を作成します.

4. アカウント設定

node0とnode1をそれぞれ別のターミナルで起動します.

$ parity --config node0.toml$ parity --config node1.toml

2つのバリデータアカウントと1つのユーザーアカウントを作成します.

$ curl --data '{"jsonrpc":"2.0","method":"parity_newAccountFromPhrase","params":["node0", "node0"],"id":0}' -H "Content-Type: application/json" -X POST localhost:8540$ curl --data '{"jsonrpc":"2.0","method":"parity_newAccountFromPhrase","params":["node1", "node1"],"id":0}' -H "Content-Type: application/json" -X POST localhost:8541$ curl --data '{"jsonrpc":"2.0","method":"parity_newAccountFromPhrase","params":["user", "user"],"id":0}' -H "Content-Type: application/json" -X POST localhost:8540

バリデータアドレス0 :0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e

バリデータアドレス1 :0x00Aa39d30F0D20FF03a22cCfc30B7EfbFca597C2

ユーザーアドレス :0x004ec07d2329997267Ec62b4166639513386F32E

アドレスが作成できたら起動していたノードを停止します.

プライベートネットの設定ファイルにアカウントを追加

先ほどのファイル demo-spec.json をこちらに変更します.

5. ノードの起動

パスワードファイル node.pwds の作成とノード情報の追加をします.

各ノードを起動します.

$ parity --config node0.toml$ parity --config node1.toml

6. ノード間の接続

node0のenodeアドレスを取得します.

$ curl --data '{"jsonrpc":"2.0","method":"parity_enode","params":[],"id":0}' -H "Content-Type: application/json" -X POST localhost:8540

取得したenodeアドレスを登録します.

enode://RESULTに上で確認したアドレスを入れます.

curl --data '{"jsonrpc":"2.0","method":"parity_addReservedPeer","params":["enode://RESULT"],"id":0}' -H "Content-Type: application/json" -X POST localhost:8541

ピアの数が1/25になっていたら,接続成功です!

7. トランザクションの送信

ユーザーアカウントからnode1にトークン送信してみます.

$ curl --data '{"jsonrpc":"2.0","method":"personal_sendTransaction","params":[{"from":"0x004ec07d2329997267Ec62b4166639513386F32E","to":"0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e","value":"0xde0b6b3a7640000"}, "user"],"id":0}' -H "Content-Type: application/json" -X POST localhost:8540

node1のトークン残高を確認してみます.

$ curl --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e", "latest"],"id":1}' -H "Content-Type: application/json" -X POST localhost:8540

残高が1から増えていたら成功です!

まとめ

Parity PoAを用いてローカル環境で2つのバリデータノードを作成し,ユーザーアカウントからトークンの送信ができました.

今後も,Acompanyからブロックチェーンに関する記事を投稿していきますので,ぜひfollowしていただけると嬉しいです.

Happy Hacking 😎!

参考

Parity 公式ドキュメント

Parity 公式ドキュメント PoAチュートリアル

--

--

Takeharu.K
Acompany

株式会社Acompany CTO @TakeItHaru on Twitter