feat(tests): EIP-7708 - finalization burn log ordering + coinbase fee no-log#2717
Conversation
Adds a dedicated test that proves finalization burn logs are emitted
in lexicographical address order when multiple accounts are marked for
deletion in the same transaction.
Parametrized over N in {2, 5}. N accounts are created and
SELFDESTRUCT'd in the same tx, then funded via payer contracts called
in REVERSE sorted address order with distinct nonzero amounts. Each
destroyed account ends with a unique nonzero balance at finalization,
so ordering by address vs. by call order is always distinguishable.
Addresses issue ethereum#2691.
Adds a dedicated test proving the coinbase priority fee payment does not produce a Transfer log. A contract CALLs the coinbase address with nonzero value while the tx pays a nonzero priority fee to that same coinbase. Only the CALL-with-value must produce a Transfer log; the priority fee credit happens outside the EVM as a protocol-level balance change. An implementation that hooks every balance addition (instead of only CALL / SELFDESTRUCT / tx-level value transfers) would emit an extra Transfer log for the fee and fail the exact-log assertion. Addresses issue ethereum#2692.
|
cc @chfast |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## eips/amsterdam/eip-7708 #2717 +/- ##
===========================================================
+ Coverage 86.14% 86.26% +0.11%
===========================================================
Files 599 599
Lines 39491 37016 -2475
Branches 3782 3802 +20
===========================================================
- Hits 34021 31930 -2091
+ Misses 4848 4522 -326
+ Partials 622 564 -58
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
chfast
left a comment
There was a problem hiding this comment.
Description looks good.
Can you also check if we have the "final burn" test were there are multiple ETH transfers to the single to-be-destructed account?
b7d3f05 to
bd3b41b
Compare
Thanks! Added and updated the PR description! |
marioevz
left a comment
There was a problem hiding this comment.
LGTM, I pushed a couple of small fixes.
… no-log (ethereum#2717) * feat(tests): EIP-7708 - multi-account finalization burn log ordering Adds a dedicated test that proves finalization burn logs are emitted in lexicographical address order when multiple accounts are marked for deletion in the same transaction. Parametrized over N in {2, 5}. N accounts are created and SELFDESTRUCT'd in the same tx, then funded via payer contracts called in REVERSE sorted address order with distinct nonzero amounts. Each destroyed account ends with a unique nonzero balance at finalization, so ordering by address vs. by call order is always distinguishable. Addresses issue ethereum#2691. * feat(tests): EIP-7708 - coinbase priority fee must not emit transfer log Adds a dedicated test proving the coinbase priority fee payment does not produce a Transfer log. A contract CALLs the coinbase address with nonzero value while the tx pays a nonzero priority fee to that same coinbase. Only the CALL-with-value must produce a Transfer log; the priority fee credit happens outside the EVM as a protocol-level balance change. An implementation that hooks every balance addition (instead of only CALL / SELFDESTRUCT / tx-level value transfers) would emit an extra Transfer log for the fee and fail the exact-log assertion. Addresses issue ethereum#2692. * feat(tests): add single account multi transfer test * fix(tests): minor nit --------- Co-authored-by: marioevz <marioevz@gmail.com>
… no-log (ethereum#2717) * feat(tests): EIP-7708 - multi-account finalization burn log ordering Adds a dedicated test that proves finalization burn logs are emitted in lexicographical address order when multiple accounts are marked for deletion in the same transaction. Parametrized over N in {2, 5}. N accounts are created and SELFDESTRUCT'd in the same tx, then funded via payer contracts called in REVERSE sorted address order with distinct nonzero amounts. Each destroyed account ends with a unique nonzero balance at finalization, so ordering by address vs. by call order is always distinguishable. Addresses issue ethereum#2691. * feat(tests): EIP-7708 - coinbase priority fee must not emit transfer log Adds a dedicated test proving the coinbase priority fee payment does not produce a Transfer log. A contract CALLs the coinbase address with nonzero value while the tx pays a nonzero priority fee to that same coinbase. Only the CALL-with-value must produce a Transfer log; the priority fee credit happens outside the EVM as a protocol-level balance change. An implementation that hooks every balance addition (instead of only CALL / SELFDESTRUCT / tx-level value transfers) would emit an extra Transfer log for the fee and fail the exact-log assertion. Addresses issue ethereum#2692. * feat(tests): add single account multi transfer test * fix(tests): minor nit --------- Co-authored-by: marioevz <marioevz@gmail.com>
🗒️ Description
Adds three focused tests filling EIP-7708 coverage gaps reported in #2691 #2692, and #2717 (review) .
test_finalization_burn_logs_multi_account_orderingVerifies finalization Burn logs are emitted in lexicographical address order when multiple accounts are marked for deletion in the same tx:
test_call_with_value_to_coinbase_no_priority_fee_logVerifies no Transfer log is emitted for the coinbase priority fee payment:
CALLwith nonzero value to the coinbase address.test_finalization_burn_log_single_account_multiple_transfersVerifies finalization emits exactly one Burn log for a single to-be-deleted account even when it receives multiple ETH transfers after
SELFDESTRUCTin the same tx:CREATEand immediatelySELFDESTRUCT'd to a beneficiary, zeroing its balance.Npayer contracts then each fund that same destroyed account with a distinct nonzero amount.🔗 Related Issues or PRs
✅ Checklist
just statictype(scope):.