subsrateとは何か?
- 私はブロックチェーンのフレームワークだと理解しています。
- 私が詳細を説明するよりも良い説明がのっているので、こちらをご参照下さい。(https://staked-technologies.gitbook.io/substrate-docs-hosted-by-staked-technologies/substratetoha)
- ブロックチェーンの相互運用課題の解決を目指すPolkadotで採用されている点でも注目していますが、Plasmでも使われている点でも注目しています。
- Plasmは、私が今最も注目しているブロックチェーンです。(https://staked-technologies.gitbook.io/substrate-docs-hosted-by-staked-technologies/plasmhowaitopp-intorodakushon)
リニューアルされたSubstrateチュートリアル
- こちらです。(https://www.substrate.io/tutorials)
- まずデザインが凄くかっこいいですね。
- そして、以前より、分かり易くなっているように思います。
今回やったこと
- このチュートリアルを忠実にやっただけです。※何の相違工夫もありません。申し訳ありません。(https://www.substrate.io/tutorials/start-a-private-network/v2.0.0-alpha.7)
- ただ、substrateで独自ネットワークを作る第一歩としてやるべき重要だと思っています。
Cloneしてビルドする。
git clone -b v2.0.0-alpha.7 --depth 1 https://github.com/substrate-developer-hub/substrate-node-template
- 実装言語であるrustの環境を作ります。
curl https://getsubstrate.io -sSf | bash -s -- --fast
source ~/.cargo/env
rustup update nightly
rustup update stable
rustup target add wasm32-unknown-unknown --toolchain nightly
- 作業用のローカルbranchを作成します。
cd substrate-node-template
git checkout -b my-first-substrate-chain
- ビルドします。※環境にもよりますが、30分近くかかります。
cargo build --release
ノードで使うキー(2台分)を作成します。
- 以下のコマンドを2セット実行して、テキストファイル等にメモします。
subkey --sr25519 generate
subkey --ed25519 inspect "※※--sr25519実行時に作成されたSeecret Seedsを指定"
自分用のPrivate Chainの設定ファイル(?)を作る
- customSpec.jsonを作成した後にチュートリアルに従って編集して下さい。
- 私は自分で作成した2台分のキーのみをいれたファイルを作成しました。
./target/release/node-template build-spec --disable-default-bootnode --chain local > customSpec.json
- 作成したファイルです。
cat customSpec.json
{
"name": "Local Testnet",
"id": "local_testnet",
"chainType": "Local",
"bootNodes": [],
"telemetryEndpoints": null,
"protocolId": null,
"properties": null,
"consensusEngine": null,
"genesis": {
"runtime": {
"system": {
"changesTrieConfig": null,
"code": /* 省略 */},
"aura": {
"authorities": [
"5DyHhXoTtfa9u7ZiBmjxdwbA6TcAqKFovDGmPnn6wbWm7dje",
"5EpqvJcZZgmdjnxoTHyzw8GWmp9D2HmpYzgqbNGw32PQYxwT"
]
},
"grandpa": {
"authorities": [
[
"5GMP6xJjukUwW9LcccfynkEWTPNkrzjm1oSQf68UZ1jc8xb1",
1
],
[
"5E4LLaTE44E2F4t62SkFBXbwNqdgDbBvVrkjHaqybWNckQn6",
1
]
]
},
"balances": {
"balances": [
[
"5DyHhXoTtfa9u7ZiBmjxdwbA6TcAqKFovDGmPnn6wbWm7dje",
1152921504606846976
],
[
"5EpqvJcZZgmdjnxoTHyzw8GWmp9D2HmpYzgqbNGw32PQYxwT",
1152921504606846976
]
]
},
"sudo": {
"key": "5DyHhXoTtfa9u7ZiBmjxdwbA6TcAqKFovDGmPnn6wbWm7dje"
}
}
}
}
- 指定出来る形にします。
./target/release/node-template build-spec --chain=customSpec.json --raw --disable-default-bootnode > customSpecRaw.json
- customSpecRaw.jsonは起動する端末に配布して下さい。
起動する ※今回は2台起動しました。
- 1台目を起動する
./target/release/node-template \
--base-path /tmp/node01 \
--chain=./customSpecRaw.json \
--port 30333 \
--ws-port 9944 \
--rpc-port 9933 \
--telemetry-url 'ws://telemetry.polkadot.io:1024 0' \
--validator \
--unsafe-rpc-expose \
--name MyNode01 \
--rpc-cors=* \
--unsafe-ws-external \
--unsafe-rpc-external
- 2台目を起動する
- ※"11.111.111.111"の部分は1台目が起動している端末のIPを指定して下さい。
- ※"p2p"の後ろは1台目を起動した時の標準出力に表示される"Local node identity is:"の後ろに表示された文字列を指定して下さい。
./target/release/node-template \
--base-path /tmp/node02 \
--chain=./customSpecRaw.json \
--port 30334 \
--ws-port 9945 \
--rpc-port 9934 \
--telemetry-url 'ws://telemetry.polkadot.io:1024 0' \
--validator \
--unsafe-rpc-expose \
--name MyNode02 \
--rpc-cors=* \
--unsafe-ws-external \
--bootnodes /ip4/11.111.111.111/tcp/30333/p2p/QmcWd9MRAfdjSKQQqBb7yN24nPZegn46Ne8HTssPtZFZLK \
--unsafe-rpc-external
- 成功すると以下のような状態で標準出力が出力され、ブロックが生成されます。
? Imported #389 (0x24cd…e14d)
? Idle (1 peers), best: #389 (0x24cd…e14d), finalized #0 (0x6771…40b9), ? 1.0kiB/s ? 1.1kiB/s
? Imported #390 (0xdbdf…b879)
? Idle (1 peers), best: #390 (0xdbdf…b879), finalized #0 (0x9d1e…251f), ? 1.0kiB/s ? 1.1kiB/s
作成したキーを登録する
1台目の設定
- https://polkadot.js.org/apps/#/explorerにアクセスし、「setting」の「リモート・エンドポイントを「カスタムエンドポイント」を有効にして、「ws://11.111.111.111:9944/」を設定すると、1台目のノードに接続する事が出来ます。
- 作成したキーを1セット設定します。
- 左メニューの「ToolBox」を選択し、「RPC Call」を選択します。
- https://www.substrate.io/tutorials/start-a-private-network/v2.0.0-alpha.7/customchainに従って、auraキーとgranキーを1セット設定します。
2台目の設定
- 同様にhttps://polkadot.js.org/apps/#/explorerにアクセスして2台目のIPを指定して接続し、2セット目のキーを登録します。
ノードを2台とも再起動する
- 「Ctl + c」で2台ともコマンドを停止します。
- 再度2台とも起動します。
- 暫く待って、Finalizeされてているようなら成功です。以下のように出力されるはずです。
? Imported #386 (0x4edf…dad5)
? Idle (1 peers), best: #386 (0x4edf…dad5), finalized #383 (0x0dce…f63a), ? 1.1kiB/s ? 1.1kiB/s
? Imported #387 (0x6771…40b9)
? Idle (1 peers), best: #387 (0x6771…40b9), finalized #384 (0x6f65…429d), ? 1.0kiB/s ? 1.0kiB/s
しばらくはsubstrateとplasmをやっていきます
- ここしばらくは、Plasmのチュートリアルを中心にしながら、substrateをやって、ノードの起動、runtimeの実装、ink!(スマートコントラクト)の実装が出来るくらいまでキャッチアップしたいと考えています。