-
Notifications
You must be signed in to change notification settings - Fork 27
statebloat scenarios #72
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
Conversation
Includes the scenarios contemplated within statebloat as well as any extra data about them such as gas cost metrics.
This scenario deploys contracts that are exactly 24kB in size (EIP-170 limit) to maximize state growth while minimizing gas cost. 1. Generates a contract with exactly 24,576 bytes of runtime code 2. Deploys the contract using CREATE 3. Each deployment adds: - 24,576 bytes of runtime code - Account trie node - Total state growth: ~24.7kB per deployment - 32,000 gas for CREATE - 20,000 gas for new account - 200 gas per byte for code deposit (24,576 bytes) - Total: 4,967,200 gas per deployment
- Remove redundant throughput flag and consolidate to contracts-per-tx - Remove count flag and related code for cleaner interface - Update wallet count calculation to use contracts-per-tx - Keep only two deployment rate control methods: - contracts-per-tx: direct control of contracts per transaction - gas-per-block: calculate contracts based on target gas The scenario now runs indefinitely until stopped, with cleaner and more focused configuration options.
- Add validation to ensure contract deployments don't exceed block gas limit - Check both gas-per-block and contracts-per-tx against block gas limit - Add clear error messages when gas limits are exceeded - Move validation to Run() function to access context
- Introduce multiple test cases for contract deployment: using contracts per block, gas per block, and handling invalid configurations. - Update config opts to replace `contracts-per-tx` with `contracts-per-block` for better clarity. - Add error handling for scenarios where neither gas per block nor contracts per block is set.
- Refactor gas fee parameters to align with EIP-1559 standards. - Initialize wallet pool in the contract deployment test.
- Introduced setup and teardown for contract deployment tests. - Updated scenario options to include a maximum transactions limit. St we can test for a single tx at a time and shortening testing time.
…to max (EIP170) - Introduced multiple dummy functions in the StateBloatToken contract to artificially inflate bytecode size. - Updated ABI and binary files to reflect changes in the contract structure.
- Updated the contract deployment scenario to log deployed contract addresses and gas used. - Added functionality to write deployed addresses to a JSON file for easier tracking. - Removed gas-per-block validation and adjusted wallet count logic. - Improved README with instructions for running against a local Anvil node without Go tests.
…ction tracking - Introduced a batch deployment strategy that calculates the number of contracts fitting within the block gas limit. - Added detailed tracking for deployed contracts, including gas used and bytecode size, with structured loggin. - Improved nonce management and transaction retry logic.
… logging - Added functionality to save a mapping of private keys to contract addresses in a deployments.json file after each contract deployment. - Refactored the final summary logging to focus on the deployments.json file, removing the previous detailed contract saving logic. - imporved logging to provide insights into the total number of deployers and contracts processed.
…mprove transaction handling - Removed unused imports and redundant fields. - Simplified transaction processing by releasing locks earlier. - Improved logging for transaction sending and contract deployment confirmation. - Cleaned up nonce management by directly fetching the nonce from the client.
…djustment - Added functionality to dynamically adjust transaction fees based on current network conditions. - Implemented retry logic for transaction sending with exponential backoff for base fee errors.
…s_limit - Introduced BlockDeploymentStats struct to track deployment statistics per block, including contract count, total gas used, and total bytecode size. - Implemented real-time block monitoring for logging deployment summaries. - Updated contract bytecode size calculations to reflect actual deployed bytecode. - Adjusted transaction processing intervals for improved efficiency.
Revert the changes done to the original `setcodetx`. - Move the bloating code to `eoa-delegation` under statebloat.
…ario for state bloat testing The idea is that it performs the maximum amount of SSTORE possible with the available gas limit within a single tx execution that consumes it all.
…mentation The scenario uses deployed StateBloatToken contracts from `deployments.json` to send the maximum possible number of ERC20 transfers per block. Each transfer sends 1 token to a unique, never-before-used address, maximizing state growth.
Signed-off-by: CPerezz <37264926+CPerezz@users.noreply.github.com>
Signed-off-by: CPerezz <37264926+CPerezz@users.noreply.github.com>
Signed-off-by: CPerezz <37264926+CPerezz@users.noreply.github.com>
Signed-off-by: CPerezz <37264926+CPerezz@users.noreply.github.com>
|
Hey @pk910! Thanks for this! But I hink we should be good with the PRs I made (splited the original one as we agreed upon). If we merge in order I think we should be fine. LMK if there's any issue |
|
Heya @CPerezz,
I'm currently going through the code and trying to clean it up a bit. But at the end I'm still not sure about what it is needed for? :D It seems like these state growth scenarios are all way slower than the existing complementary scenarios as you have that split funding / bloating & analyze phases looped through. But I don't really get the diff for The erc20 scenario also misses the contracts to deploy, which makes the scenario quite hard to use as you need the prerequisites (deployments file, and the contracts to deploy) from somewhere? |
I didn't realize. Will update that myself. No worries.
I can definitely change that no worries!
I ignored this. That's good to know. And perfectly explains why we should avoid the RootWallet usage. (Most of my scenarios are rate-limited anyways) but agree with you we should change it.
I see. Any particular suggestions on how to proceed otherwise?
This is needed because the cost of setting authorizations to already existing accounts is lower (saving 25kgas/account). We want to write as much code as possible in as many accounts as possible. So I need to be sure all of them are funded prior to set the authorization tuple for them. This is the reason why this scenario works in this way. I think README explains it. But I might need to clarify.
So for
I hope this explains my rationale on why I proceeded this way. |
…nto pk910/statebloat-scenarios
…pk910/statebloat-scenarios
|
Heya @CPerezz, Thanks for clarifying :) The explanations for the scenario helped me understanding the background better. Can you have another quick look across the functionality? |
98e1ca9 to
8a36be1
Compare
refactoring & merging: