
こんにちは!Stakedの渡辺創太です。
今回から数回に分けてSubstrate(サブストレート)とPolkadot(ポルカドット)に関して、結構深く解説していきたいと思います。Substrateを実際に動かしながら書いていますが、精査がまだ足りない部分もあるので間違っていたらご指摘下さい!
Substrateの前置きに関してはこちらの記事で書いているので合わせてご覧ください。
関連:Polkadotとブロックチェーン開発フレームワークSubstrateを俯瞰する
SubstrateとはParity Technologiesが開発をしているOSSプロジェクトです。ブロックチェーンを作るとき必要となるコンポネントをフレームワーク化して提供しています。
イーサリアム(Ethereum)の共同創業者兼CTOであるGavin Wood(ギャビン・ウッド)氏は、
“ SubstrateはEthereumとPolkadotを作る上で学んだレッスンを活かし、その知見がツールに落とし込まれている。そして、ユーザーはその恩恵を無料で手に入れることができるのだ。”
と言っています。これだけでもかなり期待が持てますね。以降で細かくみていこうと思います。
フレームワークを細かく見てみると、大きく分けて「Substrate Core」と「Substrate Runtime Module Library(SRML)」という2つによって構成されています。Substrate Coreでブロックチェーンを作るのに最低限必要なコンポーネントを提供し、SRMLをプラグインすることによってブロックチェーンをカスタマイズすることができます。
Substrate Core(サブストレート・コア)の要素
Substrate Coreではブロックチェーンを作るのに最低限必要なコンポネントを提供していると書きましたが、「最低限必要なコンポーネント」とは以下にあげる要素を指します。
- ブロックの同期
- JSON-RPC API エンドポイント
- 暗号技術に関するライブラリー
- 安全で普及性の高いlibp2p
- ストレージ
- テレメトリー(リアルタイムの情報を遠隔サーバーに送信するための遠隔通信システム)
- ライトクライアント
- チェーンとバージョン管理
- プラグイン可能なコンセンサス
- JavaScript utils(JSのクラス)
- トランザクションとブロック生成のメカニズム
- WebAssenblyインタープレター
- Polkadotによるインターチェーンコネクティビティー
Substrate Runtime Module Library(SRML)
SRMLで提供されているモジュールをインポートすることによってSubstrate Coreをアップデートすることができます。つまり作りたいブロックチェーンの特徴に合わせてモジュールを選択しカスタマイズすることができるということです。モジュールは現時点で以下の要素が提供されています。
- Accounts & Balances(暗号通貨の残高を確認するアカウント)
- Assets(ファンジブルアセット)
- Consensus(コンセンサスのアップデート機能)
- Contracts(スマートコントラクト機能)
- Council(プライベート投票機能)
- Democracy(公開投票機能)
- Sessions(Authoritiesのローテーション機能)
- Staking(PoS機能)
- Timestamp(タイムスタンプ機能)
- Treasury(DAO機能)
例えば、スマートコントラクト機能のあるPoSブロックチェーンを作りたい場合、Substrate CoreにAccounts & BalancesとStaking、Contractsモジュールをインポートする形になります。
これは注目に値すると思います。現在、多くの場合ビジネスユースケースは「アイデア」を「ブロックチェーン」に合わせています。例えば、トランザクションまでにかかる時間がN秒だからUXをAのように工夫して……といった具合です。しかし、ブロックチェーンをカスタマイズ可能にすることでアイデアにブロックチェーンを合わせることができるようになれば可能性が広がるはずです。
Don't adjust your idea to blockchains. Adjust blockchains to your idea.
アイデアをブロックチェーンに合わせるのではなく、ブロックチェーンをアイデアに合わせるアプローチが主流になってほしい。— Sota Watanabe (渡辺創太) (@WatanabeSota) 2019年3月6日
実際にインストールしてみた
では実際にSubstrateを僕の環境下(Mac)でインストールしてみようと思います。
$ mkdir substrate&&cd substrate
こちらのようにディレクトリーを作成し移動します。この環境下で作業します。
まず、
でSubstrateを動かすためのセットアップをします。
(かなり時間がかかります。)
次にSubstrateのコマンドラインアプリケーションをインストールします。
subkey;
$ cargo install — git https://github.com/paritytech/substrate
substrate
最後にCLI helper scriptsをインストールしてバージョンを確認してみましょう。
$ substrate –version
このようにバージョンが確認できたら準備完了です。