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

Compact slate merge #404

Merged
merged 22 commits into from
May 19, 2020
Merged

Compact slate merge #404

merged 22 commits into from
May 19, 2020

Conversation

yeastplume
Copy link
Member

@yeastplume yeastplume commented May 11, 2020

Implementation of Compact Slates as defined in the Compact Slates RFC

Functionality should be exactly as defined in the RFC. In addition, this version of the code has been tested against 3.0.0 wallets and should be completely compatible with them.

There is a lot to review here, and very limited time before 4.0.0, so I'd ask the review focus to be:

  • Ensuring there are no obvious security issues
  • Ensuring what's here matches the RFC

Rust style issues, minor things that could be coded more efficiently, etc can be marked down, but I only intend on addressing any major issues that may come up for the time being.

The PR history making up this branch is basically all PRs from #366 Onwards. It should be much easier to review this series of PRs rather than looking at this PR's diff.

This will be merged along with the RFC at the end of the RFC's FCP, (May 21st, 2020). Again, time is very limited before 4.0.0 so I'd ask everyone to try and at least give this a once-over between now and then.

yeastplume and others added 21 commits April 17, 2020 11:21
* WIP add support for sending compact slates

* add repopulate_tx function to internal API

* first pass at compacted slate working

* move slate compaction to separate function

* test fixes

* support compact slate inits in invoice workflow

* add compress flags to send and invoice

* attempting to remove is_compact and assume all V4 slates begin as compact

* attempting to calculate offsets when full tx data isn't available

* update calc_commit to use participant blind data

* update doctests for compact slates

* start to remove unneeded fields from serialization

* make num_participants optional

* remove other_version from slate

* use grin master branch

* remove message field

* lock height assumed to be 0 if it doesn't exist

* don't serialise receiver signature when null

* don't serialize payment_info if not needed

* remove participant id from participant info

* add note on id field

* fix finalize and receive doctests

* finalize_tx tests, init_send_tx tests

* doctests for process_invoice_tx, retrieve_tx, tx_lock_outputs

* finished test changes

* update from grin master
* add state field to slate and SlateV4

* set slate state at each transaction stage, add check to tests

* serialize slate status properly
* various tweaks to V4 slate

* field renaming
* add tests for all types of file output, remove message args

* default range proof serialization

* shorten output features serialization

* rename payment proof fields in slate v4

* v4 payment proof serialization
* start test implementation

* add experimental binary serialization to slate

* serialize id

* serialize fields that can be skipped as a separate struct

* factor out sigs serialization

* clean up sigs and coms serialization

* completed v4 bin serialization

* add manual de/ser traits for V4 bin slate

* add simple byte array serializer

* complete wiring in of bin slate serialization

* clarify comment

* clarify comment

* update version

* test output dir name fix

* update slate v4 change description

* add binary output to command line
* remove unneeded return signature data during S2

* remove unneeded sig data from I2
* begin to fix doctests

* more doctest fixes

* fix receive_tx
* unstash post_tx changes

* add offset during S3 and I3
* changes to support http sending to v3 wallets

* sending via http/tor TO 3.0.0 wallet works

* receiving FROM 3.0.0 wallets works over http/tor

* output converted V3 slate when needed

* paying invoices from 3.0.0 wallets working

* handle all participant info in slate states

* sending and receiving standard file transactions between v3 and 4 wallets confirmed working

* all file-based workflows working

* fixes resulting from tests

* remove reminder warnings
Co-authored-by: Antioch Peverell <apeverell@protonmail.com>
* initial tests reworking offset creation

* invoice flow fixing + tests

* further test fixes

* change offset name in v4 slate, base64 serialize

* logic optimisation

* changes based on review feedback
Copy link
Member

@j01tz j01tz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Today I went on a journey with the past month of your work here @yeastplume great effort putting all of this together so fast 🚀

I manually browsed the diffs from each PR to look for glaring security issues and to check the general implementation logic as specified in the RFC and didn't see any major issues worth mentioning on an initial pass.

I would consider this review very surface level as I haven't spent any time with the wallet code since it was in the node and am not an expert rustacean. We will definitely want a thorough review of all of the new transaction code being added before the next HF. Maybe once slatepack finishes we can knock it all out at once with a focused security review.

@yeastplume
Copy link
Member Author

