Statechainなどを発表したRuben Somsenがシンプルな新しいAtomic Swapプロトコルを公開したので見てみる↓
https://gist.github.com/RubenSomsen/8853a66a64825716f51b409be528355f
プロトコル自体はECDSAおよびSchnorrとAdaptor Signatureを利用したScriptlessなAtomic Swapプロトコルになっており、最初にAdaptor Signatureについて理解しておくのがお勧め↓
Succinct Atomic Swapプロトコル
アリスからボブへ1BTC、ボブからアリスへ200LTCを交換するAtomic Swapの手順は以下のとおり:
- アリスはまず、自身の1BTCをアリスとボブの公開鍵にロックするトランザクションを作成する。
- 続いて、1のUTXOをインプットとした以下のトランザクションを作成する。
- アリスが1のトランザクションに署名して公開する前に、両者はrevoke_txとrefund_tx、timeout_txについて以下の署名を作成する。
- revoke_tx:両者がそれぞれsigRevokeAlice、sigRevokeBobを作成し共有。
- refund_tx:ボブはAdaptor Signature{sigRefundBob}を作成し共有(アリスはブロードキャスト時に自身分の署名を作ればいいのでこの時点では不要)。Adaptor Signature{sigRefundBob}は署名を完成させるためにはsecretAliceの開示を必要とする。つまりアリスがrefund_txをブロードキャストすると、ボブはsecretAliceの情報を知ることができる。
- timeout_tx:アリスがsigTimeoutAliceを作成し共有(ボブはブロードキャスト時に自身分の署名を作ればいいのでこの時点では不要)。
- 署名が入手できたらアリスは1のトランザクションに署名してブロードキャストする。
- 一方ボブはLitecoinのチェーン上で交換する200LTCをセットアップする。ボブの持つ200LTCをsecretAliceとsecretBobから生成した公開鍵宛にロックするトランザクションを作成しブロードキャストする。
- アリスはsuccess_txを完成させるために必要なアリスの署名のAdaptor Signature{sigSuccessAlice}を作り、ボブに送る。sigSuccessAliceは署名を完成させるのにsecretBobの開示を必要とするAdaptor Signature。
- ボブはsigSuccessBobと一緒に、secretBobを使ってsigSuccessAliceを計算しsuccess_txを完成させることで1 BTC入手できる。これによりアリスはsecretBobを知るので、5の200LTCを入手するトランザクションを作成することができる。
以上がプロトコルの手順。
- 4の時点でプロトコルが停止した場合:
アリスはrevoke_txを公開し、その後refund_txを使って資金を回収する。アリスが期間内にrefund_txをブロードキャストしない場合、ボブはtimeout_txをブロードキャストすることで資金を入手できる。 - 5の時点でプロトコルが停止した場合:
アリスはrevoke_txを公開し、その後refund_txを使って資金を回収する。refund_txがブロードキャストされるとボブはsecretAliceが分かるので、5でロックしたLTCを取り戻すことができる。
Succinct Atomic Swapの特徴としては、↑のプロトコルから分かるように、タイムロックを必要とするのはBTC側のみで、LTC側ではなんらタイムロックを必要としない。このためLTC側のトランザクション構成はとてもシンプルだ。これはAdaptor Signatureの組み合わせにより、片方のコインの入手/払い戻しが一方のコインを償還/払い戻しする際のシークレットの開示とセットになっているため。
クロスチェーンでタイムロックの仕組みを動作させる際には、双方のチェーンのタイムロックの仕様やブロックのマイニング状況に左右されることもあるので、そういった要素を1つのチェーンのみに集約できるのはメリットとして大きいと思う。