11月下旬にCrypto GarageがBitcoinメインネット上のライトニングチャネル内でDLCによる差金決済取引を初めて成功させました。これまでDLCはオンチェーンでDLCチャネルのようなものを開設するものでしたが、これからはライトニングチャネル内のオフチェーンで繰り返し取引できるようになっていくかもしれません。

今回はその仕組みについて説明します。

DLC (Discreet Log Contracts)とは

DLCとは第三者のオラクルが発表する結果について、取引当事者間でその結果に応じて公開される鍵によって資金を配分するトランザクションを持ち合うことでトラストレス・ノンカストディアル・プライベートにビットコイン上で差金決済取引を行うプロトコルです。ライトニングチャネルに似ており、協調的に決済された場合は存在したこと自体が観測できません。オラクルさえも取引の存在を知りません。

DLCについては過去にも解説しているので、いくつか記事を貼っておきます。

5分でわかるDiscreet Log Contracts
こんばんは。最近Discreet Log Contractsが話題に上ることが多いように思うので、どういうもので、どういう仕組みなのか、そしてどのようなものが実現できるのかを5分で理解できる記事を書いてみます。 DISCREET LOG CONTRACTSの狙い Discreet Log Contractsとは、2者間の、スケーラブルで、結果のデータを報告するオラクルに対するトラストを最小限にとどめた、プライベートなスマートコントラクトです。横文字が多いですが、オンチェーンでトラストレスに先物取引などを行うシンプルな仕組みです。 Discreet = 秘密を守るしばしば数学で登場するD…
Umbrelから聞こえるDLC普及の足音
最近のUmbrelのアップデートでインストール可能なアプリが急速に増えました。その中にKrystal Bullという、DLC (Discreet Log Contract)と呼ばれるスマートコントラクトについて結果を発表するオラクルの役割を果たせるアプリがあり、久しぶりにDLCについて考えていました。 いわゆるブロックチェーン型DefiよりP2P型Defiに興味のある自分としてはDLCが活用されるようになっていくことに期待しています。 DLCがわからない方は2020年春に書かせていただいた「5分でわかるDiscreet Log Contracts」をご覧ください。 https://www…

DLCチャネルとはライトニングチャネルのように2者間でDLCを繰り返し取引したり更新する場合などに有効な、オフチェーンでDLCを行う仕組みです。

ItchySats - Unpacking the CFD protocol | COMIT Developer Hub
import useBaseUrl from ‘@docusaurus/useBaseUrl’;

ライトニングチャネルとDLCチャネルの併用

今回成功したライトニングチャネルとDLCチャネルの併用とは直接ライトニングチャネルで繋がっている相手を取引相手としたもので、ライトニングチャネルとDLCに合わせて入金し、その後もライトニングチャネルを決済しないままDLCを変更したり決済したりできるものです。

このアプローチの利点はオフチェーンでDLCを何回でも作成・更新・決済できることやライトニングチャネルの開設とまとめて行えることによる手数料節約、そして将来的にはライトニングチャネルを持っていればその相手とDLCが行えるという利便性にあります。

今回Crypto Garageはあえて強制決済を行ってトランザクションの中身を見せてくれましたが、ライトニングチャネルやオンチェーンDLCと同様、協調的な決済だとただのマルチシグへの入金と2者への出金にしか見えません。

STEP 1: マルチシグに入金

まずは最初のトランザクション、入金するためのトランザクションです。下図のトランザクションの0番目のアウトプットが2-of-2マルチシグでロックされていますす。1番目のアウトプットはただのお釣りです。

ファンディングトランザクション。出力:ファンディングアウトプット、お釣り

STEP 2: LNチャネルとDLCチャネルに分割する

さて、通常のライトニングチャネルであればファンディングアウトプットを使ってコミットメントトランザクションを作成し、これをオフチェーンで更新していくことで多数の送金や中継を行うことができます。今回はその前にLNチャネルで使う残高とDLCチャネルで使う残高を分けるトランザクションが入ります。これをSplitトランザクションと言います。

鋭い読者はなぜここで普通にライトニングチャネルのコミットメントトランザクションの出力にDLCに入金するアウトプットを追加せずに、あらかじめ別々のトランザクションに分けるのかが気になるかもしれません。それはライトニングチャネルで支払いや中継をする際にコミットメントトランザクションを作り直すたびにDLCの全ての可能な結果についてアダプタ署名を再計算しトランザクションを再生成するのが大変だからです。
ファンディングアウトプットをLN用とDLC用に分割するSplitトランザクション

さて、簡単に考えるとこのSplitトランザクションのアウトプットをライトニングのコミットメントトランザクションとDLCチャネルの2つの入力として利用できれば良いでしょう。どちらも通常は2-of-2マルチシグから始まります。

ところがここで問題が発生します。ライトニングのコミットメントトランザクションが利用するタイムロックが複雑なため、全く同じ仕組みで強制決済できるようにDLCチャネルを実装するのが手間なのです。

ライトニングではnSequence (ブロック高)とnLockTime (時間)という2つの値を使ってコミットメントトランザクションの世代番号を管理していて、DLCチャネル側でこれと同じ仕様を再現することは技術的には可能でも実装コストが高いそうです。

