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

Tx-building: Compact slates #317

Closed
lehnberg opened this issue Jan 27, 2020 · 2 comments
Closed

Tx-building: Compact slates #317

lehnberg opened this issue Jan 27, 2020 · 2 comments
Assignees
Labels
enhancement New feature or request P1: Critical Top priority for a release
Milestone

Comments

@lehnberg
Copy link
Collaborator

lehnberg commented Jan 27, 2020

Description

This issue tracks the effort to redesign slate structure into a new version that minimises the data shared in each trip and tries to reduce slate footprint as much as possible.

Old description

As per Round 2.1 in the transaction building workflow, sender shares change_outputs information with recipient.

This leads to the recipient gaining information of sender's future outputs that can be used to de-anonymize other outputs of the sender. Example: Alice makes a grin deposit to an exchange with KYC requirements, and as part of this creates a change output. This change output is later used as part of spending other outputs that the exchange has never seen. If the exchange monitors the chain or mempool for the particular output being spent, they can begin making assumptions about other outputs that are being spent in the same context. If an exchange sees heavy grin usage, they might be able to deanonymize a great deal of output commitments this way.

It would therefore improve privacy if change outputs were not shared between transacting parties. Are there any immediate negative consequences, beyond the receiver not being able to verify that transaction_fee corresponds to the number of outputs being created?


Edit: As per discussion in grincoin#dev:

  • A receiver would still be able to learn the change output by monitoring the mempool, assuming tx is not aggregated when it is added there.
  • One approach would be for sender not to send inputs or change output, just the kernel, with the receiver trusting that the input exists.
  • If this information is passed along to the receiver needlessly, in addition to leaking data too easily, it can also be said to waste bandwidth.

Edit Apr 02: Renaming issue, changing description, adding to 4.0.0 milestone.

@lehnberg lehnberg added enhancement New feature or request question Further information is requested labels Jan 27, 2020
@yeastplume
Copy link
Member

yeastplume commented Mar 3, 2020

I'm okay with this functionality in general, a couple of points

  • This only works in the single payer->payee->payer workflow, not for the case of multiple parties transacting and not for the invoice workflow. Whoever posts the transaction obviously needs to have a complete awareness of all the outputs involved.
  • Slate could be amended to either provide sum or outputs themselves, think that's fine.
  • Realistically how difficult is it going to be to narrow down possibilities for the change output(s) anyhow, given they'll all appear in the same block? Are we going to need to see very full blocks on a regular basis before this has any effect?
  • Does this need a short RFC?

@lehnberg lehnberg removed the question Further information is requested label Mar 7, 2020
@lehnberg lehnberg changed the title Tx-building: Avoid sharing change outputs with transacting parties Tx-building: Compact slates Apr 2, 2020
@lehnberg lehnberg added this to the 4.0.0 milestone Apr 2, 2020
@lehnberg lehnberg added the P1: Critical Top priority for a release label Apr 2, 2020
@quentinlesceller
Copy link
Member

Considering that the compact slate RFC has been merged =>mimblewimble/grin-rfcs#49
And that the corresponding code have been also merged => #404

I'm closing this issue. Awesome work @yeastplume ! 🎆

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request P1: Critical Top priority for a release
Projects
None yet
Development

No branches or pull requests

3 participants