KILTにおけるParachain RuntimeとSDKの分割
KusamaとPolkadotエコシステムがパラチェーンオークションの開始を待ち望んでいる一方で、私たちKILTプロトコルは、最初のKusamaパラチェーンスロットの1つを確保し、メインネットをローンチする準備をしています。本日、開発の次の段階として、KILTのマッシュネットノード0.24.0とSDK 0.20.0のリリースを発表します。
マッシュネット・ノードは、パラチェーン用の2つ目のランタイムと、Substrateの最新バージョン(3.0.0)を使用してRococo上で動作するように複数のアップデートが行われました。また、SDKは多面的に改良され、いくつかの独立したパッケージに分割して再構築されました。
今回のSubstrateブロックチェーンのアップデートは、公式のRococoパラチーインテストネットとの同期が必要でした。Rococoは何度もリブートされており、常にSubstrateとCumulusの最先端であることが求められています。
それとは別に、KILTの3つのパレットの読みやすさと構造を大幅に改善しました。Attestations、Delegation、DIDです。一方では、オンチェーンのデータタイプを個別の構造体にリファクタリングしました。また、カスタムエラーパレットをSubstrateエラーに置き換え、チェックの順番を改善しました。
さらに、全てのエクストリンシックにベンチマーキングを追加しました。このプロセスの中で、AttestationとDelegationの取り消しに2つの制限を導入する必要がありました。取り消したいデリゲートの所有者と一致するまで、トランザクションが親となるデリゲートを再帰的にチェックすることを可能にする上限設定が必要となります。デリゲートを取り消すと自動的にその子の全てが再帰的に取り消されるので、子の数についてもそのような制限を設定しなければなりません。トランザクション手数料やウェイトを正しく計算するためには、これらの制限が必要となります。
SDK: 分割
yarn v2 berryに切り替えた後、サポートされているワークスペースを利用して、SDKを複数のパッケージに分割することにしました(少なくともいくつかのパッケージは互いに独立しています)。これにより、ビルダーはSDKの上でビルドしたいときに、SDKから必要なパッケージを正確に選ぶことができ、SDK全体を必要とすることによるオーバーヘッド(バンドルサイズ、必要な依存関係など)を減らすことができます。さらに、各パッケージを個別にバージョン管理することも可能です。
SDK: トランザクションの改善
例えば、次のトランザクションを呼び出す前に1つのトランザクションの終了を待つ必要はありません。これは、可能であればクライアント側で次のナンスをカウントアップし、チェーンから返されたエラーが回復可能であれば、トランザクションを再署名する事によって実現しています。
さらに、全てのトランザクションを明示的にしました。以前はアテステーションやCTypeの保存、取り消し、転送を行う際に、暗黙的に署名付きトランザクションを送信していましたが、現在はSubmittableExtrinsicを生成するようになっています。これに署名して送信すると、ブロックチェーン上でトランザクションが実行されます。
SDK: Config Serviceの追加とチェーン接続の改善
新しいConfig Serviceを導入し、接続先のノードアドレスの設定やログレベルの設定が可能になりました。将来的には、新しい設定を導入するたびにサービスを拡張していく予定です。
その結果、接続関数 Kilt.connect() にアドレスのパラメータを指定する必要がなくなりました (指定することもできません)。代替として設定されたアドレスが自動的に使用されます。
SDK: デフォルトのIDキー・ペア・タイプとしてsr25519を使用
前回のリリースではsr25519とECDSA署名のサポートを追加しましたが、今回はデフォルトの ID キー・ペア・タイプをed25519からsr25519に変更しました。これは主にPolkadotの方向性に従ったものです。もう一つの動機は、polkadot.jsのアプリやpolkadot.jsのブラウザ拡張でsr25519ベースのアカウントを作るのが飛躍的に簡易化される為です。identity builderにオプションとして追加することで、ed25519にも対応しています。
sr25519はpolkadot.jsのcrypto関数に依存しており、その関数自体が同梱のWASMライブラリに依存しているため、cryptoライブラリの準備が整うのを待つ必要があります。そこで、初期化関数KILT.init({…})にこの待ち時間を追加しました。この関数は、KILT.configの設定機能と、cryptoライブラリの準備が整うまでの非同期の待ち時間を組み合わせたものです。
SDK: メッセージの(非)圧縮機能の追加
更なる機能として、メッセージの圧縮・解凍が可能になりました。メッセージは、Claimer、Attester、Verifier間のコミュニケーションに使用される為、縮小可能であることが重要となっています。
SDK: JSON-LDベースのハッシュアルゴリズムへの切り替え
VC-Exportパッケージの作成中に、ラベル順を変えても同じルートハッシュになるという潜在的なバグが見つかりました。この問題は、JSON-LDベースのプロパティ・ハッシュ・アルゴリズムに切り替えることで解決しました。
SDK: portablegabiの削除
最後に、前回のリリースで導入した実験的な匿名クレデンシャル機能 “portablegabi “を削除することにしました。主な理由は、portablegabiライブラリがGo-Wasmのバイナリで暗号を処理しており、コールバックを介して非同期にしか呼び出せないためです。その結果、IDのインスタンス化や他のプロトコル関数も非同期にする必要が生じました。さらに、このGo-Wasmバイナリは、React NativeなどのアプリケーションでSDKを使用する際にも問題を引き起こしました。
これは私たちだけでなく、KILT上に構築している他のチームにとっても残念な事でした。私たちは既に代替ソリューションを調査しており、匿名のクレデンシャルソリューションを組み込みについては、引き続きの情報をお待ちください。一方で、これは主要機能ではありませんので、ローンチには影響しません。現状、私たちの焦点は安全なコードと使いやすいSDKを備えたKILTチェーンをローンチする事です。
Outlook
- 全ドキュメントを一箇所にまとめる事による利便性の改善 https://dev.kilt.io
- チェーンローンチのためのリリース候補の準備
- マッシュネット・ノードとSDKのセキュリティ監査を実施
- マッシュネット・ノード ガバナンスとステーキングの追加
- SDK KILTのDIDとVCの使用と遵守の改善
TLDR;
Mashnet-nodeのアップデートSubstrate2.0.0-rc5 to 3.0.0 (リリースノート)
- 独立したparachainランタイムを追加
- 適切なベンチマーキングの追加
- デリゲーションの再帰性チェックの改善
- ノード実行方法を簡素化
- ドキュメントの整理、更新、改善