-
Notifications
You must be signed in to change notification settings - Fork 134
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
Compact slate merge #404
Conversation
* 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
…erate on a raw Transaction object (#394)
* 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
* 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
There was a problem hiding this 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.
@j01tz many thanks for reviewing, and yes, we'll aim to perform a more thorough review of everything for 4.0.0 |
* 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>
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:
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.