#凄いぞフォークレスアップグレード
Substrateのブロックチェーンの特徴の一つはフォークレス、リアルタイムのチェーンアップグレードですよね。とっても便利だと思ったので皆さんにシェアします。
メリット、デメリット、やり方、解説の順で説明していきます。
メリット:
・Cargo buildをしなくていいので実装が速い!
・チェーンをpurgeしないので既存ノードや状態が保たれる!
デメリット:
・ネイティブに比べインタープレターなので処理は遅め
##やり方 (wasmとcargoでビルド済前提。まだの人はこちら)
- いつも通りノードを動かす
$ ./runtime/release/<project name> --dev
- 別ターミナル開いてWasmのビルド実行
$ ./build
すると以下のパスにcompact.wasmファイルが作成されます。
./runtime/wasm/target/wasm32-unknown-unknown/release/node_template_runtime_wasm.compact.wasm
- 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