新しいオフチェーンコントラクト eltoo と
SIGHASH_NOINPUT
1
Off-chain Scaling
Payment Channel
資金をブロックチェーン上に固定し、固定した金額を上限として、トラストレスに
オフチェーンで決済を繰り返すためのプロトコル。
Block Block Block Block Block Block
Funding Tx(on-chain)
Inputs
アリスの1BTC
ボブの1BTC
Outputs
アリスとボブのマルチシグに 2 BTC
Commitment Tx(off-chain)
Outputs
アリスに1.1BTC
ボブに0.9 BTC
Inputs
アリスとボブのマルチシグ 2 BTC
オンチェーン上にマルチシグで
ロックされたコインをインプットにし、
アウトプットには決済時のそれぞれの
残高を反映したトランザクションを作っ
て決済する。
新しい決済をする場合はアウトプット
の残高を更新した同様のトランザク
ションを作る。
2
Payment Channelのセットアップ
① アリスとボブはPayment Channelをセットアップするため
チャネル決済に使用するコインをブロックチェーン上に
ロックするFunding Txを作成する。
Funding Tx
Inputs
アリスの1BTC
ボブの1BTC
Outputs
アリスとボブのマルチシグに 2 BTC
この時点で、Funding Txは未署名で
当然ブロードキャストはできない。
3
Payment Channelのセットアップ
② アリスとボブはそれぞれ秘密の値(Secret)とその値のハッシュを生成する。
 このうちハッシュだけ相手に伝える。
Secret A1 H(A1) Secret B1H(B1)
交換
アリスが作るCommitment Tx1
Outputs
アリスの鍵で入手可能な 1BTC
残り1 BTCは以下のいずれかで入手可能
●このTxがブロックに入って 1,000ブロック経過した
らボブの鍵で入手可能。
●Secret B1が分かればアリスの鍵で入手可能。
③ アリスとボブは相手から受け取ったハッシュを使ってFunding Txの
アウトプットをインプットにしたCommitment Txをそれぞれ作り、自分の署名を
付与して相手に送る。
ボブが作るCommitment Tx1
Outputs
ボブの鍵で入手可能な 1BTC
残り1 BTCは以下のいずれかで入手可能
●このTxがブロックに入って 1,000ブロック経過し
たらアリスの鍵で入手可能。
●Secret A1が分かればボブの鍵で入手可能。
交換
4
Payment Channelのセットアップ
アリスが作ったCommitment Tx1
Outputs
アリスの鍵で入手可能な 1BTC
残り1 BTCは以下のいずれかで入手可能
●このTxがブロックに入って 1,000ブロック経過した
らボブの鍵で入手可能。
●Secret B1が分かればアリスの鍵で入手可能。
ボブが作ったCommitment Tx1
Outputs
ボブの鍵で入手可能な 1BTC
残り1 BTCは以下のいずれかで入手可能
●このTxがブロックに入って 1,000ブロック経過し
たらアリスの鍵で入手可能。
●Secret A1が分かればボブの鍵で入手可能。
この時点でお互いに相手が作成し相手の署名が付与されたCommitment Txを持って
いる状態になる。このTxに自分の署名を加えればTxは完成する。
このTxがブロードキャストされると、ブロードキャストしたユーザーは1,000ブロック待てば
コインを入手でき、相手はすぐにコインを入手できる。
④ 最初のCommitment Txの交換が終わったら①で作成したFunding Txに署名して
ネットワークにブロードキャストしてチャネルをオープンする。
相手の署名済みのTxを両者
持つので、これでFunding Txを
ブロードキャストした後に、
相手がいなくなってマルチシグに
ロックした資金が取り戻せないと
いった事態はなくなる。
5
オフチェーン決済
オフチェーン決済は新しいシークレットの作成・交換し、決済の結果で残高を
更新したCommitment Txを作り自分の署名を加え相手に送る。
アリスが作るCommitment Tx2
Outputs
アリスの鍵で入手可能な 1.1BTC
残り0.9BTCは以下のいずれかで入手可能
●このTxがブロックに入って 1,000ブロック経過した
らボブの鍵で入手可能。
●Secret B2が分かればアリスの鍵で入手可能。
Secret A2 H(A2) Secret B2H(B2)
交換
ボブが作るCommitment Tx2
Outputs
ボブの鍵で入手可能な 0.9BTC
残り1.1 BTCは以下のいずれかで入手可能
●このTxがブロックに入って 1,000ブロック経過し
たらアリスの鍵で入手可能。
●Secret A2が分かればボブの鍵で入手可能。
交換
Secret A1 Secret B1
交換
セットアップ時と違うのは前のCommitment Txを作る際に
生成した秘密の値を相手に明らかにする点
6
不正を働いた場合のペナルティ
アリスが作ったCommitment Tx1
Outputs
アリスの鍵で入手可能な 1BTC
残り1 BTCは以下のいずれかで入手可能
●このTxがブロックに入って 1,000ブロック経過した
らボブの鍵で入手可能。
●Secret B1が分かればアリスの鍵で入手可能。
ボブが自分に有利な古いCommitment Tx1をブロードキャストするとどうなるか?
ボブは、Commitment Tx1がブロックに格納されて1,000ブロック経過するまで1BTCは入
手できない。ボブが1000ブロック待っている間にアリスは、もともとアリス宛の1BTCは普通
に入手でき、さらにSecret B2をこの段階では知っているので残りの1BTCも入手することが
できる。つまり裏切って古いTxをブロードキャストすると相手に全資金が渡る。
※ 但し、古いCommitment Txがブロードキャストされていないかチェーンの監視が必要。
アリスが作ったCommitment Tx2
Outputs
アリスの鍵で入手可能な 1.1BTC
残り0.9 BTCは以下のいずれかで入手可能
●このTxがブロックに入って 1,000ブロック経過した
らボブの鍵で入手可能。
●Secret B2が分かればアリスの鍵で入手可能。
Commitment Tx2のオフチェーン決
済が終わったとして、この段階でボ
ブはCommitment Tx1をブロード
キャストした方が自分の残高が多く
特をする。
7
eltoo: A Simple Layer2 Protocol for Bitcoin
2018年4月にChristian Decker、Rusty
Russell、Olaoluwa Osuntokunらによって
発表された新しいオフチェーンプロトコル。
https://blockstream.com/eltoo.pdf
古い状態をブロードキャストした際の
振る舞いが変わる
● 不正を働いたユーザーの資金の没収
● 最新の残高の反映
8
eltoo: Payment Channelのセットアップ
セトルメント用公開鍵As
アップデート用公開鍵Au
セトルメント用公開鍵Bs
アップデート用公開鍵Bu
① チャネルを開く前に各参加者はアップデート用とセトルメント用の
 2つの鍵ペアを生成し、各公開鍵を相手と交換する。
