Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CoinPool

 CoinPool

GBECの解説動画の資料です。
https://goblockchain.network/2022/06/coin-pool/

C403a9e0b7bfed4c94020220b5ab89f7?s=128

shigeyuki azuchi

June 06, 2022
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. CoinPool


  2. 1 CoinPool登場の背景
 Lightning Networkの展開に伴う課題:
 
 • 理論的には、ペイメントチャネルはずっとオフチェーンでいられるが、 
 実際は流動性の調整などの理由によりライフタイムがある状態。 


    • チャネルの開閉には、オンチェーンスペースを必要とするため、 
 LNに同時接続可能なユーザー数には制限がある。 
 • インフライトHTLCの決済で、多くのチャネルが閉じられる可能性。 
 Channel A Channel B Channel C Channel D
  3. 2 CoinPool
 複数のユーザーでUTXOの所有権を共有するオフチェーンスケーリングプロトコル https://coinpool.dev/v0.1.pdf
 
 • UTXOセットの削減
 • プール内でのオフチェーン転送 


    • プールからの資金の引き出しに 
 他の参加者の許可(対話)は不要で、 
 いつでも引き出しが可能 
 • 他のプールとの取引や、 
 ペイメントチャネルなどのコントラクトでの 
 利用も可能
 CoinPool

  4. 3 CoinPoolのセットアップ
 Setup Tx
 In
 Out
 Pre-CoinPool : 
 集約公開鍵

    P= A + B + C 
 ボブのUTXO 
 キャロルのUTXO 
 アリスのUTXO 
 Update Tx #0
 In
 Out
 CoinPool #0 
 Pre-CoinPool UTXO 
 Withdraw Tx #A
 In
 Out
 アリスを除いた 
 残りのCoinPool
 CoinPool #0 UTXO 
 Pool内のアリスの残高 
 Withdraw Tx #C
 In
 Out
 キャロルを除いた 
 残りのCoinPool
 CoinPool #0 UTXO 
 Pool内のキャロルの残高 
 Withdraw Tx #B
 In
 Out
 ボブを除いた 
 残りのCoinPool
 CoinPool #0 UTXO 
 Pool内のボブの残高 
 ① Pool参加者全員の集約公開鍵にコインをロックする 
   Setup Txを作成
 CoinPool Output • Key-Path: P = A + B + C • Script-Path: ◦ eltooによる協調アップデート ◦ 0 <A> MERKLESUB P CHECKSIGVERIFY ◦ 0 <B> MERKLESUB P CHECKSIGVERIFY ◦ 0 <C> MERKLESUB P CHECKSIGVERIFY ② CoinPoolの初期状態を表すUpdate Tx#0を作成
 ③ 各参加者毎に引き出し用の 
  Withdraw Txを作成
 ④ 最後に、
  Withdraw -> Update -> Setup の順に署名

  5. 4 CoinPoolの更新
 Update Tx #1
 In
 Out
 CoinPool #1 


    Pre-CoinPool or 
 CoinPool UTXO 
 Withdraw Tx #A
 In
 Out
 アリスを除いた 
 残りのCoinPool
 CoinPool #1 UTXO 
 Pool内のアリスの残高 
 Withdraw Tx #C
 In
 Out
 キャロルを除いた 
 残りのCoinPool
 CoinPool #1 UTXO 
 Pool内のキャロルの残高 
 Withdraw Tx #B
 In
 Out
 ボブを除いた 
 残りのCoinPool
 CoinPool #1 UTXO 
 Pool内のボブの残高 
 ① 新しいUpdate Txと、
  各参加者の残高を更新した Withdraw Txを作成
 Setup Tx
 In
 Out
 Pre-CoinPool : 
 集約公開鍵 P= A + B + C 
 ボブのUTXO 
 キャロルのUTXO 
 アリスのUTXO 
 Update Tx #0
 In
 Out
 CoinPool #0 
 Pre-CoinPool UTXO 
 ※ 旧Update Txがブロードキャストされた場合は、 eltooのスキームにより、最新の Update Txにスイッチ
 参考:新しいオフチェーンコントラクト eltooとSIGHASH_NOINPUT(SIGHASH_ANYPREVOUT) 
 https://goblockchain.network/2018/11/eltoo_and_sighash_noinput/ 

  6. 5 CoinPoolからの引き出し
 Update Tx #1
 In
 Out
 CoinPool #1 


    Pre-CoinPool or 
 CoinPool UTXO 
 Withdraw Tx #B
 In
 Out
 ボブを除いた 
 残りのCoinPool
 CoinPool #1 UTXO 
 Pool内のボブの残高 
 ① 最新のUpdate Txをブロードキャスト
 ② タイムロック期間を待ち、 
  タイムロックが外れたら、自身の Withdraw Txをブロードキャスト
 Withdraw ConPool Output • Key-Path: Q = A + C • Script-Path: ◦ eltooによる協調アップデート ◦ 0 <A> MERKLESUB Q CHECKSIGVERIFY ◦ 0 <C> MERKLESUB Q CHECKSIGVERIFY CoinPool Output • Key-Path: P = A + B + C • Script-Path: ◦ eltooによる協調アップデート ◦ 0 <A> MERKLESUB P CHECKSIGVERIFY ◦ 0 <B> MERKLESUB P CHECKSIGVERIFY ◦ 0 <C> MERKLESUB P CHECKSIGVERIFY Withdraw TxのCoinPoolアウトプットは、
 資金を引き出した参加者をプールから除いたアウトプット 
 ※ タイムロックは、古い状態の Update Txが
  ブロードキャストされた場合の対処期間 

  7. 6 引き出し後のPoolのオペレーション
 Withdraw Tx #B
 In
 Out
 ボブを除いた 
 残りのCoinPool


    CoinPool #1 UTXO 
 Pool内のボブの残高 
 • 自分も、プールから抜ける場合 
 インプットを、
 プールから退出した参加者の Withdraw Txの
 CoinPoolアウトプットに切り替えた自身の Withdraw Txを
 ブロードキャストする。 
 Withdraw Tx #C
 In
 Out
 キャロルを除いた 
 残りのCoinPool
 Withdraw Tx #B UTXO 
 Pool内のキャロルの残高 
 • プールを継続する場合 
 Snapshot Tx
 In
 Out
 Withdraw Tx #B UTXO 
 Pre-CoinPool : 
 集約公開鍵 P’= A + C
 Snapshot Txを作成し、これまで事前署名した 
 Withdraw Txを無効化する。
 資金は残ったプールメンバーの集約公開鍵にロックされる。 
 Setup Txと同じ役割を担う。

  8. 7 Bitcoinに必要な追加機能
 CoinPoolを実装するためには、いくつかの機能を Bitcoinに追加する必要がある
 • SIGHASH_ANYPREVOUT(BIP-0118)
 https://github.com/bitcoin/bips/blob/master/bip-0118.mediawiki 
 eltooスタイルの更新(Update Tx/Withdraw

    Txのインプットの差し替え)
 • OP_MERKLESUB:
 
 
 
 
 • SIGHASH_GROUP:
 インプットを任意の数のアウトプットにバンドルできるようにすることで、
 プールの資金が、退出する参加者の残高とその残りになるよう強制する。
 CoinPool Output • Key-Path: P = A + B + C • Script-Path: ◦ eltooによる協調アップデート ◦ 0 <A> MERKLESUB P CHECKSIGVERIFY ◦ 0 <B> MERKLESUB P CHECKSIGVERIFY ◦ 0 <C> MERKLESUB P CHECKSIGVERIFY • プール退出者のアンロック条件が
 Tapscriptのツリーから削除されていること
 • プール退出者の公開鍵が集約公開鍵から削除されていること
 
 を検証するためのopcode。
 Withdraw Tx
 Out
 退出者を除いた 
 残りのCoinPool
 Pool内の退出者の残高 

  9. 8 まとめ
 • CoinPoolは複数人でUTXOの所有権を共有するプロトコル
 • プール参加者はいつでも、他の参加者との調整なくプールから退出できる。 
 • プールの更新は、全プール参加者との協調(通信)が必要。 


    ◦ LNよりも高インタラクティブ
 • CoinPoolはeltooスタイルを採用
 ◦ ペナルティ型は、過去の状態を全て保持する必要があり、 N人でのスケールは難しい 
 ◦ ペナルティで資金を没収した場合に、没収額をどう分配するのか?という問題 
 • CoinPoolの実装には、複数の新機能をBitcoinにデプロイ(SF)する必要がある。 
 【参考】https://techmedia-think.hatenablog.com/entry/2022/03/20/165315