そこで、ライトニングチャネルとDLCチャネルの両方を同時に同じロジックで強制決済できるようにするために、Splitトランザクションのアウトプットをそれぞれ「協調閉鎖」「Aによる強制決済」「Bによる強制決済」で支払い可能にしています。つまり、ライトニングチャネルやDLCチャネルを更新するたびにこのSplitトランザクションを作り直すことで、相手が不正な強制決済を試みた際にSplitトランザクションのアウトプットを丸ごと押収できるようにしたのです。

その代わり、ライトニングのコミットメントトランザクションやDLCの実行トランザクションとの間にもう1つずつトランザクションを挟む必要が出てきます。

STEP 3: Glueトランザクションとライトニングチャネル

先程のスプリットトランザクションのアウトプットのうち、LN側にあるものをSpendして2-of-2マルチシグに入金するのがGlueトランザクションです。そこからは通常のライトニングチャネルと同様、この2-of-2マルチシグを入力とするコミットメントトランザクションを送金や中継のたびに更新していきます。これでライトニングチャネルは完成です。

Glueトランザクション。出力がライトニングのコミットメントトランザクションの入力になる

開設当初100:0だったはずのチャネルバランスが決済時にはほぼ均等になっていることがわかります。

ライトニングチャネルのコミットメントトランザクション(オンチェーン決済)

Step 4: BufferトランザクションとDLCチャネル

DLCチャネル側ではBufferトランザクションによってDLCチャネルの働きを実現します。

DLCチャネルではオフチェーンでDLCの更新や作り変えなどが行なえます。このためにはライトニングチャネル同様、古いトランザクション(この場合はコントラクト実行トランザクションCET)を取り消す仕組みが必要になります。しかし、CET自体にこの仕組みを導入しても、取り消す順番によっては新旧両方のCETが決済できてしまうユーザーが誕生してしまい、問題となります。

そこでBufferトランザクションはSplitトランザクションのDLC側のアウトプットを使ってSplitトランザクションと同様の取り消しスキームのある出力を作ります。これによって、もし取引相手が迅速にCETの取り消しを行ってくれない場合に新しいCETへとSpendするBufferコントラクトを配信することで古いCETの配信を防ぐことができます。

以下はBufferトランザクションです。1 in 1 outのシンプルなトランザクションだとわかります。

バッファトランザクション。出力はDLC実行トランザクション (CET)

最後にBufferトランザクションを入力とするCETが配信されています。

DLC実行トランザクション (決済、資金の分配。この場合は総取り)

ここまでの全てを図にすると以下のようになります。一番左のFund Transaction以外はオフチェーンで更新されていることを考えると、よくできているなと思います。

トランザクションの全体像。https://medium.com/crypto-garage/dlc-on-lightning-cb5d191f6e64

展望

今回ライトニングチャネルとDLCチャネルの並行運用が実現しましたが、現時点では取引相手はチャネルの相手に限られ、複数のライトニングチャネルをまたいだDLCは不可能です。今後期待されるPTLCの導入か、過去に紹介したDonnerと呼ばれるライトニング上の仮想チャネルの利用が必要になります。

オンチェーントランザクションなしでLN上に仮想チャネルを構築するDonner: Virtual Channels
ここ最近はライトニングネットワーク(LN) の効率化の話を書くこと多くなっています。今日もそんな話にお付き合い下さい。 LNにおける効率とは、突き詰めれば「LN上のトランザクション総額 / かかったオンチェーントランザクション手数料」であり、これを改善する方策としてはオンチェーンでのチャネル開閉が必要になる場面を減らすことがメインです。(資金効率の話もよく出てきますが、資金が大きいほうが上記の効率が高くなりやすいため、有利かもしれません) コストのかかるチャネル開閉を減らすには、チャネルのリバランスの頻度が下がるよう運用を工夫するなどノード管理者の努力も当然されていますが、送金経路上のノー…

しかしDonnerの場合はほぼスクラッチから実装する必要が出てくるので、おそらく複数のライトニングチャネルをまたいだRouted DLCsの実現はPTLCの導入後でしょう。

HTLCの問題点を一部改善したPTLCとその応用
ライトニングネットワークの基礎となっている、ノード間の送金バケツリレーを実現するHTLC (Hashed Timelock Contract)というスマートコントラクトが存在します。現在のライトニングネットワーク(LN)に欠かせない技術ですが、その構造的な問題がいくつかかなり前より指摘されていました。その代わりとしてにわかに脚光を浴びているのがPTLC (Point Timelock Contract)です。HTLCが「ハッシュ」を使用して送金の中継を実装していたところを、PTLCでは中継ノードごとに秘密鍵を加算していくことで実装します。PTLCを使ったライトニングネットワークが実現した場合の…

ライトニングウォレットが対応するのはまだまだ先になりそうですが、ライトニングチャネルを通してDLCが取引できることは様々なユースケースにつながります。例えばライトニングチャネルの金額のヘッジ取引、ノンカストディアルな取引所や賭場の運営、RGBやTaroとの組み合わせが実現すればより多様な分散取引にもつながります。

課題としてはある程度の複雑性があるため、開発者の対応には時間がかかるかもしれないという点が挙げられます。また、DLCの利便性を鑑みて高い確率で取引に応じてくれるマーケットメイカーとのチャネル開設が進むことでライトニングネットワーク自体もそのようなノードの影響力を受けやすくなるという恐れもあります。

いずれにしてもかなり面白い実証実験だったので、DLCはこれからも注目していきたい分野の1つです。