CoinJoinXT
a more flexible, extended approach to CoinJoin input を含む tx に署名する前に、input を消費する tx に署名することができる
Payment channel が実現できる
txid が signature に依存しないため
2-of-2 multisig にロック(Funding tx = FTX)された satoshi をもとに、tx の chain(Proposed transaction graph = PTG) をつくることができる
ただし、PTG の Input に使えるのは、FTX の Output と連続するものだけである
他の Output( A-Out) を使った場合
FTX が A と B による multisig で、PTG の output も同じ lock 条件とする
A-Out は、A だけで unlock できる Output とする
今考えているのは、PTG に含まれるある tx の input に A-Out を使っている状況
その tx が commit される前に、A は単独で A-Out を使う別の tx を commit することができる
これは A による B に対する double spend attack である
なぜなら、A-Out を input とする PTG に含まれる tx は、A-Out がすでに消費されてしまったので invalid になってしまう
A-Out を input にすることを可能にするには
A-Out を promise input と読んでいる
なにが promise なんだ、、、?
refund tx を事前に用意しておくことで解決できる
refund tx の内容は
PTG を Tx1 -> Tx2 とすると
Tx2 に promise input を入れる場合、Tx1 の statoshi を取り戻せる refund tx を作成する
Tx2 は前述の double spend attack で無効になる可能性があるため
Tx1 に multisig で lock された satoshi の分配が A: 1, B:2 だった場合は
M 時間 timelock ののちに、A に 1、B に 2 送金される tx を作成して、お互いに署名しておく