いくつかあるライトニングノード実装のうち、Lndの次に人気のあるc-lightningにはプラグイン機能があります。あまり広く知られてはいませんが、このプラグイン機能を使ってノード自体の機能をカスタマイズすることで新しいレイヤー3プロトコルや、かゆいところに手が届く新機能を実現できます。

今日は実際に公開されているc-lightningプラグインの例や、期待できる活用方法について触れていこうと思います。

C-LIGHTNINGの立ち位置

まずはc-lightningの特徴をおさらいしましょう。Blockstreamが開発を主導するライトニングノード実装で、普通のライトニングノードとして使う分にはLNDより軽量で動作が安定しています。それでもLndが人気なのはユーザー数が多いことによるネットワーク効果(トラブル時にサポートが得られやすい)と、LNDほうが色々な機能や周辺ソフトが充実していてエンドユーザー向けという点だと考えています。

最近、ライトニングノード管理ソフトのRaspiBlitzでもc-lightningが選択できるようになったことが記憶に新しいですね。

今日取り上げるc-lightningのプラグイン機能はどちらかというとアドバンスユーザー向けの機能かもしれません。

プラグイン機能のすべて

さて、c-lightningのプラグイン機能はノードにプラグインとして機能を追加できるのですが、Umbrelのアプリストアとどう違うのかというと、「ノード外のアプリではなく、ノード自体の挙動を変えられる」点が特別なのです。

例えばすべてのライトニングノードが従うBOLTというプロトコルがあります。これには送金の手順やメッセージの扱い方などが定義されていますが、c-lightningのプラグイン機能を使うとプロトコルレベルのイベントの発生時に何か行動を起こしたり、ノード経由で実行できるコマンドを追加することができます。その他にも、ビットコインノードとの通信がプラグインで行われているので、好きなようにブロックチェーンデータを取得するプラグインも作れます!

多様な使い方を実現するために、イベント発生時にプラグインに通知できるNotification機能と、通知するだけでなく対応自体を定義できるHooks機能が王位されています。

使い方① 便利な追加機能

公開されているc-lightningプラグインには便利そうなものがいくつかあります。例えばcsvexportpaysというプラグインは、これまでに行った送金の一覧をCSV形式で出力するコマンドを実装します。また、webhookというプラグインは送金を受け取った際に指定したURLにリクエストを飛ばすことができ、Webアプリケーションの開発に役立ちそうです。

他にも複数のノードを一元管理するのに役立つプラグインや、モニタリングシステムにデータを書き込むプラグインなど、カストディアルウォレットや事業者などのヘビーユーザーが助かる機能が公開されています。

ブロックチェーンの情報をビットコインノードではなくブロックチェーンエクスプローラーから取ってくるという、開発時などに環境をすべて整える必要がなくなって便利なものもあります。

使い方② プロトコルの実験

プラグイン機能のさらに発展させた使い方として、ノード自体の実装に触れずにプロトコルの変更を実験するというものがあります。

特にHooks機能はノードで特定のイベントが発生した際にノードで処理せず、プラグインに実装した処理を動かすことができるので、独自のプラグインを導入したノード同士で独自のプロトコルを試すこともできます。

例えばImpervious APIを使ったレイヤー3・ノード電話が話題になりましたが、ノード間で送られるcustommsgの解釈と動作をプラグインに定義することによって同じようなものをc-lightningのプラグインとして実装することも可能だと思われます。Statechainsなど他の形態のレイヤー2のメッセージ層としても利用できるかもしれません。

また、HistorianというプラグインはLN上を流れるゴシップメッセージをすべてログに残すことで後から分析できるようにします。これはネットワークの状態を分析するいろんな用途に使えるデータかもしれません。(特にチャネルのバランスをゴシップで公表するノードが出てきたら価値が高まるデータですね。)

これらの機能をフル活用できれば、例えばHTLCなしでチャネルの管理をトラストフルにできるなどの大きな機能拡張もできるのではないかと考えています。しかし、これほどの変更は現在提供されているHooksだけでは無理そうだったので、必要なものを追加で実装してもらうようお願いするか、自分で追加する必要がありそうです。

まとめ

エンドユーザー向けのLNDに対してヘビーユーザー向けというポジショニングのライトニングノード実装・c-lightningのプラグイン機能は、特別なニーズのあるノード管理者が専用のプラグインでノードを拡張したり、開発者・研究者がプロトコルへの変更を実験したりレイヤー3プロトコルを実装するのに役立つ機能です。

プラグイン機能はヘビーユーザーのニーズを満たすだけでなく、ライトニングノード間の通信を利用してトランザクションを用意するレイヤー2・レイヤー3プロトコルの基礎、あるいはそれらが生まれる実験場としてワクワクさせてくれるc-lightningの特徴でした。