@j01tz many thanks for reviewing, and yes, we'll aim to perform a more thorough review of everything for 4.0.0

@yeastplume yeastplume merged commit 9450d2a into master May 19, 2020
@yeastplume yeastplume deleted the 4.0.0/compact_slates branch May 19, 2020 11:33
antiochp added a commit to antiochp/grin-wallet that referenced this pull request Aug 7, 2020
* Add support for sending compact slates (mimblewimble#366)

* WIP add support for sending compact slates

* add repopulate_tx function to internal API

* first pass at compacted slate working

* move slate compaction to separate function

* test fixes

* support compact slate inits in invoice workflow

* add compress flags to send and invoice

* attempting to remove is_compact and assume all V4 slates begin as compact

* attempting to calculate offsets when full tx data isn't available

* update calc_commit to use participant blind data

* update doctests for compact slates

* start to remove unneeded fields from serialization

* make num_participants optional

* remove other_version from slate

* use grin master branch

* remove message field

* lock height assumed to be 0 if it doesn't exist

* don't serialise receiver signature when null

* don't serialize payment_info if not needed

* remove participant id from participant info

* add note on id field

* fix finalize and receive doctests

* finalize_tx tests, init_send_tx tests

* doctests for process_invoice_tx, retrieve_tx, tx_lock_outputs

* finished test changes

* update from grin master

* rebuild PR from diff (mimblewimble#380)

* recreate PR from diff (mimblewimble#381)

* serialize tx struct into top level coms object (mimblewimble#382)

* remove height (mimblewimble#383)

* Add State Slate (mimblewimble#384)

* add state field to slate and SlateV4

* set slate state at each transaction stage, add check to tests

* serialize slate status properly

* V4 Slate field tweaks (mimblewimble#386)

* various tweaks to V4 slate

* field renaming

* serialize slate v4 ID as base64 (mimblewimble#387)

* remove amount and fee where not needed (mimblewimble#388)

* Final Changes for compact Slate (mimblewimble#389)

* add tests for all types of file output, remove message args

* default range proof serialization

* shorten output features serialization

* rename payment proof fields in slate v4

* v4 payment proof serialization

* Binary Slates (mimblewimble#385)

* start test implementation

* add experimental binary serialization to slate

* serialize id

* serialize fields that can be skipped as a separate struct

* factor out sigs serialization

* clean up sigs and coms serialization

* completed v4 bin serialization

* add manual de/ser traits for V4 bin slate

* add simple byte array serializer

* complete wiring in of bin slate serialization

* clarify comment

* clarify comment

* update version

* test output dir name fix

* update slate v4 change description

* add binary output to command line

* Remove unneeded signature data during S2 and I2 stages (mimblewimble#390)

* remove unneeded return signature data during S2

* remove unneeded sig data from I2

* Doctest Fixes for compact slate branch (mimblewimble#392)

* begin to fix doctests

* more doctest fixes

* fix receive_tx

* update get_stored_tx to accept an UUID instead of a tx object, and operate on a raw Transaction object (mimblewimble#394)

* Fixes to async transaction posting (mimblewimble#395)

* unstash post_tx changes

* add offset during S3 and I3

* Revert slate id serialization to hex-string uuid (mimblewimble#396)

* update from master (mimblewimble#397)

* v3.x.x - v4.0.0 wallet compatibility fixes (mimblewimble#398)

* changes to support http sending to v3 wallets

* sending via http/tor TO 3.0.0 wallet works

* receiving FROM 3.0.0 wallets works over http/tor

* output converted V3 slate when needed

* paying invoices from 3.0.0 wallets working

* handle all participant info in slate states

* sending and receiving standard file transactions between v3 and 4 wallets confirmed working

* all file-based workflows working

* fixes resulting from tests

* remove reminder warnings

* remove lock_height, add kernel_features + arguments (mimblewimble#399)

* grin-wallet master now building against grin master (mimblewimble#402) (mimblewimble#403)

Co-authored-by: Antioch Peverell <apeverell@protonmail.com>

* Enhanced offset creation (mimblewimble#407)

* initial tests reworking offset creation

* invoice flow fixing + tests

* further test fixes

* change offset name in v4 slate, base64 serialize

* logic optimisation

* changes based on review feedback

Co-authored-by: Antioch Peverell <apeverell@protonmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants