-
Notifications
You must be signed in to change notification settings - Fork 107
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
Validate miner transaction fees #3067
Conversation
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.
Looks good to me overall. I added some comments, but they are all optional.
@teor2345 can you take a look at this one when you get some time? thanks :) |
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.
I think we need to validate the transaction fees.
Can we try validating the rule exactly as written?
If we change the equation, it's hard to get the overflow checks and field checks exactly right.
This is a merge blocker.
Sorry for the long response, I'll try to summarise it here. The consensus rule says that we need to verify the transaction fees:
You can get the transaction fees from the transaction verifier response: zebra/zebra-consensus/src/block.rs Lines 216 to 218 in 1d14032
Here's the zebra/zebra-consensus/src/transaction.rs Lines 221 to 224 in 9b17bbc
|
I opened PR #3093 to sum the miner fees from each transaction. |
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.
Looks good, I'm just going to delete a TODO, then merge.
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.
Looks good, thanks for all the tests!
* ZIPs were updated to remove ambiguity, this was tracked in #1267. * #2105 was fixed by #3039 and #2379 was closed by #3069 * #2230 was a duplicate of #2231 which was closed by #2511 * #3235 was obsoleted by #2156 which was fixed by #3505 * #1850 was fixed by #2944, #1851 was fixed by #2961 and #2902 was fixed by #2969 * We migrated to Rust 2021 edition in Jan 2022 with #3332 * #1631 was closed as not needed * #338 was fixed by #3040 and #1162 was fixed by #3067 * #2079 was fixed by #2445 * #4794 was fixed by #6122 * #1678 stopped being an issue * #3151 was fixed by #3934 * #3204 was closed as not needed * #1213 was fixed by #4586 * #1774 was closed as not needed * #4633 was closed as not needed * Clarify behaviour of difficulty spacing Co-authored-by: teor <[email protected]> * Update comment to reflect implemented behaviour Co-authored-by: teor <[email protected]> * Update comment to reflect implemented behaviour when retrying block downloads Co-authored-by: teor <[email protected]> * Update `TODO` to remove closed issue and clarify when we might want to fix Co-authored-by: teor <[email protected]> * Update `TODO` to remove closed issue and clarify what we might want to change in future Co-authored-by: teor <[email protected]> * Clarify benefits of how we do block verification Co-authored-by: teor <[email protected]> * Fix rustfmt errors --------- Co-authored-by: teor <[email protected]>
Motivation
We need to validate the last (i think) consensus rule for the coinbase subsidy which is directly related with the miner collected fees.
Close #1162
Specifications
https://zips.z.cash/protocol/protocol.pdf#txnencodingandconsensus
Solution
This is the reasoning i used, i may be wrong.
The rule is:
valueBalanceTransparent - valueBalanceSapling - valueBalanceOrchard <= blockSubsidy + fees
Lets call
valueBalanceTransparent - valueBalanceSapling - valueBalanceOrchard
justvalueBalance
, then we have:valueBalance - blockSubsidy <= fees
valueBalance - blockSubsidy - fees <= 0
valueBalance - blockSubsidy
should be at least 0(outputs should at least cover block subsidy), so thefee
should never be negative to hold the inequality.Review
Anyone who already worked in consensus rules before should be able to review.
Reviewer Checklist