スクリプト部はアンロックの条件毎に ツリーを使って構成される P = C + tG Script A Script B Script C Hash_TapLeaf Hash_TapLeaf Hash_TapLeaf Script D Script E Hash_TapLeaf Hash_TapLeaf AB Hash_TapBranch CD Hash_TapBranch CDE Hash_TapBranch ABCDE Hash_TapBranch t Hash_TapTweak Pubkey C スクリプトパスを使ってアンロックする場合は、 スクリプトとtを計算するためのパス(ハッシュ)を提供す る 実際の使用条件のみを開示するため、 • 他の条件を秘匿でき プライバシーの向上に • 全スクリプトの記載が不要で、デー タスペースの節約に
Payments 17 BP = s1 ^ s2 ① ベースプリイメージ BPを作成し、xorを計算してBPが得 られるような値s1, s2を得る。 (秘密分散の意図) 使用チャネル数 n = 2 送金額 V = v1(5) + v2(1) アトミック決済用の一意の ID ②部分プリイメージ ri = H(BP || i) と 各チャネルで使用するペイメントハッシュ hi = H(ri) を計算する。 hop payload (ID, n, s1) hop payload (ID, n, s2) hop payload (ID, n, s2) hop payload (ID, n, s2) hop payload (ID, n, s1) ③各チャネルでhiのプリイメージが分かれば 資金を入手できるHTLC決済をスタートする。 ※必ず経路毎に異なるプリイメージを使用する。 各ホップのペイロードには、AMPの使用を 通知するfeature bitがセットされる。 BP = s1 ^ s2 ④ボブは全ての部分支払いを受信し、 そのsiを全て集めてBPを復元する。 BPを復元できたら、各チャネルの支払いを 受け取るのに必要な riを算出できる。 チャネル毎のキャパシティでは送金額に満たないものの、複数のチャネルを使えば送金額 を満たす場合に、複数の経路を使用した支払いをアトミックに行う仕組み。
21 • 通常のSchnorr署名 (R, s): R = kG, s = k + H(P, R, m) x • Adaptor Signature (R, s’, T): R = kG, s’ = k + t + H(P, R, m) x, T = tG Schnorr署名の一部にシークレット値(t)を加えた署名を事前に作成/交換し、 有効なSchnorr署名(R, s)が公開されたらシークレットの値が分かり(t = s’ - s)、その値を 使って別のコインがアンロックされる仕組み。 あるTxの署名を完成させたら別のTxの署名に必要なシークレット値が分かる コインのAtomic Swap プロトコルに利用可能。 コントラクト(HTLCs)でやっていたことをデジタル署名にエンコード 外部からは通常の送金に見え(privacy)、Txのサイズも小さくなる(手数料減) 参考:Adaptor Signatureを利用したAtomic Swap(Schnorr版) https://goblockchain.network/2018/12/adaptor_signature/