● アップデート鍵ペア(Au, Bu)
チャネルの状態を更新する(新しい支払いをする)際に使用する鍵
● セトルメント鍵ペア(As, Bs)
チャネルを最終残高で閉じる際に使用する鍵
※ eltooでは、チャネルの最新状態を表したTxさえ保持しておけば、古い状態
がブロードキャストされても、そのトランザクションを最新状態を表すTxに置換す
ることができる。
9
eltoo: Payment Channelのセットアップ
② アリスの資金を2-of-2のマルチシグにロックする Funding Txを作成。
Funding Tx
Inputs
アリスの5 BTC
Outputs
アリスとボブのマルチシグに 5 BTC
Trigger Tx
Inputs
Funding TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As1とBs1のマルチシグで入手可能
● AuとBuのマルチシグで入手可能
Settlement Tx1
Inputs
Trigger TxのUTXO
Outputs
アリスのアドレスに 5 BTC
③ Funding TxのUTXOをインプットに
 したTrigger Txを作成。
④ Trigger TxのUTXOをインプットとしたSettlement Tx1を作成。
セットアップフェーズでは払い戻し用として機能し、アウトプットは
5 BTCがそのままアリスのアドレスへ。
※Settlement Tx1はTrigger Txがブロックに格納されてから1000ブロック後にブロードキャスト可能。
sig
Bu
sig
Bs1
LNのコントラクトはCommitment Tx
1つでお互いの残高を管理していたが、
eltooではTrigger Tx(Update Tx)と
Settlement Txの2つでチャネルの
残高を管理する
sig
Au
⑤ アリスはFunding Txに
 署名しブロードキャストする。
sig
Alice
sig
As1
10
eltoo: オフチェーン決済 1回目
① アリス→ボブに1 BTC支払うため、Trigger Txをインプットとして新しい Update Tx2を作成。
Update Tx2
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As2とBs2のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが3以上で、
 AuとBuのマルチシグで入手可能
