diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..19f71ad --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,118 @@ +# AGENTS Guidelines for This Repository + +This repository contains Chainbench, a blockchain infrastructure benchmarking tool built on Locust. When working on the project interactively with an agent (e.g. the Codex CLI) please follow the guidelines below for efficient development and testing. + +## 1. Use Headless Mode for Development Testing + +* **Always use headless mode** with short test durations during development. +* **Start with minimal load** (few users, low spawn rate) to validate changes. +* **Do _not_ run long-duration tests** during agent development sessions. +* **Use `--autoquit`** flag to ensure tests terminate properly. + +Example test command: +```bash +poetry run chainbench start --profile evm.light --users 5 --workers 1 --test-time 30s --target https://test-node --headless --autoquit +``` + +## 2. Keep Dependencies in Sync + +If you add or update dependencies: + +1. Use Poetry to manage dependencies: `poetry add ` or `poetry add --group dev `. +2. Run `poetry lock --no-update` to update the lock file. +3. Install updated dependencies with `poetry install`. +4. Verify compatibility with Python 3.10+ as specified in the project. + +## 3. Coding Conventions + +* Follow Black formatting (120-character line length). +* Use isort for import sorting (Black-compatible profile). +* Follow Flake8 linting rules (ignore E203 and W503 for Black compatibility). +* Use type hints where appropriate. +* Keep MyPy checks passing. + +## 4. Code Quality Checks + +Before completing any task, run these quality checks: + +| Command | Purpose | +| ------------------------ |----------------------------------| +| `poetry run black .` | Format code to project standards | +| `poetry run isort .` | Sort imports | +| `poetry run flake8` | Run linting checks | +| `poetry run mypy .` | Run type checks | + +Or use pre-commit hooks: +```bash +poetry run pre-commit run --all-files +``` +If running pre-commit hooks for the first time, run this first: +```bash +poetry run pre-commit install +``` + +## 5. Testing Guidelines + +Test changes progressively: + +1. **Unit testing**: Test individual user classes and methods +2. **Profile validation**: Verify profiles load correctly + ```bash + poetry run chainbench list profiles + ``` +3. **Short headless tests**: Run brief tests with minimal load +4. **Method discovery**: Test endpoint compatibility + ```bash + poetry run chainbench discover https://test-node --clients geth + ``` + +## 6. Profile Development + +When creating or modifying profiles: + +* Place custom profiles in the canonical directory: `chainbench/profile//…` +* Follow existing profile structure and conventions. +* Include docstrings explaining profile purpose. +* Test with small data sizes first (`--size XS`). +* Validate against multiple node types when applicable. + +## 7. Working with Test Data + +* Start with smallest data size (`--size XS`) for development. +* Use `--use-latest-blocks` for nodes with limited history. +* Consider using `--ref-url` for test data generation from a reference node. +* Monitor memory usage with larger data sizes. + +## 8. Development Workflow + +1. Make changes to source code +2. Run formatting: `poetry run black . && poetry run isort .` +3. Run linting: `poetry run flake8` +4. Run type checking: `poetry run mypy .` +5. Test with minimal profile first +6. Gradually increase complexity and load + +## 9. Useful Commands Recap + +| Command | Purpose | +| ------------------------------------------------ | ------------------------------------- | +| `poetry install` | Install all dependencies | +| `poetry run chainbench --help` | Show all available commands | +| `poetry run chainbench start --help` | Show options for running a benchmark | +| `poetry run chainbench --version` | Show CLI version | +| `poetry run chainbench list methods` | List supported RPC methods | +| `poetry run chainbench list profiles` | List available profiles | +| `poetry run chainbench list shapes` | List load pattern shapes | +| `poetry run chainbench discover ` | Discover available methods | + +## 10. Safety Reminders + +* **Test against test/dev nodes first** before production nodes. +* **Monitor target node health** during benchmarks. +* **Use appropriate rate limits** to avoid overwhelming nodes. +* **Start with light profiles** before heavy ones. +* **Keep test durations short** during development. + +--- + +Following these practices ensures reliable development, prevents overwhelming blockchain nodes, and maintains code quality. Always prioritize controlled testing and gradual load increases when benchmarking infrastructure. \ No newline at end of file diff --git a/CONTRIBUTION.md b/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTION.md rename to CONTRIBUTING.md diff --git a/README.md b/README.md index 1afa375..dfc9954 100644 --- a/README.md +++ b/README.md @@ -170,6 +170,13 @@ Other available shapes are: - `step` - The load will increase in steps. `--spawn-rate` flag is required to specify the step size. The number of steps will be calculated based on `--users` divided by `--spawn-rate`. The duration of each step will be calculated based on `--test-time` divided by the number of steps. - `spike` - The load will run in a spike pattern. The load will ramp up to 10% of the total users for 40% of the test duration and then spike to 100% of the total users as specified by `--users` for 20% of test duration and then reduce back to 10% of total users until the test duration is over. +Use the following command to list all shapes in chainbench/shapes +```shell +chainbench list shapes +``` +You may add your own custom shapes by copying one of the existing shapes in chainbench/shapes and modifying them to fit your requirements. + + ### Test Data Size You may specify the test data size using the `--size` flag. This will determine how much data is used in the test. Take note that larger data size will result in longer test data generation time before the test starts. @@ -251,3 +258,7 @@ If you don't specify the `--clients` option, the tool will default to Ethereum J ## License This project is licensed under the [Apache 2.0 License](LICENSE). + +## Development +- [Contributing](CONTRIBUTING.md) +- [Agents](AGENTS.md) \ No newline at end of file diff --git a/chainbench/test_data/solana.py b/chainbench/test_data/solana.py index 226c51b..48edcdb 100644 --- a/chainbench/test_data/solana.py +++ b/chainbench/test_data/solana.py @@ -104,6 +104,14 @@ def _get_start_and_end_blocks(self, parsed_options: Namespace) -> BlockRange: # factor in run_time and add 10% buffer to ensure blocks used in test data are # not removed from the ledger earliest_available_block_number += int((parsed_options.run_time / self.BLOCK_TIME) * 1.1) + if parsed_options.start_block is not None: + self.start_block_number = parsed_options.start_block + else: + self.start_block_number = earliest_available_block_number + if parsed_options.end_block is not None: + self.end_block_number = parsed_options.end_block + else: + self.end_block_number = latest_block_number if parsed_options.use_latest_blocks: self.end_block_number = latest_block_number self.start_block_number = self.end_block_number - self.data.size.blocks_len + 1 diff --git a/chainbench/tools/discovery/clients.json b/chainbench/tools/discovery/clients.json index 98d7767..9d16cb7 100644 --- a/chainbench/tools/discovery/clients.json +++ b/chainbench/tools/discovery/clients.json @@ -44,7 +44,7 @@ "version": "0.10.2" }, "reth": { - "version": "0.1.0-alpha.13" + "version": "1.8.2" }, "solana": { "version": "1.16.23" @@ -52,4 +52,4 @@ "zksync": { "version": "2.0" } -} \ No newline at end of file +} diff --git a/chainbench/tools/discovery/methods.json b/chainbench/tools/discovery/methods.json index 3eaf489..5c34590 100644 --- a/chainbench/tools/discovery/methods.json +++ b/chainbench/tools/discovery/methods.json @@ -52,6 +52,11 @@ "besu" ] }, + "admin_clearTxpool": { + "clients": [ + "reth" + ] + }, "admin_datadir": { "clients": [ "geth", @@ -124,6 +129,7 @@ "nethermind", "erigon", "besu", + "reth", "bor", "optimism", "base" @@ -216,6 +222,176 @@ "base" ] }, + "anvil_dropTransaction": { + "clients": [ + "reth" + ] + }, + "anvil_autoImpersonateAccount": { + "clients": [ + "reth" + ] + }, + "anvil_dumpState": { + "clients": [ + "reth" + ] + }, + "anvil_enableTraces": { + "clients": [ + "reth" + ] + }, + "anvil_getAutomine": { + "clients": [ + "reth" + ] + }, + "anvil_impersonateAccount": { + "clients": [ + "reth" + ] + }, + "anvil_increaseTime": { + "clients": [ + "reth" + ] + }, + "anvil_loadState": { + "clients": [ + "reth" + ] + }, + "anvil_metadata": { + "clients": [ + "reth" + ] + }, + "anvil_mine": { + "clients": [ + "reth" + ] + }, + "anvil_mine_detailed": { + "clients": [ + "reth" + ] + }, + "anvil_nodeInfo": { + "clients": [ + "reth" + ] + }, + "anvil_removeBlockTimestampInterval": { + "clients": [ + "reth" + ] + }, + "anvil_removePoolTransactions": { + "clients": [ + "reth" + ] + }, + "anvil_reset": { + "clients": [ + "reth" + ] + }, + "anvil_revert": { + "clients": [ + "reth" + ] + }, + "anvil_setAutomine": { + "clients": [ + "reth" + ] + }, + "anvil_setBalance": { + "clients": [ + "reth" + ] + }, + "anvil_setBlockGasLimit": { + "clients": [ + "reth" + ] + }, + "anvil_setBlockTimestampInterval": { + "clients": [ + "reth" + ] + }, + "anvil_setChainId": { + "clients": [ + "reth" + ] + }, + "anvil_setCode": { + "clients": [ + "reth" + ] + }, + "anvil_setCoinbase": { + "clients": [ + "reth" + ] + }, + "anvil_setIntervalMining": { + "clients": [ + "reth" + ] + }, + "anvil_setLoggingEnabled": { + "clients": [ + "reth" + ] + }, + "anvil_setMinGasPrice": { + "clients": [ + "reth" + ] + }, + "anvil_setNextBlockBaseFeePerGas": { + "clients": [ + "reth" + ] + }, + "anvil_setNextBlockTimestamp": { + "clients": [ + "reth" + ] + }, + "anvil_setNonce": { + "clients": [ + "reth" + ] + }, + "anvil_setRpcUrl": { + "clients": [ + "reth" + ] + }, + "anvil_setStorageAt": { + "clients": [ + "reth" + ] + }, + "anvil_setTime": { + "clients": [ + "reth" + ] + }, + "anvil_snapshot": { + "clients": [ + "reth" + ] + }, + "anvil_stopImpersonatingAccount": { + "clients": [ + "reth" + ] + }, "avax.export": { "clients": [ "avalanchego/ext/bc/C/avax" @@ -565,7 +741,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_backtraceAt": { @@ -575,7 +752,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_blockProfile": { @@ -585,7 +763,13 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" + ] + }, + "debug_chainConfig": { + "clients": [ + "reth" ] }, "debug_chaindbCompact": { @@ -595,7 +779,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_chaindbProperty": { @@ -605,7 +790,13 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" + ] + }, + "debug_codeByHash": { + "clients": [ + "reth" ] }, "debug_cpuProfile": { @@ -615,7 +806,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_dbAncient": { @@ -625,7 +817,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_dbAncients": { @@ -635,7 +828,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_dbGet": { @@ -645,7 +839,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_deleteChainSlice": { @@ -660,7 +855,23 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" + ] + }, + "debug_executePayload": { + "clients": [ + "reth" + ] + }, + "debug_executionWitness": { + "clients": [ + "reth" + ] + }, + "debug_executionWitnessByBlockHash": { + "clients": [ + "reth" ] }, "debug_freeOSMemory": { @@ -670,7 +881,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_freezeClient": { @@ -680,7 +892,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_gcStats": { @@ -690,7 +903,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_getAccessibleState": { @@ -700,7 +914,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_getBadBlocks": { @@ -744,7 +959,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_getModifiedAccountsByNumber": { @@ -755,7 +971,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_getRawBlock": { @@ -810,6 +1027,11 @@ "base" ] }, + "debug_getRawTransactions": { + "clients": [ + "reth" + ] + }, "debug_getSyncStage": { "clients": [ "nethermind" @@ -822,7 +1044,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_insertReceipts": { @@ -837,7 +1060,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_memStats": { @@ -847,7 +1071,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_metrics": { @@ -867,7 +1092,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_preimage": { @@ -877,7 +1103,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_printBlock": { @@ -887,7 +1114,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_resetHead": { @@ -895,6 +1123,11 @@ "nethermind" ] }, + "debug_seedHash": { + "clients": [ + "reth" + ] + }, "debug_setBlockProfileRate": { "clients": [ "geth", @@ -902,7 +1135,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_setGCPercent": { @@ -912,7 +1146,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_setHead": { @@ -922,7 +1157,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_setMutexProfileFraction": { @@ -932,7 +1168,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_setTrieFlushInterval": { @@ -942,7 +1179,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_stacks": { @@ -952,7 +1190,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_standardTraceBadBlockToFile": { @@ -962,7 +1201,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_standardTraceBlockToFile": { @@ -973,7 +1213,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_startCPUProfile": { @@ -983,7 +1224,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_startGoTrace": { @@ -993,7 +1235,13 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" + ] + }, + "debug_stateRootWithUpdates": { + "clients": [ + "reth" ] }, "debug_stopCPUProfile": { @@ -1003,7 +1251,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_stopGoTrace": { @@ -1013,7 +1262,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_storageRangeAt": { @@ -1025,7 +1275,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_traceBadBlock": { @@ -1035,7 +1286,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_traceBlock": { @@ -1104,7 +1356,8 @@ }, "debug_traceCallMany": { "clients": [ - "erigon" + "erigon", + "reth" ] }, "debug_traceChain": { @@ -1159,7 +1412,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_vmodule": { @@ -1169,7 +1423,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_writeBlockProfile": { @@ -1179,7 +1434,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_writeMemProfile": { @@ -1189,7 +1445,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "debug_writeMutexProfile": { @@ -1199,7 +1456,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "eea_sendRawTransaction": { @@ -1213,6 +1471,7 @@ "zksync", "geth", "bsc", + "reth", "bor", "optimism", "base" @@ -1237,6 +1496,7 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" @@ -1249,6 +1509,7 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" @@ -1261,17 +1522,34 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" ] }, + "engine_getBlobsV1": { + "clients": [ + "reth" + ] + }, + "engine_getBlobsV2": { + "clients": [ + "reth" + ] + }, + "engine_getClientVersionV1": { + "clients": [ + "reth" + ] + }, "engine_getPayloadBodiesByHashV1": { "clients": [ "eth", "zksync", "geth", "bsc", + "reth", "bor", "optimism", "base" @@ -1283,6 +1561,7 @@ "zksync", "geth", "bsc", + "reth", "bor", "optimism", "base" @@ -1295,6 +1574,7 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" @@ -1307,6 +1587,7 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" @@ -1319,11 +1600,22 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" ] }, + "engine_getPayloadV4": { + "clients": [ + "reth" + ] + }, + "engine_getPayloadV5": { + "clients": [ + "reth" + ] + }, "engine_newPayloadV1": { "clients": [ "eth", @@ -1331,6 +1623,7 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" @@ -1343,6 +1636,7 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" @@ -1355,11 +1649,17 @@ "geth", "bsc", "erigon", + "reth", "bor", "optimism", "base" ] }, + "engine_newPayloadV4": { + "clients": [ + "reth" + ] + }, "erigon_BlockNumber": { "clients": [ "erigon" @@ -1419,6 +1719,11 @@ "avalanchego/ext/bc/C/rpc" ] }, + "eth_blobBaseFee": { + "clients": [ + "reth" + ] + }, "eth_blockNumber": { "clients": [ "eth", @@ -1453,22 +1758,30 @@ }, "eth_callBundle": { "clients": [ - "erigon" + "erigon", + "reth" ] }, "eth_callMany": { "clients": [ - "erigon" + "erigon", + "reth" ] }, - "eth_chainID/eth_chainId": { + "eth_cancelBundle": { "clients": [ - "erigon" + "reth" + ] + }, + "eth_cancelPrivateTransaction": { + "clients": [ + "reth" ] }, "eth_chainId": { "clients": [ "eth", + "erigon", "zksync", "geth", "bsc", @@ -1496,6 +1809,11 @@ "base" ] }, + "eth_config": { + "clients": [ + "reth" + ] + }, "eth_createAccessList": { "clients": [ "eth", @@ -1504,6 +1822,7 @@ "bsc", "nethermind", "erigon", + "reth", "bor", "avalanchego/ext/bc/C/rpc", "optimism", @@ -1534,6 +1853,7 @@ "bsc", "nethermind", "erigon", + "reth", "bor", "avalanchego/ext/bc/C/rpc", "optimism", @@ -1557,7 +1877,13 @@ }, "eth_getAccount": { "clients": [ - "nethermind" + "nethermind", + "reth" + ] + }, + "eth_getAccountInfo": { + "clients": [ + "reth" ] }, "eth_getAssetBalance": { @@ -1623,7 +1949,8 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" ] }, "eth_getBlockTransactionCountByHash": { @@ -1717,7 +2044,8 @@ "bsc", "bor", "optimism", - "base" + "base", + "reth" ] }, "eth_getHeaderByNumber": { @@ -1726,7 +2054,8 @@ "bsc", "bor", "optimism", - "base" + "base", + "reth" ] }, "eth_getLogs": { @@ -1767,12 +2096,24 @@ "bor", "avalanchego/ext/bc/C/rpc", "optimism", - "base" + "base", + "reth" + ] + }, + "eth_getRawTransactionByBlockHashAndIndex": { + "clients": [ + "reth" + ] + }, + "eth_getRawTransactionByBlockNumberAndIndex": { + "clients": [ + "reth" ] }, "eth_getRawTransactionByHash": { "clients": [ - "erigon" + "erigon", + "reth" ] }, "eth_getStorageAt": { @@ -1839,6 +2180,11 @@ "base" ] }, + "eth_getTransactionBySenderAndNonce": { + "clients": [ + "reth" + ] + }, "eth_getTransactionCount": { "clients": [ "eth", @@ -1922,7 +2268,8 @@ "eth_getWork": { "clients": [ "erigon", - "besu" + "besu", + "reth" ] }, "eth_hashrate": { @@ -1939,6 +2286,7 @@ "geth", "bsc", "erigon", + "reth", "bor", "avalanchego/ext/bc/C/rpc", "avalanchego/ext/bc/C/rpc", @@ -2024,6 +2372,21 @@ "erigon" ] }, + "eth_sendBundle": { + "clients": [ + "reth" + ] + }, + "eth_sendPrivateRawTransaction": { + "clients": [ + "reth" + ] + }, + "eth_sendPrivateTransaction": { + "clients": [ + "reth" + ] + }, "eth_sendRawTransaction": { "clients": [ "eth", @@ -2040,6 +2403,16 @@ "base" ] }, + "eth_sendRawTransactionConditional": { + "clients": [ + "reth" + ] + }, + "eth_sendRawTransactionSync": { + "clients": [ + "reth" + ] + }, "eth_sendTransaction": { "clients": [ "eth", @@ -2080,16 +2453,28 @@ "base" ] }, + "eth_signTypedData": { + "clients": [ + "reth" + ] + }, + "eth_simulateV1": { + "clients": [ + "reth" + ] + }, "eth_submitHashrate": { "clients": [ "erigon", - "besu" + "besu", + "reth" ] }, "eth_submitWork": { "clients": [ "erigon", - "besu" + "besu", + "reth" ] }, "eth_subscribe": { @@ -2098,6 +2483,7 @@ "bsc", "nethermind", "erigon", + "reth", "bor", "optimism", "base" @@ -2141,11 +2527,37 @@ "bsc", "nethermind", "erigon", + "reth", "bor", "optimism", "base" ] }, + "flashbots_validateBuilderSubmissionV1": { + "clients": [ + "reth" + ] + }, + "flashbots_validateBuilderSubmissionV2": { + "clients": [ + "reth" + ] + }, + "flashbots_validateBuilderSubmissionV3": { + "clients": [ + "reth" + ] + }, + "flashbots_validateBuilderSubmissionV4": { + "clients": [ + "reth" + ] + }, + "flashbots_validateBuilderSubmissionV5": { + "clients": [ + "reth" + ] + }, "getAccountInfo": { "clients": [ "solana" @@ -2176,17 +2588,17 @@ "solana" ] }, - "getBlockTime": { + "getBlocks": { "clients": [ "solana" ] }, - "getBlocks": { + "getBlocksWithLimit": { "clients": [ "solana" ] }, - "getBlocksWithLimit": { + "getBlockTime": { "clients": [ "solana" ] @@ -2301,12 +2713,12 @@ "solana" ] }, - "getSignatureStatuses": { + "getSignaturesForAddress": { "clients": [ "solana" ] }, - "getSignaturesForAddress": { + "getSignatureStatuses": { "clients": [ "solana" ] @@ -2386,6 +2798,86 @@ "solana" ] }, + "hardhat_getAutomine": { + "clients": [ + "reth" + ] + }, + "hardhat_dropTransaction": { + "clients": [ + "reth" + ] + }, + "hardhat_impersonateAccount": { + "clients": [ + "reth" + ] + }, + "hardhat_metadata": { + "clients": [ + "reth" + ] + }, + "hardhat_mine": { + "clients": [ + "reth" + ] + }, + "hardhat_reset": { + "clients": [ + "reth" + ] + }, + "hardhat_setBalance": { + "clients": [ + "reth" + ] + }, + "hardhat_setCode": { + "clients": [ + "reth" + ] + }, + "hardhat_setCoinbase": { + "clients": [ + "reth" + ] + }, + "hardhat_setLoggingEnabled": { + "clients": [ + "reth" + ] + }, + "hardhat_setMinGasPrice": { + "clients": [ + "reth" + ] + }, + "hardhat_setNextBlockBaseFeePerGas": { + "clients": [ + "reth" + ] + }, + "hardhat_setNonce": { + "clients": [ + "reth" + ] + }, + "hardhat_setPrevRandao": { + "clients": [ + "reth" + ] + }, + "hardhat_setStorageAt": { + "clients": [ + "reth" + ] + }, + "hardhat_stopImpersonatingAccount": { + "clients": [ + "reth" + ] + }, "ibft_discardValidatorVote": { "clients": [ "besu" @@ -2480,6 +2972,31 @@ "bsc" ] }, + "mev_sendBundle": { + "clients": [ + "reth" + ] + }, + "mev_simBundle": { + "clients": [ + "reth" + ] + }, + "miner_setExtra": { + "clients": [ + "reth" + ] + }, + "miner_setGasLimit": { + "clients": [ + "reth" + ] + }, + "miner_setGasPrice": { + "clients": [ + "reth" + ] + }, "miner_start": { "clients": [ "besu" @@ -2611,13 +3128,13 @@ "base" ] }, - "opp2p_peerStats": { + "opp2p_peers": { "clients": [ "optimism", "base" ] }, - "opp2p_peers": { + "opp2p_peerStats": { "clients": [ "optimism", "base" @@ -2683,6 +3200,71 @@ "base" ] }, + "ots_getApiLevel": { + "clients": [ + "reth" + ] + }, + "ots_getBlockDetails": { + "clients": [ + "reth" + ] + }, + "ots_getBlockDetailsByHash": { + "clients": [ + "reth" + ] + }, + "ots_getBlockTransactions": { + "clients": [ + "reth" + ] + }, + "ots_getContractCreator": { + "clients": [ + "reth" + ] + }, + "ots_getHeaderByNumber": { + "clients": [ + "reth" + ] + }, + "ots_getInternalOperations": { + "clients": [ + "reth" + ] + }, + "ots_getTransactionBySenderAndNonce": { + "clients": [ + "reth" + ] + }, + "ots_getTransactionError": { + "clients": [ + "reth" + ] + }, + "ots_hasCode": { + "clients": [ + "reth" + ] + }, + "ots_searchTransactionsAfter": { + "clients": [ + "reth" + ] + }, + "ots_searchTransactionsBefore": { + "clients": [ + "reth" + ] + }, + "ots_traceTransaction": { + "clients": [ + "reth" + ] + }, "parity_clearEngineSigner": { "clients": [ "nethermind" @@ -2933,12 +3515,12 @@ "avalanchego/ext/bc/P" ] }, - "platform.getBlockchainStatus": { + "platform.getBlockchains": { "clients": [ "avalanchego/ext/bc/P" ] }, - "platform.getBlockchains": { + "platform.getBlockchainStatus": { "clients": [ "avalanchego/ext/bc/P" ] @@ -3158,6 +3740,21 @@ "solana" ] }, + "reth_getBalanceChangesInBlock": { + "clients": [ + "reth" + ] + }, + "reth_subscribeChainNotifications": { + "clients": [ + "reth" + ] + }, + "reth_unsubscribeChainNotifications": { + "clients": [ + "reth" + ] + }, "rpc_modules": { "clients": [ "besu", @@ -3350,6 +3947,11 @@ "reth" ] }, + "trace_blockOpcodeGas": { + "clients": [ + "reth" + ] + }, "trace_call": { "clients": [ "nethermind", @@ -3405,6 +4007,11 @@ "reth" ] }, + "trace_transactionOpcodeGas": { + "clients": [ + "reth" + ] + }, "txpool_besuPendingTransactions": { "clients": [ "besu" @@ -3595,4 +4202,4 @@ "zksync" ] } -} \ No newline at end of file +} diff --git a/pyproject.toml b/pyproject.toml index 5dd4e01..3502eac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "chainbench" -version = "0.8.5" +version = "0.8.7" description = "" authors = [ "Egor Molodik ",