ParityでPoAのプライベートネットをローカル環境に構築する方法
はじめに
こんにちは.株式会社AcompanyでCTOを務めている近藤(Takeharu.K)です.今回は,Ethereumのクライアントソフトウェアの1つであるParityを用いたプライベートネットを,ローカル環境に構築する方法について紹介します.
最小構成のプライベートネットを構築するため,バリデータノード2つとユーザーアカウント1つとします.
今回作成するプライベートネットはPoAという,信頼できるノードがバリデータである場合に使用できるコンセンサスを用いて構成します.
閉じた環境でEthereumチェーンを作成する場合にはPoAを選択することで,不要なハッシュ計算が行われないので経済的であり,トランザクションも高速に処理できます.
一方で,性善説が成り立たないようなオープンな環境では,脆弱な構成であるため,注意が必要です.
それでは構成方法をみていきます.
手順
- Parityのインストール
- プライベートネットの設定
- ノードの設定
- アカウント作成
- ノードの起動
- ノード間の接続
- トランザクションの送信
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していただけると嬉しいです.