
写真
前回の記事では、支払いチャネルの仕組みと、支払いを安全に行うためのさまざまな方法について詳しく説明しました。ただし、これらの機能は、使用可能な支払いチャネル ネットワークをサポートするには十分ではありません。各チャネルの参加者全員が正直で信頼できると確信したとしても、複数のチャネルを介した支払いも安全であるという保証はありません。だからこそ「HTLC(Hash-Time Lock-Contract)」スマートコントラクトが必要なのです。この記事では、HTLC がどのように機能するかを説明し、例を使用してライトニング ネットワークでマルチホップ支払いがどのように実装されるかを示します。
ハッシュ タイム ロック コントラクト (HTLC)
HTLC の構造は複雑ではありませんが、非常に効率的です。これにより、明示的な「有効期限」を指定した支払いを作成できるようになります。ご想像のとおり、HTLC コントラクトは、ハッシュ検証と有効期限検証の 2 つの部分で構成されています。
H = Hash(R)
まずはハッシュ値(ハッシュ)から見ていきましょう。 HTLC で支払いトランザクションを作成するには、まずシークレット値 R を生成し、次にそのハッシュ値を計算します。ハッシュ関数にとって、それらはすべて一連のデータの組み合わせであり、違いがないため、任意の単語、任意の数値がこの秘密の値として機能します。
このハッシュ値 H は、トランザクション出力のロック スクリプトに配置されます。このようにして、H に対応する秘密の値を知っている人だけがこの出力を使用できます。そして、R はいわゆる「プリイメージ」です。
HTLC の 2 番目の部分は、有効期限の検証です。秘密の価値が時間内に開示されなかった場合、支払いは使用されず、送信者は全額を取り戻すことになります。
# トランザクションの元の送信者が資金の返還を要求しているかどうかを確認します
誰かに対する HLTC 支払いトランザクションを考えてみましょう。
HASH160
EQUAL IF
# 指定された R が H のプリイメージであるかどうかを確認します
CHECKSIG ELSE
# R を開示した人がトランザクションの元の受信者であるかどうかを確認する
CHECKLOCKTIMEVERIFY # タイムロックが期限切れかどうかを確認する
CHECKSIG ENDIF
正しい R (ハッシュ値 H の元画像) が公開された後、IF プロセスに入り、R を提供した人物が支払い取引の開始時に支払い対象であるかどうかをさらに検証します。この出力を使用する場合、受信者は非常に単純なロック解除スクリプトを提供するだけです。
ロック解除スクリプトによって提供された R が間違っている場合、ELSE プロセスにジャンプし、最初にタイム ロックがロック解除されているかどうかを確認します。タイムロックが解除されている場合、送信者はすべての資金を回収できます。資金を引き出すためのロック解除スクリプトは似ていますが、唯一の違いは、ELSE プロセスに入るには、間違ったシークレット値を指定する必要があることです。
もちろん、これは HTLC の非常に基本的な実装にすぎず、通常の時間ロックされた支払いを表します。スクリプトには他の条件をいくつでも追加できます。たとえば、IF プロセスで公開キーの検証を削除して、シークレット値 R を知っている人なら誰でもこの出力を使用できるようにしたり、複数署名の制限を追加して、複数のプリセット秘密鍵の署名のロックを解除できます。CHECKLOCKTIMEVERIFY余談ですが、この場合に使用するオペコードは次のとおりです。CHECKSEQUENCEVERIFY、このオペコードは絶対値を使用してタイムロックを定義します。これは、「この出力はブロック #546212 までタップできません」のような意味になります。ライトニングネットワークでは、より「柔軟な」別のタイムロックが使用されます。
これは相対値を使用し、次のような意味を持ちます。「この出力は、それを使用するトランザクションがオンチェーンになった後、1000 ブロックの間使用できません」利用される)。
ライトニングネットワークの事例
写真
画像の説明
写真
画像の説明
- ライトニングネットワークにおける支払いルーティングの段階的な内訳 -
エリックは秘密の値 R を生成し、そのハッシュをアリスに送信します (彼は R を他の人に明らかにしません)
アリスはこのハッシュ値を使用して HTLC を作成し、タイム ロックは次の 10 ブロックに設定され、出力量は 1.003 btc になります。この追加の 0.003 btc は、支払いチャネル チェーンの中間者に対する手数料です。したがって、アリスは HTLC で 1.003 btc をロックし、HTCL の特定の条件は次のように平易に表現されます: 「アリスはボブに 10 ブロック以内に秘密の値 R を渡すことができる限り 1.003 btc を支払います。そうでない場合はお金を支払います」アリスに返されます。」このコミットメント トランザクションにより、両者間のチャネルのバランスも変化します。現在、ボブはチャネルに 2 ビット、アリスは 0.997 ビット、1.003 ビットは HTLC にロックされています。
ボブがここに来ると、アリスのコミットメント トランザクションを自由に破棄できます (この HTLC トランザクションは両者間のチャネルを通じて送信されます)。彼は自分とキャロルの間のチャネルに HTLC 出力を作成します。量は 1.002、タイム ロックは 9 ブロックに設定され、アリスによって提供されたハッシュ値が使用されます。ボブは、キャロルがお金を手に入れたい場合、この HTLC のロックを解除するために秘密の値 R を見つけなければならないことを知っています。キャロルが見つけたら、彼はこの R を知ることになるため、アリスの HTLC のロックを解除して 1.003 btc を取得することもできます。キャロルがこの秘密の値 R を見つけられなかった場合、タイム ロックが解除された後、ボブとアリスの両方がお金を取り戻すことができます。ボブが送金した資金の額は、彼が請求した手数料の額である、彼が受け取ることができた額よりも 0.001 ビット少ないことに注意してください。チャネル内のボブとキャロルの残高は次のようになります。キャロルは 2btc を所有し、ボブは 0.998 btc を所有し、1.002 btc が HTLC にロックされます。
キャロルはボブから送信されたコミットメント トランザクションを取得した後、同様の操作を行い、ボブが提供したのと同じハッシュ値を使用してダイアナとのチャネルに HTLC を作成し、タイム ロックを 8 ブロックに設定し、その量は 1.001 btc でした。ダイアナが 8 ブロック以内に秘密の値 R を明らかにできれば、HTLC のロックを解除して 1.001 btc を獲得できます。同様に、キャロルも秘密の値を知り、ボブから渡された HTLC のロックを解除して 1.002 btc を獲得し、0.001 btc を獲得します。キャロルとダイアナのチャネルの残高は次のようになります。ダイアナは 2btc を所有し、キャロルは 0.999 btc を所有し、1.001 btc が HTLC にロックされます。
最後に、ダイアナがチャネル経由で HTLC (ロックと同じハッシュ値を使用) をエリックに送信するとき、値を 1 btc に、タイム ロックを 7 ブロックに設定します。 Diana と Eric のチャネル バランスは次のようになります。Eric は 2btc を所有し、Diana は 1 btc を所有し、1 btc は HTLC にロックされます。
さて、私たちはこの一連の支払いの終わりに来ました。 Eric はこのシークレット値 R を所有しており、この R のハッシュ値はすべての HTLC コミットメント トランザクションで使用されます。エリックはダイアナから送られた HTLC のロックを解除して 1 btc を取得でき、エリックが資金を取り戻した後、ダイアナもこの R を知ることになります。ダイアナとエリックの間のチャネルバランスは次のようになります: エリックは 3 btc を所有し、ダイアナは 1 btc を所有します。
ダイアナはシークレットを受け取った後、キャロルから送られた HTLC のロックを解除するためにもそれを使用し、1.001 btc を取得してシークレットの値をキャロルに開示しました。彼らのチャンネルの残高は次のようになります: Diana は 3.001 btc、Carol は 0.999 btc です。
キャロルがシークレット値 R を受け取った後、ボブから送信された 1.001 btc のロックを解除したため、ボブもシークレット値を知っていました。彼らのチャンネルの残高は次のようになります。キャロルは 3.002 ビット、ボブは 0.998 ビットです。
最終的に、ボブは秘密値 R を使用して、アリスとのチャネルで 1.003 btc を取得します。したがって、チャネル内の残高は次のようになります。ボブは 3.003 btc を所有し、アリスは 0.997 btc を所有します。
このようなプロセスの後、アリスは、両者の間に別の直接接続チャネルを開くことなく、エリックに 1 btc を支払いました。決済チェーン全体において、誰も他人を信頼する必要はなく、仲介サービスのおかげで 0.001 btc も得られます。たとえある時点で支払いが滞ったとしても、資金はまだそこにロックされており、時間が経てば取り戻すことができるため、誰も損失を被ることはありません。
明らかな障害
この例では、プロセス全体がスムーズで妨げられることはありませんが、実際の生活では、いわゆる「マーフィーの法則」のようなものです。何か悪いことが起こる可能性がある場合、この悪いことも起こります。したがって、ライトニングネットワークの「保護」メカニズムを考慮する必要があります。
実際的な観点から見ると、支払いチェーンが長くなるほど、資金が最終的に配信されない可能性が高くなります。参加者の一部がチャネルを閉じたり、一部のノードがオフラインになったりする可能性があります。考えられる 2 つのエラー シナリオを考えてみましょう。
写真
画像の説明
- チャネルが閉鎖されているため、資金を配信できません -
ダイアナは秘密の価値を受け取ると、すぐに資金を引き出し、その秘密の価値をキャロルに明らかにします。キャロルはまた、ボブが送信した HTLC から資金を取り戻したいと考えていますが、ボブは応答しません。リスクを回避するために、キャロルはチャネルを閉じ、自分の手にある最後にコミットされたトランザクション (つまり、ボブが送信した HTCL 出力) を送信します。彼女は秘密の価値を知っているので、資金を取り戻すことができます。この時点で、ボブはアリスからお金を取り戻すまでにまだ 3 日の猶予があります (キャロルのトランザクションはオンチェーンで行われているため、ボブは R の値を簡単に知ることができます)。それ以外の場合、アリスはタイムロックが解除されるとすぐに資金を引き出すことができます。
参加者が何らかの理由でネットワークから離れたとしても、資金を失う可能性があるのは TA 自身だけであり、他の全員の資金は安全であることがわかります。
ルート変更
写真
画像の説明
写真
画像の説明
- 別のパスを使用する場合のアリス -
写真
画像の説明
- アリスは古い支払いを「キャンセル」し、新しい支払いは安全に送金できるようになりました -
支払金額
また、アリスが最初の支払いを「キャンセル」したとき、安全に新しい支払いを開始できることに気づいたかもしれませんが、これは最初の支払いの資金がまだロックされているという事実には変わりなく、アリスには十分なお金がない可能性があります。 2 回目の支払いを開始します。ライトニングネットワークを使用する場合、HTLC で支払うときの資金量が少なくなるのはこのためです。コミットメントトランザクションは連鎖しないため、金額を複数の小さな金額に分割できます。このようにして、パスに障害が発生するたびに、資金のごく一部 (つまり、最後に送信された資金) のみが凍結されます。
転送プロトコル
ライトニング ネットワークのもう 1 つの非常に重要な特徴は、このパスに関するすべての情報が完全に匿名であることです。つまり、どの参加者にとっても、TA は自分に関係する部分しか知らないということになりますが、例えばキャロルにとって、その支払いはボブがダイアナに送金するようなもので、彼女はボブがアリスから送金することを知りません。そして、ダイアナがエリックに資金を送金し続けるかどうかは不明です。
Lightning Network は Sphinx 多重暗号化プロトコルを使用します。 Lightning Network を使用する場合、Alice は支払いパスの最後から始めて、ネットワークのあらゆる部分に暗号化層を適用します。彼女は、エリックの公開鍵を使用して、エリックへのメッセージを暗号化します。この暗号化されたメッセージはダイアナへのメッセージに埋め込まれ、メッセージ全体がダイアナの公開鍵で再度暗号化されます。次に、ダイアナへのメッセージがキャロルへのメッセージにネストされ、メッセージ全体がキャロルの公開キーで再度暗号化されます。これを何度も繰り返して、次の人に引き継げるニュースを入手します。このようにして、ボブはメッセージの最外層のみを復号化し、自分宛てのコンテンツを取得し、そのメッセージをキャロルに転送することができます。キャロルも同じことを行います。通過者ごとに、支払った金額、手数料の金額、タイムロックの内容など、絶対に必要な情報のみが開示されます。
メッセージの長さからチェーンの長さを推測しないように、メッセージの長さは常に同じであり、あたかも 20 人がチェーンに参加しているかのようになります。最後の人を含む全員が同じサイズの画像を取得し、自分以外に 20 人がいると考えます。
ライトニングネットワークのメリットと応用シナリオ
もちろん、ライトニング ネットワークの利点は、多くの人が考えているような拡張性だけではありません。ライトニングネットワークがもたらす可能性について考えてみましょう。
インスタントトランザクション。ライトニング ネットワークを使用すると、トランザクションはほぼ瞬時に行われます。ビットコインでコーヒーを買うことが可能になる
為替裁定取引。現在、ある取引所から別の取引所に資金を送金するには、取引が確認されるまで 3 ~ 6 ブロック待つ必要があり、不便です。取引所がライトニングネットワークを使用できる場合、ユーザーは即座に資金を送金し、裁定取引に参加できます。また、取引所は資金を保管するためにコールドウォレットを必要としなくなり、盗難のリスクが大幅に軽減されます。
少額の支払い。ビットコインブロックチェーンの手数料は少額の支払いには高すぎます。同額またはそれ以下の金額を送金するためだけに 0.001 btc を支払う人がいるとは想像しにくいです。ライトニング ネットワークを使用すると、任意の金額を即座に送金できます。たとえば、ネットワーク料金を MB 単位で支払うことができます。
金融スマートコントラクトとトランザクション。金融契約はレイテンシーに非常に敏感であり、多くの場合、多くの計算が必要になります。負担の大部分をブロックチェーンから取り除くことにより、ブロックチェーンにすべてを記録することなく、非常に複雑なトランザクションや契約を作成する機会が得られます。
プライバシー。ライトニングネットワークでは、支払いチェーンの参加者がトランザクションの発信元と宛先を知らないため、トランザクションはビットコインブロックチェーンよりもプライベートです。
結論は
(以上)
リンク
Lightning network in depth, part 1: Payment channels
“Mastering bitcoin” — Andreas M. Antonopoulos
Lightning network whitepaper
Segregated witness for dummies
(以上)
元のリンク:
https://medium.com/softblocks/lightning-network-in-depth-part-2-htlc-and-payment-routing-db46aea445a8
著者: マゴメド・アリエフ
翻訳: ア・ジアン