何の話?
ビットコインは単位時間当たりに処理できるトランザクション数が少ないという問題を抱えています。このスケーラビリティ問題を解決するために、ブロックチェーンの外でトランザクションを管理するマイクロペイメントチャネルがいくつか提案されています。今回はこれらの提案手法をざっくりと整理します。
過去のトランザクションの無効化
マイクロペイメントチャネルでは、過去のトランザクションを無効化し、最新のトランザクションのみを有効にする必要があります。例として、Alice と Bob で資金のやり取りを考えます。複数回取引を行い、以下のように資金移動が発生しました。
初期状態
1. Alice : 1BTC, Bob : 1BTC
Alice -> Bob へ 0.5BTC 送金
2. Alice : 0.5BTC, Bob : 1.5BTC
Bob -> Alice へ 1BTC 送金
3. Alice : 1.5BTC, Bob : 0.5 BTC
ここで取引が終了しました。3番目のトランザクションをブロックチェーンにブロードキャストすることが求められます。しかし、Bob が不正に 2番目のトランザクションをブロードキャストすることで、Bob は Alice から 1BTC 奪うことが出来ます。
これを防ぐため、取引の更新の度に過去のトランザクションを無効化することが必要です。
様々な無効化手法
以下を満たす手法を実現できれば、最新のトランザクションのみが有効になり、安全にマイクロペイメントチャネルが実装できそうです。
- 過去のトランザクションをブロードキャストしても、ブロックチェーンに(直ぐに)取り込まれなければよい。
- 罰則を使用し、過去のトランザクションを不正にブロードキャストする動機を無くせばよい。
- 信頼できる第三者を設定し、トランザクションを管理を任せればよい。
これら 3 つの考え方に基づいたマイクロペイメントチャネルの論文を紹介します。
1について
locktime を用いて実装します。トランザクションの更新時に、前のトランザクションより短い locktime を設定します。過去のトランザクションを不正にブロードキャストしても、最新のトランザクションの方が locktime が短いので先にブロックチェーンに取り込まれます。
2者間の資金移動
A Fast and Scalable Payment Network with Bitcoin Duplex Micropayment Channels
2者間のチャネルを拡張し、複数人での資金移動 channel factory のことです。
Scalable funding of Bitcoin micropayment channel networks
2について
過去のトランザクションを不正にブロードキャストした場合、不正を行ったパーティの資金が相手に奪われるような実装を行います。具体的にはトランザクションの更新時に、前のトランザクションの秘密鍵(or それに類する secret)を相手に公開します。過去のトランザクションの秘密鍵が相手に公開され資金が奪われるので、過去のトランザクションをブロードキャストする動機がありません。Lightning Network の実装はこれです。
The Bitcoin Lightning Network:Scalable Off-Chain Instant Payments
前半部分で2者間の資金移動について、後半部分で複数人での資金移動を行う Lightning Network の説明を行っています。
上の論文の改善案 秘密鍵を公開するのではなく、それに類する secret を設定
https://github.com/ElementsProject/lightning/blob/master/doc/deployable-lightning.pdf
3について
信頼できる実行環境であるTEEを、信頼できる第三者に見立てています。TEE を第三者に見立てているだけなので、実際に第三者は必要とせず Alice と Bob のみでチャネルの構築が可能です。Intel SGX (が提供する enclave) を TEE として使用しています。
2者間の資金移動
Teechan: Payment Channels Using Trusted Execution Environments
2者間のチャネルを拡張し、複数人での資金移動
Teechain: Scalable Blockchain Payments using Trusted Execution Environments
補足
以下の論文で 1 と 2 の手法を簡潔にまとめています。
Towards Bitcoin Payment Networks
Lightning Network のプロトコルを改良した eltoo も面白いです
eltoo: A Simple Layer2 Protocol for Bitcoin
しかし SIGHASH_NOINPUT が必要なので現状 Bitcoin に適用できません