Replies: 1 comment
-
|
Looks good, we just need a new structure in the wallet to store this data and verification functions to validate the deniability claim. Although, I also think that keeping track of the corresponding outgoing utxo/swapcoin will also be helpful here to further validate the claim. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Deniability Proof
Problem Statement
Deniability proof allows users to prove they performed a coinswap. This is useful if a user faces legal persecution based on transaction history from a swap counterparty.
Users can provide proof data that univocally demonstrates they performed the coinswap, proving the transaction history is not their own.
The proof system verifies:
This proof must be stored on disk after swap completion and can be included in the end-of-swap report.
Proof Data
The proof system varies slightly between Taproot and P2WSH protocols. Required data:
Taproot:
(txid:vout)of the contract output.internal pubkey,timelock script,hashlock script.PubMine(musig)andPubOther(musig).Sig(musig): Signature fromPubMine(musig)over the serialized contract tx.Sig(hashlock): Signature fromPubMine(hashlock)over the serialized contract tx.P2WSH:
(txid:vout)of the funding transaction output.PubMine(hashlock).PubMine(multi)andPubOther(multi).Sig(multi): Signature fromPubMine(multi)over the serialized contract tx.Sig(hashlock): Signature fromPubMine(hashlock)over the serialized contract tx.Verification
Verification of the proof data must be done with the following steps.
Taproot
(txid, vout).internal pubkey,timelock script, andhashlock script, then match against the output.internal pubkeyis a valid Musig2 aggregate ofPubMine(musig)andPubOther(musig).PubMine(hashlock)exists in thehashlock script.Sig(musig)againstPubMine(musig).Sig(hashlock)againstPubMine(hashlock).P2WSH
(txid:vout).PubMine(multi)is in the 2-of-2 multisig redeemscript.PubMine(hashlock)is in the HTLC redeemscript.Sig(multi)againstPubMine(multi).Sig(hashlock)againstPubMine(hashlock).These checks together ensures that all proof data are correct and the swap did happened. Providing plausible deniability for the users.
Beta Was this translation helpful? Give feedback.
All reactions