Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Third-party verifiable transactions #2631

Closed
GandalfThePink opened this issue Feb 26, 2019 · 3 comments
Closed

Third-party verifiable transactions #2631

GandalfThePink opened this issue Feb 26, 2019 · 3 comments

Comments

@GandalfThePink
Copy link
Contributor

There are several options to verify payments in second level solutions, but on the chain payment can only be proven involving both sender and receivers interaction.
But there is a simple option to allow verification at the base layer, requiring a wallet modification.

For a verifiable payment, the receiver needs to authenticate themselves. This is best done via the same key that is also used to sign the MimbleWimble transaction. The receiver request a payment of v coins to the 'public key' kG, resulting in the commit C = v L + kG.

The sender then prepares the transaction and enters the requested amount v plus the IP of the receiver (or communicates the slates in any other way). But in addition the sender also inputs the address kG.

The wallet now starts communication with the receiver and verifies that the receiver is in-fact using the key kG. If not the transaction is aborted and not finalised. Otherwise the transaction is passed to the chain as usual.

If needed the sender can now create a proof of payment. The third party knows kG as identification of the receiver. After revealing the amount v, the UTXO can be found and the payment confirmed.
In addition the kernel excess of that payment can be signed by the sender after subtracting kG, proving that the payment in question originated from the sender.

From a uses perspective the only addition is that a payment can have an address associated to it. And if it does proofs of payment can be created afterwards. At the chain level nothing changes and to any external party all transactions look exactly the same.

@bardarehkramat
Copy link

I still could not succeed in its implementation

@garyyu
Copy link
Contributor

garyyu commented Mar 9, 2019

@GandalfThePink
Is this duplicated to #2652? (or honestly #2652 is duplicated to this one since this one is created earlier), or can we say #2652 is the exact solution for this issue 😄

If not, could you please describe a precise design? to explain for example:

  1. But in addition the sender also inputs the address kG.

How the sender input this? where?

  1. The wallet now starts communication with the receiver and verifies that the receiver is in-fact using the key kG.

How to verify the receiver?

  1. If needed the sender can now create a proof of payment.

What this proof looks like? how to create it exactly? this is the key part.

  1. The third party knows kG as identification of the receiver.

How the 3rd party know this kG belongs to the receiver?

  1. After revealing the amount v, the UTXO can be found and the payment confirmed.

The UTXO can be found? I'm afraid it can't in some cases in case it's cut-through ed

@GandalfThePink
Copy link
Contributor Author

This is not really a duplicate of #2652 since the verification process is different. My idea encrypts the verification into the transaction data, while in #2652 the verification is stored locally by the client.

But by putting all the required information on the chain, some privacy is lost and the proof becomes more complicated, because as you say, there may be cut-through or UTXO's can be spent. In these cases there are options, but just checking a kernel is far simpler.

They only advantage I can see for this method is that the proof can be reproduced even when the wallet is restored from seeds since no information must be stored at client side. But this seems a rather small advantage for all the extra complications. Only when we think that this is a very essential feature, this idea should be used.

I think we can therefore close this issue and I will try my best to be useful in the progress of #2652.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants