-
Notifications
You must be signed in to change notification settings - Fork 274
Problem: benchmark don't support erc20 tx #1608
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
Solution: - gen erc20 contract and accounts in genesis - add option to support multiple tx types support execute erc20 transfer update ethermint fix tx add gas limit
WalkthroughThe pull request introduces a new GitHub Actions job for testing with Nix, updates the Changes
Possibly related PRs
Suggested reviewers
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #1608 +/- ##
===========================================
+ Coverage 15.24% 36.12% +20.88%
===========================================
Files 67 97 +30
Lines 4874 7725 +2851
===========================================
+ Hits 743 2791 +2048
- Misses 4037 4585 +548
- Partials 94 349 +255 |
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.
Actionable comments posted: 9
Outside diff range and nitpick comments (18)
testground/benchmark/benchmark/test_utils.py (1)
4-9: LGTM: Test function is implemented correctly, with room for improvement.The
test_merge_genesis()function correctly tests a basic scenario for merging two dictionaries with account information. However, consider the following suggestions to enhance the test coverage and clarity:
- Add a docstring explaining the purpose of the test and the expected behavior of
merge_genesis.- Include additional test cases to cover more complex scenarios, such as:
- Merging dictionaries with different nested structures
- Handling of non-list values in the "accounts" field
- Merging dictionaries with conflicting values
- Verify the entire structure of the merged dictionary, not just the "accounts" list.
- Consider using parameterized tests to cover multiple scenarios efficiently.
Here's an example of how you could enhance the test function:
import pytest from .utils import merge_genesis @pytest.mark.parametrize("dict1, dict2, expected", [ ( {"app_state": {"auth": {"accounts": [1]}}}, {"app_state": {"auth": {"accounts": [2]}}}, {"app_state": {"auth": {"accounts": [1, 2]}}} ), ( {"app_state": {"auth": {"accounts": [1]}, "bank": {"balances": [{"address": "addr1", "coins": [{"denom": "token", "amount": "100"}]}]}}}, {"app_state": {"auth": {"accounts": [2]}, "bank": {"balances": [{"address": "addr2", "coins": [{"denom": "token", "amount": "200"}]}]}}}, {"app_state": {"auth": {"accounts": [1, 2]}, "bank": {"balances": [ {"address": "addr1", "coins": [{"denom": "token", "amount": "100"}]}, {"address": "addr2", "coins": [{"denom": "token", "amount": "200"}]} ]}}} ), ]) def test_merge_genesis(dict1, dict2, expected): """ Test the merge_genesis function with various input scenarios. This test verifies that merge_genesis correctly combines two dictionaries representing application states, properly merging nested structures and lists. """ result = merge_genesis(dict1, dict2) assert result == expected, f"Expected {expected}, but got {result}"This enhanced version uses parameterized tests to cover multiple scenarios and provides a clear docstring explaining the test's purpose.
testground/benchmark/overlay.nix (2)
12-12: LGTM! Consider updating documentation.The addition of
pytest-github-actions-annotate-failuresto the build systems is appropriate and aligns with improving the project's testing infrastructure. This package will help in annotating test failures in GitHub Actions, enhancing the visibility of test results.Consider updating the project's documentation to mention this new dependency and its purpose in the CI/CD pipeline. This will help other developers understand why it's included and how it's used.
Line range hint
1-47: Overall structure looks good. Minor suggestion for readability.The file structure is well-organized and follows Nix conventions. The new addition fits seamlessly into the existing structure.
To improve readability, consider adding a brief comment at the top of the file explaining its purpose and the role of the
buildSystemsattribute set. This will help future maintainers quickly understand the file's function.Example:
# This file defines a Nix overlay for managing Python dependencies and build systems. # The `buildSystems` attribute set specifies the build system for each package. final: _: let overrides = { lib, poetry2nix }: poetry2nix.overrides.withDefaults (self: super: let buildSystems = { # ... existing entries ... }; # ... rest of the file ....github/workflows/test.yml (3)
116-118: Consider updating checkout action and reviewing fetch depth.
- The
actions/checkoutaction has a newer version (v4) available. Consider updating for potential improvements and bug fixes.- Setting
fetch-depth: 0fetches the entire repository history. Is this full history necessary for the testground tests? If not, consider using a limited fetch depth to improve checkout speed.- - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: - fetch-depth: 0 + fetch-depth: 1 # Or the minimum depth required for your tests
119-123: Consider updating Nixpkgs channel version.The current configuration uses
nixos-22.11. There might be newer versions available that could provide bug fixes, performance improvements, or new features. Consider updating to a more recent stable version if compatible with your project requirements.with: - nix_path: nixpkgs=channel:nixos-22.11 + nix_path: nixpkgs=channel:nixos-23.11 # Or the latest stable version compatible with your project
130-133: LGTM: Test execution is well-configured, with a minor suggestion.The test execution step is correctly set up, using a Nix development environment for consistency and appropriate pytest flags for detailed output.
Consider adding a step to cache the Nix environment to speed up future runs:
- uses: actions/cache@v3 with: path: | ~/.cache/nix ~/.cache/nixpkgs key: ${{ runner.os }}-nix-${{ hashFiles('**/flake.nix', '**/flake.lock') }} restore-keys: | ${{ runner.os }}-nix-testground/benchmark/benchmark/stateless.py (3)
59-59: LGTM! Consider adding a description for the--tx-typeoption.The addition of the
--tx-typeoption aligns well with the PR objective of supporting multiple transaction types. This change enhances the flexibility of the benchmarking tool.Consider adding a description for the
--tx-typeoption to improve clarity:@click.option("--tx-type", default="simple-transfer", help="Type of transaction to generate (e.g., 'simple-transfer', 'erc20-transfer')")
81-81: LGTM! Consider adding type hinting for thetx_typeparameter.The addition of the
tx_typeparameter to the_genfunction and its inclusion in the configuration dictionary are consistent with the PR objectives and the changes in thegencommand.Consider adding type hinting for the
tx_typeparameter to improve code readability:def _gen( # ... other parameters ... tx_type: str = "simple-transfer", # ... rest of the function ... ): # ... function body ...Also applies to: 143-143
209-209: LGTM! Consider adding a description for the--tx-typeoption ingen_txscommand.The updates to the
gen_txsand_gen_txsfunctions, including the addition of thetx_typeparameter and its usage in thetransaction.genfunction call, are consistent with the PR objectives and the changes in other parts of the file.For consistency with the
gencommand, consider adding a description for the--tx-typeoption in thegen_txscommand:@click.option("--tx-type", default="simple-transfer", help="Type of transaction to generate (e.g., 'simple-transfer', 'erc20-transfer')")Also applies to: 226-226, 253-255
testground/benchmark/flake.nix (1)
Line range hint
26-35: Consider Removing DuplicateappsEntriesBoth
apps.defaultandapps.stateless-testcasepoint to the same program${pkgs.benchmark-testcase}/bin/stateless-testcase. Unless there's a specific need for both entries, this duplication may be unnecessary.Apply the following diff to remove the redundant entry:
apps = { - default = { - type = "app"; - program = "${pkgs.benchmark-testcase}/bin/stateless-testcase"; - }; stateless-testcase = { type = "app"; program = "${pkgs.benchmark-testcase}/bin/stateless-testcase"; }; };testground/benchmark/benchmark/utils.py (1)
34-45: Clarify and document the merger configuration for better maintainabilityThe
_mergerconfiguration is deeply nested and sets custom merge strategies forauthandevmaccounts withinapp_state. Consider adding comments to explain the purpose of each section and the reasons for using the "append" merge strategy. This will enhance readability and make it easier for future developers to understand and maintain the code.testground/benchmark/benchmark/peer.py (1)
Line range hint
118-134: Review genesis configuration changes for correctness and performanceThe
patch_genesisfunction updates the genesis file with new consensus parameters and app state configurations. Consider verifying the following:
Block Max Gas: The
max_gasparameter is set to"163000000". Ensure that this value is appropriate for the network's block capacity and does not lead to performance issues.EVM Denomination: The
evm_denomis set to"basecro", which should match the denomination used throughout the network. Verify for consistency.Fee Market Settings: The
feemarketparameter"no_base_fee": Truedisables the base fee mechanism. Confirm that this aligns with the intended economic model for the network.testground/benchmark/benchmark/erc20.py (4)
7-7: Improve readability ofINITIAL_AMOUNT.The
INITIAL_AMOUNTis set to100000000000000000, which can be hard to read. Consider using exponential notation or underscores for better readability.Apply this diff to improve readability:
-INITIAL_AMOUNT = 100000000000000000 +INITIAL_AMOUNT = 10**17 # 0.1 ether in wei
11-11: Add type annotations for function parameters.Including type annotations improves code readability and assists with static analysis.
Update the function signature and import necessary types:
+from typing import List, Tuple -def genesis_accounts(contract_address, addresses) -> (list, list): +def genesis_accounts(contract_address: str, addresses: List[str]) -> Tuple[List, List]:
30-31: Clarify magic numbers in storage keys and values.The use of
2in the storage key and the value"0x1" + "0" * 63may not be immediately clear. Defining constants or adding comments enhances readability.Example:
+TOTAL_SUPPLY_KEY = 2 +TOTAL_SUPPLY_VALUE = "0x1" + "0" * 63 # Represents total supply in Wei { # Total supply - "key": HexBytes(eth_abi.encode(["uint"], [2])).hex(), - "value": "0x1" + "0" * 63, + "key": HexBytes(eth_abi.encode(["uint"], [TOTAL_SUPPLY_KEY])).hex(), + "value": TOTAL_SUPPLY_VALUE, },
52-52: Definebytecodebefore its usage.The variable
bytecodeis used in the function before it's defined. For better code organization and readability, definebytecodeat the beginning of the file.Move the
bytecodedefinition above the function:+bytecode = "6080604052348015610010... (truncated for brevity)" def genesis_accounts(contract_address, addresses) -> Tuple[List, List]: # Function implementation -bytecode = "6080604052348015610010... (truncated for brevity)"testground/benchmark/benchmark/transaction.py (2)
31-31: Enhance comment clarity for better understandingConsider improving the comment to clearly describe the purpose of the data payload being constructed for the ERC20 transfer function call.
Suggested change:
- # data is erc20 transfer function call + # Prepare data payload for ERC20 transfer function call
56-56: Consider replacingUsing
loggingmodule to provide configurable logging levels and better control over output.Suggested change:
import logging +logging.basicConfig(level=logging.INFO) def gen(global_seq, num_accounts, num_txs, tx_type: str) -> [str]: # ... if len(txs) % 1000 == 0: - print("generated", len(txs), "txs for node", global_seq) + logging.info(f"Generated {len(txs)} txs for node {global_seq}")Similarly, in the
async_sendtxfunction:async def async_sendtx(session, raw): # ... if "error" in data: - print("send tx error", data["error"]) + logging.error(f"Send tx error: {data['error']}")
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files ignored due to path filters (2)
go.sumis excluded by!**/*.sumtestground/benchmark/poetry.lockis excluded by!**/*.lock
Files selected for processing (12)
- .github/workflows/test.yml (1 hunks)
- go.mod (1 hunks)
- gomod2nix.toml (1 hunks)
- testground/benchmark/benchmark/erc20.py (1 hunks)
- testground/benchmark/benchmark/peer.py (2 hunks)
- testground/benchmark/benchmark/stateless.py (6 hunks)
- testground/benchmark/benchmark/test_utils.py (1 hunks)
- testground/benchmark/benchmark/transaction.py (2 hunks)
- testground/benchmark/benchmark/utils.py (1 hunks)
- testground/benchmark/flake.nix (2 hunks)
- testground/benchmark/overlay.nix (1 hunks)
- testground/benchmark/pyproject.toml (1 hunks)
Additional comments not posted (18)
testground/benchmark/benchmark/test_utils.py (1)
1-1: LGTM: Import statement is correct.The import statement correctly imports the
merge_genesisfunction from the localutilsmodule.testground/benchmark/pyproject.toml (2)
24-24: LGTM! Consider checking for the latest compatible version.The addition of
pytest-github-actions-annotate-failuresis a good improvement for enhancing test failure reporting in GitHub Actions. This aligns well with the project's focus on code quality and testing.To ensure you're using the most up-to-date version, please run the following command:
#!/bin/bash # Description: Check the latest version of pytest-github-actions-annotate-failures poetry show pytest-github-actions-annotate-failures | grep -i "latest"If a newer compatible version is available, consider updating the version constraint in the
pyproject.tomlfile.
22-22: LGTM! Consider updating Poetry version if not already done.The change from
[tool.poetry.dev-dependencies]to[tool.poetry.group.dev.dependencies]reflects an update in Poetry's syntax for specifying development dependencies. This new syntax allows for more granular control over dependency groups.To ensure compatibility, please verify the Poetry version:
If the version is below 1.2.0, consider updating Poetry to the latest version to fully support this new syntax.
.github/workflows/test.yml (3)
113-114: LGTM: Job definition is clear and follows best practices.The new job
testground-testis well-defined and uses the recommendedubuntu-latestrunner.
124-129: LGTM: Cachix setup is well-configured.The Cachix setup is correctly implemented, using appropriate security practices by storing the signing key in GitHub secrets. The comment about secrets handling for fork PRs is helpful for understanding the workflow behavior.
113-133: Overall assessment: Well-structured new job with room for minor improvements.The new
testground-testjob is a valuable addition to the CI/CD pipeline. It follows GitHub Actions best practices and is well-structured. The suggestions provided earlier (updating action versions, reviewing fetch depth, updating Nixpkgs channel, and adding caching) can further optimize the job's performance and maintainability.Great job on implementing this new testing workflow!
testground/benchmark/benchmark/stateless.py (1)
Line range hint
1-430: Overall, the changes look good and align with the PR objectives.The modifications effectively introduce support for multiple transaction types in the benchmarking system while maintaining backward compatibility. The changes are well-integrated into the existing codebase.
To ensure that the new
tx_typeparameter is correctly propagated through the system, it would be beneficial to verify its usage in thetransactionmodule. Run the following script to check the implementation of thetransaction.genfunction:This will help confirm that the
transaction.genfunction is properly implemented to handle different transaction types.Verification successful
Action Required: The previous search attempt failed due to an unrecognized file type. Please run the following script to locate the
genfunction implementation within.pyfiles:
Verification Successful: The
tx_typeparameter is correctly implemented in thetransaction.genfunction.The
genfunction properly utilizes thetx_typeparameter to support multiple transaction types, aligning with the PR objectives and ensuring seamless integration within the benchmarking system.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the implementation of transaction.gen function # Test: Search for the transaction.gen function implementation rg --type python -A 10 'def gen\(' testground/benchmark/benchmark/transaction.pyLength of output: 113
Script:
#!/bin/bash # Description: Verify the implementation of transaction.gen function by searching in .py files # Test: Search for the transaction.gen function implementation within .py files rg 'def gen\(' --glob '*.py' testground/benchmark/benchmark/transaction.py -A 10Length of output: 539
go.mod (1)
280-280: Ethermint dependency update approvedThe update to the
github.com/evmos/ethermintdependency fromv0.6.1-0.20240923011104-7e3076202e6dtov0.6.1-0.20240925024103-f2a562ba9b9faligns with the PR objectives of updating Ethermint. This change is likely necessary for supporting ERC20 transactions in the benchmarking system.To ensure the update doesn't introduce any compatibility issues, please run the following verification steps:
Please review the output of these commands to ensure there are no unexpected breaking changes, test failures, or deprecation warnings related to the Ethermint update.
gomod2nix.toml (1)
268-269: LGTM. Verify compatibility with the updated Ethermint version.The update to the
github.com/evmos/ethermintmodule looks good. The version has been bumped to a newer commit (v0.6.1-0.20240925024103-f2a562ba9b9f), which aligns with the PR objective of updating Ethermint.To ensure compatibility, please run the following verification script:
testground/benchmark/flake.nix (2)
Line range hint
13-41: Refactoredflake.nixEnhances Simplicity and MaintainabilityThe modification to use
flake-utils.lib.eachDefaultSystemstreamlines the Nix flake configuration. By eliminating redundant definitions and leveragingeachDefaultSystem, the code becomes cleaner and easier to maintain. The overlays are correctly applied, and the package imports are properly configured.
Line range hint
37-39: Verify the Definition ofbenchmark-testcase-envIn
devShells.default,buildInputsincludes[ pkgs.benchmark-testcase-env ]. Ensure thatbenchmark-testcase-envis correctly defined in the package set, especially since previous definitions likebenchmark-envhave been removed. This will confirm that the development shell has all the necessary dependencies.Run the following script to check if
benchmark-testcase-envis defined:testground/benchmark/benchmark/utils.py (3)
52-54: Confirm thatpatch_genesisfunctions correctly after modificationThe
patch_genesisfunction now utilizesmerge_genesisinstead of the previously usedpatch_json. Ensure that this change does not affect the functionality and that the genesis file is patched as expected. Pay attention to any differences in how the merging strategies might impact the final genesis configuration.
Line range hint
1-88: Remove unused imports to clean up the codeWith the removal of the
patch_jsonfunction, there might be imports that are no longer necessary, such asjsonmergeif not used elsewhere. Review the import statements at the beginning of the file and remove any that are no longer needed to keep the codebase clean.You can run the following script to list all imports and manually verify their usage:
#!/bin/bash # Description: List all imports in the file for manual verification. grep -E '^import|^from' testground/benchmark/benchmark/utils.py
48-50: Ensure the newmerge_genesisfunction integrates seamlesslyThe
merge_genesisfunction introduces a new way to merge genesis files using the custom_merger. Verify that this function correctly handles all merge scenarios and that it maintains the intended behavior of the genesis merging process.You can run the following script to confirm that
merge_genesisis being used appropriately and that there are no residual references to the oldpatch_jsonfunction:Verification successful
merge_genesisIntegration Verified SuccessfullyThe
merge_genesisfunction is correctly integrated and actively used in the following files:
testground/benchmark/benchmark/utils.pytestground/benchmark/benchmark/test_utils.pytestground/benchmark/benchmark/peer.pyThere are no remaining references to
patch_jsonin the codebase.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify usage of `merge_genesis` and ensure `patch_json` is not referenced elsewhere. # Test: Search for occurrences of `merge_genesis` and `patch_json`. # Expectation: `merge_genesis` is used where genesis merging is required, and `patch_json` is not found in the codebase. rg --type py 'merge_genesis' rg --type py 'patch_json'Length of output: 1147
Script:
#!/bin/bash # Description: Verify usage of `merge_genesis` and ensure `patch_json` is not referenced elsewhere. # Search for occurrences of `merge_genesis` in Python files. rg --type py 'merge_genesis' # Search for any occurrences of `patch_json` in Python files. rg --type py 'patch_json'Length of output: 538
testground/benchmark/benchmark/peer.py (3)
10-10: Importing 'erc20' moduleThe import of the
erc20module indicates the addition of ERC20 token support functionality.
13-20: Updated utility imports to support new featuresNew utility functions such as
bech32_to_eth,patch_genesis, and others have been imported. These are necessary for handling address conversions and genesis file modifications related to ERC20 support.
115-117: Generating EVM and Auth accounts for ERC20 supportThe code correctly generates
evm_accountsandauth_accountsby invokingerc20.genesis_accounts, ensuring that Ethereum-compatible accounts are included in the genesis file.testground/benchmark/benchmark/erc20.py (1)
42-42: Ensure correct Bech32 address conversion.Verify that the
eth_to_bech32function correctly converts the contract address to the required Bech32 format forbase_account.Run the following script to test the address conversion:
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.
Actionable comments posted: 2
Outside diff range and nitpick comments (1)
testground/benchmark/benchmark/transaction.py (1)
30-41: LGTM: Added ERC20 transfer transaction functionThe new
erc20_transfer_txfunction correctly constructs an ERC20 transfer transaction. It properly uses theCONTRACT_ADDRESSandRECIPIENTconstants, and correctly encodes the transfer function call data.Consider optimizing the gas limit for ERC20 transfers. Typically, ERC20 transfers require around 50,000 gas. You could adjust the gas limit to:
- "gas": 60000, + "gas": 50000,This may help reduce transaction costs. However, please verify this value against your specific ERC20 contract implementation.
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (2)
- testground/benchmark/benchmark/peer.py (2 hunks)
- testground/benchmark/benchmark/transaction.py (2 hunks)
Files skipped from review as they are similar to previous changes (1)
- testground/benchmark/benchmark/peer.py
Additional comments not posted (4)
testground/benchmark/benchmark/transaction.py (4)
5-5: LGTM: Import eth_abi for ERC20 transfer encodingThe addition of
import eth_abiis appropriate for encoding ERC20 transfer function parameters in the newerc20_transfer_txfunction.
16-16: LGTM: Fixed recipient constantThe
RECIPIENTconstant has been correctly defined and the typo in the variable name has been fixed as suggested in a previous review.
19-21: LGTM: Improved function naming and recipient handlingThe changes in this segment improve code clarity:
- Renaming
test_txtosimple_transfer_txbetter describes the function's purpose.- Using the
RECIPIENTconstant instead of a hardcoded zero address enhances flexibility and consistency.
44-47: LGTM: Added transaction type mappingThe new
TX_TYPESdictionary is an excellent addition:
- It allows for dynamic selection of transaction types.
- It supports both simple transfers and ERC20 transfers.
- The structure facilitates easy addition of new transaction types in the future.
This change enhances the flexibility and extensibility of the transaction generation system.
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.
Actionable comments posted: 2
🧹 Outside diff range and nitpick comments (1)
testground/benchmark/benchmark/transaction.py (1)
30-41: LGTM: ERC20 transfer function addedThe
erc20_transfer_txfunction correctly constructs an ERC20 transfer transaction with appropriate parameters.Consider adding a comment explaining the structure of the
datafield for better maintainability:# data structure: function selector (4 bytes) + encoded parameters # function selector: keccak256("transfer(address,uint256)")[0:4] # encoded parameters: recipient address (32 bytes) + amount (32 bytes) data = "0xa9059cbb" + eth_abi.encode(["address", "uint256"], [RECIPIENT, 1]).hex()
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (1)
- testground/benchmark/benchmark/transaction.py (2 hunks)
🔇 Additional comments not posted (3)
testground/benchmark/benchmark/transaction.py (3)
16-16: LGTM: RECIPIENT constant addedThe
RECIPIENTconstant is correctly defined with a valid Ethereum address format.
Line range hint
19-27: LGTM: Improved simple transfer functionThe
simple_transfer_txfunction (renamed fromtest_tx) now uses theRECIPIENTconstant, improving flexibility and readability.
44-47: LGTM: Transaction types dictionary addedThe
TX_TYPESdictionary provides a clean way to map transaction types to their corresponding functions, improving code organization and extensibility.
Solution:
support execute erc20 transfer
update ethermint
fix tx
add gas limit
👮🏻👮🏻👮🏻 !!!! REFERENCE THE PROBLEM YOUR ARE SOLVING IN THE PR TITLE AND DESCRIBE YOUR SOLUTION HERE !!!! DO NOT FORGET !!!! 👮🏻👮🏻👮🏻
PR Checklist:
make)make test)go fmt)golangci-lint run)go list -json -m all | nancy sleuth)Thank you for your code, it's appreciated! :)
Summary by CodeRabbit
New Features
testground-testin the GitHub Actions workflow for enhanced testing capabilities.--tx-typeenables customization of transaction types during generation.pytest-github-actions-annotate-failuresto improve testing feedback.Bug Fixes
Documentation
Tests
test_merge_genesisadded to validate the merging of application state dictionaries.