Good morning Germán, It looks to me like this is CoinSwap with Schnorr Scriptless Scripts.
* https://joinmarket.me/blog/blog/coinswaps/ * https://joinmarket.me/blog/blog/flipping-the-scriptless-script-on-schnorr/ I also recently put up an article on extending such a protocol across 3 or more participants: * https://zmnscpxj.github.io/bitcoin/multiswap.html Regards, ZmnSCPxj > ## Objective > * Make atomic swaps within the same chain possible in a traceless way > * Achieving traceless same-chain atomic-swaps effectively turns an entire > chain into a (P2PKH) mixer by default > > ## Proposed solution > Similar to the way that atomic swaps would work with schnorr signatures (i.e. > leveraging adaptor signatures), the proposed solution is to use - in place of > the secret 't' - a suitably chosen schnorr signature. The end result being > that when one counterparty claims their side of the funds, the party can > obtain the signature they're missing to claim the funds in the (schnorr) > multisig that pays them. > On-chain, this would appear like two independent transactions, even though > effectively the two parties have “exchanged” the history attached to the > UTXOs. Unlike a mixing service, in which all of the histories get merged, > with this protocol histories can be pairwise swapped without anybody’s > knowledge. > > ## Protocol description > * Alice and Bob, holding funds at UTXO1 (controlled by Alice) and UTXO2 > (controlled by Bob) wish to swap them. > * Alice provides Bob with a single public key P_A > * Bob provides Alice two pubkeys P_B1, P_B2. > * Bob and Alice construct the P2PKH addresses Addr1 = Hash(P_A+P_B1) [where > the UTXO1 funds will be sent to eventually] and Addr2 = Hash(P_A+P_B2) > [where the UTXO2 funds will be sent to eventually] > * Bob and Alice exchange time-locked refund transactions for the funding > transactions sending the funds to Addr1 and Addr2. > * Bob and Alice submit the funding transactions (Alice pays to Addr1 from > UTXO1; Bob pays to Addr2 from UTXO2) > * Alice sends Bob an adaptor signature: r1 + H(r1 | m)*x_a + r2 + H( r2 | > m')*x_a > * Bob verifies the adaptor signature Alice sent contains a valid signature > for spending from Addr1 AND another valid signature for spending from Addr2. > Both signatures from Alice. Bob cannot separate out the two signatures and > hence cannot claim any of the funds, provided H( r1 | m) != H( r2 | m') in > the signature commitment. > * Bob now sends Alice the valid signature: r2 + H( r2 | m' )*x_b2 > * Alice can now add her signature to Bob's and get: r2 + H( r2| m' )*(x_b2 + > x_a) which is a valid signature to spend the funding transaction sent to > Addr2. > * Finally, Bob sees Alice claims the fund sent to Addr2 and uses that > signature to subtract his own: r2 + H( r2 | m' )*(x_b2 + x_a) - (r2 + H( r2 | > m' )*x_b2) = H( r2 | m ')*x_a > * Bob takes the original adaptor signature and subtracts the known quantity > r2+ H( r2 | m' )*x_a, to get a valid signature: r1 + H( r1 | m )*x_a > * Bob can now add to that valid signature, his own signature and retrieve the > funds. > ## Notes > * It is possible for the counterparty to store copies of the signatures as > proof that such a join has taken place. But plausible deniability is > available upon discarding signatures since the joint private keys (x_a + > x_b*) are unavailable. > > I'm interested in hearing feedback on this idea if possible, and deemed > interesting enough. > > Best regards, > -- > Germán > Mathematician _______________________________________________ bitcoin-dev mailing list bitcoin-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev