Elementsノードクライアントを安価なDIYハードウェアで実行できるよう軽量化してほしいというLiquidコミュニティからの長年の要望に応えるため、今回のElements 21.1.1リリースでは、まずLiquidのブロックヘッダー処理を最適化しました。今後もノードのさらなる効率向上に継続して取り組んでまいります。
社内で実施したベンチマークスコアによると、バージョン21.1.1では、liquidv1実行時のメモリ使用量がおよそ半減しています。メモリに保存された大きなヘッダーフィールドをいくつか圧縮した結果です。これにより、ビットコインスタック(Bitcoin、Core Lightning、Liquidすべてのノード)をRaspberry Pi 8GBモデルのような端末で運用できるようになります。
Elements 22.1.1のその他の主な改善点は以下の通りです:
- getsidechaininfo RPCとtestproposedblockのヘルプメッセージを修正
- ログのメインチェーンRPCフィールドを秘匿
- Pay-to-Witness-Script-Hash (P2WSH)ペグインでRegtestネットワークを生成可能に
- ブロックがヘッダーの先をいく場合のアンダーフローを修正
また、アセット利用時に”Use Available Balance”を選択した際、選択アセットがL-BTCに切り替わる問題を含む複数の不具合をelements-qtの改修で修正しました。
リリース詳細はチェンジログからご確認いただけます。ご意見・ご要望はBuild On L2 (BOL2)コミュニティの開発者ページからお寄せください。
Elementsの最適化 (鍵はヘッダーにあり)
以下、メモリ使用量を大幅削減したElements 21.1.1の最適化について、もう少しご説明します。
ElementsはBitcoin Coreの仕様を引き継ぎ、すべてのブロックヘッダー (ブロックのメタデータ) を常時メモリ内に保存していました。Bitcoinはヘッダーが比較的小さいため、これが問題になることはありません。しかし、Elementsのヘッダーはブロック生成間隔が1分と短いこと、DynaFed、ブロック署名情報などの関係で格段に大きいです。現時点で、Liquidブロックチェーン (liquidv1) のブロック数は、Bitcoinの 3 倍に達します。
今回新たに設けたtrim_headersパラメータ (プルリクエスト #1190) により、十分なブロックタイムが経過して、ヘッダー参照の必要性が低くなったブロックについて、ヘッダー内の大きいフィールドを複数メモリから削除できるようになりました。ただし、実装には注意を要しました。イニシャル・ブロック・ダウンロード (IBD) では、通常 (Bitcoinノードや、trim_headersが無効の場合)、ヘッダーとブロックは別々にダウンロードされます。ヘッダーを先にダウンロードしておくことで、ブロックをダウンロード後速やかに検証するためです。IBDでtrim_headersモードを有効にすると、古いブロックヘッダーが削除されるため、古いブロックが検証できなくなります。かと言って、ヘッダーを削除しなければ、メモリー使用量を減らせません。そこで、私たちは、trim_headersモードを有効化すると、ヘッダーとブロックが並行してダウンロードされるようにしました。検証中のブロックよりも、はるかに前のブロックヘッダーが削除されるのを回避するためです。
このように不要なフィールドを複数削除することで、メモリを解放できました。ディスクに保存されるデータは従来通り変更はないので、trim_headersパラメータは必要に応じて設定・解除できます。
BOL2に参加して新機能をリクエスト
Elementsはフリー・オープンソース・ソフトウェアです。誰でも自由にダウンロードして、ビットコイン上にサイドチェーンを構築できます。ローンチ以降、新しいオペコードのほか、秘匿トランザクションやIssued Assetsといった新機能を追加してきました。こうしたアップデートの中には、OP_CSVやSegregated Witness (SegWit) のように、後にBitcoinに実装されたものもあります。Liquidで年内リリース予定の次世代スマートコントラクト言語Simplicityも、将来的にBitcoinに導入される可能性があります。
今後もBitcoinでの実装の可能性を見据えて、Liquidにオペコードや機能を追加してまいります。そのためにも、Bitcoinコミュニティからご意見・ご要望をいただけると幸いです。開発チームへのフィードバックや、Liquidユーザーと新しいアイデアやプロジェクトについて議論を交わす場として、ぜひBuild On L2 (BOL2)コミュニティプラットフォームをご活用ください。
本日、Liquidの開発マネージャーPablo GrecoがBOL2にてライブAMAを開催します。22.1.1リリースについての質問にも回答しますので、ぜひご参加ください。
皆様の貴重なご意見・ご質問をお待ちしております!