Settlement Tx2
Inputs
Update Tx2のUTXO
Outputs
アリスのアドレスに 4 BTC
ボブのアドレスに 1 BTC
※ Update TxのnLocktimeには状態を表すState Numberをセットする。
アウトプットの条件の1つには、その<State Number + 1> がOP_CLTVの引数としてセットされる=
このUTXOを使用するTxのnLocktimeは3以上であることが条件。
sig
Bs2
Trigger Tx
Inputs
Funding TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As1とBs1のマルチシグで入手可能
● AuとBuのマルチシグで入手可能
sig
Bu
nLocktime
State Number: 2
sig
Au
sig
Bu
② Update Tx2のUTXOを
インプットとして、アウトプットに
残高を反映したSettlement Tx
を作成する。
sig
Au
sig
As2
※ eltooではお互いに同じTx
(Update TxとSettlement Tx)を管理する
11
eltoo: オフチェーン決済 2回目
① ボブ→アリスに0.5 BTC支払うため、Trigger Txをインプットとして新しい Update Tx3を作成。
Update Tx3
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As3とBs3のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが4以上で、
 AuとBuのマルチシグで入手可能
Settlement Tx3
Inputs
Update Tx3のUTXO
Outputs
アリスのアドレスに 4.5 BTC
ボブのアドレスに 0.5 BTC
sig
Bs3
Trigger Tx
Inputs
Funding TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As1とBs1のマルチシグで入手可能
● AuとBuのマルチシグで入手可能
sig
Bu
nLocktime
State Number: 3
sig
Au
sig
Bu
② Update Tx3のUTXOを
インプットとして、アウトプットに
残高を反映したSettlement Tx
を作成する。
sig
Au
sig
As3
12
eltoo: 古い状態のブロードキャスト ボブの裏切り
Update Tx3
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As3とBs3のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが4以上で、
 AuとBuのマルチシグで入手可能
Settlement Tx3
Outputs
アリスのアドレスに 4.5 BTC
ボブのアドレスに 0.5 BTC
nLocktime
State Number: 3
sig
Bu
sig
Au
Update Tx2
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As2とBs2のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが3以上で、
 AuとBuのマルチシグで入手可能
nLocktime
State Number: 2
sig
Bu
sig
Au
Settlement Tx2
Outputs
アリスのアドレスに 4 BTC
ボブのアドレスに 1 BTC
ボブにとってはSettlement Tx2の
方が取り分が多いので、Update
Tx2をブロードキャストする
その後Settlement Tx2をブロード
キャストする必要があるが、これに
は
Update Tx2がブロックに入ってか
ら1,000ブロック待つ必要がある。
sig
Bs2
sig
As2
sig
Bs3
sig
As3
13
eltoo: 古い状態のブロードキャスト アリスの対応
Update Tx3
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As3とBs3のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが4以上で、
 AuとBuのマルチシグで入手可能
nLocktime
State Number: 3
sig
Bu
sig
Au
Update Tx2
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As2とBs2のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが3以上で、
 AuとBuのマルチシグで入手可能
nLocktime
State Number: 2
sig
Bu
sig
Au
ボブが1000ブロック待っている間に、
もう1つの条件を使ってコインを取り戻
す
Update Tx3のインプットの参照先を
Trigger TxのUTXOからUpdate Tx2の
UTXOに書き換え、ブロードキャストす
る。
Update Tx3がブロックに格納されるとアリスはその後、 Settlement Tx3を
ブロードキャストすることで、最新状態でチャネルをクローズできる。
14
eltooを可能にするSIGHASH_NOINPUT
通常、Txの署名はトランザクションデータが署名対象のメッセージダイジェストとなるため、トランザクションデータ
が一部でも変更されるとその署名は無効になる。そのため現時点での Bitcoinの仕様では実現不可能。
Txの署名対象データ【BIP-143】
nVersion
hashPrevouts(全入力のOutpointから生成したハッシュ)
hashSequence(全入力のsequenceから生成したハッシュ)
outpoint(署名対象の入力のOutpoint)
scriptCode
value(署名対象の入力が持つコインの量)
nSequence(署名対象の入力のsequence)
hashOutputs(全出力から生成したハッシュ)
nLocktime
sighash type
インプットが参照する前のトランザクションのアウトプットの
情報が全て空になる。
署名はトランザクションの OutPointにコミットしなくなり、
署名後にインプットが参照する OutPointの変更が可能にな
る。
空(0x00)
署名済みTx
Input
Output
TxA
Input
Output
TxB
Input
Output
変更可
※ リバインド可能なのは同じwitness  
要素でアンロック可能なUTXOのみ
SIGHASH_NOINPUT
15
eltooのポイント: State Numberの導入
Update Tx3
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As3とBs3のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが4以上で、
 AuとBuのマルチシグで入手可能
nLocktime
State Number: 3
sig
Bu
sig
Au
Update Tx2
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As2とBs2のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが3以上で、
 AuとBuのマルチシグで入手可能
nLocktime
State Number: 2
sig
Bu
sig
Au
Update Tx3がブロードキャストされた後に、 Update Tx2のインプットの参照先を
Update Tx3に書き換えられるてブロードキャストされてしまう問題
Update Tx3のUTXOを使用する場合、そのTxのnLocktimeは4以上で
なければならず、Update Tx2のnLocktimeは2なのでリジェクトされる。
※ nLocktimeは本来指定時間までTxをロックする仕組みだが、それを
 チャネル状態のバージョンとして利用。
16
eltooのポイント: セトルメント鍵のローテーション
Settlement Tx1
Inputs
Trigger TxのUTXO
Outputs
アリスのアドレスに 5 BTC
sig
Bs1
sig
As1
Settlement Tx3
Inputs
Update Tx3のUTXO
Outputs
アリスのアドレスに 4.5 BTC
ボブのアドレスに 0.5 BTC
sig
Bs3
sig
As3
Settlement Tx2
Inputs
Update Tx2のUTXO
Outputs
アリスのアドレスに 4 BTC
ボブのアドレスに 1 BTC
sig
Bs2
sig
As2
Settlement Txに署名する際もSIGHASH_NOINPUTが使用される。
不正があった場合に、対応する Update Txのインプットの参照先が変わると
Update TxのTXIDも変わり、Settlement Txのインプットの参照先も変更する必要がある。
※異なるUpdate Tx(Settlemnt Tx2の参照先をUpdate Tx3)を参照されるとまずい
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As3とBs3のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが4以上で、
 AuとBuのマルチシグで入手可能
Update Txの条件で、セトルメント鍵でアンロックする場合、
その鍵は各状態毎に異なる鍵が使われる。
鍵ペアの導出自体は HDウォレット等と同様に決定論的に導出される。
これによりSettlement Txは対応するUpdate Txのみにバインドされ
る。
17
eltooのポイント: チャネルの協調クローズ
Funding Tx
Inputs
アリスの5 BTC
Outputs
アリスとボブのマルチシグに 5 BTC
Trigger Tx
Inputs
Funding TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As1とBs1のマルチシグで入手可能
● AuとBuのマルチシグで入手可能
sig
Bu
sig
Au
sig
Alice
Settlement Tx2
Inputs
Update Tx2のUTXO
Outputs
アリスのアドレスに 4 BTC
ボブのアドレスに 1 BTC
sig
Bs2
sig
As2
Update Tx2
Inputs
Trigger TxのUTXO
Outputs
5 BTCは以下のいずれかで入手可能
● このTxがブロックに入って 1,000ブロック経過したら
 As2とBs2のマルチシグで入手可能
● このTxを使用すTxのnLocktimeが3以上で、
 AuとBuのマルチシグで入手可能
nLocktime
State Number: 2
sig
Bu
sig
Au
Closing Tx
Inputs
Funding TxのUTXO
Outputs
アリスのアドレスに 4 BTC
ボブのアドレスに 1 BTC
sig
Bs2
sig
As2
on-chain
on-chain
協調クローズの場合はClosing Txを
協力して作成してブロードキャスト
協調クローズでない場合、
Trigger Tx、Update Tx、Settlement Txが
ブロードキャストされる。
無期限のチャネルにするため、Trigger Txが必要
18
まとめ
eltooはPayment Channelで旧状態がブロードキャストされた際に、
ペナルティではなく、最新の状態を後から差し替え可能にするコントラクトを
ベースにした新しいPayment Channelの提案。
● メリット
○ チャネルのバックアップが正常にできてなくて、意図的で無いにしろ
古い状態をブロードキャストしてしまった際のリカバリになる。
○ 古い状態をブロードキャストさせようとする攻撃ベクトルを回避す
る。
○ 保存するのが最新のUpdate Tx / Settlement Txのみで済む。
○ 参加者が増えた場合の対応が簡単
■ Update Txの各条件が参加者分のマルチシグに
■ Settlement Txのアウトプットが参加者分増える
● デメリット
○ SIGHASH_NOINPUTがBitcoinに導入されるまで導入できない。

新しいオフチェーンコントラクトeltooとSIGHASH_NOINPUT

  • 1.
  • 2.
    1 Off-chain Scaling Payment Channel 資金をブロックチェーン上に固定し、固定した金額を上限として、トラストレスに オフチェーンで決済を繰り返すためのプロトコル。 BlockBlock Block Block Block Block Funding Tx(on-chain) Inputs アリスの1BTC ボブの1BTC Outputs アリスとボブのマルチシグに 2 BTC Commitment Tx(off-chain) Outputs アリスに1.1BTC ボブに0.9 BTC Inputs アリスとボブのマルチシグ 2 BTC オンチェーン上にマルチシグで ロックされたコインをインプットにし、 アウトプットには決済時のそれぞれの 残高を反映したトランザクションを作っ て決済する。 新しい決済をする場合はアウトプット の残高を更新した同様のトランザク ションを作る。
  • 3.
    2 Payment Channelのセットアップ ① アリスとボブはPaymentChannelをセットアップするため チャネル決済に使用するコインをブロックチェーン上に ロックするFunding Txを作成する。 Funding Tx Inputs アリスの1BTC ボブの1BTC Outputs アリスとボブのマルチシグに 2 BTC この時点で、Funding Txは未署名で 当然ブロードキャストはできない。
  • 4.
    3 Payment Channelのセットアップ ② アリスとボブはそれぞれ秘密の値(Secret)とその値のハッシュを生成する。  このうちハッシュだけ相手に伝える。 SecretA1 H(A1) Secret B1H(B1) 交換 アリスが作るCommitment Tx1 Outputs アリスの鍵で入手可能な 1BTC 残り1 BTCは以下のいずれかで入手可能 ●このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 ●Secret B1が分かればアリスの鍵で入手可能。 ③ アリスとボブは相手から受け取ったハッシュを使ってFunding Txの アウトプットをインプットにしたCommitment Txをそれぞれ作り、自分の署名を 付与して相手に送る。 ボブが作るCommitment Tx1 Outputs ボブの鍵で入手可能な 1BTC 残り1 BTCは以下のいずれかで入手可能 ●このTxがブロックに入って 1,000ブロック経過し たらアリスの鍵で入手可能。 ●Secret A1が分かればボブの鍵で入手可能。 交換
  • 5.
    4 Payment Channelのセットアップ アリスが作ったCommitment Tx1 Outputs アリスの鍵で入手可能な1BTC 残り1 BTCは以下のいずれかで入手可能 ●このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 ●Secret B1が分かればアリスの鍵で入手可能。 ボブが作ったCommitment Tx1 Outputs ボブの鍵で入手可能な 1BTC 残り1 BTCは以下のいずれかで入手可能 ●このTxがブロックに入って 1,000ブロック経過し たらアリスの鍵で入手可能。 ●Secret A1が分かればボブの鍵で入手可能。 この時点でお互いに相手が作成し相手の署名が付与されたCommitment Txを持って いる状態になる。このTxに自分の署名を加えればTxは完成する。 このTxがブロードキャストされると、ブロードキャストしたユーザーは1,000ブロック待てば コインを入手でき、相手はすぐにコインを入手できる。 ④ 最初のCommitment Txの交換が終わったら①で作成したFunding Txに署名して ネットワークにブロードキャストしてチャネルをオープンする。 相手の署名済みのTxを両者 持つので、これでFunding Txを ブロードキャストした後に、 相手がいなくなってマルチシグに ロックした資金が取り戻せないと いった事態はなくなる。
  • 6.
    5 オフチェーン決済 オフチェーン決済は新しいシークレットの作成・交換し、決済の結果で残高を 更新したCommitment Txを作り自分の署名を加え相手に送る。 アリスが作るCommitment Tx2 Outputs アリスの鍵で入手可能な1.1BTC 残り0.9BTCは以下のいずれかで入手可能 ●このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 ●Secret B2が分かればアリスの鍵で入手可能。 Secret A2 H(A2) Secret B2H(B2) 交換 ボブが作るCommitment Tx2 Outputs ボブの鍵で入手可能な 0.9BTC 残り1.1 BTCは以下のいずれかで入手可能 ●このTxがブロックに入って 1,000ブロック経過し たらアリスの鍵で入手可能。 ●Secret A2が分かればボブの鍵で入手可能。 交換 Secret A1 Secret B1 交換 セットアップ時と違うのは前のCommitment Txを作る際に 生成した秘密の値を相手に明らかにする点
  • 7.
    6 不正を働いた場合のペナルティ アリスが作ったCommitment Tx1 Outputs アリスの鍵で入手可能な 1BTC 残り1BTCは以下のいずれかで入手可能 ●このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 ●Secret B1が分かればアリスの鍵で入手可能。 ボブが自分に有利な古いCommitment Tx1をブロードキャストするとどうなるか? ボブは、Commitment Tx1がブロックに格納されて1,000ブロック経過するまで1BTCは入 手できない。ボブが1000ブロック待っている間にアリスは、もともとアリス宛の1BTCは普通 に入手でき、さらにSecret B2をこの段階では知っているので残りの1BTCも入手することが できる。つまり裏切って古いTxをブロードキャストすると相手に全資金が渡る。 ※ 但し、古いCommitment Txがブロードキャストされていないかチェーンの監視が必要。 アリスが作ったCommitment Tx2 Outputs アリスの鍵で入手可能な 1.1BTC 残り0.9 BTCは以下のいずれかで入手可能 ●このTxがブロックに入って 1,000ブロック経過した らボブの鍵で入手可能。 ●Secret B2が分かればアリスの鍵で入手可能。 Commitment Tx2のオフチェーン決 済が終わったとして、この段階でボ ブはCommitment Tx1をブロード キャストした方が自分の残高が多く 特をする。
  • 8.
    7 eltoo: A SimpleLayer2 Protocol for Bitcoin 2018年4月にChristian Decker、Rusty Russell、Olaoluwa Osuntokunらによって 発表された新しいオフチェーンプロトコル。 https://blockstream.com/eltoo.pdf 古い状態をブロードキャストした際の 振る舞いが変わる ● 不正を働いたユーザーの資金の没収 ● 最新の残高の反映
  • 9.
    8 eltoo: Payment Channelのセットアップ セトルメント用公開鍵As アップデート用公開鍵Au セトルメント用公開鍵Bs アップデート用公開鍵Bu ①チャネルを開く前に各参加者はアップデート用とセトルメント用の  2つの鍵ペアを生成し、各公開鍵を相手と交換する。 ● アップデート鍵ペア(Au, Bu) チャネルの状態を更新する(新しい支払いをする)際に使用する鍵 ● セトルメント鍵ペア(As, Bs) チャネルを最終残高で閉じる際に使用する鍵 ※ eltooでは、チャネルの最新状態を表したTxさえ保持しておけば、古い状態 がブロードキャストされても、そのトランザクションを最新状態を表すTxに置換す ることができる。
  • 10.
    9 eltoo: Payment Channelのセットアップ ②アリスの資金を2-of-2のマルチシグにロックする Funding Txを作成。 Funding Tx Inputs アリスの5 BTC Outputs アリスとボブのマルチシグに 5 BTC Trigger Tx Inputs Funding TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As1とBs1のマルチシグで入手可能 ● AuとBuのマルチシグで入手可能 Settlement Tx1 Inputs Trigger TxのUTXO Outputs アリスのアドレスに 5 BTC ③ Funding TxのUTXOをインプットに  したTrigger Txを作成。 ④ Trigger TxのUTXOをインプットとしたSettlement Tx1を作成。 セットアップフェーズでは払い戻し用として機能し、アウトプットは 5 BTCがそのままアリスのアドレスへ。 ※Settlement Tx1はTrigger Txがブロックに格納されてから1000ブロック後にブロードキャスト可能。 sig Bu sig Bs1 LNのコントラクトはCommitment Tx 1つでお互いの残高を管理していたが、 eltooではTrigger Tx(Update Tx)と Settlement Txの2つでチャネルの 残高を管理する sig Au ⑤ アリスはFunding Txに  署名しブロードキャストする。 sig Alice sig As1
  • 11.
    10 eltoo: オフチェーン決済 1回目 ① アリス→ボブに1BTC支払うため、Trigger Txをインプットとして新しい Update Tx2を作成。 Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As2とBs2のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが3以上で、  AuとBuのマルチシグで入手可能 Settlement Tx2 Inputs Update Tx2のUTXO Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC ※ Update TxのnLocktimeには状態を表すState Numberをセットする。 アウトプットの条件の1つには、その<State Number + 1> がOP_CLTVの引数としてセットされる= このUTXOを使用するTxのnLocktimeは3以上であることが条件。 sig Bs2 Trigger Tx Inputs Funding TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As1とBs1のマルチシグで入手可能 ● AuとBuのマルチシグで入手可能 sig Bu nLocktime State Number: 2 sig Au sig Bu ② Update Tx2のUTXOを インプットとして、アウトプットに 残高を反映したSettlement Tx を作成する。 sig Au sig As2 ※ eltooではお互いに同じTx (Update TxとSettlement Tx)を管理する
  • 12.
    11 eltoo: オフチェーン決済 2回目 ① ボブ→アリスに0.5BTC支払うため、Trigger Txをインプットとして新しい Update Tx3を作成。 Update Tx3 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As3とBs3のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが4以上で、  AuとBuのマルチシグで入手可能 Settlement Tx3 Inputs Update Tx3のUTXO Outputs アリスのアドレスに 4.5 BTC ボブのアドレスに 0.5 BTC sig Bs3 Trigger Tx Inputs Funding TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As1とBs1のマルチシグで入手可能 ● AuとBuのマルチシグで入手可能 sig Bu nLocktime State Number: 3 sig Au sig Bu ② Update Tx3のUTXOを インプットとして、アウトプットに 残高を反映したSettlement Tx を作成する。 sig Au sig As3
  • 13.
    12 eltoo: 古い状態のブロードキャスト ボブの裏切り Update Tx3 Inputs TriggerTxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As3とBs3のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが4以上で、  AuとBuのマルチシグで入手可能 Settlement Tx3 Outputs アリスのアドレスに 4.5 BTC ボブのアドレスに 0.5 BTC nLocktime State Number: 3 sig Bu sig Au Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As2とBs2のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが3以上で、  AuとBuのマルチシグで入手可能 nLocktime State Number: 2 sig Bu sig Au Settlement Tx2 Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC ボブにとってはSettlement Tx2の 方が取り分が多いので、Update Tx2をブロードキャストする その後Settlement Tx2をブロード キャストする必要があるが、これに は Update Tx2がブロックに入ってか ら1,000ブロック待つ必要がある。 sig Bs2 sig As2 sig Bs3 sig As3
  • 14.
    13 eltoo: 古い状態のブロードキャスト アリスの対応 UpdateTx3 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As3とBs3のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが4以上で、  AuとBuのマルチシグで入手可能 nLocktime State Number: 3 sig Bu sig Au Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As2とBs2のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが3以上で、  AuとBuのマルチシグで入手可能 nLocktime State Number: 2 sig Bu sig Au ボブが1000ブロック待っている間に、 もう1つの条件を使ってコインを取り戻 す Update Tx3のインプットの参照先を Trigger TxのUTXOからUpdate Tx2の UTXOに書き換え、ブロードキャストす る。 Update Tx3がブロックに格納されるとアリスはその後、 Settlement Tx3を ブロードキャストすることで、最新状態でチャネルをクローズできる。
  • 15.
    14 eltooを可能にするSIGHASH_NOINPUT 通常、Txの署名はトランザクションデータが署名対象のメッセージダイジェストとなるため、トランザクションデータ が一部でも変更されるとその署名は無効になる。そのため現時点での Bitcoinの仕様では実現不可能。 Txの署名対象データ【BIP-143】 nVersion hashPrevouts(全入力のOutpointから生成したハッシュ) hashSequence(全入力のsequenceから生成したハッシュ) outpoint(署名対象の入力のOutpoint) scriptCode value(署名対象の入力が持つコインの量) nSequence(署名対象の入力のsequence) hashOutputs(全出力から生成したハッシュ) nLocktime sighash type インプットが参照する前のトランザクションのアウトプットの 情報が全て空になる。 署名はトランザクションのOutPointにコミットしなくなり、 署名後にインプットが参照する OutPointの変更が可能にな る。 空(0x00) 署名済みTx Input Output TxA Input Output TxB Input Output 変更可 ※ リバインド可能なのは同じwitness   要素でアンロック可能なUTXOのみ SIGHASH_NOINPUT
  • 16.
    15 eltooのポイント: State Numberの導入 UpdateTx3 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As3とBs3のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが4以上で、  AuとBuのマルチシグで入手可能 nLocktime State Number: 3 sig Bu sig Au Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As2とBs2のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが3以上で、  AuとBuのマルチシグで入手可能 nLocktime State Number: 2 sig Bu sig Au Update Tx3がブロードキャストされた後に、 Update Tx2のインプットの参照先を Update Tx3に書き換えられるてブロードキャストされてしまう問題 Update Tx3のUTXOを使用する場合、そのTxのnLocktimeは4以上で なければならず、Update Tx2のnLocktimeは2なのでリジェクトされる。 ※ nLocktimeは本来指定時間までTxをロックする仕組みだが、それを  チャネル状態のバージョンとして利用。
  • 17.
    16 eltooのポイント: セトルメント鍵のローテーション Settlement Tx1 Inputs TriggerTxのUTXO Outputs アリスのアドレスに 5 BTC sig Bs1 sig As1 Settlement Tx3 Inputs Update Tx3のUTXO Outputs アリスのアドレスに 4.5 BTC ボブのアドレスに 0.5 BTC sig Bs3 sig As3 Settlement Tx2 Inputs Update Tx2のUTXO Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC sig Bs2 sig As2 Settlement Txに署名する際もSIGHASH_NOINPUTが使用される。 不正があった場合に、対応する Update Txのインプットの参照先が変わると Update TxのTXIDも変わり、Settlement Txのインプットの参照先も変更する必要がある。 ※異なるUpdate Tx(Settlemnt Tx2の参照先をUpdate Tx3)を参照されるとまずい Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As3とBs3のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが4以上で、  AuとBuのマルチシグで入手可能 Update Txの条件で、セトルメント鍵でアンロックする場合、 その鍵は各状態毎に異なる鍵が使われる。 鍵ペアの導出自体は HDウォレット等と同様に決定論的に導出される。 これによりSettlement Txは対応するUpdate Txのみにバインドされ る。
  • 18.
    17 eltooのポイント: チャネルの協調クローズ Funding Tx Inputs アリスの5BTC Outputs アリスとボブのマルチシグに 5 BTC Trigger Tx Inputs Funding TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As1とBs1のマルチシグで入手可能 ● AuとBuのマルチシグで入手可能 sig Bu sig Au sig Alice Settlement Tx2 Inputs Update Tx2のUTXO Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC sig Bs2 sig As2 Update Tx2 Inputs Trigger TxのUTXO Outputs 5 BTCは以下のいずれかで入手可能 ● このTxがブロックに入って 1,000ブロック経過したら  As2とBs2のマルチシグで入手可能 ● このTxを使用すTxのnLocktimeが3以上で、  AuとBuのマルチシグで入手可能 nLocktime State Number: 2 sig Bu sig Au Closing Tx Inputs Funding TxのUTXO Outputs アリスのアドレスに 4 BTC ボブのアドレスに 1 BTC sig Bs2 sig As2 on-chain on-chain 協調クローズの場合はClosing Txを 協力して作成してブロードキャスト 協調クローズでない場合、 Trigger Tx、Update Tx、Settlement Txが ブロードキャストされる。 無期限のチャネルにするため、Trigger Txが必要
  • 19.
    18 まとめ eltooはPayment Channelで旧状態がブロードキャストされた際に、 ペナルティではなく、最新の状態を後から差し替え可能にするコントラクトを ベースにした新しいPayment Channelの提案。 ●メリット ○ チャネルのバックアップが正常にできてなくて、意図的で無いにしろ 古い状態をブロードキャストしてしまった際のリカバリになる。 ○ 古い状態をブロードキャストさせようとする攻撃ベクトルを回避す る。 ○ 保存するのが最新のUpdate Tx / Settlement Txのみで済む。 ○ 参加者が増えた場合の対応が簡単 ■ Update Txの各条件が参加者分のマルチシグに ■ Settlement Txのアウトプットが参加者分増える ● デメリット ○ SIGHASH_NOINPUTがBitcoinに導入されるまで導入できない。