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

CoinPool

 CoinPool

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

shigeyuki azuchi

June 06, 2022
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. CoinPool


    View Slide

  2. 1
    CoinPool登場の背景

    Lightning Networkの展開に伴う課題:


    ● 理論的には、ペイメントチャネルはずっとオフチェーンでいられるが、

    実際は流動性の調整などの理由によりライフタイムがある状態。

    ● チャネルの開閉には、オンチェーンスペースを必要とするため、

    LNに同時接続可能なユーザー数には制限がある。

    ● インフライトHTLCの決済で、多くのチャネルが閉じられる可能性。

    Channel A Channel B Channel C Channel D

    View Slide

  3. 2
    CoinPool

    複数のユーザーでUTXOの所有権を共有するオフチェーンスケーリングプロトコル
    https://coinpool.dev/v0.1.pdf

    
 ● UTXOセットの削減

    ● プール内でのオフチェーン転送 

    ● プールからの資金の引き出しに 

    他の参加者の許可(対話)は不要で、 

    いつでも引き出しが可能 

    ● 他のプールとの取引や、 

    ペイメントチャネルなどのコントラクトでの 

    利用も可能

    CoinPool


    View Slide

  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 MERKLESUB P CHECKSIGVERIFY
    ○ 0 MERKLESUB P CHECKSIGVERIFY
    ○ 0 MERKLESUB P CHECKSIGVERIFY
    ② CoinPoolの初期状態を表すUpdate Tx#0を作成

    ③ 各参加者毎に引き出し用の

     Withdraw Txを作成

    ④ 最後に、

     Withdraw -> Update -> Setup
    の順に署名


    View Slide

  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/

    View Slide

  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 MERKLESUB Q CHECKSIGVERIFY
    ○ 0 MERKLESUB Q CHECKSIGVERIFY
    CoinPool Output
    ● Key-Path: P = A + B + C
    ● Script-Path:
    ○ eltooによる協調アップデート
    ○ 0 MERKLESUB P CHECKSIGVERIFY
    ○ 0 MERKLESUB P CHECKSIGVERIFY
    ○ 0 MERKLESUB P CHECKSIGVERIFY
    Withdraw TxのCoinPoolアウトプットは、

    資金を引き出した参加者をプールから除いたアウトプット

    ※ タイムロックは、古い状態の
    Update Txが

     ブロードキャストされた場合の対処期間

    View Slide

  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と同じ役割を担う。


    View Slide

  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 MERKLESUB P CHECKSIGVERIFY
    ○ 0 MERKLESUB P CHECKSIGVERIFY
    ○ 0 MERKLESUB P CHECKSIGVERIFY
    ● プール退出者のアンロック条件が

    Tapscriptのツリーから削除されていること

    ● プール退出者の公開鍵が集約公開鍵から削除されていること


    を検証するためのopcode。

    Withdraw Tx

    Out

    退出者を除いた 

    残りのCoinPool

    Pool内の退出者の残高 


    View Slide

  9. 8
    まとめ

    ● CoinPoolは複数人でUTXOの所有権を共有するプロトコル

    ● プール参加者はいつでも、他の参加者との調整なくプールから退出できる。

    ● プールの更新は、全プール参加者との協調(通信)が必要。

    ○ LNよりも高インタラクティブ

    ● CoinPoolはeltooスタイルを採用

    ○ ペナルティ型は、過去の状態を全て保持する必要があり、 N人でのスケールは難しい 

    ○ ペナルティで資金を没収した場合に、没収額をどう分配するのか?という問題 

    ● CoinPoolの実装には、複数の新機能をBitcoinにデプロイ(SF)する必要がある。

    【参考】https://techmedia-think.hatenablog.com/entry/2022/03/20/165315

    View Slide