【Substrate】フォークレスチェーンアップグレードのやり方


凄いぞフォークレスアップグレード

Substrateのブロックチェーンの特徴の一つはフォークレス、リアルタイムのチェーンアップグレードですよね。とっても便利だと思ったので皆さんにシェアします。
メリット、デメリット、やり方、解説の順で説明していきます。

メリット:

・Cargo buildをしなくていいので実装が速い!
・チェーンをpurgeしないので既存ノードや状態が保たれる!

デメリット:

・ネイティブに比べインタープレターなので処理は遅め

やり方 (wasmとcargoでビルド済前提。まだの人はこちら

1) いつも通りノードを動かす

bash1
$ ./runtime/release/<project name> --dev

2) 別ターミナル開いてWasmのビルド実行

bash2
$ ./build

すると以下のパスにcompact.wasmファイルが作成されます。
./runtime/wasm/target/wasm32-unknown-unknown/release/node_template_runtime_wasm.compact.wasm

3) Polkadot UIのExtrinsicsでAliceを選択後(SudoはadminであるAliceのみが呼べます)、先ほどのcompact.wasmファイルをインプットしてSubmit。Sudidイベントが表示されれば成功です!

sudo > sudo(proposal)
proposal: Proposal (extrinsic): consensus > setCode(new)

ページ更新すると追加した機能が反映されています。
ランタイムアップグレード前のストレージ状態(バランス、アカウント等)もそのまま残っていることが確認できます。

何が起こっているのか

今動いているブロックチェーンはSubstrateが提供するWasmインタープレターを通してランタイムを動かしています。これにより、新しい機能などを既存のノードや状態を壊すことなく簡単に実装することができます。

このランタイムはブロックチェーン上にあるので、チェーンで動いているノード全てがリアルタイムで同期されます。上でも言ったように、Wasmインタプレターはネイティブバイナリに比べると処理が遅いので、必要によってcargo build --releaseと使い分けましょう。

Source: Shawn Tabrizi