Skip auto-funding for accounts that were explicitly dealt#496
Skip auto-funding for accounts that were explicitly dealt#496filip-parity merged 9 commits intomasterfrom
Conversation
|
Can you add a repro test case? |
Added testcase for this |
|
what is going to happen when vm.deal was executed exclusively within foundry side? |
| /// their balance is 0. This is intentional - vm.deal() is an explicit user action that | ||
| /// should be respected, while internal contract creations should still get auto-funding. | ||
| pub(crate) fn fund_pranked_accounts(&self, account: Address) { | ||
| // Fuzzed prank addresses have no balance, so they won't exist in revive, and |
There was a problem hiding this comment.
how does it work in REVM if prank addresses do not have any balance?
There was a problem hiding this comment.
It works, in REVM they don't need balance to execute
Balance changes don't sync back when executed in pallet-revive, it's a different issue though, we can look separately into this |
they do. ie but i digress, it can be changed in other PR. |
…github.com/paritytech/foundry-polkadot into filip/fund-pranked-accounts-dealt-tracking
|
hint from Claude AI, I did not check it in details but is worth to consider, I think: |
| pub mocked_calls: HashMap<Address, BTreeMap<MockCallDataContext, VecDeque<MockCallReturnData>>>, | ||
| pub mocked_functions: HashMap<Address, HashMap<Bytes, Address>>, | ||
| /// Records of accounts that were explicitly dealt to via vm.deal(). | ||
| pub eth_deals: Vec<DealRecord>, |
There was a problem hiding this comment.
why do we need this field if we can just pass it to fund_pranked_accounts?
|
|
||
| // Skip accounts that were explicitly dealt to via vm.deal() | ||
| if mock_inner.eth_deals.iter().any(|deal| deal.address == account) { | ||
| return; |
There was a problem hiding this comment.
maybe we should check if the balance aligns between foundry's REVM and pallet-revive and then align them if they are divergent in case of e.g vm.deal execution within a callback as it will not set the balance within pallet-revive but will be present in eth_deals.
There was a problem hiding this comment.
Also addressed, and we default to max if there is no deal
Should this be addressed in the scope of this PR? |
… directly instead of cloning
…#496) * Skip auto-funding for accounts that were explicitly dealt * Use existing eth_deals * Add repro test case for fund_pranked_accounts bug * Remove unnecessary test * Sync dealt balances to pallet-revive when pranking and pass eth_deals directly instead of cloning
* [Anvil] Fix impersonation marker collision with storage keys (#489) * [Anvil] Fix impersonation marker collision with storage keys Use 0xDE marker instead of 0x00 for impersonated transaction signatures to avoid collision with Solidity mapping key computations for slot 0. Closes #488 * !fixup af24a53a0 * Use original syntax * fix * update to latest polkadot-sdk (#467) --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com> Co-authored-by: zerosnacks <zerosnacks@protonmail.com> * Fix etch cheatcode (#486) * Add initial sync between REVM and pallet-revive (#487) * add more deposit_limits (#493) * add more deposit_limits * clippy * update compilers (#497) * update foundry-compilers * hardcode resolc version * Fix external-projects results parsing (#499) * Fix external-projects results parsing * Change to json * Add check for cheatcodes usage in pallet-revive (#494) * Add immutable support (#498) * add immutable * Remove unnecessary genesis.rs changes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * add test * refactor: improve anvil_setImmutableStorageAt API to accept Vec<Bytes> - Changed RPC interface to accept individual immutable values instead of concatenated bytes - Moved endianness conversion (big-endian to little-endian) from test to RPC handler - Updated test to pass immutable values as separate ABI-encoded Bytes elements - Simplified byte conversion logic: removed unnecessary intermediate vector, using direct indexing - Added comprehensive documentation explaining data format and conversion process - All immutable values now handled consistently with better API clarity This makes the RPC easier to invoke and aligns with how Sourcify and solc provide immutable data. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> * Fix polkadotskip test (#502) * Fix JSON parsing in external-projects CI (#501) Co-authored-by: Pavlo Khrystenko <45178695+pkhry@users.noreply.github.com> * Fix contract storage migration (#500) * Skip auto-funding for accounts that were explicitly dealt (#496) * Skip auto-funding for accounts that were explicitly dealt * Use existing eth_deals * Add repro test case for fund_pranked_accounts bug * Remove unnecessary test * Sync dealt balances to pallet-revive when pranking and pass eth_deals directly instead of cloning * Add warning when overflow happens (#503) * Set storage deposit for etched accounts (#504) * Limit uint to u64::MAX for fuzz tests (#507) * Add cheatcode tests (#435) * update compilers (#511) * Fix timestamp clamping to prevent overflow when converting to milliseconds (#510) * Default eth_estimateGas block parameter to pending to match Anvil/EDR behavior (#509) * Default eth_estimateGas to pending block to match Anvil/EDR * Fix snapshot issues (#512) * Add Claude config (#517) * Attempt to fix CI (#513) * change urls * add transient storage support in `polkadot` test execution mode (#449) * improve logging to match upstream anvil (#522) * Fix compatibility issues after syncing with master * Fmt * Remove consensus.rs * Fix retrieve para id * skip proof recorder when forking is enabled * Add comment explaining the irrelevant harcoded slot duration * Fix fmt and clippy --------- Co-authored-by: PG Herveou <pgherveou@parity.io> Co-authored-by: Pavlo Khrystenko <45178695+pkhry@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: zerosnacks <95942363+zerosnacks@users.noreply.github.com> Co-authored-by: zerosnacks <zerosnacks@protonmail.com> Co-authored-by: Sebastian Miasojed <s.miasojed@gmail.com> Co-authored-by: filip-parity <filip.baciu@parity.io> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Marian Radu <marian@parity.io> Co-authored-by: Giuseppe Re <giuseppe.re@parity.io>
Fix fund_pranked_accounts overwriting dealt account balances.
Track accounts explicitly funded via vm.deal() and skip auto-funding them in fund_pranked_accounts. Previously, pranking an account that had spent its balance to zero would incorrectly set it to u128::MAX, breaking balance assertions in tests.