はじめに
本連載では、カスタムブロックチェーンを構築するためのフレームワークであるSubstrateの概要と使い方について、全6回で解説します。
第1回では、Substrateが登場した背景や特徴、技術スタックについて解説し第2回以降でSubstrateを用いたブロックチェーン構築について実践しながら解説します。
本記事は、過去にコンセンサス・ベイスが主宰していたオンラインサロンの記事です。記事は2017年~2018年にかけて執筆されたため、一部は、既に古くなっている可能性があります。あらかじめご了承ください。
Substrateの目的
Substrateは、異なるブロックチェーン間の相互運用を目的とするPolkadotの開発を背景として誕生した、ブロックチェーン構築のためのフレームワークです。
Substrateを用いると、アプリケーションに特化したカスタムブロックチェーンを容易に構築することが可能です。
Substrateで構築されたブロックチェーンはPolkadotと親和性が高く、Polkadotに接続することで異なるチェーンとのやり取りが可能となります。
ただし、SubstrateとPolkadotはそれぞれ独立したプロジェクトであり、Polkadotに接続するチェーンは必ずしもSubstrateで構築されている必要はなく、Substrateで構築したチェーンはPolkadotに接続しなくても運用可能です。
最近ではAragonがPolkadotネットワークへの参画を表明したり、ゼロ知識証明によるアカウントベースの残高秘匿化を実現するブロックチェーンをSubstrateを用いて実装したZerochain、Substrate上でのさまざまなPlasmaの実装のためのライブラリを提供するPlasmなどのプロジェクトが登場し、注目を集めています。
Substrateの特徴
Substrateは、BitcoinやEthereumなどの既存のブロックチェーンの機能を抽象化し、よりモダンな技術スタックでさまざまなタイプのブロックチェーンを実装できる機能を提供しています。
Substrateには、それらの技術を組み合わせたブロックチェーンのテンプレートが標準で実装されており、それを用いて簡単に独自のチェーンを立ち上げることもできますし、独自の機能を追加してさらに高機能なチェーンを実現する柔軟性も兼ね備えています。
以下に、Substrateで採用されている代表的な技術スタックを紹介します。
WebAssembly
Substrateでは、ブロックの状態遷移をWebAssemblyベースのフォーマットで実行できます。
WebAssemblyは、複数の言語で記述されたコードをウェブブラウザ上でネイティブに近いスピードで実行するために開発された技術です。
これにより、Substrate上のコントラクトにあたるプログラムをC/C++やRust, Go言語などで記述し、ウェブブラウザ上のライトクライアントで実行することが可能です。
また、WebAssemblyで実装されたバイナリをチェーン上にデプロイすることで、ハードフォークなしにチェーンの機能を拡張したりアップグレードすることができます。
libp2p
Substrateのネットワークレイヤーには、libp2pと呼ばれる高機能なP2Pフレームワーク仕様のRust実装が用いられており、独自のブロックチェーンを実装する上で難関となるP2P機能の実装を協力にサポートします。
Rust/JavaScript言語
Substrateのコア機能や主要ライブラリの実装にはRust言語が用いられており、ネイティブに近いパフォーマンスと高い安全性を実現しています。
また、クライアントの実装にはJavaScriptで実装されたライブラリが提供されており、ウェブブラウザやサーバ上で動作するライトクライアントを効率的に実装できます。
GRANDPA
GRANDPA (GHOST-based Recursive ANcestor Deriving Prefix Agreement)は、ブロックチェーンにファイナリティを実現するコンセンサスアルゴリズムの一つであり、ブロック単位ではなくチェーン単位で合意をとるため、ブロック生成とファイナリティのプロセスを分離することができます。
このため、ファイナリティが遅延してもブロック生成を継続することができるため、ユーザーへのレイテンシを低く抑えることができます。
SubstrateではGRANDPAの実装をコア機能やライブラリとして提供していますが、それを利用するかどうかは設計者が自由に選択することができます。
独自ブロックチェーンの必要性
Substrateは独自のカスタムブロックチェーンを構築するためのフレームワークですが、どのような場面で独自のチェーンを実装する必要があるのでしょうか?
これまで、ブロックチェーン上でアプリケーションを開発・提供しようとした場合、利用するブロックチェーン上の制約に合わせてアプリケーションを設計・実装する必要がありました。
例えば、Ethereum上でDAppsを開発する場合、GASコストの負担や、トランザクションがブロックに取り込まれるまでのレイテンシなどを考慮した設計が重要です。
しかし、アプリケーションの種類によっては、Ethereumのある特徴は有用だが、他の特徴はデメリットになる、といった場合なども考えられます。
そこで、アプリケーションの要求に沿った独自のブロックチェーンを構築しようとした場合、これまでは既存のブロックチェーンをフォークして改良するか、スクラッチでつくるしかありませんでした。
Substrateのようなブロックチェーンの構築フレームワークの登場により、アプリケーションの要求に沿ったチェーンを簡単に実現できるようになり、アプリケーションの自由度が飛躍的に向上します。
類似プロジェクト
Substrateのような独自ブロックチェーン構築フレームワークの類似プロジェクトとして、コンセンサスアルゴリズムとアプリケーションインターフェースを提供するTendermintや、Tendermintを用いたブロックチェーンを実装するためのCosmos SDKがあります。
CosmosもPolkadotと同様に、ブロックチェーン間の相互運用性を実現するためのプロジェクトであり、その実現方法に相違はありつつも類似点が多く、よく比較されるプロジェクトです。
Substrateの利用方法
Substrateを用いて独自のブロックチェーンを開発・運用する場合、カスタマイズのレベルに応じて下記の3タイプの利用方法があります。
1. バンドル済のノードを利用する
Substrateで標準に提供されているノードのテンプレートを利用すると、新たなコードの記述なしにノードを起動することができます。
ブロックの生成間隔やトランザクション手数料の計算方法など、いくつかの項目はパラメタライズされており、設定ファイルを修正するだけで求めるチューニングを適用したチェーンを構築することができます。
2. SRMLを用いてRuntimeを実装する
Substrateの機能は、Substrate Coreと呼ばれるコア機能群と、SRML(Substrate Runtime Module Library)と呼ばれるライブラリ群に分けられます。このSRMLを用いて独自のRuntimeを実装することで、ブロックチェーンに独自の機能を追加できます。
3. WebAssemblyベースのRuntimeを実装する
上記のSRMLを全く利用せず、Substrateノードのインターフェースに沿ったWebAssemblyベースのRuntimeを実装することも可能です。Substrateの利用方法のなかで最も自由度が高い方法です。
チュートリアル
Substrateには、ノードの実行やRuntimeの実装を学習するためのチュートリアルがいくつか公開されています。
以下に、代表的なものを紹介します。
Creating a Custom Substrate chain
https://docs.substrate.dev/docs/creating-a-custom-substrate-chain
Polkadot Co-FounderのGavin Woodが、Web3 Summit 2018にて登壇したSubstrateのプレゼンテーションの中で、新品のMacをセットアップし30分で独自のカスタムチェーンを実装するデモをおこなったものと同じ内容を体験するチュートリアルです。
バンドル済のノードを立ち上げてウェブブラウザから動作を確認するデモと、簡単なコイントスゲームのRuntimeを実装するデモが含まれています。
Substrate Collectables Workshop
https://shawntabrizi.com/substrate-collectables-workshop/#/
CryptoKittiesをSubstrate上で実装するSubstrate Kittiesのチュートリアルです。
SubstrateのセットアップからRuntimeの基本的な構文、実践的なRuntime実装の手法、Web-UIまでをステップ・バイ・ステップで解説しています。
オリジナルは英語ですが、有志による日本語と中国語の翻訳版も利用できます。
Building a Token Curated Registry DAppChain using Substrate
https://docs.substrate.dev/docs/building-a-token-curated-registry-dappchain-using-substrate
Substrate上でより本格的なDAppを実現するために、Runtimeのテストコードや高機能なWeb-UI、オフチェーンのストレージ連携などを含んだより実践的なチュートリアルです。Token-Curated Registryと呼ばれるタイプの他人数によるキュレーションサービスの構築を題材にしています。
UTXO on Substrate
https://github.com/nczhu/utxo-workshop
Substrate上でUTXO型のコインを実装する2時間程度のワークショップで用いられるチュートリアルです。
セキュアなUTXOの実装やトランザクションプールのカスタマイズなどを学ぶことができます。
Substrate Contracts Workshop in Ink!
https://shawntabrizi.com/substrate-contracts-workshop/#/
Substrateのチュートリアルの多くはRuntime実装にRust言語を用いますが、こちらはParity Ink!と呼ばれるスマートコントラクト実装のための埋め込みDSL(eDSL)を用いたチュートリアルです。
Ink!を利用するための環境構築から基本構文、ERC20準拠トークンの実装などを体験することができます。
第2回の記事では、Substrateを用いたノード構築の手順について解説します。
参考文献:
- What is Substrate? – Parity
https://www.parity.io/what-is-substrate/ - Substrate Developer Hub
https://docs.substrate.dev/ - Substrate: The platform for blockchain innovators – Github
https://github.com/paritytech/substrate
免責事項
本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。
技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。
ブロックチェーン学習に最適の書籍の紹介
図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書
本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)
会社紹介
弊社(コンセンサス・ベイス株式会社)は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。
会社ホームページ
https://www.consensus-base.com/