Merged
Conversation
Collaborator
✅ Heimdall Review Status
|
danyalprout
approved these changes
Jan 29, 2026
Collaborator
|
Forgot I commented this out! Thank you 🙏 |
leanthebean
pushed a commit
to leanthebean/node-reth
that referenced
this pull request
Feb 5, 2026
* Tidy unused variables from op payload builder (base#427) ## 📝 Summary Cleanup PR to remove unused variables. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Reth 1.2.0 (base#429) ## 📝 Summary Lovely reth changes. ## 💡 Motivation and Context Pectra ## ✅ I have completed the following steps: * [X] Run `make lint` * [X] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Ferran Borreguero <ferran.borreguero@gmail.com> Co-authored-by: shana <avalonche@protonmail.com> Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Vitaly Drogan <vitaliy.drogan@gmail.com> * Add metrics for reverted transactions and builder balance in exex (base#451) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Flashblocks with incremental blocks + support in tester (base#454) ## 📝 Summary This PR changes uses the incremental format for Flashblocks and adds support for it on tester. Generate a genesis file: ``` $ cargo run -p op-rbuilder --bin tester --features optimism -- genesis --output genesis.json ``` Run op-rbuilder with flashblocks ``` $ cargo run -p op-rbuilder --bin op-rbuilder --features optimism,flashblocks node --authrpc.port 4444 --authrpc.jwtsecret ./crates/op-rbuilder/src/tester/fixtures/test-jwt-secret.txt --chain ./genesis.json --datadir /tmp/builder2 --disable-discovery --http --http.port 8545 ``` Run the tester with flashblocks enabled: ``` $ cargo run -p op-rbuilder --bin tester --features optimism -- run --flashblocks-endpoint ws://localhost:1111 ``` Now, there are two streams available, one from the builder (websocat ws://localhost:1111) and another one from the tester which mimicks the Rollup-boost preconfirmations (websocat ws://localhost:1112). ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Daniel Xifra <mandinga@gmail.com> * Remove reverting transactions from pool in op-rbuilder (base#456) ## 📝 Summary Marks reverting transactions as invalid in the payload building process and removed dependents. Also removes reverting hashes from the tx pool. This would result in transactions that revert not be considered for future blocks once it's simulated once. ## 💡 Motivation and Context Remove the need to resimulate reverting transactions for revert protection. --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix deposit command to right address (base#468) ## 📝 Summary Deposit command was not funding the address correctly ## 💡 Motivation and Context Tested deposits in integration tests --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Add priority fee integration test (base#463) ## 📝 Summary Add integration test to op-rbuilder that asserts that the block is built with priority fee ordering ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Make flashblock ws url as a flag and add more data (base#442) ## 📝 Summary Making flashblock websocket as flag so that it can be customizable. Also added receipts, account balance, block number into the metadata field, such that the RPC node can build the RPC response for `eth_transactionReceipt` and `eth_getBalance` for pending blocks. (base#4) Added an integration test to test that the metadata field indeed has the new data. ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Make block times dynamic in flashblock builder (base#482) ## 📝 Summary Currently the block time is hard coded to assume the chain block time is 1s and flashblock time is 250ms. But for Base the chain block time is 2s. Thus fixing this by adding args to make it dynamic. <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix flashblocks receipt index (base#494) ## 📝 Summary The index for getting the receipt is incorrect as it's using an updated index, fix it. Added an additional assertion in integration test to test this. <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Refactor ExecutedPayload and ExecutionInfo (base#477) ## 📝 Summary Moved ExecutionInfo and ExecutingPayload into primitives, combining them Now we could implement revert protection for Flashblocks too ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Remove prints in op-rbuilder (base#502) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Add txn monitoring in op-rbuilder pool (base#500) ## 📝 Summary This PR introduces a monitoring service that prints all the transactions that arrive to the transaction pool in op-rbuilder. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Interop support (base#462) Implement SupervisorValidator to be used in rbuilder Add additional primitives crate, that is used for storing external ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fixed grammatical errors for improved readability (base#511) Corrected grammar: "transactions events" → "transaction events" for proper noun-adjective agreement. Preposition correction: "on" → "at" for referring to a website link properly. Corrected article usage: "any" → "a" for clarity. * deps: reth v1.3.4 (base#507) ## 📝 Summary <!--- A general summary of your changes --> Bump deps to reth `v1.3.3` ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Daniel Xifra <daniel@xifra.dev> * Remove previous interop impl (base#526) ## 📝 Summary I will remove previous interop version in favor of newly written reth implementation. After this PR i'll make a follow-up PR with dependency bump and additional logic for tx filtering. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: don't miss blocks on batcher updates (base#529) ## 📝 Summary When batcher's max channel duration is big enough (e.g. 10m), the batcher would be pushing its updates at specified intervals. This causes the sequencer to send an avalanche of FCUs (and getBlockByNumber) that push safe head step-by-step. As a consequence it can happen that the time b/w FCU and ensuing getPayload would be on the scale of ~2.5s. This means that we should "remember" the payloads long enough to accommodate that corner-case. --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Fix integration tests (base#536) ## 📝 Summary Fix deposit and flashblocks integration tests. Resolves flashbots/rbuilder#533 and flashbots/rbuilder#521 ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Add metrics for flashblock and message tracking in OpRBuilder (base#543) Enhanced the OpRBuilderMetrics struct to include new metrics for tracking flashblocks, messages sent, and invalid blocks. Updated the OpPayloadBuilder to utilize these metrics during block building and transaction simulation processes. - Added `flashblock_count`, `messages_sent_count`, and `invalid_blocks_count` to OpRBuilderMetrics. - Integrated metrics tracking in OpPayloadBuilder for message sending, block building success, and transaction simulation. - Recorded durations for various operations to improve performance monitoring. ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * deps: reth v1.3.8 (base#553) ## 📝 Summary Bumps reth dependencies to `1.3.8`. ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [ ] Added tests (if applicable) * Fix Isthmus request hash; support reth 1.3.11 (base#564) ## 📝 Summary Adding reth 1.3.11 for the upcoming op chain sepolia Isthmus hardfork for op-rbuilder flashblock builder Also fixing request hash for Isthmus validity rules https://specs.optimism.io/protocol/isthmus/exec-engine.html#header-validity-rules. Tested deploying on Base devnet, it's able to sync again ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * chore: fix op-rbuilder devnet docs (base#562) ## 📝 Summary Update the op-rbuilder devnet documentation: * Update it to use the builder-playground * Various fixes (e.g. remove optimism feature, use fully qualified docker image so it pulls automatically) ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Use latest reth for op-rbuilder (base#570) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Fix isthmus withdrawals hash on payload builder vanilla (base#571) ## 📝 Summary Add isthmus withdrawal hash fix on the vanilla builder. Previously was added to the flashblocks builder. ## 💡 Motivation and Context Fix errors around invalid blocks due to incorrect withdrawals hash --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix resource usage in monitoring task (base#588) ## 📝 Summary Fixes unbounded mem growth in monitoring task ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: don't build flashblocks with more gas than block gas limit (base#567) ## 📝 Summary Currently it's possible for the builder to make more Flashblocks than intended during a block (likely due to delays). If more flashblocks are made than desired (e.g. 11 flashblocks for a 2s block w/ 200ms Flashblocks), the 11th flashblock will have a gas limit that is over the blocks gas limit and will cause invalid blocks on the sequencer. ## 💡 Motivation and Context If the builder produces a full block that uses more gas than the gas limit, the local EL client will treat it as invalid. --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * op-rbuilder: Update Documentation / CI Script (base#575) ## 📝 Summary 1. Update the version of op-reth used by CI 2. Make the CI script work on macOS as well as linux 3. Update the instructions for running/testing op-rbuilder ## 💡 Motivation and Context 1. The CI script was handy for downloading Reth 2. The instructions didn't work for me (due to the optimism feature being removed etc). --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) --------- Co-authored-by: shana <avalonche@protonmail.com> * Revert revert protection in op-rbuilder (base#602) ## 📝 Summary The builder block building times always slowly increase to a very high number on Base Sepolia, suspecting revert protection is causing failed txs to get backed up, which causes slow down in op-rbuilder block building. ``` # HELP reth_op_rbuilder_payload_num_tx_simulated_fail Number of transactions in the payload that failed simulation # TYPE reth_op_rbuilder_payload_num_tx_simulated_fail summary reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0"} 77 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.5"} 3198.061173550786 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.9"} 3223.1035892442424 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.95"} 3223.748274430612 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.99"} 3226.973635127358 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.999"} 3226.973635127358 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="1"} 3228 reth_op_rbuilder_payload_num_tx_simulated_fail_sum 64118848 reth_op_rbuilder_payload_num_tx_simulated_fail_count 21069 # HELP reth_op_rbuilder_payload_tx_simulation_duration Duration of payload simulation of all transactions # TYPE reth_op_rbuilder_payload_tx_simulation_duration summary reth_op_rbuilder_payload_tx_simulation_duration{quantile="0"} 0.018329514 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.5"} 0.49002444205448686 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.9"} 0.5026304818952316 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.95"} 0.5079867028401951 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.99"} 0.553164415015488 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.999"} 0.553164415015488 reth_op_rbuilder_payload_tx_simulation_duration{quantile="1"} 0.555461782 reth_op_rbuilder_payload_tx_simulation_duration_sum 9654.159540928 reth_op_rbuilder_payload_tx_simulation_duration_count 25870 # HELP reth_op_rbuilder_flashblock_build_duration Flashblock build duration # TYPE reth_op_rbuilder_flashblock_build_duration summary reth_op_rbuilder_flashblock_build_duration{quantile="0"} 0.055144161 reth_op_rbuilder_flashblock_build_duration{quantile="0.5"} 0.5166962986266059 reth_op_rbuilder_flashblock_build_duration{quantile="0.9"} 0.5348868728374531 reth_op_rbuilder_flashblock_build_duration{quantile="0.95"} 0.5672812838109652 reth_op_rbuilder_flashblock_build_duration{quantile="0.99"} 0.583272957920482 reth_op_rbuilder_flashblock_build_duration{quantile="0.999"} 0.583272957920482 reth_op_rbuilder_flashblock_build_duration{quantile="1"} 0.60984729 reth_op_rbuilder_flashblock_build_duration_sum 9081.926654393968 reth_op_rbuilder_flashblock_build_duration_count 21065 # HELP reth_op_rbuilder_payload_num_tx_simulated_success Number of transactions in the payload that were successfully simulated # TYPE reth_op_rbuilder_payload_num_tx_simulated_success summary reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0"} 1 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.5"} 11.000052032263987 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.9"} 20.999528921206892 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.95"} 24.001108231483542 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.99"} 29.00012111115082 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.999"} 29.00012111115082 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="1"} 60 reth_op_rbuilder_payload_num_tx_simulated_success_sum 136029 reth_op_rbuilder_payload_num_tx_simulated_success_count 21069 ``` <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Finish block building process even when cancel request is found (base#606) ## 📝 Summary This PR introduces three changes: - It refactors some of the common utilities shared among the tests into a single `TestHarness` struct which spins the test framework with all the components. Note that it does not update the tests to use this new utility. - It fixes an issue with the block builder that would stop the block building process and not return any block if a cancel request was found. This happens when an FCU and a getPayload request are called to close to each other, the getPayload cancels the block building process, and getPayload waits forever for a block that will never be built. Now, the block building finishes. - It adds an integration test to cover this use case with the new utility. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Add usage of jemalloc in op-rbuilder when feature is enabled + improve debug-fast profile (base#617) ## 📝 Summary Adding `lto = "thin"` for debug fast profile sped up my build time from 5 min to 4 min Enabled jemalloc in op-rbuilder ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: set an address for authrpc to the op-rbuilder readme (base#581) This PR fixes the launch instructions for `op-rbuilder`, making the AuthRPC accessible on all network interfaces. This is necessary to allow `op-rbuilder` to be reachable from the virtual network interface created by Docker. Additionally, the metrics port has been changed to `9011`, since `9001` is used by `builder-playground` for the `beacon`: ``` go run main.go cook opstack --external-builder http://host.docker.internal:4444 2025/04/23 20:21:02 Log level: info 2025/04/23 20:21:02 Genesis block hash: 0x301f9f301f868d587fec26c2a1b5f7d9896736842ab1787923722c3213b61e05 true ========= Services started ========= - el (authrpc: 8551/8551, http: 8545/8545, rpc: 30303/30303) - beacon (http: 3500/3500, p2p: 9000/9000/udp, p2p: 9000/9001, quic-p2p: 9100/9100) - validator () - rollup-boost (authrpc: 8551/8552) - op-node (http: 8549/8549, metrics: 7300/7300, p2p: 9003/9003, p2p: 9003/9004/udp) - op-geth (authrpc: 8551/8553, http: 8545/8546, metrics: 6061/6061, rpc: 30303/30304, ws: 8546/8547) - op-batcher () ========= Output ========= - op-geth-enode: enode://3479db4d9217fb5d7a8ed4d61ac36e120b05d36c2eefb795dc42ff2e971f251a2315f5649ea1833271e020b9adc98d5db9973c7ed92d6b2f1f2223088c3d852f@127.0.0.1:30304?discport=0 ``` Trailing spaces have also been removed in some places. * Clean up the repo * Add info log for reverting tx hashes * remove unecessary import * Remove monitoring tx task * Remove more things * Remove more stuff * Last clean * more cleaning * Use nightly clippy * Add variable builder deadline * Fix lint * Fix on FB * Remove dep * Change to info * Add flag to enable revert protection * Update * add metric * Fix * Fix lint * Remove print statement * Remove print * Add e2e test for monitor txn * Partial * Add test * Fix lint * Test new generator * More changes * add integration tet * Was using wrong static for jemalloc (base#51) * Add version metric to op-rbuilder (base#52) * Add a --playground flag on op-rbuilder to start with the flags required to run the builder on playground (base#49) * Fix existing build warnings * Add a --playground flag on op-rbuilder to start with the flags required to run the builder on playground Issue: flashbots/op-rbuilder#9 This change adds the ability to autoconfigure op-rbuilder to run a locally deployed builder-playground. Follow the instructions on how to start a builder playground under this repo: https://github.com/SozinM/builder-playground/tree/msozin/feat/flashblocks Now we can use the following startup parameters for op-rbuilder: - `./op-rbuilder node --builder.playground` This will start using the default $HOME/.playground/devnet directory - `./op-rbuilder node --builder.playground=<PATH>` Will use the provided path as the working directory of the playground * Fixed build warning * added justfile recepe * Removing flashblocks and using vanilla builder for now * Updated readme * Integration test uses genesis file (base#44) * Integration test uses genesis file * Fix lint * Revert * Issue base#36: Migrate the rest of the test to the new test utility (base#53) * Issue base#36 flashbots/op-rbuilder#36 Migrate the rest of the test to the new test utility introduced in base#606 --- This PR introduces the following changes: - Migrates all non-flashblocks integration tests to the new test harness framework - Fixes all build warnings - Adds few helper functions and types for testing - Few refactorings of the test infrastructure - Refactored the way the `tester` binary is linking to op-rbuilder dependencies - Moved all tests under `tests/` directory - Removed `integration` directory` now running `cargo test` will output ``` $ cargo test Finished `test` profile [unoptimized + debuginfo] target(s) in 0.36s Running unittests src/lib.rs (target/debug/deps/op_rbuilder-7bb461ec2888ee4b) running 8 tests test tx_signer::test::test_sign_transaction ... ok test tests::vanilla::smoke::get_payload_close_to_fcu ... ok test tests::vanilla::smoke::transaction_flood_no_sleep ... ok test tests::vanilla::ordering::fee_priority_ordering ... ok test tests::vanilla::revert::monitor_transaction_drops ... ok test tests::vanilla::revert::revert_protection ... ok test tests::vanilla::revert::revert_protection_disabled ... ok test tests::vanilla::smoke::chain_produces_blocks ... ok test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 23.67s Running unittests src/main.rs (target/debug/deps/op_rbuilder-87f69711ab7f0a5e) running 7 tests test generator::tests::test_block_cell_update_value ... ok test generator::tests::test_block_cell_immediate_value ... ok test generator::tests::test_job_deadline ... ok test tx_signer::test::test_sign_transaction ... ok test generator::tests::test_block_cell_wait_for_value ... ok test generator::tests::test_block_cell_multiple_waiters ... ok test generator::tests::test_payload_generator ... ok test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.70s Doc-tests op_rbuilder running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` * lint * update github actions * github actions update * update github actions * update github actions * review feedback * Review feedback and build improvements - `make tester` now builds - Ability to run GH Actions locally through `act` * Fix withdrawals root (base#56) * Bump reth to 1.4.1 (base#54) * Bump reth to 1.4.1 * Fix integration * Fix test * Fix merge conflict * Add helper utility to check for block inclusion in e2e tests (base#60) * Add helper utility to check for block inclusion in e2e tests * Fix lint * Fix * Add opt-in revert protection (base#59) * Add revert protection endpoint * more stuff * Finish merge * A bit more stuff * Finish tests * Remove print * Fix lint * Fix test * Fix * Fix lint * Apply feedback * Bundle with more transactions + more safe checks * Rename bundle fields * Rename to a more appropiate bundle * Rename * Move TransactionConditional to Bundle file * Update test comments * Handle unwraps * Fix lint * Fix lint * Fix bundle result (base#66) * Remove flashblocks conditional compilation (base#67) * Use correct DA transaction compression (base#61) * Added drop impl to clean up after tests Changed revert tests a bit fmt Add txpool test Fix DA config, set it via miner Extend tests Add op-alloy-flz dependency and update related configurations - Added `op-alloy-flz` as a dependency in `Cargo.toml` and `Cargo.lock`. - Configured `op-alloy-flz` to be part of the workspace in `op-rbuilder`'s `Cargo.toml`. - Updated the `payload_builder_vanilla.rs` to utilize `op-alloy-flz` for transaction size estimation. - Enhanced test framework to include new data availability tests ensuring block size limits are respected. Add max data availability transaction and block size configuration - Introduced `max_da_tx_size` and `max_da_block_size` fields in `TestHarnessBuilder` and `OpRbuilderConfig`. - Added builder methods `with_max_da_tx_size` and `with_max_da_block_size` for setting these values. - Implemented a new test to ensure transaction size limits are respected in data availability scenarios. - Updated test module to include the new data availability test. Add cumulative_da_bytes_used accur Add da config Use correct DA transaction compression * conflict changes * Modity flashblocks ws bind/port flags (base#71) * Modity flashblocks ws bind/port flags * Update * Fix * Migrate e2e tests to Isthmus (base#45) * Use isthmus * Update to payload v3 * Add total_block_built_duration metric back to vanilla builder (base#77) * Feat/revert protection status endpoint (base#76) * Add revert protection status endpoint * Add more changes * Change type * Fix compile error * More * Add test * Clean * Change comment * Fix lint * Remove print statement * Change to moka * Fix --------- Co-authored-by: Solar Mithril <solarmithril@pm.me> * Fix da scaling (base#81) * Add logs for da limits (base#86) * Add logs for da limits * Add comments * Fix * Add log for the block building execution (base#87) * Add log * Fix lint * Add builder txn to Flashblocks (base#89) * Add changes * Remove print * Use original function with manual scaling (base#96) * Use original function with manual scaling * Added comment * Add error log in case builder tx da size sets max_da_block_size to 0 (base#97) * Add replacement for default reth version (base#98) * Add replacement for default reth version Move VERSION to different crate * fmt * Added feature-gated interop (base#93) Use derive_more for enum * Use Gauge for da size limits (base#105) * Account for DA and gas limit in flashblocks (base#104) * Account for DA and gas limit in flashblocks * Use fancy staff * thx karim * Use into_bytes * Upgrade to reth 1.4.7 and main rollup-boost branch (base#112) * Add block number and DA used to logging (base#107) * modify logging * more * structure logs * Add gas limit and DA transaction results for tracing (base#110) * Add gas limit and DA transaction results for tracing * use result * Use block number as hex (base#116) * Add another builder tx after the first flashblock (base#121) * Add another builder tx after the first flashblock * Fix fb test * Add reverting hashes + min block number to Bundle (base#115) * Implement bundle reverting hashes * Merge main * Fix * Add min_block_number * fix litn * Fix * Fix comment * Mark invalid * Rename reverting_hashes * Remove Option * Revert "Remove Option" This reverts commit 4087d35ac53c7bc97f05728bba6c2402a132262c. * feat: add a feature to activate otlp telemetry (base#31) * Bundles: Ensure that the min block number is inside the MAX_BLOCK_RANGE_BLOCKS (base#128) If a user only specifies the min block number, the max block number is set to the current block number + MAX_BLOCK_RANGE_BLOCKS; however, there is no check that the min block is less than the newly set max block number. * Fix bundle type reverting hashes optional param (base#126) * Fix bundle type reverting hashes optional param * Fix * Remove toml and add feature gate (base#117) Rebase Remove custom logic Custom Engine API support + engine call propagation * Move bundle validation to primitives folder (base#129) * Move bundle validation to primitives folder * Add another check * Fix * Split op-rbuilder in lib and main (base#138) * Make op-rbuilder a lib * Fix lint * Two more fixes * Move alloc --------- Co-authored-by: Solar Mithril <solarmithril@pm.me> * In-process tests, optional dockerized validation node (base#132) * Validation node works and tests are passing using the new test infra * revert_protection_monitor_transaction_gc passes * revert_protection_disabled passes * ordering tests are passing * all tests are passing * ready * lint * Github Action login to GHCR.io * testing Github Actions ghcr access * testing Github Actions ghcr access * lint * Closes issue 133 * review feedback * review feedback * Review feedback - ctrl-c * Review feedback * review feedback * Review feedback * review feedback * lint * macos compatibility * lint * lint * fmt (base#142) Logic Add extended flashblocks tracing * Add minTimestamp and maxTimestamp as optional fields to bundle (base#141) * Add minTimestamp and maxTimestamp as optional fields to bundle * Test that bundles with min timestamp wait aren't included until the block time exceeds it * Add metric for bundles received (base#149) * Add metric to count reverted bundles (base#151) * Remove extra generic param (base#152) * Remove extra generic * Fix fmt * Add pingpong and closing frame handle (base#154) * Supress infallible clippy error (base#155) * Use tungstenite provided ping handling (base#156) * Avoid boxing for the txlogging task (base#153) * Fix regression tester command (base#160) * Genesis command outputs genesis file (base#159) * Account for flashblocks time drift (base#123) * quick bugfix Account for dynamic lag in the beginning of building process * More improvements * More improvements * More improvements * More improvements * Wrap everything into the config * Review * Review * Run the vanilla tests using both the flashblocks builder and the vanilla builder (base#145) * Applied 68 on top of latest main * Update crates/op-rbuilder/src/tests/smoke.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * lint * port new revert unit test * lint --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: add default-run to the op-rbuilder's manifest (base#162) * Flashtestions (base#137) * wip flashtestations * add builder tx interface * add bootstrap on launch * transaction management * working bootstrap * fix github action * address comments * fix cli flags * make flashtestations service non-blocking --------- Co-authored-by: mophr <mophnetptyltd@gmaiil.com> * Flashtestations flag (base#165) * Add feature flag for flashtestations * fix fmt command * Add some telemetry for `eth_sendBundle` (base#176) * measure eth_sendBundle latency * rename bundles_received metric to valid_bundles * log error messages * refactor to get rid of unnecessary mut * count all requests sent to eth_sendBundle * add failed_bundles counter * Review (base#170) Co-authored-by: Solar Mithril <solarmithril@pm.me> * Add cli flag for funding key (base#168) * Add cli flag for funding key * add docs * Move builder tx right after deposits and put it into base flashblock (base#178) * Implement correct flashblocks time cutoff (base#172) * Implement dynamic flashblock time adjustment Add control flow with child cancel tokens, that control flashblock duration * Trying to make test non-flaky * Fix test * Rename config field to make it better * Remove extra db config * Remove extra db config * Change default leeway-time + add handing for block cancellation (base#185) * Bump reth 1.5.0 (base#186) * Use reth 1.5.0 * Bump reth to 1.5.0 --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Add simple logging to timer task (base#191) * Improve metrics so we could better plot them (base#193) * Bump reth to 1.5.1 (base#192) * Reth 151 * Add debug bounds * Fix ordering issue by not including arriving txs into the best transaction iterator (base#195) * Remove without_updates for flashblocks (base#198) * Add a test to validate that no-tx-pool works (base#199) * Add a test to validate that no-tx-pool works * Fix lint * Add TDX quote provider service (base#200) * Add gauge metrics for block building steps (base#205) * introduce gauge metrics and fix naming for histogram metrics * fix a couple of flashblocks metrics * add fn to set payload builder metrics * Remove redundant account initialization (base#208) * Add flashblocks index to payload building context (base#210) * Add flashblocks index to payload building context * refactor * fix index * gauge metrics to inspect flag settings (base#207) * Bump reth to 1.6 (base#215) * Less confusing naming, state is called db and db is called state (base#219) * Less confusing naming, state is called db and db is called state * Use renaming destructuring * Add flashblock number filters to eth_sendBundle (base#213) * add min and max flashblock number fields to bundle * add min and max flashblock number to FBPooledTransaction * filter based on flashblock number * wrap best txs iterator to consider flashblock number * fix map structure and wrap better * integration tests * Fix bundle state and produce executed block (base#223) * WIP right now it has consensus error 2025-08-01T16:10:44.956046Z ERROR engine::persistence: Persistence service failed err=ProviderError(Database(Write(DatabaseWriteError { info: DatabaseErrorInfo { message: "the given key value is mismatched to the current cursor position", code: -30418 }, operation: CursorAppendDup, table_name: "AccountChangeSets", key: [0, 0, 0, 0, 0, 0, 0, 9] }))) * Hacky solution to mergin state * fmt * fmt * remove config.toml * Update crates/op-rbuilder/src/builders/flashblocks/payload.rs --------- Co-authored-by: shana <avalonche@protonmail.com> * Add caching to generator (base#221) * WIP right now it has consensus error 2025-08-01T16:10:44.956046Z ERROR engine::persistence: Persistence service failed err=ProviderError(Database(Write(DatabaseWriteError { info: DatabaseErrorInfo { message: "the given key value is mismatched to the current cursor position", code: -30418 }, operation: CursorAppendDup, table_name: "AccountChangeSets", key: [0, 0, 0, 0, 0, 0, 0, 9] }))) * fmt * cache reth db reads in flashblocks payload generation * save tip to cache on new committed state --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Ash Kunda <18058966+akundaz@users.noreply.github.com> * fix: record missing flashblocks (base#225) * record missing flashblocks in more places * code cleanup * edit log message * fix: record num txs built with flashblocks enabled (base#227) * record num txs built correctly with flashblocks enabled * Fix metrics --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * combine eth api modifications (base#231) * Add correct metric value (base#234) * feat: add transaction gas limit (base#214) * feat: add transaction gas limit * fix: update default * fix: update best txns * chore: add test for max txn gas * fix: apply suggestions * fix: tests * chore: update tests * fix: failing tests * Add fix to preserve all executed blocks for flashblocks (base#229) * Add ExecutedBlock push on every built flashblock * Update crates/op-rbuilder/src/builders/flashblocks/payload.rs * fix: override clap long version envs (base#235) * Improve best tx wrapper (base#245) * docs: eth_sendBundle (base#243) * doc comments for bundle params * add check for flashblock number range * markdown doc * update rust edition to 2024 (base#244) * feat: address gas limiter (base#253) * cli args * core impl * metrics * use the gas limiter * don't use optional gas limiter uses an "inner" struct to handle checking if it's enabled or not * cleanup stale addresses only every 100 blocks * unit tests * integration test * feat: add commit message and author in version metrics (base#236) * fix: gracefull cancellation on payload build failure (base#239) * fix: flashblock contraints in bundle api (base#259) * refactor BundleOpts to use with_ methods to set * print logs during tests * fix connecting to flashblocks ws url * fix propagating bundle params for flashblocks check * refactor flashblock ws listener in tests * test setting min=max flashblock param * bump reth to 1.7.0 (base#258) * bump reth * Add comm * Fix the problem * flag to determine if calculating state root (base#241) * calculate state root * fix tests * add no state root test * check no tx pool instead * comments * optimize * fix lint * use no tx pool * add condition * refactor: add `unreachable_pub` warning and autofix warnings (base#263) * Refactor payload builder to accept generic builder tx (base#217) * Refactor payload builder to accept generic builder tx * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/flashblocks/service.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * fix lint * fix tests --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * refactor: clean up and improve flashblocks `build_payload` (base#260) * fix: check per-address gas limit before checking if the tx reverted (base#266) * Add support for flashblocks number contract builder tx (base#256) * Refactor payload builder to accept generic builder tx * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Add support for flashblocks number contract builder tx * add docs * add builder tx to fallback block * fallback to legacy builder tx * allow top or bottom of block builder tx --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Bump reth to 1.8.1 (base#274) * bump to 1.8.1 * bump rollup-boost v * bump tracing * feat: overwrite reth default cache directory (base#238) * feat: overwrite reth default cache directory * doc: logs path * Add remote quote provider arg for flashtestations (base#276) * add metrics to track gas used by reverting txs (base#273) * Add flashblocks number integration tests (base#277) * Add flashblocks number integration tests * comments * comments * Update flashtestation service with latest contracts (base#281) * Flag to save tee key to local file (base#286) * Flag to save tee key to lcoal file * fix error handling * lint * comments * atomic file creation and permission * Add flashtestation builder tx and registration in block (base#282) * Add flashtestations integration tests (base#283) * Add flashtestation builder tx and registration in block * copilot comments * Add flashtestations integration tests * logging improvements * Update crates/op-rbuilder/src/tests/flashtestations.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: add unused_async lint, deny unreachable_pub (base#299) * refactor: clean up flashblocks context in payload builder (base#297) * Add permit flashtestations tx calls from builder (base#285) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * refactor contract simulation * refactor flashtestations builder tx * fix test comments * comments * Remove non permit flashtestation calls (base#302) * feat: implement p2p layer and broadcast flashblocks (base#275) * feat: implement flashblock sync over p2p (base#288) * reth bump (base#306) * feat: publish synced flashblocks to ws (base#310) * Add permit functions for flashblocks number contract (base#287) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * Add permit functions for flashblocks number contract * refactor to simulate call * fix tests * remove ws publishing from synced flashblocks (base#312) * [breaking-change] Fix arg for calculating state root (base#314) * Fix arg for calculating state root * fix tests * feat: Integrate downstream changes (Jovian hardfork + miner_setGasLimit + reth 1.9.1) (base#316) * chore: Rbuilder updates for jovian hardfork (base#16) * Jovian ready op-rbuilder * Add factoring in da footprint scalar * Bump reth to 1.9.0 * feat: respect miner_setGasLimit (base#18) * respect miner_setGasLimit * fmt * chore: bump to reth 1.9.1 (base#20) * wip: telemetry resolution * done * fix: Add gas_limit_config field and make block_gas_limit() public - Added gas_limit_config initialization in flashblocks context - Changed block_gas_limit() visibility from pub(super) to pub for flashtestations access - Removed unused Events import Note: Tests currently fail due to rollup-boost dependency version mismatch (op-alloy 0.20.0 vs 0.22.0) * chore: Update rollup-boost to v0.7.8 for reth 1.9.1 compatibility - Updated rollup-boost dependency from rev dd12e8e to tag v0.7.8 - Resolves op-alloy version mismatch (0.20.0 -> 0.22.0) - All tests now pass (94/94 passing) * chore: apply nightly formatting fixes Applied formatting fixes from cargo +nightly fmt to ensure code passes lint checks. Changes include proper brace placement and line formatting in flashblocks builder_tx and payload_handler. --------- Co-authored-by: Danyal Prout <git@dany.al> Co-authored-by: Haardik <hhaardik@uwaterloo.ca> * Add workload id as metric to builder (base#315) * Add workload id as metric to builder * more tdx measurements * add address * add address to metric * remove rpc * extract constants * chore(deps/reth): bump reth to 1.9.2 (base#318) * chore(deps): bump reth (base#321) * fix: jovian hardfork tests & fixes (base#320) * chore: fixes for jovian * blob fee fixes * Update tests to Jovian * run miner limit tests on both standard/flashblocks * Ensure builder transactions count towards DA usage * Increment DA usage for non-deposit sequencer transactions (e.g. via CL sync) * Add blob gas used to flashblocks delta (base#325) * Add blob gas used to delta * update rollup-boost * update rollup-boost tag * feat: resoure metering rpc/lookup * update flashtestation logic to use new workload ID computation (base#331) To account for a bug in the xfam and tdAttributes bitmasking logic, we changed the way the workload ID is calculated in the BlockBuilderPolicy. That PR is here: flashbots/flashtestations#53 This means the workload ID calculation needs to change in any upstream services, which includes op-rbuilder. I've made the same change that I made in the solidity contract here in the attestation.rs logic where op-rbuilder calculates the workload ID. The tests have been updated to use the new correct workload ID, which I obtained by running the BlockBuilderPolicy:workloadIdForTDRegistration function on the same TEE registration that is used in the tests. * Add cumulative da of builder tx da size (base#322) * Fix builder tx cumulative da * fix builder gas and da calculation * add test * Fix deps (base#336) * Fix deps * fix version * fix * bump release * builder backrun * replacement * fix fmt * add is empty * remove not needed logs * switch considering transaction to info * sort by priority fee; add backrun integration test * support all or nothing bundles * priority fee validation * add bundle sorting * use bundle total fee for validation * refactor * remove key by sender * skip checking bundles if failed validation * merge resrouce metering and backrun bundle into one * single buffer size; fix lint * fix DA estimation; use one getter * optimize gettor * use FBPooledTransaction * info logs * handle evm error gracefully * use different metric * check invalid err * chore: rename runner/primitives crates and move reth-rpc to shared * chore: unify extensions to be one per crate * chore: migrate generic node setup to client-primitives, remove client-runner * chore: unify test account logic * chore: removed dead code * chore: migrated test harness to support extensions * chore: update metering rpc tests to use the node harness * chore: code cleanup - Remove file structure sections from READMEs - Move build_node function body into LocalNode::new - Replace local TestHarness::signer methods with Account::signer_b256() * chore: migrate metering non-rpc tests * chore: chain spec loaders * chore: remove genesis file + build it in rust * chore: setup shared primitives and move accounts/contracts there under test utils * chore: move FB test harness to flashblocks crate * chore: delete test-utils, rename client-primites to node * chore: add GHA/script to check that shared crates dont depend on client/ * chore: format features and update lockfile * review feedback * chore: inline config extraction in extension constructors Move config extraction directly into extension constructor calls to reduce intermediate variables in main.rs. * migrate back to generic install_ext * minimal changes to integrate project * fix running tests locally (we have oltp env vars on macs * fix: add native dependencies to udeps CI job The tss-esapi-sys crate requires libtss2-dev to build, which was missing from the udeps job causing CI failures. --------- Co-authored-by: Ferran Borreguero <ferran.borreguero@gmail.com> Co-authored-by: ZanCorDX <126988525+ZanCorDX@users.noreply.github.com> Co-authored-by: shana <avalonche@protonmail.com> Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Vitaly Drogan <vitaliy.drogan@gmail.com> Co-authored-by: Daniel Xifra <mandinga@gmail.com> Co-authored-by: cody-wang-cb <cody.wang@coinbase.com> Co-authored-by: Hopium <135053852+Hopium21@users.noreply.github.com> Co-authored-by: File Large <red.zone7786@fastmail.com> Co-authored-by: Daniel Xifra <daniel@xifra.dev> Co-authored-by: Anton <anton@northernforest.nl> Co-authored-by: Joe Parks <jowparks@gmail.com> Co-authored-by: Denis Kolodin <DenisKolodin@gmail.com> Co-authored-by: Solar Mithril <solarmithril@pm.me> Co-authored-by: Karim Agha <karim.dev@gmail.com> Co-authored-by: Joshua Gutow <jbgutow@gmail.com> Co-authored-by: Ash Kunda <18058966+akundaz@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: mophr <mophnetptyltd@gmaiil.com> Co-authored-by: kristoffer <kristoffer@rymdkoloni.se> Co-authored-by: Varun Doshi <doshivarun202@gmail.com> Co-authored-by: Julio <30329843+julio4@users.noreply.github.com> Co-authored-by: noot <36753753+noot@users.noreply.github.com> Co-authored-by: Tobi Akerele <crypto@tobiak.com> Co-authored-by: Haardik <hhaardik@uwaterloo.ca> Co-authored-by: theo <80177219+theochap@users.noreply.github.com> Co-authored-by: Alex Melville <Melvillian@users.noreply.github.com> Co-authored-by: Haardik <haardik@haardik.dev>
leanthebean
pushed a commit
to leanthebean/node-reth
that referenced
this pull request
Feb 5, 2026
* Add metrics for reverted transactions and builder balance in exex (base#451) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Flashblocks with incremental blocks + support in tester (base#454) ## 📝 Summary This PR changes uses the incremental format for Flashblocks and adds support for it on tester. Generate a genesis file: ``` $ cargo run -p op-rbuilder --bin tester --features optimism -- genesis --output genesis.json ``` Run op-rbuilder with flashblocks ``` $ cargo run -p op-rbuilder --bin op-rbuilder --features optimism,flashblocks node --authrpc.port 4444 --authrpc.jwtsecret ./crates/op-rbuilder/src/tester/fixtures/test-jwt-secret.txt --chain ./genesis.json --datadir /tmp/builder2 --disable-discovery --http --http.port 8545 ``` Run the tester with flashblocks enabled: ``` $ cargo run -p op-rbuilder --bin tester --features optimism -- run --flashblocks-endpoint ws://localhost:1111 ``` Now, there are two streams available, one from the builder (websocat ws://localhost:1111) and another one from the tester which mimicks the Rollup-boost preconfirmations (websocat ws://localhost:1112). ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Daniel Xifra <mandinga@gmail.com> * Remove reverting transactions from pool in op-rbuilder (base#456) ## 📝 Summary Marks reverting transactions as invalid in the payload building process and removed dependents. Also removes reverting hashes from the tx pool. This would result in transactions that revert not be considered for future blocks once it's simulated once. ## 💡 Motivation and Context Remove the need to resimulate reverting transactions for revert protection. --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix deposit command to right address (base#468) ## 📝 Summary Deposit command was not funding the address correctly ## 💡 Motivation and Context Tested deposits in integration tests --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Add priority fee integration test (base#463) ## 📝 Summary Add integration test to op-rbuilder that asserts that the block is built with priority fee ordering ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Make flashblock ws url as a flag and add more data (base#442) ## 📝 Summary Making flashblock websocket as flag so that it can be customizable. Also added receipts, account balance, block number into the metadata field, such that the RPC node can build the RPC response for `eth_transactionReceipt` and `eth_getBalance` for pending blocks. (base#4) Added an integration test to test that the metadata field indeed has the new data. ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Make block times dynamic in flashblock builder (base#482) ## 📝 Summary Currently the block time is hard coded to assume the chain block time is 1s and flashblock time is 250ms. But for Base the chain block time is 2s. Thus fixing this by adding args to make it dynamic. <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix flashblocks receipt index (base#494) ## 📝 Summary The index for getting the receipt is incorrect as it's using an updated index, fix it. Added an additional assertion in integration test to test this. <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Refactor ExecutedPayload and ExecutionInfo (base#477) ## 📝 Summary Moved ExecutionInfo and ExecutingPayload into primitives, combining them Now we could implement revert protection for Flashblocks too ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Remove prints in op-rbuilder (base#502) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Add txn monitoring in op-rbuilder pool (base#500) ## 📝 Summary This PR introduces a monitoring service that prints all the transactions that arrive to the transaction pool in op-rbuilder. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Interop support (base#462) Implement SupervisorValidator to be used in rbuilder Add additional primitives crate, that is used for storing external ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fixed grammatical errors for improved readability (base#511) Corrected grammar: "transactions events" → "transaction events" for proper noun-adjective agreement. Preposition correction: "on" → "at" for referring to a website link properly. Corrected article usage: "any" → "a" for clarity. * deps: reth v1.3.4 (base#507) ## 📝 Summary <!--- A general summary of your changes --> Bump deps to reth `v1.3.3` ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Daniel Xifra <daniel@xifra.dev> * Remove previous interop impl (base#526) ## 📝 Summary I will remove previous interop version in favor of newly written reth implementation. After this PR i'll make a follow-up PR with dependency bump and additional logic for tx filtering. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: don't miss blocks on batcher updates (base#529) ## 📝 Summary When batcher's max channel duration is big enough (e.g. 10m), the batcher would be pushing its updates at specified intervals. This causes the sequencer to send an avalanche of FCUs (and getBlockByNumber) that push safe head step-by-step. As a consequence it can happen that the time b/w FCU and ensuing getPayload would be on the scale of ~2.5s. This means that we should "remember" the payloads long enough to accommodate that corner-case. --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Fix integration tests (base#536) ## 📝 Summary Fix deposit and flashblocks integration tests. Resolves flashbots/rbuilder#533 and flashbots/rbuilder#521 ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Add metrics for flashblock and message tracking in OpRBuilder (base#543) Enhanced the OpRBuilderMetrics struct to include new metrics for tracking flashblocks, messages sent, and invalid blocks. Updated the OpPayloadBuilder to utilize these metrics during block building and transaction simulation processes. - Added `flashblock_count`, `messages_sent_count`, and `invalid_blocks_count` to OpRBuilderMetrics. - Integrated metrics tracking in OpPayloadBuilder for message sending, block building success, and transaction simulation. - Recorded durations for various operations to improve performance monitoring. ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * deps: reth v1.3.8 (base#553) ## 📝 Summary Bumps reth dependencies to `1.3.8`. ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [ ] Added tests (if applicable) * Fix Isthmus request hash; support reth 1.3.11 (base#564) ## 📝 Summary Adding reth 1.3.11 for the upcoming op chain sepolia Isthmus hardfork for op-rbuilder flashblock builder Also fixing request hash for Isthmus validity rules https://specs.optimism.io/protocol/isthmus/exec-engine.html#header-validity-rules. Tested deploying on Base devnet, it's able to sync again ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * chore: fix op-rbuilder devnet docs (base#562) ## 📝 Summary Update the op-rbuilder devnet documentation: * Update it to use the builder-playground * Various fixes (e.g. remove optimism feature, use fully qualified docker image so it pulls automatically) ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Use latest reth for op-rbuilder (base#570) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Fix isthmus withdrawals hash on payload builder vanilla (base#571) ## 📝 Summary Add isthmus withdrawal hash fix on the vanilla builder. Previously was added to the flashblocks builder. ## 💡 Motivation and Context Fix errors around invalid blocks due to incorrect withdrawals hash --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix resource usage in monitoring task (base#588) ## 📝 Summary Fixes unbounded mem growth in monitoring task ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: don't build flashblocks with more gas than block gas limit (base#567) ## 📝 Summary Currently it's possible for the builder to make more Flashblocks than intended during a block (likely due to delays). If more flashblocks are made than desired (e.g. 11 flashblocks for a 2s block w/ 200ms Flashblocks), the 11th flashblock will have a gas limit that is over the blocks gas limit and will cause invalid blocks on the sequencer. ## 💡 Motivation and Context If the builder produces a full block that uses more gas than the gas limit, the local EL client will treat it as invalid. --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * op-rbuilder: Update Documentation / CI Script (base#575) ## 📝 Summary 1. Update the version of op-reth used by CI 2. Make the CI script work on macOS as well as linux 3. Update the instructions for running/testing op-rbuilder ## 💡 Motivation and Context 1. The CI script was handy for downloading Reth 2. The instructions didn't work for me (due to the optimism feature being removed etc). --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) --------- Co-authored-by: shana <avalonche@protonmail.com> * Revert revert protection in op-rbuilder (base#602) ## 📝 Summary The builder block building times always slowly increase to a very high number on Base Sepolia, suspecting revert protection is causing failed txs to get backed up, which causes slow down in op-rbuilder block building. ``` # HELP reth_op_rbuilder_payload_num_tx_simulated_fail Number of transactions in the payload that failed simulation # TYPE reth_op_rbuilder_payload_num_tx_simulated_fail summary reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0"} 77 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.5"} 3198.061173550786 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.9"} 3223.1035892442424 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.95"} 3223.748274430612 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.99"} 3226.973635127358 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.999"} 3226.973635127358 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="1"} 3228 reth_op_rbuilder_payload_num_tx_simulated_fail_sum 64118848 reth_op_rbuilder_payload_num_tx_simulated_fail_count 21069 # HELP reth_op_rbuilder_payload_tx_simulation_duration Duration of payload simulation of all transactions # TYPE reth_op_rbuilder_payload_tx_simulation_duration summary reth_op_rbuilder_payload_tx_simulation_duration{quantile="0"} 0.018329514 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.5"} 0.49002444205448686 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.9"} 0.5026304818952316 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.95"} 0.5079867028401951 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.99"} 0.553164415015488 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.999"} 0.553164415015488 reth_op_rbuilder_payload_tx_simulation_duration{quantile="1"} 0.555461782 reth_op_rbuilder_payload_tx_simulation_duration_sum 9654.159540928 reth_op_rbuilder_payload_tx_simulation_duration_count 25870 # HELP reth_op_rbuilder_flashblock_build_duration Flashblock build duration # TYPE reth_op_rbuilder_flashblock_build_duration summary reth_op_rbuilder_flashblock_build_duration{quantile="0"} 0.055144161 reth_op_rbuilder_flashblock_build_duration{quantile="0.5"} 0.5166962986266059 reth_op_rbuilder_flashblock_build_duration{quantile="0.9"} 0.5348868728374531 reth_op_rbuilder_flashblock_build_duration{quantile="0.95"} 0.5672812838109652 reth_op_rbuilder_flashblock_build_duration{quantile="0.99"} 0.583272957920482 reth_op_rbuilder_flashblock_build_duration{quantile="0.999"} 0.583272957920482 reth_op_rbuilder_flashblock_build_duration{quantile="1"} 0.60984729 reth_op_rbuilder_flashblock_build_duration_sum 9081.926654393968 reth_op_rbuilder_flashblock_build_duration_count 21065 # HELP reth_op_rbuilder_payload_num_tx_simulated_success Number of transactions in the payload that were successfully simulated # TYPE reth_op_rbuilder_payload_num_tx_simulated_success summary reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0"} 1 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.5"} 11.000052032263987 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.9"} 20.999528921206892 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.95"} 24.001108231483542 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.99"} 29.00012111115082 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.999"} 29.00012111115082 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="1"} 60 reth_op_rbuilder_payload_num_tx_simulated_success_sum 136029 reth_op_rbuilder_payload_num_tx_simulated_success_count 21069 ``` <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Finish block building process even when cancel request is found (base#606) ## 📝 Summary This PR introduces three changes: - It refactors some of the common utilities shared among the tests into a single `TestHarness` struct which spins the test framework with all the components. Note that it does not update the tests to use this new utility. - It fixes an issue with the block builder that would stop the block building process and not return any block if a cancel request was found. This happens when an FCU and a getPayload request are called to close to each other, the getPayload cancels the block building process, and getPayload waits forever for a block that will never be built. Now, the block building finishes. - It adds an integration test to cover this use case with the new utility. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Add usage of jemalloc in op-rbuilder when feature is enabled + improve debug-fast profile (base#617) ## 📝 Summary Adding `lto = "thin"` for debug fast profile sped up my build time from 5 min to 4 min Enabled jemalloc in op-rbuilder ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: set an address for authrpc to the op-rbuilder readme (base#581) This PR fixes the launch instructions for `op-rbuilder`, making the AuthRPC accessible on all network interfaces. This is necessary to allow `op-rbuilder` to be reachable from the virtual network interface created by Docker. Additionally, the metrics port has been changed to `9011`, since `9001` is used by `builder-playground` for the `beacon`: ``` go run main.go cook opstack --external-builder http://host.docker.internal:4444 2025/04/23 20:21:02 Log level: info 2025/04/23 20:21:02 Genesis block hash: 0x301f9f301f868d587fec26c2a1b5f7d9896736842ab1787923722c3213b61e05 true ========= Services started ========= - el (authrpc: 8551/8551, http: 8545/8545, rpc: 30303/30303) - beacon (http: 3500/3500, p2p: 9000/9000/udp, p2p: 9000/9001, quic-p2p: 9100/9100) - validator () - rollup-boost (authrpc: 8551/8552) - op-node (http: 8549/8549, metrics: 7300/7300, p2p: 9003/9003, p2p: 9003/9004/udp) - op-geth (authrpc: 8551/8553, http: 8545/8546, metrics: 6061/6061, rpc: 30303/30304, ws: 8546/8547) - op-batcher () ========= Output ========= - op-geth-enode: enode://3479db4d9217fb5d7a8ed4d61ac36e120b05d36c2eefb795dc42ff2e971f251a2315f5649ea1833271e020b9adc98d5db9973c7ed92d6b2f1f2223088c3d852f@127.0.0.1:30304?discport=0 ``` Trailing spaces have also been removed in some places. * Clean up the repo * Add info log for reverting tx hashes * remove unecessary import * Remove monitoring tx task * Remove more things * Remove more stuff * Last clean * more cleaning * Use nightly clippy * Add variable builder deadline * Fix lint * Fix on FB * Remove dep * Change to info * Add flag to enable revert protection * Update * add metric * Fix * Fix lint * Remove print statement * Remove print * Add e2e test for monitor txn * Partial * Add test * Fix lint * Test new generator * More changes * add integration tet * Was using wrong static for jemalloc (base#51) * Add version metric to op-rbuilder (base#52) * Add a --playground flag on op-rbuilder to start with the flags required to run the builder on playground (base#49) * Fix existing build warnings * Add a --playground flag on op-rbuilder to start with the flags required to run the builder on playground Issue: flashbots/op-rbuilder#9 This change adds the ability to autoconfigure op-rbuilder to run a locally deployed builder-playground. Follow the instructions on how to start a builder playground under this repo: https://github.com/SozinM/builder-playground/tree/msozin/feat/flashblocks Now we can use the following startup parameters for op-rbuilder: - `./op-rbuilder node --builder.playground` This will start using the default $HOME/.playground/devnet directory - `./op-rbuilder node --builder.playground=<PATH>` Will use the provided path as the working directory of the playground * Fixed build warning * added justfile recepe * Removing flashblocks and using vanilla builder for now * Updated readme * Integration test uses genesis file (base#44) * Integration test uses genesis file * Fix lint * Revert * Issue base#36: Migrate the rest of the test to the new test utility (base#53) * Issue base#36 flashbots/op-rbuilder#36 Migrate the rest of the test to the new test utility introduced in base#606 --- This PR introduces the following changes: - Migrates all non-flashblocks integration tests to the new test harness framework - Fixes all build warnings - Adds few helper functions and types for testing - Few refactorings of the test infrastructure - Refactored the way the `tester` binary is linking to op-rbuilder dependencies - Moved all tests under `tests/` directory - Removed `integration` directory` now running `cargo test` will output ``` $ cargo test Finished `test` profile [unoptimized + debuginfo] target(s) in 0.36s Running unittests src/lib.rs (target/debug/deps/op_rbuilder-7bb461ec2888ee4b) running 8 tests test tx_signer::test::test_sign_transaction ... ok test tests::vanilla::smoke::get_payload_close_to_fcu ... ok test tests::vanilla::smoke::transaction_flood_no_sleep ... ok test tests::vanilla::ordering::fee_priority_ordering ... ok test tests::vanilla::revert::monitor_transaction_drops ... ok test tests::vanilla::revert::revert_protection ... ok test tests::vanilla::revert::revert_protection_disabled ... ok test tests::vanilla::smoke::chain_produces_blocks ... ok test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 23.67s Running unittests src/main.rs (target/debug/deps/op_rbuilder-87f69711ab7f0a5e) running 7 tests test generator::tests::test_block_cell_update_value ... ok test generator::tests::test_block_cell_immediate_value ... ok test generator::tests::test_job_deadline ... ok test tx_signer::test::test_sign_transaction ... ok test generator::tests::test_block_cell_wait_for_value ... ok test generator::tests::test_block_cell_multiple_waiters ... ok test generator::tests::test_payload_generator ... ok test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.70s Doc-tests op_rbuilder running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` * lint * update github actions * github actions update * update github actions * update github actions * review feedback * Review feedback and build improvements - `make tester` now builds - Ability to run GH Actions locally through `act` * Fix withdrawals root (base#56) * Bump reth to 1.4.1 (base#54) * Bump reth to 1.4.1 * Fix integration * Fix test * Fix merge conflict * Add helper utility to check for block inclusion in e2e tests (base#60) * Add helper utility to check for block inclusion in e2e tests * Fix lint * Fix * Add opt-in revert protection (base#59) * Add revert protection endpoint * more stuff * Finish merge * A bit more stuff * Finish tests * Remove print * Fix lint * Fix test * Fix * Fix lint * Apply feedback * Bundle with more transactions + more safe checks * Rename bundle fields * Rename to a more appropiate bundle * Rename * Move TransactionConditional to Bundle file * Update test comments * Handle unwraps * Fix lint * Fix lint * Fix bundle result (base#66) * Remove flashblocks conditional compilation (base#67) * Use correct DA transaction compression (base#61) * Added drop impl to clean up after tests Changed revert tests a bit fmt Add txpool test Fix DA config, set it via miner Extend tests Add op-alloy-flz dependency and update related configurations - Added `op-alloy-flz` as a dependency in `Cargo.toml` and `Cargo.lock`. - Configured `op-alloy-flz` to be part of the workspace in `op-rbuilder`'s `Cargo.toml`. - Updated the `payload_builder_vanilla.rs` to utilize `op-alloy-flz` for transaction size estimation. - Enhanced test framework to include new data availability tests ensuring block size limits are respected. Add max data availability transaction and block size configuration - Introduced `max_da_tx_size` and `max_da_block_size` fields in `TestHarnessBuilder` and `OpRbuilderConfig`. - Added builder methods `with_max_da_tx_size` and `with_max_da_block_size` for setting these values. - Implemented a new test to ensure transaction size limits are respected in data availability scenarios. - Updated test module to include the new data availability test. Add cumulative_da_bytes_used accur Add da config Use correct DA transaction compression * conflict changes * Modity flashblocks ws bind/port flags (base#71) * Modity flashblocks ws bind/port flags * Update * Fix * Migrate e2e tests to Isthmus (base#45) * Use isthmus * Update to payload v3 * Add total_block_built_duration metric back to vanilla builder (base#77) * Feat/revert protection status endpoint (base#76) * Add revert protection status endpoint * Add more changes * Change type * Fix compile error * More * Add test * Clean * Change comment * Fix lint * Remove print statement * Change to moka * Fix --------- Co-authored-by: Solar Mithril <solarmithril@pm.me> * Fix da scaling (base#81) * Add logs for da limits (base#86) * Add logs for da limits * Add comments * Fix * Add log for the block building execution (base#87) * Add log * Fix lint * Add builder txn to Flashblocks (base#89) * Add changes * Remove print * Use original function with manual scaling (base#96) * Use original function with manual scaling * Added comment * Add error log in case builder tx da size sets max_da_block_size to 0 (base#97) * Add replacement for default reth version (base#98) * Add replacement for default reth version Move VERSION to different crate * fmt * Added feature-gated interop (base#93) Use derive_more for enum * Use Gauge for da size limits (base#105) * Account for DA and gas limit in flashblocks (base#104) * Account for DA and gas limit in flashblocks * Use fancy staff * thx karim * Use into_bytes * Upgrade to reth 1.4.7 and main rollup-boost branch (base#112) * Add block number and DA used to logging (base#107) * modify logging * more * structure logs * Add gas limit and DA transaction results for tracing (base#110) * Add gas limit and DA transaction results for tracing * use result * Use block number as hex (base#116) * Add another builder tx after the first flashblock (base#121) * Add another builder tx after the first flashblock * Fix fb test * Add reverting hashes + min block number to Bundle (base#115) * Implement bundle reverting hashes * Merge main * Fix * Add min_block_number * fix litn * Fix * Fix comment * Mark invalid * Rename reverting_hashes * Remove Option * Revert "Remove Option" This reverts commit 4087d35ac53c7bc97f05728bba6c2402a132262c. * feat: add a feature to activate otlp telemetry (base#31) * Bundles: Ensure that the min block number is inside the MAX_BLOCK_RANGE_BLOCKS (base#128) If a user only specifies the min block number, the max block number is set to the current block number + MAX_BLOCK_RANGE_BLOCKS; however, there is no check that the min block is less than the newly set max block number. * Fix bundle type reverting hashes optional param (base#126) * Fix bundle type reverting hashes optional param * Fix * Remove toml and add feature gate (base#117) Rebase Remove custom logic Custom Engine API support + engine call propagation * Move bundle validation to primitives folder (base#129) * Move bundle validation to primitives folder * Add another check * Fix * Split op-rbuilder in lib and main (base#138) * Make op-rbuilder a lib * Fix lint * Two more fixes * Move alloc --------- Co-authored-by: Solar Mithril <solarmithril@pm.me> * In-process tests, optional dockerized validation node (base#132) * Validation node works and tests are passing using the new test infra * revert_protection_monitor_transaction_gc passes * revert_protection_disabled passes * ordering tests are passing * all tests are passing * ready * lint * Github Action login to GHCR.io * testing Github Actions ghcr access * testing Github Actions ghcr access * lint * Closes issue 133 * review feedback * review feedback * Review feedback - ctrl-c * Review feedback * review feedback * Review feedback * review feedback * lint * macos compatibility * lint * lint * fmt (base#142) Logic Add extended flashblocks tracing * Add minTimestamp and maxTimestamp as optional fields to bundle (base#141) * Add minTimestamp and maxTimestamp as optional fields to bundle * Test that bundles with min timestamp wait aren't included until the block time exceeds it * Add metric for bundles received (base#149) * Add metric to count reverted bundles (base#151) * Remove extra generic param (base#152) * Remove extra generic * Fix fmt * Add pingpong and closing frame handle (base#154) * Supress infallible clippy error (base#155) * Use tungstenite provided ping handling (base#156) * Avoid boxing for the txlogging task (base#153) * Fix regression tester command (base#160) * Genesis command outputs genesis file (base#159) * Account for flashblocks time drift (base#123) * quick bugfix Account for dynamic lag in the beginning of building process * More improvements * More improvements * More improvements * More improvements * Wrap everything into the config * Review * Review * Run the vanilla tests using both the flashblocks builder and the vanilla builder (base#145) * Applied 68 on top of latest main * Update crates/op-rbuilder/src/tests/smoke.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * lint * port new revert unit test * lint --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: add default-run to the op-rbuilder's manifest (base#162) * Flashtestions (base#137) * wip flashtestations * add builder tx interface * add bootstrap on launch * transaction management * working bootstrap * fix github action * address comments * fix cli flags * make flashtestations service non-blocking --------- Co-authored-by: mophr <mophnetptyltd@gmaiil.com> * Flashtestations flag (base#165) * Add feature flag for flashtestations * fix fmt command * Add some telemetry for `eth_sendBundle` (base#176) * measure eth_sendBundle latency * rename bundles_received metric to valid_bundles * log error messages * refactor to get rid of unnecessary mut * count all requests sent to eth_sendBundle * add failed_bundles counter * Review (base#170) Co-authored-by: Solar Mithril <solarmithril@pm.me> * Add cli flag for funding key (base#168) * Add cli flag for funding key * add docs * Move builder tx right after deposits and put it into base flashblock (base#178) * Implement correct flashblocks time cutoff (base#172) * Implement dynamic flashblock time adjustment Add control flow with child cancel tokens, that control flashblock duration * Trying to make test non-flaky * Fix test * Rename config field to make it better * Remove extra db config * Remove extra db config * Change default leeway-time + add handing for block cancellation (base#185) * Bump reth 1.5.0 (base#186) * Use reth 1.5.0 * Bump reth to 1.5.0 --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Add simple logging to timer task (base#191) * Improve metrics so we could better plot them (base#193) * Bump reth to 1.5.1 (base#192) * Reth 151 * Add debug bounds * Fix ordering issue by not including arriving txs into the best transaction iterator (base#195) * Remove without_updates for flashblocks (base#198) * Add a test to validate that no-tx-pool works (base#199) * Add a test to validate that no-tx-pool works * Fix lint * Add TDX quote provider service (base#200) * Add gauge metrics for block building steps (base#205) * introduce gauge metrics and fix naming for histogram metrics * fix a couple of flashblocks metrics * add fn to set payload builder metrics * Remove redundant account initialization (base#208) * Add flashblocks index to payload building context (base#210) * Add flashblocks index to payload building context * refactor * fix index * gauge metrics to inspect flag settings (base#207) * Bump reth to 1.6 (base#215) * Less confusing naming, state is called db and db is called state (base#219) * Less confusing naming, state is called db and db is called state * Use renaming destructuring * Add flashblock number filters to eth_sendBundle (base#213) * add min and max flashblock number fields to bundle * add min and max flashblock number to FBPooledTransaction * filter based on flashblock number * wrap best txs iterator to consider flashblock number * fix map structure and wrap better * integration tests * Fix bundle state and produce executed block (base#223) * WIP right now it has consensus error 2025-08-01T16:10:44.956046Z ERROR engine::persistence: Persistence service failed err=ProviderError(Database(Write(DatabaseWriteError { info: DatabaseErrorInfo { message: "the given key value is mismatched to the current cursor position", code: -30418 }, operation: CursorAppendDup, table_name: "AccountChangeSets", key: [0, 0, 0, 0, 0, 0, 0, 9] }))) * Hacky solution to mergin state * fmt * fmt * remove config.toml * Update crates/op-rbuilder/src/builders/flashblocks/payload.rs --------- Co-authored-by: shana <avalonche@protonmail.com> * Add caching to generator (base#221) * WIP right now it has consensus error 2025-08-01T16:10:44.956046Z ERROR engine::persistence: Persistence service failed err=ProviderError(Database(Write(DatabaseWriteError { info: DatabaseErrorInfo { message: "the given key value is mismatched to the current cursor position", code: -30418 }, operation: CursorAppendDup, table_name: "AccountChangeSets", key: [0, 0, 0, 0, 0, 0, 0, 9] }))) * fmt * cache reth db reads in flashblocks payload generation * save tip to cache on new committed state --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Ash Kunda <18058966+akundaz@users.noreply.github.com> * fix: record missing flashblocks (base#225) * record missing flashblocks in more places * code cleanup * edit log message * fix: record num txs built with flashblocks enabled (base#227) * record num txs built correctly with flashblocks enabled * Fix metrics --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * combine eth api modifications (base#231) * Add correct metric value (base#234) * feat: add transaction gas limit (base#214) * feat: add transaction gas limit * fix: update default * fix: update best txns * chore: add test for max txn gas * fix: apply suggestions * fix: tests * chore: update tests * fix: failing tests * Add fix to preserve all executed blocks for flashblocks (base#229) * Add ExecutedBlock push on every built flashblock * Update crates/op-rbuilder/src/builders/flashblocks/payload.rs * fix: override clap long version envs (base#235) * Improve best tx wrapper (base#245) * docs: eth_sendBundle (base#243) * doc comments for bundle params * add check for flashblock number range * markdown doc * update rust edition to 2024 (base#244) * feat: address gas limiter (base#253) * cli args * core impl * metrics * use the gas limiter * don't use optional gas limiter uses an "inner" struct to handle checking if it's enabled or not * cleanup stale addresses only every 100 blocks * unit tests * integration test * feat: add commit message and author in version metrics (base#236) * fix: gracefull cancellation on payload build failure (base#239) * fix: flashblock contraints in bundle api (base#259) * refactor BundleOpts to use with_ methods to set * print logs during tests * fix connecting to flashblocks ws url * fix propagating bundle params for flashblocks check * refactor flashblock ws listener in tests * test setting min=max flashblock param * bump reth to 1.7.0 (base#258) * bump reth * Add comm * Fix the problem * flag to determine if calculating state root (base#241) * calculate state root * fix tests * add no state root test * check no tx pool instead * comments * optimize * fix lint * use no tx pool * add condition * refactor: add `unreachable_pub` warning and autofix warnings (base#263) * Refactor payload builder to accept generic builder tx (base#217) * Refactor payload builder to accept generic builder tx * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/flashblocks/service.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * fix lint * fix tests --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * refactor: clean up and improve flashblocks `build_payload` (base#260) * fix: check per-address gas limit before checking if the tx reverted (base#266) * Add support for flashblocks number contract builder tx (base#256) * Refactor payload builder to accept generic builder tx * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Add support for flashblocks number contract builder tx * add docs * add builder tx to fallback block * fallback to legacy builder tx * allow top or bottom of block builder tx --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Bump reth to 1.8.1 (base#274) * bump to 1.8.1 * bump rollup-boost v * bump tracing * feat: overwrite reth default cache directory (base#238) * feat: overwrite reth default cache directory * doc: logs path * Add remote quote provider arg for flashtestations (base#276) * add metrics to track gas used by reverting txs (base#273) * Add flashblocks number integration tests (base#277) * Add flashblocks number integration tests * comments * comments * Update flashtestation service with latest contracts (base#281) * Flag to save tee key to local file (base#286) * Flag to save tee key to lcoal file * fix error handling * lint * comments * atomic file creation and permission * Add flashtestation builder tx and registration in block (base#282) * Add flashtestations integration tests (base#283) * Add flashtestation builder tx and registration in block * copilot comments * Add flashtestations integration tests * logging improvements * Update crates/op-rbuilder/src/tests/flashtestations.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: add unused_async lint, deny unreachable_pub (base#299) * refactor: clean up flashblocks context in payload builder (base#297) * Add permit flashtestations tx calls from builder (base#285) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * refactor contract simulation * refactor flashtestations builder tx * fix test comments * comments * Remove non permit flashtestation calls (base#302) * feat: implement p2p layer and broadcast flashblocks (base#275) * feat: implement flashblock sync over p2p (base#288) * reth bump (base#306) * feat: publish synced flashblocks to ws (base#310) * Add permit functions for flashblocks number contract (base#287) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * Add permit functions for flashblocks number contract * refactor to simulate call * fix tests * remove ws publishing from synced flashblocks (base#312) * [breaking-change] Fix arg for calculating state root (base#314) * Fix arg for calculating state root * fix tests * feat: Integrate downstream changes (Jovian hardfork + miner_setGasLimit + reth 1.9.1) (base#316) * chore: Rbuilder updates for jovian hardfork (base#16) * Jovian ready op-rbuilder * Add factoring in da footprint scalar * Bump reth to 1.9.0 * feat: respect miner_setGasLimit (base#18) * respect miner_setGasLimit * fmt * chore: bump to reth 1.9.1 (base#20) * wip: telemetry resolution * done * fix: Add gas_limit_config field and make block_gas_limit() public - Added gas_limit_config initialization in flashblocks context - Changed block_gas_limit() visibility from pub(super) to pub for flashtestations access - Removed unused Events import Note: Tests currently fail due to rollup-boost dependency version mismatch (op-alloy 0.20.0 vs 0.22.0) * chore: Update rollup-boost to v0.7.8 for reth 1.9.1 compatibility - Updated rollup-boost dependency from rev dd12e8e to tag v0.7.8 - Resolves op-alloy version mismatch (0.20.0 -> 0.22.0) - All tests now pass (94/94 passing) * chore: apply nightly formatting fixes Applied formatting fixes from cargo +nightly fmt to ensure code passes lint checks. Changes include proper brace placement and line formatting in flashblocks builder_tx and payload_handler. --------- Co-authored-by: Danyal Prout <git@dany.al> Co-authored-by: Haardik <hhaardik@uwaterloo.ca> * Add workload id as metric to builder (base#315) * Add workload id as metric to builder * more tdx measurements * add address * add address to metric * remove rpc * extract constants * chore(deps/reth): bump reth to 1.9.2 (base#318) * chore(deps): bump reth (base#321) * fix: jovian hardfork tests & fixes (base#320) * chore: fixes for jovian * blob fee fixes * Update tests to Jovian * run miner limit tests on both standard/flashblocks * Ensure builder transactions count towards DA usage * Increment DA usage for non-deposit sequencer transactions (e.g. via CL sync) * Add blob gas used to flashblocks delta (base#325) * Add blob gas used to delta * update rollup-boost * update rollup-boost tag * feat: resoure metering rpc/lookup * update flashtestation logic to use new workload ID computation (base#331) To account for a bug in the xfam and tdAttributes bitmasking logic, we changed the way the workload ID is calculated in the BlockBuilderPolicy. That PR is here: flashbots/flashtestations#53 This means the workload ID calculation needs to change in any upstream services, which includes op-rbuilder. I've made the same change that I made in the solidity contract here in the attestation.rs logic where op-rbuilder calculates the workload ID. The tests have been updated to use the new correct workload ID, which I obtained by running the BlockBuilderPolicy:workloadIdForTDRegistration function on the same TEE registration that is used in the tests. * Add cumulative da of builder tx da size (base#322) * Fix builder tx cumulative da * fix builder gas and da calculation * add test * Fix deps (base#336) * Fix deps * fix version * fix * bump release * builder backrun * replacement * fix fmt * add is empty * remove not needed logs * switch considering transaction to info * sort by priority fee; add backrun integration test * support all or nothing bundles * priority fee validation * add bundle sorting * use bundle total fee for validation * refactor * remove key by sender * skip checking bundles if failed validation * merge resrouce metering and backrun bundle into one * single buffer size; fix lint * fix DA estimation; use one getter * optimize gettor * use FBPooledTransaction * info logs * handle evm error gracefully * use different metric * check invalid err * chore: rename runner/primitives crates and move reth-rpc to shared * chore: unify extensions to be one per crate * chore: migrate generic node setup to client-primitives, remove client-runner * chore: unify test account logic * chore: removed dead code * chore: migrated test harness to support extensions * chore: update metering rpc tests to use the node harness * chore: code cleanup - Remove file structure sections from READMEs - Move build_node function body into LocalNode::new - Replace local TestHarness::signer methods with Account::signer_b256() * chore: migrate metering non-rpc tests * chore: chain spec loaders * chore: remove genesis file + build it in rust * chore: setup shared primitives and move accounts/contracts there under test utils * chore: move FB test harness to flashblocks crate * chore: delete test-utils, rename client-primites to node * chore: add GHA/script to check that shared crates dont depend on client/ * chore: format features and update lockfile * review feedback * chore: inline config extraction in extension constructors Move config extraction directly into extension constructor calls to reduce intermediate variables in main.rs. * migrate back to generic install_ext * minimal changes to integrate project * fix running tests locally (we have oltp env vars on macs * fix: add native dependencies to udeps CI job The tss-esapi-sys crate requires libtss2-dev to build, which was missing from the udeps job causing CI failures. * remove tips-core --------- Co-authored-by: shana <avalonche@protonmail.com> Co-authored-by: Ferran Borreguero <ferran.borreguero@gmail.com> Co-authored-by: Daniel Xifra <mandinga@gmail.com> Co-authored-by: cody-wang-cb <cody.wang@coinbase.com> Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Hopium <135053852+Hopium21@users.noreply.github.com> Co-authored-by: File Large <red.zone7786@fastmail.com> Co-authored-by: Daniel Xifra <daniel@xifra.dev> Co-authored-by: Anton <anton@northernforest.nl> Co-authored-by: Joe Parks <jowparks@gmail.com> Co-authored-by: Danyal Prout <git@dany.al> Co-authored-by: Denis Kolodin <DenisKolodin@gmail.com> Co-authored-by: Solar Mithril <solarmithril@pm.me> Co-authored-by: Karim Agha <karim.dev@gmail.com> Co-authored-by: Joshua Gutow <jbgutow@gmail.com> Co-authored-by: Ash Kunda <18058966+akundaz@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: mophr <mophnetptyltd@gmaiil.com> Co-authored-by: kristoffer <kristoffer@rymdkoloni.se> Co-authored-by: Varun Doshi <doshivarun202@gmail.com> Co-authored-by: Julio <30329843+julio4@users.noreply.github.com> Co-authored-by: noot <36753753+noot@users.noreply.github.com> Co-authored-by: Tobi Akerele <crypto@tobiak.com> Co-authored-by: theo <80177219+theochap@users.noreply.github.com> Co-authored-by: Alex Melville <Melvillian@users.noreply.github.com>
refcell
pushed a commit
that referenced
this pull request
Feb 18, 2026
<!-- Thank you for your Pull Request. Please provide a description above and review the requirements below. Bug fixes and new features should include tests. Contributors guide: https://github.com/alloy-rs/core/blob/main/CONTRIBUTING.md The contributors guide includes instructions for running rustfmt and building the documentation. --> <!-- ** Please select "Allow edits from maintainers" in the PR Options ** --> ## Motivation commit shared flashblock data structures <!-- Explain the context and why you're making that change. What is the problem you're trying to solve? In some cases there is not a problem and this can be thought of as being the motivation for your change. --> ## Solution <!-- Summarize the solution and provide any necessary context needed to understand the code change. --> ## PR Checklist - [x] Added Tests - [x] Added Documentation - [ ] Breaking changes --------- Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
refcell
pushed a commit
that referenced
this pull request
Feb 18, 2026
<!-- Thank you for your Pull Request. Please provide a description above and review the requirements below. Bug fixes and new features should include tests. Contributors guide: https://github.com/alloy-rs/core/blob/main/CONTRIBUTING.md The contributors guide includes instructions for running rustfmt and building the documentation. --> <!-- ** Please select "Allow edits from maintainers" in the PR Options ** --> ## Motivation commit shared flashblock data structures <!-- Explain the context and why you're making that change. What is the problem you're trying to solve? In some cases there is not a problem and this can be thought of as being the motivation for your change. --> ## Solution <!-- Summarize the solution and provide any necessary context needed to understand the code change. --> ## PR Checklist - [x] Added Tests - [x] Added Documentation - [ ] Breaking changes --------- Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
mw2000
pushed a commit
that referenced
this pull request
Mar 7, 2026
…naged instance (not naked proxies) (#606) * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) * chore: forge fmt * refac(contracts): use abi.encodeCall --------- Co-authored-by: emiliano-conduitxyz <emiliano@conduit.xyz>
mw2000
pushed a commit
that referenced
this pull request
Mar 9, 2026
…naged instance (not naked proxies) (#606) * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) * chore: forge fmt * refac(contracts): use abi.encodeCall --------- Co-authored-by: emiliano-conduitxyz <emiliano@conduit.xyz>
mw2000
pushed a commit
that referenced
this pull request
Mar 16, 2026
…naged instance (not naked proxies) (#606) * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) * chore: forge fmt * refac(contracts): use abi.encodeCall --------- Co-authored-by: emiliano-conduitxyz <emiliano@conduit.xyz>
haardikk21
added a commit
that referenced
this pull request
Mar 17, 2026
* Tidy unused variables from op payload builder (#427) ## 📝 Summary Cleanup PR to remove unused variables. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Reth 1.2.0 (#429) ## 📝 Summary Lovely reth changes. ## 💡 Motivation and Context Pectra ## ✅ I have completed the following steps: * [X] Run `make lint` * [X] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Ferran Borreguero <ferran.borreguero@gmail.com> Co-authored-by: shana <avalonche@protonmail.com> Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Vitaly Drogan <vitaliy.drogan@gmail.com> * Add metrics for reverted transactions and builder balance in exex (#451) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Flashblocks with incremental blocks + support in tester (#454) ## 📝 Summary This PR changes uses the incremental format for Flashblocks and adds support for it on tester. Generate a genesis file: ``` $ cargo run -p op-rbuilder --bin tester --features optimism -- genesis --output genesis.json ``` Run op-rbuilder with flashblocks ``` $ cargo run -p op-rbuilder --bin op-rbuilder --features optimism,flashblocks node --authrpc.port 4444 --authrpc.jwtsecret ./crates/op-rbuilder/src/tester/fixtures/test-jwt-secret.txt --chain ./genesis.json --datadir /tmp/builder2 --disable-discovery --http --http.port 8545 ``` Run the tester with flashblocks enabled: ``` $ cargo run -p op-rbuilder --bin tester --features optimism -- run --flashblocks-endpoint ws://localhost:1111 ``` Now, there are two streams available, one from the builder (websocat ws://localhost:1111) and another one from the tester which mimicks the Rollup-boost preconfirmations (websocat ws://localhost:1112). ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Daniel Xifra <mandinga@gmail.com> * Remove reverting transactions from pool in op-rbuilder (#456) ## 📝 Summary Marks reverting transactions as invalid in the payload building process and removed dependents. Also removes reverting hashes from the tx pool. This would result in transactions that revert not be considered for future blocks once it's simulated once. ## 💡 Motivation and Context Remove the need to resimulate reverting transactions for revert protection. --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix deposit command to right address (#468) ## 📝 Summary Deposit command was not funding the address correctly ## 💡 Motivation and Context Tested deposits in integration tests --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Add priority fee integration test (#463) ## 📝 Summary Add integration test to op-rbuilder that asserts that the block is built with priority fee ordering ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Make flashblock ws url as a flag and add more data (#442) ## 📝 Summary Making flashblock websocket as flag so that it can be customizable. Also added receipts, account balance, block number into the metadata field, such that the RPC node can build the RPC response for `eth_transactionReceipt` and `eth_getBalance` for pending blocks. (#4) Added an integration test to test that the metadata field indeed has the new data. ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Make block times dynamic in flashblock builder (#482) ## 📝 Summary Currently the block time is hard coded to assume the chain block time is 1s and flashblock time is 250ms. But for Base the chain block time is 2s. Thus fixing this by adding args to make it dynamic. <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix flashblocks receipt index (#494) ## 📝 Summary The index for getting the receipt is incorrect as it's using an updated index, fix it. Added an additional assertion in integration test to test this. <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Refactor ExecutedPayload and ExecutionInfo (#477) ## 📝 Summary Moved ExecutionInfo and ExecutingPayload into primitives, combining them Now we could implement revert protection for Flashblocks too ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Remove prints in op-rbuilder (#502) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Add txn monitoring in op-rbuilder pool (#500) ## 📝 Summary This PR introduces a monitoring service that prints all the transactions that arrive to the transaction pool in op-rbuilder. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Interop support (#462) Implement SupervisorValidator to be used in rbuilder Add additional primitives crate, that is used for storing external ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fixed grammatical errors for improved readability (#511) Corrected grammar: "transactions events" → "transaction events" for proper noun-adjective agreement. Preposition correction: "on" → "at" for referring to a website link properly. Corrected article usage: "any" → "a" for clarity. * deps: reth v1.3.4 (#507) ## 📝 Summary <!--- A general summary of your changes --> Bump deps to reth `v1.3.3` ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Daniel Xifra <daniel@xifra.dev> * Remove previous interop impl (#526) ## 📝 Summary I will remove previous interop version in favor of newly written reth implementation. After this PR i'll make a follow-up PR with dependency bump and additional logic for tx filtering. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: don't miss blocks on batcher updates (#529) ## 📝 Summary When batcher's max channel duration is big enough (e.g. 10m), the batcher would be pushing its updates at specified intervals. This causes the sequencer to send an avalanche of FCUs (and getBlockByNumber) that push safe head step-by-step. As a consequence it can happen that the time b/w FCU and ensuing getPayload would be on the scale of ~2.5s. This means that we should "remember" the payloads long enough to accommodate that corner-case. --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Fix integration tests (#536) ## 📝 Summary Fix deposit and flashblocks integration tests. Resolves flashbots/rbuilder#533 and flashbots/rbuilder#521 ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Add metrics for flashblock and message tracking in OpRBuilder (#543) Enhanced the OpRBuilderMetrics struct to include new metrics for tracking flashblocks, messages sent, and invalid blocks. Updated the OpPayloadBuilder to utilize these metrics during block building and transaction simulation processes. - Added `flashblock_count`, `messages_sent_count`, and `invalid_blocks_count` to OpRBuilderMetrics. - Integrated metrics tracking in OpPayloadBuilder for message sending, block building success, and transaction simulation. - Recorded durations for various operations to improve performance monitoring. ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * deps: reth v1.3.8 (#553) ## 📝 Summary Bumps reth dependencies to `1.3.8`. ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [ ] Added tests (if applicable) * Fix Isthmus request hash; support reth 1.3.11 (#564) ## 📝 Summary Adding reth 1.3.11 for the upcoming op chain sepolia Isthmus hardfork for op-rbuilder flashblock builder Also fixing request hash for Isthmus validity rules https://specs.optimism.io/protocol/isthmus/exec-engine.html#header-validity-rules. Tested deploying on Base devnet, it's able to sync again ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * chore: fix op-rbuilder devnet docs (#562) ## 📝 Summary Update the op-rbuilder devnet documentation: * Update it to use the builder-playground * Various fixes (e.g. remove optimism feature, use fully qualified docker image so it pulls automatically) ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Use latest reth for op-rbuilder (#570) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Fix isthmus withdrawals hash on payload builder vanilla (#571) ## 📝 Summary Add isthmus withdrawal hash fix on the vanilla builder. Previously was added to the flashblocks builder. ## 💡 Motivation and Context Fix errors around invalid blocks due to incorrect withdrawals hash --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix resource usage in monitoring task (#588) ## 📝 Summary Fixes unbounded mem growth in monitoring task ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: don't build flashblocks with more gas than block gas limit (#567) ## 📝 Summary Currently it's possible for the builder to make more Flashblocks than intended during a block (likely due to delays). If more flashblocks are made than desired (e.g. 11 flashblocks for a 2s block w/ 200ms Flashblocks), the 11th flashblock will have a gas limit that is over the blocks gas limit and will cause invalid blocks on the sequencer. ## 💡 Motivation and Context If the builder produces a full block that uses more gas than the gas limit, the local EL client will treat it as invalid. --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * op-rbuilder: Update Documentation / CI Script (#575) ## 📝 Summary 1. Update the version of op-reth used by CI 2. Make the CI script work on macOS as well as linux 3. Update the instructions for running/testing op-rbuilder ## 💡 Motivation and Context 1. The CI script was handy for downloading Reth 2. The instructions didn't work for me (due to the optimism feature being removed etc). --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) --------- Co-authored-by: shana <avalonche@protonmail.com> * Revert revert protection in op-rbuilder (#602) ## 📝 Summary The builder block building times always slowly increase to a very high number on Base Sepolia, suspecting revert protection is causing failed txs to get backed up, which causes slow down in op-rbuilder block building. ``` # HELP reth_op_rbuilder_payload_num_tx_simulated_fail Number of transactions in the payload that failed simulation # TYPE reth_op_rbuilder_payload_num_tx_simulated_fail summary reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0"} 77 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.5"} 3198.061173550786 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.9"} 3223.1035892442424 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.95"} 3223.748274430612 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.99"} 3226.973635127358 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.999"} 3226.973635127358 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="1"} 3228 reth_op_rbuilder_payload_num_tx_simulated_fail_sum 64118848 reth_op_rbuilder_payload_num_tx_simulated_fail_count 21069 # HELP reth_op_rbuilder_payload_tx_simulation_duration Duration of payload simulation of all transactions # TYPE reth_op_rbuilder_payload_tx_simulation_duration summary reth_op_rbuilder_payload_tx_simulation_duration{quantile="0"} 0.018329514 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.5"} 0.49002444205448686 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.9"} 0.5026304818952316 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.95"} 0.5079867028401951 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.99"} 0.553164415015488 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.999"} 0.553164415015488 reth_op_rbuilder_payload_tx_simulation_duration{quantile="1"} 0.555461782 reth_op_rbuilder_payload_tx_simulation_duration_sum 9654.159540928 reth_op_rbuilder_payload_tx_simulation_duration_count 25870 # HELP reth_op_rbuilder_flashblock_build_duration Flashblock build duration # TYPE reth_op_rbuilder_flashblock_build_duration summary reth_op_rbuilder_flashblock_build_duration{quantile="0"} 0.055144161 reth_op_rbuilder_flashblock_build_duration{quantile="0.5"} 0.5166962986266059 reth_op_rbuilder_flashblock_build_duration{quantile="0.9"} 0.5348868728374531 reth_op_rbuilder_flashblock_build_duration{quantile="0.95"} 0.5672812838109652 reth_op_rbuilder_flashblock_build_duration{quantile="0.99"} 0.583272957920482 reth_op_rbuilder_flashblock_build_duration{quantile="0.999"} 0.583272957920482 reth_op_rbuilder_flashblock_build_duration{quantile="1"} 0.60984729 reth_op_rbuilder_flashblock_build_duration_sum 9081.926654393968 reth_op_rbuilder_flashblock_build_duration_count 21065 # HELP reth_op_rbuilder_payload_num_tx_simulated_success Number of transactions in the payload that were successfully simulated # TYPE reth_op_rbuilder_payload_num_tx_simulated_success summary reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0"} 1 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.5"} 11.000052032263987 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.9"} 20.999528921206892 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.95"} 24.001108231483542 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.99"} 29.00012111115082 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.999"} 29.00012111115082 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="1"} 60 reth_op_rbuilder_payload_num_tx_simulated_success_sum 136029 reth_op_rbuilder_payload_num_tx_simulated_success_count 21069 ``` <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Finish block building process even when cancel request is found (#606) ## 📝 Summary This PR introduces three changes: - It refactors some of the common utilities shared among the tests into a single `TestHarness` struct which spins the test framework with all the components. Note that it does not update the tests to use this new utility. - It fixes an issue with the block builder that would stop the block building process and not return any block if a cancel request was found. This happens when an FCU and a getPayload request are called to close to each other, the getPayload cancels the block building process, and getPayload waits forever for a block that will never be built. Now, the block building finishes. - It adds an integration test to cover this use case with the new utility. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Add usage of jemalloc in op-rbuilder when feature is enabled + improve debug-fast profile (#617) ## 📝 Summary Adding `lto = "thin"` for debug fast profile sped up my build time from 5 min to 4 min Enabled jemalloc in op-rbuilder ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: set an address for authrpc to the op-rbuilder readme (#581) This PR fixes the launch instructions for `op-rbuilder`, making the AuthRPC accessible on all network interfaces. This is necessary to allow `op-rbuilder` to be reachable from the virtual network interface created by Docker. Additionally, the metrics port has been changed to `9011`, since `9001` is used by `builder-playground` for the `beacon`: ``` go run main.go cook opstack --external-builder http://host.docker.internal:4444 2025/04/23 20:21:02 Log level: info 2025/04/23 20:21:02 Genesis block hash: 0x301f9f301f868d587fec26c2a1b5f7d9896736842ab1787923722c3213b61e05 true ========= Services started ========= - el (authrpc: 8551/8551, http: 8545/8545, rpc: 30303/30303) - beacon (http: 3500/3500, p2p: 9000/9000/udp, p2p: 9000/9001, quic-p2p: 9100/9100) - validator () - rollup-boost (authrpc: 8551/8552) - op-node (http: 8549/8549, metrics: 7300/7300, p2p: 9003/9003, p2p: 9003/9004/udp) - op-geth (authrpc: 8551/8553, http: 8545/8546, metrics: 6061/6061, rpc: 30303/30304, ws: 8546/8547) - op-batcher () ========= Output ========= - op-geth-enode: enode://3479db4d9217fb5d7a8ed4d61ac36e120b05d36c2eefb795dc42ff2e971f251a2315f5649ea1833271e020b9adc98d5db9973c7ed92d6b2f1f2223088c3d852f@127.0.0.1:30304?discport=0 ``` Trailing spaces have also been removed in some places. * Clean up the repo * Add info log for reverting tx hashes * remove unecessary import * Remove monitoring tx task * Remove more things * Remove more stuff * Last clean * more cleaning * Use nightly clippy * Add variable builder deadline * Fix lint * Fix on FB * Remove dep * Change to info * Add flag to enable revert protection * Update * add metric * Fix * Fix lint * Remove print statement * Remove print * Add e2e test for monitor txn * Partial * Add test * Fix lint * Test new generator * More changes * add integration tet * Was using wrong static for jemalloc (#51) * Add version metric to op-rbuilder (#52) * Add a --playground flag on op-rbuilder to start with the flags required to run the builder on playground (#49) * Fix existing build warnings * Add a --playground flag on op-rbuilder to start with the flags required to run the builder on playground Issue: flashbots/op-rbuilder#9 This change adds the ability to autoconfigure op-rbuilder to run a locally deployed builder-playground. Follow the instructions on how to start a builder playground under this repo: https://github.com/SozinM/builder-playground/tree/msozin/feat/flashblocks Now we can use the following startup parameters for op-rbuilder: - `./op-rbuilder node --builder.playground` This will start using the default $HOME/.playground/devnet directory - `./op-rbuilder node --builder.playground=<PATH>` Will use the provided path as the working directory of the playground * Fixed build warning * added justfile recepe * Removing flashblocks and using vanilla builder for now * Updated readme * Integration test uses genesis file (#44) * Integration test uses genesis file * Fix lint * Revert * Issue #36: Migrate the rest of the test to the new test utility (#53) * Issue #36 flashbots/op-rbuilder#36 Migrate the rest of the test to the new test utility introduced in #606 --- This PR introduces the following changes: - Migrates all non-flashblocks integration tests to the new test harness framework - Fixes all build warnings - Adds few helper functions and types for testing - Few refactorings of the test infrastructure - Refactored the way the `tester` binary is linking to op-rbuilder dependencies - Moved all tests under `tests/` directory - Removed `integration` directory` now running `cargo test` will output ``` $ cargo test Finished `test` profile [unoptimized + debuginfo] target(s) in 0.36s Running unittests src/lib.rs (target/debug/deps/op_rbuilder-7bb461ec2888ee4b) running 8 tests test tx_signer::test::test_sign_transaction ... ok test tests::vanilla::smoke::get_payload_close_to_fcu ... ok test tests::vanilla::smoke::transaction_flood_no_sleep ... ok test tests::vanilla::ordering::fee_priority_ordering ... ok test tests::vanilla::revert::monitor_transaction_drops ... ok test tests::vanilla::revert::revert_protection ... ok test tests::vanilla::revert::revert_protection_disabled ... ok test tests::vanilla::smoke::chain_produces_blocks ... ok test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 23.67s Running unittests src/main.rs (target/debug/deps/op_rbuilder-87f69711ab7f0a5e) running 7 tests test generator::tests::test_block_cell_update_value ... ok test generator::tests::test_block_cell_immediate_value ... ok test generator::tests::test_job_deadline ... ok test tx_signer::test::test_sign_transaction ... ok test generator::tests::test_block_cell_wait_for_value ... ok test generator::tests::test_block_cell_multiple_waiters ... ok test generator::tests::test_payload_generator ... ok test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.70s Doc-tests op_rbuilder running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` * lint * update github actions * github actions update * update github actions * update github actions * review feedback * Review feedback and build improvements - `make tester` now builds - Ability to run GH Actions locally through `act` * Fix withdrawals root (#56) * Bump reth to 1.4.1 (#54) * Bump reth to 1.4.1 * Fix integration * Fix test * Fix merge conflict * Add helper utility to check for block inclusion in e2e tests (#60) * Add helper utility to check for block inclusion in e2e tests * Fix lint * Fix * Add opt-in revert protection (#59) * Add revert protection endpoint * more stuff * Finish merge * A bit more stuff * Finish tests * Remove print * Fix lint * Fix test * Fix * Fix lint * Apply feedback * Bundle with more transactions + more safe checks * Rename bundle fields * Rename to a more appropiate bundle * Rename * Move TransactionConditional to Bundle file * Update test comments * Handle unwraps * Fix lint * Fix lint * Fix bundle result (#66) * Remove flashblocks conditional compilation (#67) * Use correct DA transaction compression (#61) * Added drop impl to clean up after tests Changed revert tests a bit fmt Add txpool test Fix DA config, set it via miner Extend tests Add op-alloy-flz dependency and update related configurations - Added `op-alloy-flz` as a dependency in `Cargo.toml` and `Cargo.lock`. - Configured `op-alloy-flz` to be part of the workspace in `op-rbuilder`'s `Cargo.toml`. - Updated the `payload_builder_vanilla.rs` to utilize `op-alloy-flz` for transaction size estimation. - Enhanced test framework to include new data availability tests ensuring block size limits are respected. Add max data availability transaction and block size configuration - Introduced `max_da_tx_size` and `max_da_block_size` fields in `TestHarnessBuilder` and `OpRbuilderConfig`. - Added builder methods `with_max_da_tx_size` and `with_max_da_block_size` for setting these values. - Implemented a new test to ensure transaction size limits are respected in data availability scenarios. - Updated test module to include the new data availability test. Add cumulative_da_bytes_used accur Add da config Use correct DA transaction compression * conflict changes * Modity flashblocks ws bind/port flags (#71) * Modity flashblocks ws bind/port flags * Update * Fix * Migrate e2e tests to Isthmus (#45) * Use isthmus * Update to payload v3 * Add total_block_built_duration metric back to vanilla builder (#77) * Feat/revert protection status endpoint (#76) * Add revert protection status endpoint * Add more changes * Change type * Fix compile error * More * Add test * Clean * Change comment * Fix lint * Remove print statement * Change to moka * Fix --------- Co-authored-by: Solar Mithril <solarmithril@pm.me> * Fix da scaling (#81) * Add logs for da limits (#86) * Add logs for da limits * Add comments * Fix * Add log for the block building execution (#87) * Add log * Fix lint * Add builder txn to Flashblocks (#89) * Add changes * Remove print * Use original function with manual scaling (#96) * Use original function with manual scaling * Added comment * Add error log in case builder tx da size sets max_da_block_size to 0 (#97) * Add replacement for default reth version (#98) * Add replacement for default reth version Move VERSION to different crate * fmt * Added feature-gated interop (#93) Use derive_more for enum * Use Gauge for da size limits (#105) * Account for DA and gas limit in flashblocks (#104) * Account for DA and gas limit in flashblocks * Use fancy staff * thx karim * Use into_bytes * Upgrade to reth 1.4.7 and main rollup-boost branch (#112) * Add block number and DA used to logging (#107) * modify logging * more * structure logs * Add gas limit and DA transaction results for tracing (#110) * Add gas limit and DA transaction results for tracing * use result * Use block number as hex (#116) * Add another builder tx after the first flashblock (#121) * Add another builder tx after the first flashblock * Fix fb test * Add reverting hashes + min block number to Bundle (#115) * Implement bundle reverting hashes * Merge main * Fix * Add min_block_number * fix litn * Fix * Fix comment * Mark invalid * Rename reverting_hashes * Remove Option * Revert "Remove Option" This reverts commit 4087d35ac53c7bc97f05728bba6c2402a132262c. * feat: add a feature to activate otlp telemetry (#31) * Bundles: Ensure that the min block number is inside the MAX_BLOCK_RANGE_BLOCKS (#128) If a user only specifies the min block number, the max block number is set to the current block number + MAX_BLOCK_RANGE_BLOCKS; however, there is no check that the min block is less than the newly set max block number. * Fix bundle type reverting hashes optional param (#126) * Fix bundle type reverting hashes optional param * Fix * Remove toml and add feature gate (#117) Rebase Remove custom logic Custom Engine API support + engine call propagation * Move bundle validation to primitives folder (#129) * Move bundle validation to primitives folder * Add another check * Fix * Split op-rbuilder in lib and main (#138) * Make op-rbuilder a lib * Fix lint * Two more fixes * Move alloc --------- Co-authored-by: Solar Mithril <solarmithril@pm.me> * In-process tests, optional dockerized validation node (#132) * Validation node works and tests are passing using the new test infra * revert_protection_monitor_transaction_gc passes * revert_protection_disabled passes * ordering tests are passing * all tests are passing * ready * lint * Github Action login to GHCR.io * testing Github Actions ghcr access * testing Github Actions ghcr access * lint * Closes issue 133 * review feedback * review feedback * Review feedback - ctrl-c * Review feedback * review feedback * Review feedback * review feedback * lint * macos compatibility * lint * lint * fmt (#142) Logic Add extended flashblocks tracing * Add minTimestamp and maxTimestamp as optional fields to bundle (#141) * Add minTimestamp and maxTimestamp as optional fields to bundle * Test that bundles with min timestamp wait aren't included until the block time exceeds it * Add metric for bundles received (#149) * Add metric to count reverted bundles (#151) * Remove extra generic param (#152) * Remove extra generic * Fix fmt * Add pingpong and closing frame handle (#154) * Supress infallible clippy error (#155) * Use tungstenite provided ping handling (#156) * Avoid boxing for the txlogging task (#153) * Fix regression tester command (#160) * Genesis command outputs genesis file (#159) * Account for flashblocks time drift (#123) * quick bugfix Account for dynamic lag in the beginning of building process * More improvements * More improvements * More improvements * More improvements * Wrap everything into the config * Review * Review * Run the vanilla tests using both the flashblocks builder and the vanilla builder (#145) * Applied 68 on top of latest main * Update crates/op-rbuilder/src/tests/smoke.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * lint * port new revert unit test * lint --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: add default-run to the op-rbuilder's manifest (#162) * Flashtestions (#137) * wip flashtestations * add builder tx interface * add bootstrap on launch * transaction management * working bootstrap * fix github action * address comments * fix cli flags * make flashtestations service non-blocking --------- Co-authored-by: mophr <mophnetptyltd@gmaiil.com> * Flashtestations flag (#165) * Add feature flag for flashtestations * fix fmt command * Add some telemetry for `eth_sendBundle` (#176) * measure eth_sendBundle latency * rename bundles_received metric to valid_bundles * log error messages * refactor to get rid of unnecessary mut * count all requests sent to eth_sendBundle * add failed_bundles counter * Review (#170) Co-authored-by: Solar Mithril <solarmithril@pm.me> * Add cli flag for funding key (#168) * Add cli flag for funding key * add docs * Move builder tx right after deposits and put it into base flashblock (#178) * Implement correct flashblocks time cutoff (#172) * Implement dynamic flashblock time adjustment Add control flow with child cancel tokens, that control flashblock duration * Trying to make test non-flaky * Fix test * Rename config field to make it better * Remove extra db config * Remove extra db config * Change default leeway-time + add handing for block cancellation (#185) * Bump reth 1.5.0 (#186) * Use reth 1.5.0 * Bump reth to 1.5.0 --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Add simple logging to timer task (#191) * Improve metrics so we could better plot them (#193) * Bump reth to 1.5.1 (#192) * Reth 151 * Add debug bounds * Fix ordering issue by not including arriving txs into the best transaction iterator (#195) * Remove without_updates for flashblocks (#198) * Add a test to validate that no-tx-pool works (#199) * Add a test to validate that no-tx-pool works * Fix lint * Add TDX quote provider service (#200) * Add gauge metrics for block building steps (#205) * introduce gauge metrics and fix naming for histogram metrics * fix a couple of flashblocks metrics * add fn to set payload builder metrics * Remove redundant account initialization (#208) * Add flashblocks index to payload building context (#210) * Add flashblocks index to payload building context * refactor * fix index * gauge metrics to inspect flag settings (#207) * Bump reth to 1.6 (#215) * Less confusing naming, state is called db and db is called state (#219) * Less confusing naming, state is called db and db is called state * Use renaming destructuring * Add flashblock number filters to eth_sendBundle (#213) * add min and max flashblock number fields to bundle * add min and max flashblock number to FBPooledTransaction * filter based on flashblock number * wrap best txs iterator to consider flashblock number * fix map structure and wrap better * integration tests * Fix bundle state and produce executed block (#223) * WIP right now it has consensus error 2025-08-01T16:10:44.956046Z ERROR engine::persistence: Persistence service failed err=ProviderError(Database(Write(DatabaseWriteError { info: DatabaseErrorInfo { message: "the given key value is mismatched to the current cursor position", code: -30418 }, operation: CursorAppendDup, table_name: "AccountChangeSets", key: [0, 0, 0, 0, 0, 0, 0, 9] }))) * Hacky solution to mergin state * fmt * fmt * remove config.toml * Update crates/op-rbuilder/src/builders/flashblocks/payload.rs --------- Co-authored-by: shana <avalonche@protonmail.com> * Add caching to generator (#221) * WIP right now it has consensus error 2025-08-01T16:10:44.956046Z ERROR engine::persistence: Persistence service failed err=ProviderError(Database(Write(DatabaseWriteError { info: DatabaseErrorInfo { message: "the given key value is mismatched to the current cursor position", code: -30418 }, operation: CursorAppendDup, table_name: "AccountChangeSets", key: [0, 0, 0, 0, 0, 0, 0, 9] }))) * fmt * cache reth db reads in flashblocks payload generation * save tip to cache on new committed state --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Ash Kunda <18058966+akundaz@users.noreply.github.com> * fix: record missing flashblocks (#225) * record missing flashblocks in more places * code cleanup * edit log message * fix: record num txs built with flashblocks enabled (#227) * record num txs built correctly with flashblocks enabled * Fix metrics --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * combine eth api modifications (#231) * Add correct metric value (#234) * feat: add transaction gas limit (#214) * feat: add transaction gas limit * fix: update default * fix: update best txns * chore: add test for max txn gas * fix: apply suggestions * fix: tests * chore: update tests * fix: failing tests * Add fix to preserve all executed blocks for flashblocks (#229) * Add ExecutedBlock push on every built flashblock * Update crates/op-rbuilder/src/builders/flashblocks/payload.rs * fix: override clap long version envs (#235) * Improve best tx wrapper (#245) * docs: eth_sendBundle (#243) * doc comments for bundle params * add check for flashblock number range * markdown doc * update rust edition to 2024 (#244) * feat: address gas limiter (#253) * cli args * core impl * metrics * use the gas limiter * don't use optional gas limiter uses an "inner" struct to handle checking if it's enabled or not * cleanup stale addresses only every 100 blocks * unit tests * integration test * feat: add commit message and author in version metrics (#236) * fix: gracefull cancellation on payload build failure (#239) * fix: flashblock contraints in bundle api (#259) * refactor BundleOpts to use with_ methods to set * print logs during tests * fix connecting to flashblocks ws url * fix propagating bundle params for flashblocks check * refactor flashblock ws listener in tests * test setting min=max flashblock param * bump reth to 1.7.0 (#258) * bump reth * Add comm * Fix the problem * flag to determine if calculating state root (#241) * calculate state root * fix tests * add no state root test * check no tx pool instead * comments * optimize * fix lint * use no tx pool * add condition * refactor: add `unreachable_pub` warning and autofix warnings (#263) * Refactor payload builder to accept generic builder tx (#217) * Refactor payload builder to accept generic builder tx * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/flashblocks/service.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * fix lint * fix tests --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * refactor: clean up and improve flashblocks `build_payload` (#260) * fix: check per-address gas limit before checking if the tx reverted (#266) * Add support for flashblocks number contract builder tx (#256) * Refactor payload builder to accept generic builder tx * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Add support for flashblocks number contract builder tx * add docs * add builder tx to fallback block * fallback to legacy builder tx * allow top or bottom of block builder tx --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Bump reth to 1.8.1 (#274) * bump to 1.8.1 * bump rollup-boost v * bump tracing * feat: overwrite reth default cache directory (#238) * feat: overwrite reth default cache directory * doc: logs path * Add remote quote provider arg for flashtestations (#276) * add metrics to track gas used by reverting txs (#273) * Add flashblocks number integration tests (#277) * Add flashblocks number integration tests * comments * comments * Update flashtestation service with latest contracts (#281) * Flag to save tee key to local file (#286) * Flag to save tee key to lcoal file * fix error handling * lint * comments * atomic file creation and permission * Add flashtestation builder tx and registration in block (#282) * Add flashtestations integration tests (#283) * Add flashtestation builder tx and registration in block * copilot comments * Add flashtestations integration tests * logging improvements * Update crates/op-rbuilder/src/tests/flashtestations.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: add unused_async lint, deny unreachable_pub (#299) * refactor: clean up flashblocks context in payload builder (#297) * Add permit flashtestations tx calls from builder (#285) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * refactor contract simulation * refactor flashtestations builder tx * fix test comments * comments * Remove non permit flashtestation calls (#302) * feat: implement p2p layer and broadcast flashblocks (#275) * feat: implement flashblock sync over p2p (#288) * reth bump (#306) * feat: publish synced flashblocks to ws (#310) * Add permit functions for flashblocks number contract (#287) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * Add permit functions for flashblocks number contract * refactor to simulate call * fix tests * remove ws publishing from synced flashblocks (#312) * [breaking-change] Fix arg for calculating state root (#314) * Fix arg for calculating state root * fix tests * feat: Integrate downstream changes (Jovian hardfork + miner_setGasLimit + reth 1.9.1) (#316) * chore: Rbuilder updates for jovian hardfork (#16) * Jovian ready op-rbuilder * Add factoring in da footprint scalar * Bump reth to 1.9.0 * feat: respect miner_setGasLimit (#18) * respect miner_setGasLimit * fmt * chore: bump to reth 1.9.1 (#20) * wip: telemetry resolution * done * fix: Add gas_limit_config field and make block_gas_limit() public - Added gas_limit_config initialization in flashblocks context - Changed block_gas_limit() visibility from pub(super) to pub for flashtestations access - Removed unused Events import Note: Tests currently fail due to rollup-boost dependency version mismatch (op-alloy 0.20.0 vs 0.22.0) * chore: Update rollup-boost to v0.7.8 for reth 1.9.1 compatibility - Updated rollup-boost dependency from rev dd12e8e to tag v0.7.8 - Resolves op-alloy version mismatch (0.20.0 -> 0.22.0) - All tests now pass (94/94 passing) * chore: apply nightly formatting fixes Applied formatting fixes from cargo +nightly fmt to ensure code passes lint checks. Changes include proper brace placement and line formatting in flashblocks builder_tx and payload_handler. --------- Co-authored-by: Danyal Prout <git@dany.al> Co-authored-by: Haardik <hhaardik@uwaterloo.ca> * Add workload id as metric to builder (#315) * Add workload id as metric to builder * more tdx measurements * add address * add address to metric * remove rpc * extract constants * chore(deps/reth): bump reth to 1.9.2 (#318) * chore(deps): bump reth (#321) * fix: jovian hardfork tests & fixes (#320) * chore: fixes for jovian * blob fee fixes * Update tests to Jovian * run miner limit tests on both standard/flashblocks * Ensure builder transactions count towards DA usage * Increment DA usage for non-deposit sequencer transactions (e.g. via CL sync) * Add blob gas used to flashblocks delta (#325) * Add blob gas used to delta * update rollup-boost * update rollup-boost tag * feat: resoure metering rpc/lookup * update flashtestation logic to use new workload ID computation (#331) To account for a bug in the xfam and tdAttributes bitmasking logic, we changed the way the workload ID is calculated in the BlockBuilderPolicy. That PR is here: flashbots/flashtestations#53 This means the workload ID calculation needs to change in any upstream services, which includes op-rbuilder. I've made the same change that I made in the solidity contract here in the attestation.rs logic where op-rbuilder calculates the workload ID. The tests have been updated to use the new correct workload ID, which I obtained by running the BlockBuilderPolicy:workloadIdForTDRegistration function on the same TEE registration that is used in the tests. * Add cumulative da of builder tx da size (#322) * Fix builder tx cumulative da * fix builder gas and da calculation * add test * Fix deps (#336) * Fix deps * fix version * fix * bump release * builder backrun * replacement * fix fmt * add is empty * remove not needed logs * switch considering transaction to info * sort by priority fee; add backrun integration test * support all or nothing bundles * priority fee validation * add bundle sorting * use bundle total fee for validation * refactor * remove key by sender * skip checking bundles if failed validation * merge resrouce metering and backrun bundle into one * single buffer size; fix lint * fix DA estimation; use one getter * optimize gettor * use FBPooledTransaction * info logs * handle evm error gracefully * use different metric * check invalid err * chore: rename runner/primitives crates and move reth-rpc to shared * chore: unify extensions to be one per crate * chore: migrate generic node setup to client-primitives, remove client-runner * chore: unify test account logic * chore: removed dead code * chore: migrated test harness to support extensions * chore: update metering rpc tests to use the node harness * chore: code cleanup - Remove file structure sections from READMEs - Move build_node function body into LocalNode::new - Replace local TestHarness::signer methods with Account::signer_b256() * chore: migrate metering non-rpc tests * chore: chain spec loaders * chore: remove genesis file + build it in rust * chore: setup shared primitives and move accounts/contracts there under test utils * chore: move FB test harness to flashblocks crate * chore: delete test-utils, rename client-primites to node * chore: add GHA/script to check that shared crates dont depend on client/ * chore: format features and update lockfile * review feedback * chore: inline config extraction in extension constructors Move config extraction directly into extension constructor calls to reduce intermediate variables in main.rs. * migrate back to generic install_ext * minimal changes to integrate project * fix running tests locally (we have oltp env vars on macs * fix: add native dependencies to udeps CI job The tss-esapi-sys crate requires libtss2-dev to build, which was missing from the udeps job causing CI failures. --------- Co-authored-by: Ferran Borreguero <ferran.borreguero@gmail.com> Co-authored-by: ZanCorDX <126988525+ZanCorDX@users.noreply.github.com> Co-authored-by: shana <avalonche@protonmail.com> Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Vitaly Drogan <vitaliy.drogan@gmail.com> Co-authored-by: Daniel Xifra <mandinga@gmail.com> Co-authored-by: cody-wang-cb <cody.wang@coinbase.com> Co-authored-by: Hopium <135053852+Hopium21@users.noreply.github.com> Co-authored-by: File Large <red.zone7786@fastmail.com> Co-authored-by: Daniel Xifra <daniel@xifra.dev> Co-authored-by: Anton <anton@northernforest.nl> Co-authored-by: Joe Parks <jowparks@gmail.com> Co-authored-by: Denis Kolodin <DenisKolodin@gmail.com> Co-authored-by: Solar Mithril <solarmithril@pm.me> Co-authored-by: Karim Agha <karim.dev@gmail.com> Co-authored-by: Joshua Gutow <jbgutow@gmail.com> Co-authored-by: Ash Kunda <18058966+akundaz@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: mophr <mophnetptyltd@gmaiil.com> Co-authored-by: kristoffer <kristoffer@rymdkoloni.se> Co-authored-by: Varun Doshi <doshivarun202@gmail.com> Co-authored-by: Julio <30329843+julio4@users.noreply.github.com> Co-authored-by: noot <36753753+noot@users.noreply.github.com> Co-authored-by: Tobi Akerele <crypto@tobiak.com> Co-authored-by: Haardik <hhaardik@uwaterloo.ca> Co-authored-by: theo <80177219+theochap@users.noreply.github.com> Co-authored-by: Alex Melville <Melvillian@users.noreply.github.com> Co-authored-by: Haardik <haardik@haardik.dev>
haardikk21
added a commit
that referenced
this pull request
Mar 17, 2026
* Add metrics for reverted transactions and builder balance in exex (#451) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Flashblocks with incremental blocks + support in tester (#454) ## 📝 Summary This PR changes uses the incremental format for Flashblocks and adds support for it on tester. Generate a genesis file: ``` $ cargo run -p op-rbuilder --bin tester --features optimism -- genesis --output genesis.json ``` Run op-rbuilder with flashblocks ``` $ cargo run -p op-rbuilder --bin op-rbuilder --features optimism,flashblocks node --authrpc.port 4444 --authrpc.jwtsecret ./crates/op-rbuilder/src/tester/fixtures/test-jwt-secret.txt --chain ./genesis.json --datadir /tmp/builder2 --disable-discovery --http --http.port 8545 ``` Run the tester with flashblocks enabled: ``` $ cargo run -p op-rbuilder --bin tester --features optimism -- run --flashblocks-endpoint ws://localhost:1111 ``` Now, there are two streams available, one from the builder (websocat ws://localhost:1111) and another one from the tester which mimicks the Rollup-boost preconfirmations (websocat ws://localhost:1112). ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Daniel Xifra <mandinga@gmail.com> * Remove reverting transactions from pool in op-rbuilder (#456) ## 📝 Summary Marks reverting transactions as invalid in the payload building process and removed dependents. Also removes reverting hashes from the tx pool. This would result in transactions that revert not be considered for future blocks once it's simulated once. ## 💡 Motivation and Context Remove the need to resimulate reverting transactions for revert protection. --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix deposit command to right address (#468) ## 📝 Summary Deposit command was not funding the address correctly ## 💡 Motivation and Context Tested deposits in integration tests --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Add priority fee integration test (#463) ## 📝 Summary Add integration test to op-rbuilder that asserts that the block is built with priority fee ordering ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Make flashblock ws url as a flag and add more data (#442) ## 📝 Summary Making flashblock websocket as flag so that it can be customizable. Also added receipts, account balance, block number into the metadata field, such that the RPC node can build the RPC response for `eth_transactionReceipt` and `eth_getBalance` for pending blocks. (#4) Added an integration test to test that the metadata field indeed has the new data. ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Make block times dynamic in flashblock builder (#482) ## 📝 Summary Currently the block time is hard coded to assume the chain block time is 1s and flashblock time is 250ms. But for Base the chain block time is 2s. Thus fixing this by adding args to make it dynamic. <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix flashblocks receipt index (#494) ## 📝 Summary The index for getting the receipt is incorrect as it's using an updated index, fix it. Added an additional assertion in integration test to test this. <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Refactor ExecutedPayload and ExecutionInfo (#477) ## 📝 Summary Moved ExecutionInfo and ExecutingPayload into primitives, combining them Now we could implement revert protection for Flashblocks too ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Remove prints in op-rbuilder (#502) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Add txn monitoring in op-rbuilder pool (#500) ## 📝 Summary This PR introduces a monitoring service that prints all the transactions that arrive to the transaction pool in op-rbuilder. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Interop support (#462) Implement SupervisorValidator to be used in rbuilder Add additional primitives crate, that is used for storing external ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fixed grammatical errors for improved readability (#511) Corrected grammar: "transactions events" → "transaction events" for proper noun-adjective agreement. Preposition correction: "on" → "at" for referring to a website link properly. Corrected article usage: "any" → "a" for clarity. * deps: reth v1.3.4 (#507) ## 📝 Summary <!--- A general summary of your changes --> Bump deps to reth `v1.3.3` ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [ ] Added tests (if applicable) --------- Co-authored-by: Daniel Xifra <daniel@xifra.dev> * Remove previous interop impl (#526) ## 📝 Summary I will remove previous interop version in favor of newly written reth implementation. After this PR i'll make a follow-up PR with dependency bump and additional logic for tx filtering. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: don't miss blocks on batcher updates (#529) ## 📝 Summary When batcher's max channel duration is big enough (e.g. 10m), the batcher would be pushing its updates at specified intervals. This causes the sequencer to send an avalanche of FCUs (and getBlockByNumber) that push safe head step-by-step. As a consequence it can happen that the time b/w FCU and ensuing getPayload would be on the scale of ~2.5s. This means that we should "remember" the payloads long enough to accommodate that corner-case. --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Fix integration tests (#536) ## 📝 Summary Fix deposit and flashblocks integration tests. Resolves flashbots/rbuilder#533 and flashbots/rbuilder#521 ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Add metrics for flashblock and message tracking in OpRBuilder (#543) Enhanced the OpRBuilderMetrics struct to include new metrics for tracking flashblocks, messages sent, and invalid blocks. Updated the OpPayloadBuilder to utilize these metrics during block building and transaction simulation processes. - Added `flashblock_count`, `messages_sent_count`, and `invalid_blocks_count` to OpRBuilderMetrics. - Integrated metrics tracking in OpPayloadBuilder for message sending, block building success, and transaction simulation. - Recorded durations for various operations to improve performance monitoring. ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * deps: reth v1.3.8 (#553) ## 📝 Summary Bumps reth dependencies to `1.3.8`. ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [ ] Added tests (if applicable) * Fix Isthmus request hash; support reth 1.3.11 (#564) ## 📝 Summary Adding reth 1.3.11 for the upcoming op chain sepolia Isthmus hardfork for op-rbuilder flashblock builder Also fixing request hash for Isthmus validity rules https://specs.optimism.io/protocol/isthmus/exec-engine.html#header-validity-rules. Tested deploying on Base devnet, it's able to sync again ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * chore: fix op-rbuilder devnet docs (#562) ## 📝 Summary Update the op-rbuilder devnet documentation: * Update it to use the builder-playground * Various fixes (e.g. remove optimism feature, use fully qualified docker image so it pulls automatically) ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Use latest reth for op-rbuilder (#570) ## 📝 Summary <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Fix isthmus withdrawals hash on payload builder vanilla (#571) ## 📝 Summary Add isthmus withdrawal hash fix on the vanilla builder. Previously was added to the flashblocks builder. ## 💡 Motivation and Context Fix errors around invalid blocks due to incorrect withdrawals hash --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * Fix resource usage in monitoring task (#588) ## 📝 Summary Fixes unbounded mem growth in monitoring task ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: don't build flashblocks with more gas than block gas limit (#567) ## 📝 Summary Currently it's possible for the builder to make more Flashblocks than intended during a block (likely due to delays). If more flashblocks are made than desired (e.g. 11 flashblocks for a 2s block w/ 200ms Flashblocks), the 11th flashblock will have a gas limit that is over the blocks gas limit and will cause invalid blocks on the sequencer. ## 💡 Motivation and Context If the builder produces a full block that uses more gas than the gas limit, the local EL client will treat it as invalid. --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) * op-rbuilder: Update Documentation / CI Script (#575) ## 📝 Summary 1. Update the version of op-reth used by CI 2. Make the CI script work on macOS as well as linux 3. Update the instructions for running/testing op-rbuilder ## 💡 Motivation and Context 1. The CI script was handy for downloading Reth 2. The instructions didn't work for me (due to the optimism feature being removed etc). --- ## ✅ I have completed the following steps: * [x] Run `make lint` * [x] Run `make test` * [x] Added tests (if applicable) --------- Co-authored-by: shana <avalonche@protonmail.com> * Revert revert protection in op-rbuilder (#602) ## 📝 Summary The builder block building times always slowly increase to a very high number on Base Sepolia, suspecting revert protection is causing failed txs to get backed up, which causes slow down in op-rbuilder block building. ``` # HELP reth_op_rbuilder_payload_num_tx_simulated_fail Number of transactions in the payload that failed simulation # TYPE reth_op_rbuilder_payload_num_tx_simulated_fail summary reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0"} 77 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.5"} 3198.061173550786 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.9"} 3223.1035892442424 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.95"} 3223.748274430612 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.99"} 3226.973635127358 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="0.999"} 3226.973635127358 reth_op_rbuilder_payload_num_tx_simulated_fail{quantile="1"} 3228 reth_op_rbuilder_payload_num_tx_simulated_fail_sum 64118848 reth_op_rbuilder_payload_num_tx_simulated_fail_count 21069 # HELP reth_op_rbuilder_payload_tx_simulation_duration Duration of payload simulation of all transactions # TYPE reth_op_rbuilder_payload_tx_simulation_duration summary reth_op_rbuilder_payload_tx_simulation_duration{quantile="0"} 0.018329514 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.5"} 0.49002444205448686 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.9"} 0.5026304818952316 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.95"} 0.5079867028401951 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.99"} 0.553164415015488 reth_op_rbuilder_payload_tx_simulation_duration{quantile="0.999"} 0.553164415015488 reth_op_rbuilder_payload_tx_simulation_duration{quantile="1"} 0.555461782 reth_op_rbuilder_payload_tx_simulation_duration_sum 9654.159540928 reth_op_rbuilder_payload_tx_simulation_duration_count 25870 # HELP reth_op_rbuilder_flashblock_build_duration Flashblock build duration # TYPE reth_op_rbuilder_flashblock_build_duration summary reth_op_rbuilder_flashblock_build_duration{quantile="0"} 0.055144161 reth_op_rbuilder_flashblock_build_duration{quantile="0.5"} 0.5166962986266059 reth_op_rbuilder_flashblock_build_duration{quantile="0.9"} 0.5348868728374531 reth_op_rbuilder_flashblock_build_duration{quantile="0.95"} 0.5672812838109652 reth_op_rbuilder_flashblock_build_duration{quantile="0.99"} 0.583272957920482 reth_op_rbuilder_flashblock_build_duration{quantile="0.999"} 0.583272957920482 reth_op_rbuilder_flashblock_build_duration{quantile="1"} 0.60984729 reth_op_rbuilder_flashblock_build_duration_sum 9081.926654393968 reth_op_rbuilder_flashblock_build_duration_count 21065 # HELP reth_op_rbuilder_payload_num_tx_simulated_success Number of transactions in the payload that were successfully simulated # TYPE reth_op_rbuilder_payload_num_tx_simulated_success summary reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0"} 1 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.5"} 11.000052032263987 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.9"} 20.999528921206892 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.95"} 24.001108231483542 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.99"} 29.00012111115082 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="0.999"} 29.00012111115082 reth_op_rbuilder_payload_num_tx_simulated_success{quantile="1"} 60 reth_op_rbuilder_payload_num_tx_simulated_success_sum 136029 reth_op_rbuilder_payload_num_tx_simulated_success_count 21069 ``` <!--- A general summary of your changes --> ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Finish block building process even when cancel request is found (#606) ## 📝 Summary This PR introduces three changes: - It refactors some of the common utilities shared among the tests into a single `TestHarness` struct which spins the test framework with all the components. Note that it does not update the tests to use this new utility. - It fixes an issue with the block builder that would stop the block building process and not return any block if a cancel request was found. This happens when an FCU and a getPayload request are called to close to each other, the getPayload cancels the block building process, and getPayload waits forever for a block that will never be built. Now, the block building finishes. - It adds an integration test to cover this use case with the new utility. ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * Add usage of jemalloc in op-rbuilder when feature is enabled + improve debug-fast profile (#617) ## 📝 Summary Adding `lto = "thin"` for debug fast profile sped up my build time from 5 min to 4 min Enabled jemalloc in op-rbuilder ## 💡 Motivation and Context <!--- (Optional) Why is this change required? What problem does it solve? Remove this section if not applicable. --> --- ## ✅ I have completed the following steps: * [ ] Run `make lint` * [ ] Run `make test` * [ ] Added tests (if applicable) * fix: set an address for authrpc to the op-rbuilder readme (#581) This PR fixes the launch instructions for `op-rbuilder`, making the AuthRPC accessible on all network interfaces. This is necessary to allow `op-rbuilder` to be reachable from the virtual network interface created by Docker. Additionally, the metrics port has been changed to `9011`, since `9001` is used by `builder-playground` for the `beacon`: ``` go run main.go cook opstack --external-builder http://host.docker.internal:4444 2025/04/23 20:21:02 Log level: info 2025/04/23 20:21:02 Genesis block hash: 0x301f9f301f868d587fec26c2a1b5f7d9896736842ab1787923722c3213b61e05 true ========= Services started ========= - el (authrpc: 8551/8551, http: 8545/8545, rpc: 30303/30303) - beacon (http: 3500/3500, p2p: 9000/9000/udp, p2p: 9000/9001, quic-p2p: 9100/9100) - validator () - rollup-boost (authrpc: 8551/8552) - op-node (http: 8549/8549, metrics: 7300/7300, p2p: 9003/9003, p2p: 9003/9004/udp) - op-geth (authrpc: 8551/8553, http: 8545/8546, metrics: 6061/6061, rpc: 30303/30304, ws: 8546/8547) - op-batcher () ========= Output ========= - op-geth-enode: enode://3479db4d9217fb5d7a8ed4d61ac36e120b05d36c2eefb795dc42ff2e971f251a2315f5649ea1833271e020b9adc98d5db9973c7ed92d6b2f1f2223088c3d852f@127.0.0.1:30304?discport=0 ``` Trailing spaces have also been removed in some places. * Clean up the repo * Add info log for reverting tx hashes * remove unecessary import * Remove monitoring tx task * Remove more things * Remove more stuff * Last clean * more cleaning * Use nightly clippy * Add variable builder deadline * Fix lint * Fix on FB * Remove dep * Change to info * Add flag to enable revert protection * Update * add metric * Fix * Fix lint * Remove print statement * Remove print * Add e2e test for monitor txn * Partial * Add test * Fix lint * Test new generator * More changes * add integration tet * Was using wrong static for jemalloc (#51) * Add version metric to op-rbuilder (#52) * Add a --playground flag on op-rbuilder to start with the flags required to run the builder on playground (#49) * Fix existing build warnings * Add a --playground flag on op-rbuilder to start with the flags required to run the builder on playground Issue: flashbots/op-rbuilder#9 This change adds the ability to autoconfigure op-rbuilder to run a locally deployed builder-playground. Follow the instructions on how to start a builder playground under this repo: https://github.com/SozinM/builder-playground/tree/msozin/feat/flashblocks Now we can use the following startup parameters for op-rbuilder: - `./op-rbuilder node --builder.playground` This will start using the default $HOME/.playground/devnet directory - `./op-rbuilder node --builder.playground=<PATH>` Will use the provided path as the working directory of the playground * Fixed build warning * added justfile recepe * Removing flashblocks and using vanilla builder for now * Updated readme * Integration test uses genesis file (#44) * Integration test uses genesis file * Fix lint * Revert * Issue #36: Migrate the rest of the test to the new test utility (#53) * Issue #36 flashbots/op-rbuilder#36 Migrate the rest of the test to the new test utility introduced in #606 --- This PR introduces the following changes: - Migrates all non-flashblocks integration tests to the new test harness framework - Fixes all build warnings - Adds few helper functions and types for testing - Few refactorings of the test infrastructure - Refactored the way the `tester` binary is linking to op-rbuilder dependencies - Moved all tests under `tests/` directory - Removed `integration` directory` now running `cargo test` will output ``` $ cargo test Finished `test` profile [unoptimized + debuginfo] target(s) in 0.36s Running unittests src/lib.rs (target/debug/deps/op_rbuilder-7bb461ec2888ee4b) running 8 tests test tx_signer::test::test_sign_transaction ... ok test tests::vanilla::smoke::get_payload_close_to_fcu ... ok test tests::vanilla::smoke::transaction_flood_no_sleep ... ok test tests::vanilla::ordering::fee_priority_ordering ... ok test tests::vanilla::revert::monitor_transaction_drops ... ok test tests::vanilla::revert::revert_protection ... ok test tests::vanilla::revert::revert_protection_disabled ... ok test tests::vanilla::smoke::chain_produces_blocks ... ok test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 23.67s Running unittests src/main.rs (target/debug/deps/op_rbuilder-87f69711ab7f0a5e) running 7 tests test generator::tests::test_block_cell_update_value ... ok test generator::tests::test_block_cell_immediate_value ... ok test generator::tests::test_job_deadline ... ok test tx_signer::test::test_sign_transaction ... ok test generator::tests::test_block_cell_wait_for_value ... ok test generator::tests::test_block_cell_multiple_waiters ... ok test generator::tests::test_payload_generator ... ok test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.70s Doc-tests op_rbuilder running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ``` * lint * update github actions * github actions update * update github actions * update github actions * review feedback * Review feedback and build improvements - `make tester` now builds - Ability to run GH Actions locally through `act` * Fix withdrawals root (#56) * Bump reth to 1.4.1 (#54) * Bump reth to 1.4.1 * Fix integration * Fix test * Fix merge conflict * Add helper utility to check for block inclusion in e2e tests (#60) * Add helper utility to check for block inclusion in e2e tests * Fix lint * Fix * Add opt-in revert protection (#59) * Add revert protection endpoint * more stuff * Finish merge * A bit more stuff * Finish tests * Remove print * Fix lint * Fix test * Fix * Fix lint * Apply feedback * Bundle with more transactions + more safe checks * Rename bundle fields * Rename to a more appropiate bundle * Rename * Move TransactionConditional to Bundle file * Update test comments * Handle unwraps * Fix lint * Fix lint * Fix bundle result (#66) * Remove flashblocks conditional compilation (#67) * Use correct DA transaction compression (#61) * Added drop impl to clean up after tests Changed revert tests a bit fmt Add txpool test Fix DA config, set it via miner Extend tests Add op-alloy-flz dependency and update related configurations - Added `op-alloy-flz` as a dependency in `Cargo.toml` and `Cargo.lock`. - Configured `op-alloy-flz` to be part of the workspace in `op-rbuilder`'s `Cargo.toml`. - Updated the `payload_builder_vanilla.rs` to utilize `op-alloy-flz` for transaction size estimation. - Enhanced test framework to include new data availability tests ensuring block size limits are respected. Add max data availability transaction and block size configuration - Introduced `max_da_tx_size` and `max_da_block_size` fields in `TestHarnessBuilder` and `OpRbuilderConfig`. - Added builder methods `with_max_da_tx_size` and `with_max_da_block_size` for setting these values. - Implemented a new test to ensure transaction size limits are respected in data availability scenarios. - Updated test module to include the new data availability test. Add cumulative_da_bytes_used accur Add da config Use correct DA transaction compression * conflict changes * Modity flashblocks ws bind/port flags (#71) * Modity flashblocks ws bind/port flags * Update * Fix * Migrate e2e tests to Isthmus (#45) * Use isthmus * Update to payload v3 * Add total_block_built_duration metric back to vanilla builder (#77) * Feat/revert protection status endpoint (#76) * Add revert protection status endpoint * Add more changes * Change type * Fix compile error * More * Add test * Clean * Change comment * Fix lint * Remove print statement * Change to moka * Fix --------- Co-authored-by: Solar Mithril <solarmithril@pm.me> * Fix da scaling (#81) * Add logs for da limits (#86) * Add logs for da limits * Add comments * Fix * Add log for the block building execution (#87) * Add log * Fix lint * Add builder txn to Flashblocks (#89) * Add changes * Remove print * Use original function with manual scaling (#96) * Use original function with manual scaling * Added comment * Add error log in case builder tx da size sets max_da_block_size to 0 (#97) * Add replacement for default reth version (#98) * Add replacement for default reth version Move VERSION to different crate * fmt * Added feature-gated interop (#93) Use derive_more for enum * Use Gauge for da size limits (#105) * Account for DA and gas limit in flashblocks (#104) * Account for DA and gas limit in flashblocks * Use fancy staff * thx karim * Use into_bytes * Upgrade to reth 1.4.7 and main rollup-boost branch (#112) * Add block number and DA used to logging (#107) * modify logging * more * structure logs * Add gas limit and DA transaction results for tracing (#110) * Add gas limit and DA transaction results for tracing * use result * Use block number as hex (#116) * Add another builder tx after the first flashblock (#121) * Add another builder tx after the first flashblock * Fix fb test * Add reverting hashes + min block number to Bundle (#115) * Implement bundle reverting hashes * Merge main * Fix * Add min_block_number * fix litn * Fix * Fix comment * Mark invalid * Rename reverting_hashes * Remove Option * Revert "Remove Option" This reverts commit 4087d35ac53c7bc97f05728bba6c2402a132262c. * feat: add a feature to activate otlp telemetry (#31) * Bundles: Ensure that the min block number is inside the MAX_BLOCK_RANGE_BLOCKS (#128) If a user only specifies the min block number, the max block number is set to the current block number + MAX_BLOCK_RANGE_BLOCKS; however, there is no check that the min block is less than the newly set max block number. * Fix bundle type reverting hashes optional param (#126) * Fix bundle type reverting hashes optional param * Fix * Remove toml and add feature gate (#117) Rebase Remove custom logic Custom Engine API support + engine call propagation * Move bundle validation to primitives folder (#129) * Move bundle validation to primitives folder * Add another check * Fix * Split op-rbuilder in lib and main (#138) * Make op-rbuilder a lib * Fix lint * Two more fixes * Move alloc --------- Co-authored-by: Solar Mithril <solarmithril@pm.me> * In-process tests, optional dockerized validation node (#132) * Validation node works and tests are passing using the new test infra * revert_protection_monitor_transaction_gc passes * revert_protection_disabled passes * ordering tests are passing * all tests are passing * ready * lint * Github Action login to GHCR.io * testing Github Actions ghcr access * testing Github Actions ghcr access * lint * Closes issue 133 * review feedback * review feedback * Review feedback - ctrl-c * Review feedback * review feedback * Review feedback * review feedback * lint * macos compatibility * lint * lint * fmt (#142) Logic Add extended flashblocks tracing * Add minTimestamp and maxTimestamp as optional fields to bundle (#141) * Add minTimestamp and maxTimestamp as optional fields to bundle * Test that bundles with min timestamp wait aren't included until the block time exceeds it * Add metric for bundles received (#149) * Add metric to count reverted bundles (#151) * Remove extra generic param (#152) * Remove extra generic * Fix fmt * Add pingpong and closing frame handle (#154) * Supress infallible clippy error (#155) * Use tungstenite provided ping handling (#156) * Avoid boxing for the txlogging task (#153) * Fix regression tester command (#160) * Genesis command outputs genesis file (#159) * Account for flashblocks time drift (#123) * quick bugfix Account for dynamic lag in the beginning of building process * More improvements * More improvements * More improvements * More improvements * Wrap everything into the config * Review * Review * Run the vanilla tests using both the flashblocks builder and the vanilla builder (#145) * Applied 68 on top of latest main * Update crates/op-rbuilder/src/tests/smoke.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * lint * port new revert unit test * lint --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: add default-run to the op-rbuilder's manifest (#162) * Flashtestions (#137) * wip flashtestations * add builder tx interface * add bootstrap on launch * transaction management * working bootstrap * fix github action * address comments * fix cli flags * make flashtestations service non-blocking --------- Co-authored-by: mophr <mophnetptyltd@gmaiil.com> * Flashtestations flag (#165) * Add feature flag for flashtestations * fix fmt command * Add some telemetry for `eth_sendBundle` (#176) * measure eth_sendBundle latency * rename bundles_received metric to valid_bundles * log error messages * refactor to get rid of unnecessary mut * count all requests sent to eth_sendBundle * add failed_bundles counter * Review (#170) Co-authored-by: Solar Mithril <solarmithril@pm.me> * Add cli flag for funding key (#168) * Add cli flag for funding key * add docs * Move builder tx right after deposits and put it into base flashblock (#178) * Implement correct flashblocks time cutoff (#172) * Implement dynamic flashblock time adjustment Add control flow with child cancel tokens, that control flashblock duration * Trying to make test non-flaky * Fix test * Rename config field to make it better * Remove extra db config * Remove extra db config * Change default leeway-time + add handing for block cancellation (#185) * Bump reth 1.5.0 (#186) * Use reth 1.5.0 * Bump reth to 1.5.0 --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Add simple logging to timer task (#191) * Improve metrics so we could better plot them (#193) * Bump reth to 1.5.1 (#192) * Reth 151 * Add debug bounds * Fix ordering issue by not including arriving txs into the best transaction iterator (#195) * Remove without_updates for flashblocks (#198) * Add a test to validate that no-tx-pool works (#199) * Add a test to validate that no-tx-pool works * Fix lint * Add TDX quote provider service (#200) * Add gauge metrics for block building steps (#205) * introduce gauge metrics and fix naming for histogram metrics * fix a couple of flashblocks metrics * add fn to set payload builder metrics * Remove redundant account initialization (#208) * Add flashblocks index to payload building context (#210) * Add flashblocks index to payload building context * refactor * fix index * gauge metrics to inspect flag settings (#207) * Bump reth to 1.6 (#215) * Less confusing naming, state is called db and db is called state (#219) * Less confusing naming, state is called db and db is called state * Use renaming destructuring * Add flashblock number filters to eth_sendBundle (#213) * add min and max flashblock number fields to bundle * add min and max flashblock number to FBPooledTransaction * filter based on flashblock number * wrap best txs iterator to consider flashblock number * fix map structure and wrap better * integration tests * Fix bundle state and produce executed block (#223) * WIP right now it has consensus error 2025-08-01T16:10:44.956046Z ERROR engine::persistence: Persistence service failed err=ProviderError(Database(Write(DatabaseWriteError { info: DatabaseErrorInfo { message: "the given key value is mismatched to the current cursor position", code: -30418 }, operation: CursorAppendDup, table_name: "AccountChangeSets", key: [0, 0, 0, 0, 0, 0, 0, 9] }))) * Hacky solution to mergin state * fmt * fmt * remove config.toml * Update crates/op-rbuilder/src/builders/flashblocks/payload.rs --------- Co-authored-by: shana <avalonche@protonmail.com> * Add caching to generator (#221) * WIP right now it has consensus error 2025-08-01T16:10:44.956046Z ERROR engine::persistence: Persistence service failed err=ProviderError(Database(Write(DatabaseWriteError { info: DatabaseErrorInfo { message: "the given key value is mismatched to the current cursor position", code: -30418 }, operation: CursorAppendDup, table_name: "AccountChangeSets", key: [0, 0, 0, 0, 0, 0, 0, 9] }))) * fmt * cache reth db reads in flashblocks payload generation * save tip to cache on new committed state --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Ash Kunda <18058966+akundaz@users.noreply.github.com> * fix: record missing flashblocks (#225) * record missing flashblocks in more places * code cleanup * edit log message * fix: record num txs built with flashblocks enabled (#227) * record num txs built correctly with flashblocks enabled * Fix metrics --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * combine eth api modifications (#231) * Add correct metric value (#234) * feat: add transaction gas limit (#214) * feat: add transaction gas limit * fix: update default * fix: update best txns * chore: add test for max txn gas * fix: apply suggestions * fix: tests * chore: update tests * fix: failing tests * Add fix to preserve all executed blocks for flashblocks (#229) * Add ExecutedBlock push on every built flashblock * Update crates/op-rbuilder/src/builders/flashblocks/payload.rs * fix: override clap long version envs (#235) * Improve best tx wrapper (#245) * docs: eth_sendBundle (#243) * doc comments for bundle params * add check for flashblock number range * markdown doc * update rust edition to 2024 (#244) * feat: address gas limiter (#253) * cli args * core impl * metrics * use the gas limiter * don't use optional gas limiter uses an "inner" struct to handle checking if it's enabled or not * cleanup stale addresses only every 100 blocks * unit tests * integration test * feat: add commit message and author in version metrics (#236) * fix: gracefull cancellation on payload build failure (#239) * fix: flashblock contraints in bundle api (#259) * refactor BundleOpts to use with_ methods to set * print logs during tests * fix connecting to flashblocks ws url * fix propagating bundle params for flashblocks check * refactor flashblock ws listener in tests * test setting min=max flashblock param * bump reth to 1.7.0 (#258) * bump reth * Add comm * Fix the problem * flag to determine if calculating state root (#241) * calculate state root * fix tests * add no state root test * check no tx pool instead * comments * optimize * fix lint * use no tx pool * add condition * refactor: add `unreachable_pub` warning and autofix warnings (#263) * Refactor payload builder to accept generic builder tx (#217) * Refactor payload builder to accept generic builder tx * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/flashblocks/service.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * fix lint * fix tests --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * refactor: clean up and improve flashblocks `build_payload` (#260) * fix: check per-address gas limit before checking if the tx reverted (#266) * Add support for flashblocks number contract builder tx (#256) * Refactor payload builder to accept generic builder tx * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Update crates/op-rbuilder/src/builders/builder_tx.rs Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Add support for flashblocks number contract builder tx * add docs * add builder tx to fallback block * fallback to legacy builder tx * allow top or bottom of block builder tx --------- Co-authored-by: Solar Mithril <mikawamp@gmail.com> * Bump reth to 1.8.1 (#274) * bump to 1.8.1 * bump rollup-boost v * bump tracing * feat: overwrite reth default cache directory (#238) * feat: overwrite reth default cache directory * doc: logs path * Add remote quote provider arg for flashtestations (#276) * add metrics to track gas used by reverting txs (#273) * Add flashblocks number integration tests (#277) * Add flashblocks number integration tests * comments * comments * Update flashtestation service with latest contracts (#281) * Flag to save tee key to local file (#286) * Flag to save tee key to lcoal file * fix error handling * lint * comments * atomic file creation and permission * Add flashtestation builder tx and registration in block (#282) * Add flashtestations integration tests (#283) * Add flashtestation builder tx and registration in block * copilot comments * Add flashtestations integration tests * logging improvements * Update crates/op-rbuilder/src/tests/flashtestations.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: add unused_async lint, deny unreachable_pub (#299) * refactor: clean up flashblocks context in payload builder (#297) * Add permit flashtestations tx calls from builder (#285) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * refactor contract simulation * refactor flashtestations builder tx * fix test comments * comments * Remove non permit flashtestation calls (#302) * feat: implement p2p layer and broadcast flashblocks (#275) * feat: implement flashblock sync over p2p (#288) * reth bump (#306) * feat: publish synced flashblocks to ws (#310) * Add permit functions for flashblocks number contract (#287) * Add permit flashtestations tx calls from builder * move simumlation calls to builder tx * Add permit functions for flashblocks number contract * refactor to simulate call * fix tests * remove ws publishing from synced flashblocks (#312) * [breaking-change] Fix arg for calculating state root (#314) * Fix arg for calculating state root * fix tests * feat: Integrate downstream changes (Jovian hardfork + miner_setGasLimit + reth 1.9.1) (#316) * chore: Rbuilder updates for jovian hardfork (#16) * Jovian ready op-rbuilder * Add factoring in da footprint scalar * Bump reth to 1.9.0 * feat: respect miner_setGasLimit (#18) * respect miner_setGasLimit * fmt * chore: bump to reth 1.9.1 (#20) * wip: telemetry resolution * done * fix: Add gas_limit_config field and make block_gas_limit() public - Added gas_limit_config initialization in flashblocks context - Changed block_gas_limit() visibility from pub(super) to pub for flashtestations access - Removed unused Events import Note: Tests currently fail due to rollup-boost dependency version mismatch (op-alloy 0.20.0 vs 0.22.0) * chore: Update rollup-boost to v0.7.8 for reth 1.9.1 compatibility - Updated rollup-boost dependency from rev dd12e8e to tag v0.7.8 - Resolves op-alloy version mismatch (0.20.0 -> 0.22.0) - All tests now pass (94/94 passing) * chore: apply nightly formatting fixes Applied formatting fixes from cargo +nightly fmt to ensure code passes lint checks. Changes include proper brace placement and line formatting in flashblocks builder_tx and payload_handler. --------- Co-authored-by: Danyal Prout <git@dany.al> Co-authored-by: Haardik <hhaardik@uwaterloo.ca> * Add workload id as metric to builder (#315) * Add workload id as metric to builder * more tdx measurements * add address * add address to metric * remove rpc * extract constants * chore(deps/reth): bump reth to 1.9.2 (#318) * chore(deps): bump reth (#321) * fix: jovian hardfork tests & fixes (#320) * chore: fixes for jovian * blob fee fixes * Update tests to Jovian * run miner limit tests on both standard/flashblocks * Ensure builder transactions count towards DA usage * Increment DA usage for non-deposit sequencer transactions (e.g. via CL sync) * Add blob gas used to flashblocks delta (#325) * Add blob gas used to delta * update rollup-boost * update rollup-boost tag * feat: resoure metering rpc/lookup * update flashtestation logic to use new workload ID computation (#331) To account for a bug in the xfam and tdAttributes bitmasking logic, we changed the way the workload ID is calculated in the BlockBuilderPolicy. That PR is here: flashbots/flashtestations#53 This means the workload ID calculation needs to change in any upstream services, which includes op-rbuilder. I've made the same change that I made in the solidity contract here in the attestation.rs logic where op-rbuilder calculates the workload ID. The tests have been updated to use the new correct workload ID, which I obtained by running the BlockBuilderPolicy:workloadIdForTDRegistration function on the same TEE registration that is used in the tests. * Add cumulative da of builder tx da size (#322) * Fix builder tx cumulative da * fix builder gas and da calculation * add test * Fix deps (#336) * Fix deps * fix version * fix * bump release * builder backrun * replacement * fix fmt * add is empty * remove not needed logs * switch considering transaction to info * sort by priority fee; add backrun integration test * support all or nothing bundles * priority fee validation * add bundle sorting * use bundle total fee for validation * refactor * remove key by sender * skip checking bundles if failed validation * merge resrouce metering and backrun bundle into one * single buffer size; fix lint * fix DA estimation; use one getter * optimize gettor * use FBPooledTransaction * info logs * handle evm error gracefully * use different metric * check invalid err * chore: rename runner/primitives crates and move reth-rpc to shared * chore: unify extensions to be one per crate * chore: migrate generic node setup to client-primitives, remove client-runner * chore: unify test account logic * chore: removed dead code * chore: migrated test harness to support extensions * chore: update metering rpc tests to use the node harness * chore: code cleanup - Remove file structure sections from READMEs - Move build_node function body into LocalNode::new - Replace local TestHarness::signer methods with Account::signer_b256() * chore: migrate metering non-rpc tests * chore: chain spec loaders * chore: remove genesis file + build it in rust * chore: setup shared primitives and move accounts/contracts there under test utils * chore: move FB test harness to flashblocks crate * chore: delete test-utils, rename client-primites to node * chore: add GHA/script to check that shared crates dont depend on client/ * chore: format features and update lockfile * review feedback * chore: inline config extraction in extension constructors Move config extraction directly into extension constructor calls to reduce intermediate variables in main.rs. * migrate back to generic install_ext * minimal changes to integrate project * fix running tests locally (we have oltp env vars on macs * fix: add native dependencies to udeps CI job The tss-esapi-sys crate requires libtss2-dev to build, which was missing from the udeps job causing CI failures. * remove tips-core --------- Co-authored-by: shana <avalonche@protonmail.com> Co-authored-by: Ferran Borreguero <ferran.borreguero@gmail.com> Co-authored-by: Daniel Xifra <mandinga@gmail.com> Co-authored-by: cody-wang-cb <cody.wang@coinbase.com> Co-authored-by: Solar Mithril <mikawamp@gmail.com> Co-authored-by: Hopium <135053852+Hopium21@users.noreply.github.com> Co-authored-by: File Large <red.zone7786@fastmail.com> Co-authored-by: Daniel Xifra <daniel@xifra.dev> Co-authored-by: Anton <anton@northernforest.nl> Co-authored-by: Joe Parks <jowparks@gmail.com> Co-authored-by: Danyal Prout <git@dany.al> Co-authored-by: Denis Kolodin <DenisKolodin@gmail.com> Co-authored-by: Solar Mithril <solarmithril@pm.me> Co-authored-by: Karim Agha <karim.dev@gmail.com> Co-authored-by: Joshua Gutow <jbgutow@gmail.com> Co-authored-by: Ash Kunda <18058966+akundaz@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: mophr <mophnetptyltd@gmaiil.com> Co-authored-by: kristoffer <kristoffer@rymdkoloni.se> Co-authored-by: Varun Doshi <doshivarun202@gmail.com> Co-authored-by: Julio <30329843+julio4@users.noreply.github.com> Co-authored-by: noot <36753753+noot@users.noreply.github.com> Co-authored-by: Tobi Akerele <crypto@tobiak.com> Co-authored-by: theo <80177219+theochap@users.noreply.github.com> Co-authored-by: Alex Melville <Melvillian@users.noreply.github.com>
haardikk21
pushed a commit
that referenced
this pull request
Mar 17, 2026
haardikk21
pushed a commit
that referenced
this pull request
Mar 17, 2026
…naged instance (not naked proxies) (#606) * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) * chore: forge fmt * refac(contracts): use abi.encodeCall --------- Co-authored-by: emiliano-conduitxyz <emiliano@conduit.xyz>
mw2000
pushed a commit
that referenced
this pull request
Mar 19, 2026
…naged instance (not naked proxies) (#606) * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) * chore: forge fmt * refac(contracts): use abi.encodeCall --------- Co-authored-by: emiliano-conduitxyz <emiliano@conduit.xyz>
mw2000
pushed a commit
that referenced
this pull request
Mar 23, 2026
…naged instance (not naked proxies) (#606) * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) * chore: forge fmt * refac(contracts): use abi.encodeCall --------- Co-authored-by: emiliano-conduitxyz <emiliano@conduit.xyz>
mw2000
pushed a commit
that referenced
this pull request
Apr 22, 2026
…naged instance (not naked proxies) (#606) * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) * chore: forge fmt * refac(contracts): use abi.encodeCall --------- Co-authored-by: emiliano-conduitxyz <emiliano@conduit.xyz>
mw2000
added a commit
that referenced
this pull request
Apr 24, 2026
* feat: improve fault proof (#563) * feat: improve game resolution * feat(fault-proof): separate bond claiming by mode * docs: fix typo * feat: set jemalloc as global allocator * feat: update to support celestia indexer changes (#561) * feat: update to support celestia indexer changes See https://github.com/celestiaorg/optimism/pull/502. Now handles batcher that switch between DA layers. * chore: fix logger init * chore: bump hana for v4 compatibility * chore: bump celestia range elf * chore: pin nightly rust toolchain (#580) * dummy * pin nightly version * feat: audit fix (#575) * tests pass, fixes in * proposer is running locally * fix test, still broken though * more detailed error * jank proxy * wrapper solution instead * cleanup * fix silly errors; * tweak forge test * docs for dgfProposeL2Output; * spot=false * bump elf * nits + docs * add audit + pin nightly toolchain * chore: unify binary name for celestia docker image (#577) * feat: improve op-succinct-lite (#583) * chore: add features support to deploy-fdg-contracts in justfile * feat(contracts): add missing getters for public values * fix: use end exclusive range (#585) * fix: end exclusive range See https://docs.celestia.org/how-to-guides/blobstream-proof-queries. * refactor(scripts): host method for starting block * refac: handle when None returned * change for fetch-l2oo-config as well * chore: bump hana (#578) * feat: add cycles + prover gas metrics (#579) * feat: add cycles + prover gas metrics Also improved logging for better vis and debugging. * chore: make fmt happy * chore: apply comments * docs: update spn usage (#592) * docs: make update parameters flow more clear (#590) * fix * doc nits * fix: kzg verification 3.1.0 (#594) * fix * refresh gh * chore: range proof insertion log to debug * docs: L2 node latency + cleanup (#598) * add dev section to readme * doc pass * chore: bump to op-contracts v3.0.0 (#600) * test: fix e2e test (#605) * fix(validity): request deadline (#604) * fix(validity): request deadline * fix(fault-proof): request deadline * fix: add 1T gas limit The DEFAULT_GAS_LIMIT is 1B. * fix: add 4h timeout to agg proof request as well --------- Co-authored-by: fakedev9999 <taehoon@succinct.xyz> * feat: add op-celestia-indexer to docker compose (#601) * docs: add missing CELESTIA_INDEXER_RPC * feat: add op-celestia-indexer to docker compose * docs: update docs * fix healthcheck * docs: add warning for proof window * docs: udpate start l1 block and op-celestia-indexer * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) (#606) * fix(contracts): upgrade, missing proxy in calldata for proxy admin managed instance (not naked proxies) * chore: forge fmt * refac(contracts): use abi.encodeCall --------- Co-authored-by: emiliano-conduitxyz <emiliano@conduit.xyz> * feat: support eigenda (#572) * feat: support eigenda Bumps sp1, hana, hokulea for kona-client/v1.0.2 with MSRV 1.86. * ci: install sp1 toolchain * chore: bump elfs * fix: write proof to stdin for proof agg * fix: bump hokulea + hardcoded vkey + defer verification * fmt * bump elfs * feat: docker for eigenda * refac: extract proof bytes from witness data * refac: remove executor placeholder * chore: download srs from proxy image * docs: add eigenda docs * chore: bump hokulea * make ci green * skip canoe proof generation * chore: bump hokulea * bump hokulea to support mock mode for sp1-cc proving * fix: reduce RPC concurrency to prevent rate limit errors (#608) * chore: remove unused code * fix: reduce RPC concurrency to prevent rate limit errors * chore: bump hana to v1.0.0 (#612) * chore: add missing eigenda flag (#610) * docs: make altda deployments more clear (#615) * feat: spawn defense tasks concurrently (#614) * feat: spawn defense tasks concurrently * fix: typo * feat: limit concurrent proving tasks count * feat: add `count_active_defense_tasks()` * fix(fault-proof): filter by configured game type (#616) * fix(fault-proof): filter by configured game type * test: add e2e test for game type transition * fix bindings * forge fmt * feat: add env-configurable proof fulfillment strategies (#618) * feat: add env-configurable proof fulfillment strategies * make ci happy * make ci happy2 * chore: bump to v3.2.0 (#619) * ci: enable release tagging for lite docker images (#620) * chore: bump hana (#621) * chore: bump hana * chore: bump to v3.2.1. * chore: bump hana to v1.0.1 * feat: get execution stats from network when not in mock mode (#622) * ci: add cycle count diff ci for celestia range elf (#573) * ci: add cycle count diff ci for celestia range elf * chore: increase block selection offset to 2 hours This is a simple solution for Celestia Blobstream availability * ci: add elf label * fix to use finalized l2 block * fix typo * chore: bump hokulea (#609) * chore: bump hokulea * ci: add eigenda to elf ci * ci: add cycle count diff check for eigenda * ci: fix srs error * fix copy srs * fix * OP_SUCCINCT_MOCK=true for sp1-cc * fix * chore: bump eigenda elf (#623) * bump elfs * chore: clamp highest provable L2 block This avoids proving uncommitted Celestia ranges. * docs: fix link to not use absolute path (#625) This prevents 404s when the book is hosted under a sub-path. * fix: bump hokulea version and fix only ethda problem (#626) * bump hokulea version and fix only ethda problem * name nit * rename eigenda_blob_provider to eigenda_preimage_provider * update elf * restore todo * chore: bump elf --------- Co-authored-by: BowenX <bxue@eigenlabs.org> * chore: bump hana (#630) * chore: bump hana to v1.1.0-mocha * chore: bump to v3.2.2 * chore: bump elfs * feat: skip CHALLENGER_WINS game resolution in proposer mode (#632) Added a condition to skip resolution when the parent game status is CHALLENGER_WINS, since such games will be ultimately resolved as CHALLENGER_WINS. Proposers have no incentive to resolve these games. Co-authored-by: seolaoh <osa8361@gmail.com> * fix(fault-proof): fix proposer with canonical chain tracking (#613) * fix(fault-proof): fix proposer with canonical chain tracking * refactor: improve game resolution * refactor: improve game credit claim * refactor: improve game defense * chore: add comments * chore: rename to update_canonical_head_if_further * chore: rename to is_XXX for boolean returning func * refactor: remove early return from `refresh_state` * fix * fix * refactor: refactor fix-proposer PR (#627) * move run() to the top * move state init from refresh state to proposer init * huge refac * remove is_finalized * remove update_canonical_head_if_further * move below new * switch orders * compute canonical head * remove state snapshot * typo * refac remove subtree * fmt * update fetch_game * rename to sync_state * remove is_descendant_of_anchor * refac remove_subtree * more refac (#628) * wip * remove for claim_bond_for_game * fix * clippy * fix * fix * fix * clippy * fix * refac * fix: drop if parent game is not in cache * switch orders * fix is_parent_resolved * update testing doc * remove cursor and set_cursor * improve fetch_game * improve sync_games * misspell * test: add comments to e2e tests * feat: optionally request proofs on spn mainnet (#587) * bump sp1 sdk * add support for KMS requester * update binaries * use local signer * use auction strategy * fix tests and binaries * fmt * make timeout 1 hour * fix cycle/gas limits * add env vars for more prove params * whitelist env var in validity proposer * whitelist for faul-proof * bump sp1 sdk & elfs * don't split if cancelled * sqlx + add auction_timeout env var * fix proof request cancellation * fix sqlx * return early * fix conditional check * fix cancel logic * return early if cancelled * fix log * fix sqlx * add min auction period to requests * fix: build errors * feat: determine network mode from fulfillment strategies * fix: typos * fix: strip "0x" * fix: set max price per pgu to 300,000,000 * fix: handle UnspecifiedFulfillmentStrategy * fix: add handle_cancelled_request() * fix: configure min auction period with a env var * fix: cancel requests only if NetworkMode is Mainnet * chore: add the new env vars in the docs * feat: refactor network signer creation to a util fn * fix: feedbacks * chore: bump SP1 to v5.2.2 * fix: pin SP1 version * chore: update ELFs * fix: rebase * fix: Docker tag * chore: update ELFs again * fix: typo * fix: rebase --------- Co-authored-by: leruaa <aurelien.catinon@gmail.com> * fix: retain canonical head when pruning resolved games (#634) * fix: retain canonical head when pruning resolved games * clippy * feat: resume fast finality proving after restart (#637) * feat: range proof gas splitting (#576) * tests pass, fixes in * proposer is running locally * fix test, still broken though * more detailed error * jank proxy * wrapper solution instead * cleanup * fix silly errors; * tweak forge test * docs for dgfProposeL2Output; * works locally * cleanup * forge fmt * chore: update ELFs * feat: add a range limit when computing ranges by gas * fix: fmt * feat: rename gas_limit to evm_gas_limit * fix: revert RANGE_PROOF_INTERVAL default value * fix: rename RANGE_PROOF_GAS_LIMIT to RANGE_PROOF_EVM_GAS_LIMIT * feat: replace tuples by Range type * chore: update comment * chore: add `single_small_block` test * fix: comment * fix: add a warning if no ranges were inserted in the database * feat: merge disjoint ranges if possible before splitting * fix: perf feedbacks --------- Co-authored-by: leruaa <aurelien.catinon@gmail.com> * chore: bump kona for Fusaka readiness (#633) * kona bump wip * patch kona * compiles * fmt * revert * chore(kona): bump version * finally works * chore: missing changes from merge commit * bump to tag * bump elfs * fix l1 config path * feat: support load l1 chain config from fs * fix: cycle count on a range from 1 week ago * revert: cycle count on a range from 1 week ago This reverts commit ea93264558adcd43909fa42d73ca7ec3c398c7c2. * chore: bump hana (#640) * bump hana * chore: bump version * bump elfs * bump hokulea * fix * test: mine blocks every 1 second * switch e2e test ci to use mainnet endpoints * revert * fix * fix --------- Co-authored-by: theochap <theodore.chap@gmail.com> Co-authored-by: leruaa <aurelien.catinon@gmail.com> * fix: add timeouts to network prover calls to prevent deadlock (#639) * fix: add timeouts to network prover calls to prevent deadlock * refactor: improve * chore: set NETWORK_CALL_TIMEOUT_SECS to 15s * refactor: use cached dispute state for challenger (#629) * fix(fault-proof): fix proposer with canonical chain tracking * refactor: improve game resolution * refactor: improve game credit claim * refactor: improve game defense * chore: add comments * chore: rename to update_canonical_head_if_further * chore: rename to is_XXX for boolean returning func * refactor: remove early return from `refresh_state` * fix * fix * refactor: refactor fix-proposer PR (#627) * move run() to the top * move state init from refresh state to proposer init * huge refac * remove is_finalized * remove update_canonical_head_if_further * move below new * switch orders * compute canonical head * remove state snapshot * typo * refac remove subtree * fmt * update fetch_game * rename to sync_state * remove is_descendant_of_anchor * refac remove_subtree * more refac (#628) * wip * remove for claim_bond_for_game * fix * clippy * fix * fix * fix * clippy * fix * refac * fix: drop if parent game is not in cache * switch orders * fix is_parent_resolved * update testing doc * remove cursor and set_cursor * improve fetch_game * improve sync_games * misspell * refac: cursor+deadline scan with gameType filter - Remove MAX_GAMES_TO_CHECK_FOR_CHALLENGE - Simplify malicious challenge * move run to top * wip * huge refac + compiles * more refac * more refac * more refac * polish docs * more refac * udpate comment * more refac * update comments * fix compiler error * fix * fix: validate cached checkpoints against contract before reuse (#641) * fix: validate cached checkpoints against contract before reuse * forge fmt for foundry 1.4.1-stable * feat: add json logging (#643) * feat: add JSON log format option to logger setup * feat: add ansi feature flag and respect NO_COLOR in logger * fix: clean up imports and formatting in logger.rs * chore: clippy --------- Co-authored-by: Victor Castell <0x@vcastellm.xyz> * feat: add --slow for deploy to testnet or mainnet (#599) Co-authored-by: Aurélien <3535019+leruaa@users.noreply.github.com> * feat: add support for GCP HSM (#638) * feat: add support for GCP HSM * feat: use alloy-signer-gcp * chore: add signer methods * fix: signer test * fix: typo * feat: optional `L1_BEACON_RPC` (#645) * feat: optional l1 beacon url * nit * refactor: return Result instead of Option * fix: L1_BEACON_RPC in book * nit * fix: make fmt happy * refactor: refactor run_range_program (#635) * refactor: refactor run_range_program * fix * fmt * chore: bump celestia range elf * chore: bump elfs * fix: return false for parent game challenger wins check when genesis (#650) * fix: return false for parent game challenger wins check when genesis * fix --------- Co-authored-by: seolaoh <osa8361@gmail.com> * feat: add a timeout for network calls (#646) * fix: re-enable CI tests + resolve Anvil conflict + forge fmt (#660) * fix: drop Anvil if test panics * fix: validity docstring tests * fix: forge fmt * fix: ci.yaml + test-threads=1 * fix: forge fmt with nightly * refactor: e2e feature flag + run from Justfile * fix: bring back L1 RPCs for now * nit: happy fmt * fix: testing guide cmd * fix: not skip test_honest_proposer/challenger * docs: some notes and refinements for smoother onboarding (#662) * docs: misc improvements primarily around fault-proofs * fix: add just installation for testing * nit * refactor: improve fp upgrade process * fix: mock verifier link * fix: -v flag when docker down * docs: easier validity quick start to follow * fix: remove eigenda configs from env + note * nit: consistent wording in expr sections * fix: remove eigenda unnecessary variables * feat: set the output path of the l2oo config (#652) Allow to setup the output path of the config to an arbitrary file, this is necessary when running the compiled version of fetch_l2oo_config as a tool, for example using a Docker container. * chore: bump kona to kona-client/v1.1.6 (#656) * chore: bump kona to kona-client/v1.1.4 * fix * wip * fix * chore: bump hana * chore: bump hokulea * chore: bump hokulea * chore: bump hokulea * fix bump hokulea * bump elfs * fix(fault-proof): clear stale canonical head value (#653) * fix(fault-proof): clear stale canonical head value * chore(fault-proof): add more logging * fix(fault-proof): clear canonical_head_index only canonical_head_l2_block serves as initial state * test(fault-proof): add test_proposer_recovery_after_canonical_head_invalidation * fmt * test(fault-proof): increase timeout * test(fault-proof): increase timeout * test(fault-proof): increase timeout * chore: bump kona to kona-client/v1.1.4 * fix * wip * fix * update test to finalize valid games to be evicted * test(fault-proof): increase timeout * chore: bump hana * chore: bump hokulea * increase timeout * chore: bump hokulea * chore: bump hokulea * fix bump hokulea * bump elfs * bump elfs * fix(utils): add mutex to signer * chore: remove unused import * refactor: decouple locking from Signer enum via SignerLock wrapper * refactor(proposer): remove redundant game creation decision should_create_game(), now returns the parent game index alongside the decision boolean and next block number. * feat: make agg proof mode configurable for proposers (#671) * feat: make agg proof mode configurable for fp proposer * refactor: default to plonk for agg proofs This is because plonk has better trust assumptions than groth16. * make fmt + clippy happy * fix(fault-proof): skip legacy games (#677) * refactor: enrich MockPermissionedDisputeGame * fix: e2e legacy games should use real claims * refactor: separate drop games check + improved logging * fix: skip legacy games * fix: pass factory address for mock game deployment * fix: simplify legacy game e2e test * test: ensure proposer can handle game transition while running * fix: make clippy happy * docs: update game type transition e2e * fix: increment cursor if game type not supported * nit: redundant factory + typo * fix(fault-proof): retain anchor game in cache (#676) * fix(fault-proof): retain anchor game in cache * refactor(fault-proof): fetch anchor outside state lock * test(fault-proof): add proposer_retains_anchor_after_bond_claim * ci: add fp integrations test workflow * docs: update testing.md * chore: make clippy happy * test: move integration test to e2e suite * refactor: enforce game retention policy at action creation * chore: fmt * chore: revert change in just tests * feat: add sp1Verifier() getter to OPSuccinctFaultDisputeGame (#674) * chore: improve fault proof contracts upgrade flow (#673) * chore: remove private key for dry run Also added private key validation on upgrade execution. * docs(fault_proofs): add missing requirements Added l1 rpc and private key required for the fp contracts upgrade call. * fix(fault-proof): derive proving interval from contract (#679) * fix: compute witness interval from chain * fix: less contract call * fix: saturating sub * fix: start_block * refactor: filter e2e logging targets (#682) * refactor: filter e2e logging targets * fix: remove init_logging inside tests * refactor: standalone init_logging * fix: missing e2e * fix: op_succinct_client_utils Co-authored-by: Taehoon Kim <taehoon@succinct.xyz> --------- Co-authored-by: Taehoon Kim <taehoon@succinct.xyz> * fix: avoid full replay on restarts by backward sync (#681) * fix: sync backwards to avoid caching from genesis * refactor: define GameFetchResult * fix: if syncing failed retry before continue * fix: if cursor lt latest_index * fix: define start_cursor * chore: add some logs * fix: check if game already exists * test: e2e harness overhaul expanding `TestEnvironment` (#683) * refactor: helper methods on TestEnvironment * refactor: validation_anchor_reset * refactor: send_contract_transaction * chore: simplify e2e tests * feat: define TestPrivateKeys * refactor: game_type field * refactor: monitoring methods on TestEnvironment * refactor: deploy mock permissioned game * nit: rename latest_game_info * fix: remove const keys, type * feat: allow config bins to load `.env` from a specified path (#667) * feat: load .env from the specified path before falling back to root * refactor: Try loading .env when project root missing If project root isn't found, still attempt to load the provided env file before emitting a warning to avoid spurious messages when the file exists. --------- Co-authored-by: Victor Castell <0x@vcastellm.xyz> * fix: adjust action triggers + concurrency (#684) * fix: action triggers + concurrency * nit * fix: apply review comments * fix: preserve lowest cached game subtree + `sync_state` tests (#686) * refactor: define init_proposer method * test: some sync_state test cases * refactor: add canonical_head_l2_block to snapshot * test: complete cases for in_progress games * deps: rstest * refactor: extend to cover cases with anchor game * chore: replace under e2e feature * test: some anch cases * test: test_sync_state_with_max_game_deadline_gap * fix: do not remove subtree of lowest cached game * refactor: define Assertion trait * fix: update start_cursor only if fetching succeed * test: test_sync_state_with_invalid_game_removes_subtree * test: expand test cases for invalid games * nit: some clean-ups * ci: e2e timeout set to 60mins * nit: typo * ci: test target matrix * fix: typo * refactor: define Cursor type * refactor: simplify invalid game eviction * chore: remove unused Cursor methods * nit: turn on e2e feature * chore: bump kona to kona-client/v1.2.2 (#680) * chore: bump kona to kona-client/v1.2.2 * feat: use a custom crypto for kzg point eval precompile * feat: add cycle tracker back * chore: bump elfs * chore: fix fmt * chore: bump hokulea * chore: bump hana to v1.4.0-mocha * chore: bump hokulea to hokulea-client/v1.1.0 * chore: bump to v3.4.0-rc.1 (#692) * chore: bump to v3.4.0 * chore: bump to 3.4.0-rc.1 * fix: use `RwLock` for state + lower `fetch_interval` for tests (#691) * fix: switch to RwLock for state * fix: lower fetch_interval for tests * fix: try with fetch_interval=5 * fix: test_proposer_recovery_after_canonical_head_invalidation * nit * fix: missing e2e feature flag * fix: up to 10 * fix: look up for correct parent_id * nit: bring back e2e feature * nit: docstring * fix: single lock on removing subtree of invalid games * refactor(fault-proof): avoid IO under write lock (#693) * fix: switch to RwLock for state * fix: lower fetch_interval for tests * fix: try with fetch_interval=5 * fix: test_proposer_recovery_after_canonical_head_invalidation * nit * fix: missing e2e feature flag * fix: up to 10 * fix: look up for correct parent_id * nit: bring back e2e feature * nit: docstring * fix: single lock on removing subtree of invalid games * refactor(fault-proof): avoid IO under write lock --------- Co-authored-by: Farhad Shabani <farhad.shabani@gmail.com> * fix: update Cargo.lock (#696) * fix: update Cargo.lock * chore: update elf * ci: add `just update-elf` (#697) * fix: update Cargo.lock * chore: update elf * fix: higher timeout for *_proposer_running * feat: add just update-elf * refactor: use just in elf CI * nit: rm newline * fix: breakdown elf just cmds + update verify-binaries.md * nit * fix: revert timeouts --------- Co-authored-by: Taehoon Kim <taehoon@succinct.xyz> * feat: allow custom directory for L1/L2 config files (#699) * feat: accept custom L1/L2 config dirs * refactor: setup logger and add logs * doc: add L1/L2 config dir under optional vars * nit: consistent log message * fix: multilingual removed * fix: mdbook lints * fix: keep mdbook on v0.4 for now * fix: mdbook-mermaid@0.16.0 * fix: default values in book * feat: log config from file if exists * docs: fix fault-proof proposer.md (#672) * docs: fix typo in proposer env file * docs: remove unnecessary direction * docs: fix typo * docs: align challenger.md * test(fault-proof): add integrations test for unsupported/invalid games (#694) * test(fault-proof): add test_invalid_game_type_handling * test(fault-proof): remove redundant legacy game filtering e2e test * test: add missing import * test(fault-proof): add test_sync_state_filters_multiple_legacy_games * test(fault-proof): remove redundant legacy game filter e2e test * test(fault-proof): add test_sync_state_filters_non_respected_game_type * test(fault-proof): restore game type transition e2e tests * test(fault-proof): consolidate redundant legacy game filtering tests * docs: update comment for test_sync_state_filters_legacy_games * test: add test helpers and restore e2e tests * nit: make fmt happy * nit: make clippy happy --------- Co-authored-by: Farhad Shabani <farhad.shabani@gmail.com> * chore: bump hokulea to hokulea-client/v1.1.1 (#703) * test: sysgo-powered e2e testing infra for validity proposer (#701) * fix: higher timeout for *_proposer_running * feat: add just build-elfs * nit: rm newline * feat: setup minimal e2e test with op-devstack * feat: Justfile * feat: binding generator script * test: get minimal test working * fix: update-package * refactor: gen few bindings and use for init_test * chore: apply changes from /optimism * chore: revert irrelavant changes * test: TestValidityProposer_L2OODeployedAndUp * chore: rename package to validity_test * deps: redirect to succinctlabs/optimism * refactor: override some params * chore: separate out presets from tests * feat: deploy SP1MockVerifier after * fix: do not require ETHERSCAN_API_KEY * ci: e2e-sysgo.yml * fix: missing working-directory * chore: separate out adapter code * fix: trim just cmds * refactor: supervisor wirings * test: TestValidityProposer_ProvingSingleRange * deps: update * feat: NextBlockNumber * fix: start proving from 1 + default sequencing window * fix: latest L2 block number 1 _L2OODeployedAndUp * docs: add README * chore: replace gen-binding.sh * deps: update optimism rev * ci: switch to runs-on * chore: rm unnecessary compressed/README * fix: submodule * docs: Maintenance section * deps: latest rev on op-succinct-sysgo * fix: WithL2OOStartingBlockNumber * feat: add preflight check script for fp (#669) * feat: add preflight check script for fp * docs: update and fix * chore: cleanup * chore: default to .env.preflight * chore: apply comments * docs: add note about altda feature flags * feat: introduce SET_IMPL_BLOCK env var * refactor: make AGG_PROOF_MODE configurable * chore: make USE_KMS_REQUESTER optional * docs: make l1 beacon rpc required * configurable CHUNK_SIZE * fix: effective strategy * fix * cleanup * docs * docs --------- Co-authored-by: Farhad Shabani <Farhad.Shabani@gmail.com> * test(fault-proof): add bond claim eviction test (#698) * test(fault-proof): add bond-claim eviction test * test(fault-proof): remove unnecessary step * test(fault-proof): add test_bond_claim_eviction_multi_branch * chore: gitignore foundry.lock (#709) * test(fault-proof): add test_challenger_wins_cascade_removal (#700) * test(fault-proof): add test_invalid_game_type_handling * test(fault-proof): remove redundant legacy game filtering e2e test * test: add missing import * test(fault-proof): add test_sync_state_filters_multiple_legacy_games * test(fault-proof): remove redundant legacy game filter e2e test * test(fault-proof): add test_sync_state_filters_non_respected_game_type * test(fault-proof): restore game type transition e2e tests * test(fault-proof): consolidate redundant legacy game filtering tests * docs: update comment for test_sync_state_filters_legacy_games * test: add test helpers and restore e2e tests * test(fault-proof): add bond-claim eviction test * test(fault-proof): add test_challenger_wins_cascade_removal * test: use new methods * chore: fmt * chore: typo * test(fault-proof): add test_mixed_states_multiple_branches * test(fault-proof): add cases with anchor to cascade removal * test(fault-proof): fix to challenge before game is over * test(fault-proof): add multiple challenger wins branches case * check if evicted from cache * test(fault-proof): add anchor_parallel_challenger_wins_with_child * typo * test: add proposer default fault_dispute_game helper * test(fault-proof): add comprehensive game state marking tests (#702) * test(fault-proof): add test_invalid_game_type_handling * test(fault-proof): remove redundant legacy game filtering e2e test * test: add missing import * test(fault-proof): add test_sync_state_filters_multiple_legacy_games * test(fault-proof): remove redundant legacy game filter e2e test * test(fault-proof): add test_sync_state_filters_non_respected_game_type * test(fault-proof): restore game type transition e2e tests * test(fault-proof): consolidate redundant legacy game filtering tests * docs: update comment for test_sync_state_filters_legacy_games * test: add test helpers and restore e2e tests * test(fault-proof): add bond-claim eviction test * test(fault-proof): add test_challenger_wins_cascade_removal * test: use new methods * chore: fmt * chore: typo * test(fault-proof): add test_mixed_states_multiple_branches * test(fault-proof): add cases with anchor to cascade removal * test(fault-proof): fix to challenge before game is over * test(fault-proof): add test_in_progress_games_resolution_marking * make clippy happy * test(fault-proof): add test_bond_claim_marking * test(fault-proof): add proof provided cases * surface errors via ? * drop test doc to reflect current coverage * use default fault dispute game accessor * drop stale changes in bond claim eviction test * chore: remove kurtosis (#711) * fix: fail to create config when finalized L2 block is below the finality window (#705) * fix: error if not enough finalized L2 block * chore: same logic for fdg config * fix: no need for error log * doc: add note for why excluded genesis block * nit * test(fault-proof): add more targeted integrations tests (#706) * test(fault-proof): add test_invalid_game_type_handling * test(fault-proof): remove redundant legacy game filtering e2e test * test: add missing import * test(fault-proof): add test_sync_state_filters_multiple_legacy_games * test(fault-proof): remove redundant legacy game filter e2e test * test(fault-proof): add test_sync_state_filters_non_respected_game_type * test(fault-proof): restore game type transition e2e tests * test(fault-proof): consolidate redundant legacy game filtering tests * docs: update comment for test_sync_state_filters_legacy_games * test: add test helpers and restore e2e tests * test(fault-proof): add bond-claim eviction test * test(fault-proof): add test_challenger_wins_cascade_removal * test: use new methods * chore: fmt * chore: typo * test(fault-proof): add test_mixed_states_multiple_branches * test(fault-proof): add cases with anchor to cascade removal * test(fault-proof): fix to challenge before game is over * test(fault-proof): add test_in_progress_games_resolution_marking * make clippy happy * test(fault-proof): add test_bond_claim_marking * test(fault-proof): add proof provided cases * test(fault-proof): add more targeted integrations tests * test(fault-proof): add test for mixed proposal statuses across branches * test(fault-proof): add test_three_sibling_states_eviction_and_pruning * assert anchor game credit * fix test_anchor_with_zero_credit_sibling_and_in_progress_branch * clean up unintented merge * feat(fault-proof): validate starting L2 block (#704) * feat(fault-proof): validate starting L2 block - Add check that contract anchor L2 block does not exceed current finalized L2 block - Improve error messaging for misconfigured startingL2BlockNumber - Add e2e test rejecting future starting blocks * typo * introduce validate_anchor_l2_block * handle error * choose +1 offset to test boundaries * make fmt happy * test: sysgo-powered e2e testing infra for fault-proof proposer (#708) * feat: setup fault-proof e2e * chore: reorg /e2e * refactor: shared preset * feat: dispute game factory binding * refactor: resuable call function in adapters * test: L2DfgDeployedAndUp * ci: add faultproof mode * test: detect first game created * chore: gen binding for OPSuccinctFaultDisputeGame * nit: naming * fix: add FailNow if timeout passed * refactor: benefit from ethCaller * refactor: WaitForGameCount * test: check first game's parentId * test: verify rootClaim * chore: define opts * fix: update /optimism rev * chore: update /optimism rev * fix: require.Equal in _L2DgfDeployedAndUp * fix: wait for finalized L2 block before running sysgo e2e tests (#712) * fix: update optimism rev * chore: update tests/optimism * chore: bump to v3.4.0 (#710) * chore: bump hokulea to hokulea-client/v1.1.2 * chore: bump to v3.4.0 * docs: add RELEASE.md (#717) * chore: add just vkeys * docs: add RELEASE.md * docs: missing Cargo.lock * docs: clarify vkeys output in release guide * chore: small changes * ci: use on-demand runners and increase disk for e2e workflows (#718) * fix: use on-demand runners and increase disk * fix: missing spot=false for cost estimator (1000 blocks) * nit: rm whitespace Co-authored-by: Taehoon Kim <taehoon@succinct.xyz> --------- Co-authored-by: Taehoon Kim <taehoon@succinct.xyz> * chore: reorg test structure and improve workflow naming (#719) * refactor: update test-e2e-sysgo * chore: reorg /tests/e2e * chore: update README * chore: rename fault-proof e2e feature to integration * ci: separate out Cost Estimator into its own yml file * ci: reflect e2e > integration * nit: missing update to integration * nit: better jobs name * chore: rename ci.yml to cargo-tests.yaml * chore: e2e-sysgo > e2e-tests * chore: foundry_test > foundry-test * chore: merge cost estimator jobs * chore: rename pr.yaml to lint.yaml * chore: consistent .yml extension + pr-title * fix: revert tests/optimism * refactor: actually separate cost estimator workflows * chore: renaming to e2e-sysgo-tests * feat(fault-proof): support split range proving (#715) * feat: can split proving range to 2,4,8 * chore: rename to RangeSplits * chore: better error handling in prove_game * refactor: review split_range logic * refactor: turn split_range to method on RangeSplits * test: add unit tests for split() * refactor: use slice instead of vec in tests * refactor: allow continuous range 1 to 16 * doc: docstring for RangeSplitCount methods * chore: some logs * feat: add Status + WaitForDefenderWins * feat: add FastFinality preset * test: proving tests * chore: rename /proving to /fastfinality * chore: rename faultproof_test to bootstrap_test * deps: update optimism rev * test: RangeSplitCount=4 * feat: max_concurrent_range_proofs * docs: note for max_concurrent_range_proofs * refactor: set max concurrency to 16 fo tests * chore: range/agg_proof_request * docs: add to optional vars * test: check 5th game instead * ci: free disk space * fix: set fast finality proving limit to 8 * fix: longer timeout for _WaitsForFifthGameDefenderWins * refactor: define GameStatus * fix: use NonZeroUsize for max_concurrent_range_proofs * fix: clearer anyhow message if start < end * doc: ceiling devision note * fix: test_errors_on_reversed_bounds assertion * fix: remove go test -timeout flag * test: add parallel range proving tests * fix: bring back go test timeout * chore: tune params so run on CI * feat: configurable faultproof test setup * test: add _RangeSplit1 * nit: remove Proposer config tracing * deps: update optimism rev * chore: tweak name of tests * fix: only ThreeGames as more is resource exhausting * docs: clarify SP1 mock verifier auto-deployment behavior (#721) * fix(l2oo): validate submission interval is non-zero in `updateSubmissionInterval` (#724) * fix: prevent update submission interval to zero * test: _CannotSettoZero * test: extend validity proposer "happy-path" e2e tests (#726) * refactor: make validity e2e tests configurable * feat: define OutputProposal + WaitForLatestBlockNumber * test: add proving_test * fix: rm now redundant _ProveSingleRange test * chore: reorg adapters.go * chore: verify L2 block number aligns * feat: create ValiditySystem wrapper with DatabaseURL() * feat: define Database client + verifyRange * test: some tests for block-based splitting * deps: update tests/optimism * feat: configurable intervals for l2oo deployment * ci: more parallel e2e jobs * test: _RangeIntervalLargerThanSubmission * feat: enable parallel execution * make vars automatically exported for fdg-contracts deployment * fix: consolidate config paths * doc: comment for per-test isolated system * deps: point to op-succinct-sysgo rev * fix: forge fmt * fix: smt went wrong with last fmt check! * test: restart recovery harness and e2e tests (#728) * feat: can restart Validity proposer * test: Validity proposer restart recovery test * test: fp proposer recovery tests * ci: add recovery test jobs * test: more validity recovery tests (ThreeSubmissions + RangeSplit) * test: Validity multiple restarts * refactor: reusable funcs instead of runRecoveryTest * test: Fault Proof multiple restarts * chore: rename from _Optimistic to _Basic * refactor: add client factory methods to System types * fix: forge install iff not already present * chore: for FP restart no wait time * refactor: tighter loopInterval + better doc around * fix: make fastfinality tests parallel * fix: rm dup ParallelT * fix: game status require message * fix: make loopInterval optional * deps: update optimism rev * test(fault-proof): clarify range splitting behavior once interval drifts (#734) * test: cover interval drift for range splitting * nit: range sizes * nit * doc: range proving semantic * nit: happy cargo fmt * test(eigenda): host tests + fault-proof CI coverage (#730) * test: EigenDA host integration tests * test: witness_generator unit/integration tests * test: fp integration tests with eigenda feature enabled * ci: add da-host-tests for eigenda * chore: improve just commands * fix: SRS path * fix: no need for EigenDA SRS * fix: enable mock mode * fix(temp): verify EigenDA SRS file * fix: create symlink for SRS file * ci: magic cache with runs-on/action * fix: $GITHUB_WORKSPACE absolute paths + existence check * refactor: verify canoe proof deser when present * refactor: Justfile handles symlink for both local and CI * fix: L2_BLOCK_OFFSET_FROM_FINALIZED=200 * feat: log proposer/challenger configs on loads (#722) * feat: add structured logging for proposer/challenger configs * fix: add op_succinct_config_name_hash * feat: log ProgramConfig * fix(validity): correct gap detection in agg proof validation (#729) * fix: reorder overlap/gap checks in agg validation * chore: reorder validations in docstring * fix: check < for gap * fix(validity): rm redundant sort and add db client tests (#733) * feat: db/client testing harness + few tests * test: chain_lock + fetch_completed_ranges module * chore: update Cargo.lock * test: test_get_consecutive_***_ordered * test: fetch_active_agg excludes failed & cancelled * test: test insert requests chunking logic * test: test_fetch_first_unrequested_range_proof_returns_lowest_start_block * test: test_queries_filter_by_commitment_config * fix: all active status should be counted * refactor: rm db.cleanup().await * fix: rm redundant sort * chore: reorg * chore: cargo fmt * fix: mut keyword is now unused * chore: L1ID / L2ID * chore: rm redundant comments * test: test_queries_isolate_by_chain_id * test: coverage for identified gaps * nit: cleanup unused variable * refactor: define count() helper * nit * fix(fault-proof): conditionally allow earlier-parent games as canonical head (#736) * fix: allow games with parent < anchor become canonical * test: canonical head override logic * fix: merge cases into test_sync_state_happy_paths * fix: update compute_canonical_head comment * chore: bump sp1 to v5.2.4 (#739) * chore: release v3.4.1 (#740) * chore: release v3.4.1 * ci: do not run on pushes to release/* --------- Co-authored-by: Farhad Shabani <farhad.shabani@gmail.com> * fix: propagate error instead of unwrap across pipeline (#713) * fix: propogate instead of unwrap() * fix: handle invalid preimage key * chore: clean-ups * chore: error log if witness generation failed * fix: rm assert_eq * chore: consistent log/error message * fix: handle lock error * fix: fmt happy * fix: update ELF files * test: long-running e2e tests with real proving + monitoring dashboards (#731) * feat: can write env files * test: long running Validity test * test: long running fault-proof test * feat: add long-running just commands * chore: add README section * refactor: graceful shutdown * chore: rm redundant code * fix: dropped configs in fp presets * refactor: fp _LongRunning vs _Progress test * refactor: validity _LongRunning vs _Progress test * chore: update Justfile * chore: split into progress and running test * ci: add progress tests * chore: rename to continuous_test * feat: define LongRunningValidityConfig * refactor: LongRunningFaultProofConfig * refactor: set envFilePath only for continuous_test * refactor: tune fp params for progress_tests * test: TestFaultProofProposer_FastFinality_Progress * refactor: tune Validity progress_test * refactor: RunForDuration - 15mins * chore: extract runners to separate file * ci: PROGRESS_TEST_DURATION=30m for main * fix: more concurrent range proofs for Validity * fix: increase concurrency for fp * fix: RangeSplitCount=2 * fix: consistent continuous_tests * fix: tune some params * feat: add monitoring for validity * feat: long running fast finality * refactor: dedicated fast finality config func * feat: faultproof monitoring dashboard * test: in ff check at least one game proven * chore: better /monitoring org + set data dir * refactor: make l2BlockTime configurable * chore: misc * feat: anchor state registry bindings * feat: checkAnchorStateLag * chore: re-tune since now l2BlockTime=2s * ci: overhaul e2e-sysgo-tests.yml * fix: higher intervals b/c of real proving * fix: do no FAIL in _LongRunning * fix: keep cmd foreground so ctrl+c works * chore: rebase issues * fix: propogate LatestBlockNumber err * refactor: output root verification + simplify lag checks * refactor: larger intervals for real proving * fix: rm runs-on cache * fix: broken Celestia light-node link * fix: l2BlockTime default to 1s * ci: separate network proving workflow file * fix: set batcher maxBlock.. + maxChannel.. * chore: re-tune b/c of larger batching size * feat: set proving timeout * feat: use real sp1 verifier * feat: AggProofMode * deps: update tests/optimism rev * ci: build contracts * chore: update README * fix: check if symlinks exist * fix: consistent test timeout * fix: monitoring thresholds * fix: unused time dep * fix: MaxConcurrent*** optional * fix: make contracts build without test submodules * fix: get l2BlockTime from chain * refactor: define L2ChainConfig * refactor: add ProposerOptions * fix(fault-proof): sort defense candidates by deadline ascending (#737) * fix(fault-proof): sort defense candidates by deadline ascending * test(fault-proof): verify defense tasks prioritize earliest deadline * fix(l2oo): prevent challenger from deleting genesis output (#723) * fix: disallow challenger to delete genesis * test: Cannot/CanDeleteGenesisOutput * chore: comment genesis cannot be deleted * feat(tests): running standalone L1/L2 devnet nodes (#743) * feat: TestNodes_RunOnly * refactor: logged just nodes * refactor: simplify configs storage * docs: update tests/README * deps: update tests/optimism * refactor: merge nodes mode command into long-running * docs: better README structure * chore: rename to continuous_test * feat: use FinalizationPeriodSecs * deps: update tests/optimism rev * nit: whitespace * fix: rm redundant fetcher instance (#744) * fix(fault-proof): check respected game type before creating games (#746) * fix: disallow game creation if not respected * docs: add PORTAL_ADDRESS * deps: update tests/optimism * refactor: take protal for propoer::new() * fix: cargo fmt * refactor: improve log * refactor: switch to ANCHOR_STATE_REGISTRY_ADDRESS * fix: higher l2 block offset b/c of EigenDA * fix: read from proposer_config * fix: clippy * fix(fault-proof): proper pre-migration startup + consolidate anchorStateRegistry RPC calls (#748) * fix: validate anchor_state_registry + define startup validations * refactor: challenger startup validaitons * fix: update preflight * docs: add ANCHOR_STATE_REGISTRY_ADDRESS * fix: l2 anchor validation tests * refactor: explicit semantic with OnceLock<U256> * refactor: decouple startup validation from state init * chore: cleanups * chore: reorder * fix: happy fmt * refactor: define try_init * refactor: move proposer init_bond after validation * fix: test_proposer_rejects_future_starting_block * fix: test_proposer_retains_anchor_after_bond_claim * refactor: rm proposer var * docs: bring back loop's comment * fix: propogate errors * fix: factory typo * docs: improve quick-start guides (#754) * docs: improve quick-start guides * fix: ubuntu deps note for fp * fix(fault-proof): bound gas for getLastProposalTimestamp call during migration (#755) * fix: AccessManager.sol should not burn all gas to run getLastProposalTimestamp * test: getLastProposerTimestamp * fix: forge fmt * fix: lt --------- Co-authored-by: Kien Nguyen <kien@riselabs.xyz> * fix(tests): higher integration tests timeout (#742) * fix: higher integration tests timeout * refactor: define WAIT_TIMEOUT * fix: better logs for GameCount * fix: typos * fix: 10 blocks ahead for checking future statring block * refactor: set WAIT_TIMEOUT=60 * feat(fault-proof): custom proof polling with retries, timeouts, and failure metrics (#745) * feat: NETWORK_CALL_TIMEOUT + AUCTION_TIMEOUT * refactor: decouple submission from completion * fix: AUCTION_TIMEOUT=60s * fix: happy fmt * refactor: NETWORK_CALLS_TIMEOUT=15s * fix: log cancel on network * fix: happy fmt * refactor: define prover mod * refactor: ProposerConfig * chore: update test config * test: timeout unit tests * chore: cleanups * chore: add timeout metrics * nit: typo * fix: skip proving if deadline passed * test: proving deadline unit tests * chore: reorg network call method * refactor: misc improvements * fix: rm agg_vk * chore: sdk's polling interval permalink * fix: rename to should_skip_proving * fix: rebasing issues * fix: add ProposerGauge::DeadlineApproaching * fix(fault-proof): add transaction receipt status checks (#751) * fix: add tx status checks * fix: improve tx error handling + logging * fix: define TX_REVERTED_PREFIX * feat(tests): add challenger support to faultproof sysgo infra (#757) * test: fp challenger bootstrap test * fix: consistent naming for fp configs * refactor: run challenger for long-running tests * fix: update Justfile * chore: better faultproof.go organization * fix: set challenger env file path * chore: update faultproof grafana dashboard * fix: explicitly pass WithDefaultChallenger() * fix: check nil in challenger Start/Stop * fix: misc touchups * refactor: reusable newSystemWithProposer * chore: update tests/optimism rev * add test coverage (#762) Co-authored-by: TiesD <71668189+TiesD@users.noreply.github.com> * fix(fault-proof): challenger `sync_state` update and deadline check (#759) * fix: challenger sync bugs * test: cover fixes * nit * fix: test_proposer_rejects_future_starting_block * nit: 100 block beyond Co-authored-by: Taehoon Kim <taehoon@succinct.xyz> --------- Co-authored-by: Taehoon Kim <taehoon@succinct.xyz> * feat(fault-proof): proposer state backup for faster recovery (#756) * feat: backup fp cache * docs: update proposer.md * test: unit and integration backup tests * fix: dedicated blocking thread pool * fix: test_proposer_backup_persistence * test: add recovery test with backup * fix: rebasing issue * nit: touchups * chore: rename to BACKUP_PATH * chore: address comments (#763) * chore(fault-proof): add comment explaining non-persisted backup fields * fix(fault-proof): use tempfile for atomic backup writes * fix(fault-proof): validate backup path at startup * feat(fault-proof): add backup metrics for observability * refactor(fault-proof): improve backup path validation and restore logic Consolidate duplicate if-let blocks, add tracing for restore operations, handle empty parent path edge case for relative paths, and log cleanup failures. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(fault-proof): add schema guard test for backup version Add a test that fails if Game or ProposerBackup fields change, reminding developers to bump BACKUP_VERSION when schema changes. This catches accidental schema changes that would break backup compatibility. * refactor(fault-proof): simplify backup restore logic Remove redundant path.exists() check before try_restore. Now only logs error metric when file exists but couldn't be parsed, avoiding double filesystem access and correctly distinguishing missing file from corrupt. * refactor(fault-proof): use tempfile for backup path write test Replace manual File::create + remove_file with NamedTempFile for the write permission check. Ensures cleanup on panic and is consistent with the atomic write approach used in backup.rs. --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> * refactor(fault-proof): remove duplicate backup restore log The log in ProposerState::try_restore() already provides restore information with game count and cursor details. * fix(tests): update optimism submodule for backup support The submodule was reverted to an older commit during a merge with main. This restores the correct commit that includes WithFPBackupPath needed by the faultproof test presets. * fix(tests): update optimism submodule to merged backup+challenger Updates tests/optimism to 32bd7c930 which includes PR #325 merge of backup support into op-succinct-sysgo branch. --------- Co-authored-by: Taehoon Kim <taehoon@succinct.xyz> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> * test(fault-proof): challenger `sync_state` coverage (#760) * test: challenger sync_state coverage * test: add parent resolved resolution marking test Add test_resolution_marking_parent_resolved to complement the existing test_resolution_marking_parent_not_resolved, fully covering the is_parent_resolved check logic in sync_state. * fix(test): resolve timing issue in parent_challenger_wins test Create child game after parent is resolved to avoid challenge window expiration. The 12-hour time warp (MAX_PROVE_DURATION) was exceeding the 1-hour challenge window (MAX_CHALLENGE_DURATION) for pre-created child games. * refactor(test): simplify test_game_eviction parameters Remove redundant expected_evicted parameter that was always true. * style: cargo fmt * fix(test): use two-stage time warp for parent_challenger_wins test Create child game DURING the prove period (not after resolution) to avoid contract rejection of children of defeated games, while ensuring child's challenge window is still open when parent resolves. --------- Co-authored-by: fakedev9999 <taehoon@succinct.xyz> * fix(logger): use JsonFields for proper span serialization in JSON logs (#761) This fixes the `field_error: "EOF while parsing a value"` issue that occurs when using JSON logging format (LOG_FORMAT=json). Root cause: When using `.event_format(Format::default().json())` without also setting `.fmt_fields(JsonFields::new())`, the layer uses DefaultFields (text formatter) instead of JsonFields. This mismatch causes the JSON serializer to fail when parsing the text-formatted span fields. This is a known issue: https://github.com/tokio-rs/tracing/issues/1365 The fix properly configures both the event format AND field format to use JSON, which preserves span context in logs (useful for debugging and distributed tracing) rather than removing it entirely. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> * feat(tests): add e2e test for proposer defense after challenge (#764) * feat(tests): add e2e test for proposer defense after challenge Add a new e2e test that verifies the complete defense flow when a proposer's valid game is challenged and the proposer successfully defends by submitting a proof. Test scenario: 1. Proposer creates a valid game 2. Malicious challenger challenges the game (100% challenge rate) 3. Proposer detects challenge and generates proof 4. Proposer submits proof on-chain 5. Game resolves as DEFENDER_WINS Changes: - Add ProposalStatus type and WaitForProposalStatus helper to adapters.go - Create new defense test in tests/e2e/faultproof/defense/ - Add defense tests to CI workflow matrix Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(tests): add String() method to ProposalStatus for log readability * chore: update tests/optimism submodule for float64 fix Updates the optimism submodule to include the fix for float64 formatting in setEnvIfNotNil. This resolves the challenger crash when using MaliciousChallengePercentage config. Required for: defense e2e test Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(tests): increase MaxProveDuration for defense test The default 10s prove duration was too short for the proposer to respond to challenges in CI. Increased to 60s to allow time for detecting the challenge, generating the mock proof, and submitting the transaction. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> * fix(scripts): use CLI --default-range argument instead of hardcoded constant (#773) * fix(scripts): use CLI --default-range argument instead of hardcoded constant The --default-range CLI argument was being parsed but its value was never used. The hardcoded DEFAULT_RANGE constant was passed to get_validated_block_range instead of the user-provided args.default_range value. * refactor(scripts): move DEFAULT_RANGE constant to test common module Since DEFAULT_RANGE is now only used in tests, move it from the public library to the test common module as suggested by @Farhad-Shabani. * fix: use bytecode_address instead of target_address for precompile lookup * fix(ci): prevent duplicate misspell check run in GitHub UI (#766) The reviewdog/action-misspell action was creating a separate check run via the GitHub Checks API that got misassociated with other workflows (appearing as "Build OP Succinct Lite Docker Images / misspell"). Changes: - Switch reporter from github-pr-check to github-pr-review - Use lowercase github_token (correct input name) This eliminates the redundant check run while providing more useful inline PR review comments for spelling errors. * chore: upgrade to op-contracts v5.0.0 (#774) * chore: upgrade Conduit to op-contracts v5.0.0 Update op-contracts submodule to v5.0.0 and refactor code to support breaking changes: **Solidity Changes:** - Rename OutputRoot → Proposal and l2BlockNumber → l2SequenceNumber across all contracts - Update AnchorStateRegistry initialization to use new v5.0.0 signature with ISystemConfig - Switch from ERC1967Proxy to Optimism Proxy + ProxyAdmin for contracts using ProxyAdminOwnedBase - Update test setup to use new proxy pattern and guardian-based blacklist/retirement mechanisms - Add MockSystemConfig contract to support guardian-restricted operations in tests **Rust Changes:** - Update contract.rs ABI definitions to use l2SequenceNumber instead of l2BlockNumber - Fix Rust function calls in proposer.rs, challenger.rs, and test files - Update test utilities to use deployed contract addresses instead of AnchorStateRegistry methods - Fix DisputeGameFactory function selector disambiguation for overloaded setImplementation **Testing:** - All Solidity tests pass (54/55, 1 skipped due to env var requirement) - All Rust tests pass (58 unit + integration tests) - Updated testParentGameNotValid to use AnchorStateRegistry blacklist - Renamed testParentGameNotRespected to testParentGameRetired to reflect new mechanism * fix(test): update set_respected_game_type to use AnchorStateRegistry In op-contracts v5.0.0, respectedGameType is stored in AnchorStateRegistry instead of OptimismPortal2. Update the test environment to call AnchorStateRegistry.setRespectedGameType() to properly set the respected game type for integration tests. This fixes test_sync_state_filters_non_respected_game_type tests which verify games created with non-respected types have wasRespectedGameTypeWhenCreated=false. * fix(fp): add l2BlockNumber() alias for backward compatibility The test bindings call l2BlockNumber() but OPSuccinctFaultDisputeGame only had l2SequenceNumber(). This caused E2E test failures with "call l2BlockNumber: execution reverted: 0x". Add l2BlockNumber() as an alias that delegates to l2SequenceNumber() to maintain compatibility with the test infrastructure. * feat(validity): add anchorStateRegistry() for v5.0.0 compatibility The v5.0.0 AnchorStateRegistry.isGameRegistered() calls anchorStateRegistry() on all dispute games during withdrawal proof validation. This adds the required function to OPSuccinctDisputeGame (validity mode) to prevent withdrawal failures. Changes: - Add IAnchorStateRegistry import and immutable variable - Update constructor to accept anchor state registry parameter - Add anchorStateRegistry() getter function - Update deployment script to read ANCHOR_STATE_REGISTRY from env - Update tests with anchor state registry setup * style: fix forge fmt formatting in validity tests * fix: use the correct l2_chain_id (#782) Co-authored-by: Kien Nguyen <kien@riselabs.xyz> * feat: add SystemConfig support for AnchorStateRegistry (#779) * feat(fdg): add SystemConfig support for AnchorStateRegistry - Add systemConfigAddress field to FDGConfig struct - Auto-derive SystemConfig address from rollup config - Support zero address to deploy MockSystemConfig for testing - Use existing SystemConfig for production deployments - Refactor rollup_config extraction to eliminate redundancy * fix(tests): add missing system_config_address field in test config * style: fix rustfmt formatting in fetch_fault_dispute_game_config * chore: align default verifier to Plonk VerifierGateway (#725) * feat: bump kona to v1.2.7, hokulea to v1.1.4, alloy to 1.4.x (#778) * chore: bump kona to v1.2.7 and compatible dependencies Upgrades: - kona: v1.2.2 → v1.2.7 (13 crates) - hokulea: v1.1.2 → v1.1.3 (9 crates) - hana: v1.4.0-mocha → v1.5.0-mocha (4 crates) - alloy versions: 1.1.0 → 1.1.3 (pinned to =1.1.3) - tracing-subscriber: 0.3.20 → 0.3.22 - postgresql_embedded: 0.15 → 0.20 (fixes reqwest_middleware conflict) Code changes for hokulea v1.1.3 API compatibility: - Removed recency window support (removed from hokulea v1.1.3) - Updated CanoeSp1CCReducedProofProvider to use RpcClient instead of URL string - Changed oracle.clone() to oracle.as_ref() in from_boot_info_to_canoe_proof - Added alloy-rpc-client dependency to eigenda host utils Pinned vergen versions for rollup-boost compatibility. Verified with: cargo clippy --all-features --lib --bins * fix: use succinctlabs/reth fork for reth patches (CI compatibility) The reth patches are needed to fix a PartialEq bug in reth-transaction-pool (PR #21336). Cargo requires patches to come from a different source URL than the original dependency. Previously used SSH URLs (ssh://git@github.com/...) which don't work in CI environments without SSH keys configured. Now uses the succinctlabs/reth fork with the v1.9.3-kona branch, which: - Contains the same fix as paradigmxyz/reth v1.9.3-kona branch - Uses HTTPS URLs that work in CI - Provides a different source URL to satisfy Cargo's patch requirements * chore: cargo fmt * chore: bump elfs * feat: bump hokulea to v1.1.4 and alloy to 1.4.x Upgrade hokulea from v1.1.3 to v1.1.4, which requires: - Updating alloy versions from =1.1.3 to 1.4 for semver compatibility - Removing the alloy-tx-macros crates.io patch (no longer needed) hokulea v1.1.4 brings: - Extracted canoe_proof_stdin, generate_canoe_proof functions - Bug fix for HintType::L2PayloadWitness proactive hints - reth v1.9.1 -> v1.9.3, SP1-CC updated - Experimental witness endpoint enabled - Proxy updated to v2.6.0 with V4 certificate support * refactor: replace kona-rpc with local RPC types Remove kona-rpc dependency to avoid rollup-boost -> reth-optimism-primitives dependency chain, which causes alloy version conflicts with hokulea v1.1.4. The rollup-boost crate depends on reth v1.9.3 which expects alloy 1.0.x, incompatible with alloy 1.4.x required by hokulea's sp1-contract-call deps. Since op-succinct only uses OutputResponse and SafeHeadResponse from kona-rpc, these simple types are now defined locally in utils/host/src/rpc_types.rs. * chore: bump elfs * feat(fault-proof): add vkey, rollup config hash validation to prevent proving incompatible games (#758) * feat(fault-proof): add vkey validation to prevent proving incompatible games * feat(fault-proof): add prove-only mode * test: add missing field * test: add prove only mode behavior test * feat: self-adapting impl * test(e2e): add vkey mismatch game creation skip test * chore: trigger CI (submodule now available) * fix(contracts): resolve stack-too-deep in DeployGameImplOnly Inline vm.env*() calls directly into constructor to reduce local variables from 12+ to 2, staying within EVM's 16-slot stack limit. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(tests): resolve compilation errors * test(fault-proof): verify old proposer does not defend new games * chore: fmt * test: fix use real vkeys for integration tests * feat: add rollup config hash to proposer id * fix(fault-proof): address review comments for vkey validation PR - Simplify ProposerIdentity struct by removing redundant fields - Add rollup_config_hash to on_chain_vkeys_match for consistency with is_owned - Consolidate ownership check into should_skip_proving method - Remove DeployGameImplOnly.s.sol, use UpgradeOPSuccinctFDG.s.sol instead - Update env.rs and justfile to use upgrade script - Bump BACKUP_VERSION to 2 for new Game fields - Remove unnecessary comment in constants.rs * refactor(tests): use Forge script for game impl upgrade in E2E tests Addresses review comment to use the same Forge script that operators use in production (UpgradeOPSuccinctFDG.s.sol) instead of Go-based deployment logic. Changes: - Add UpgradeGameImplConfig and UpgradeGameImpl to sysgo (succinctlabs/optimism#336) - Replace DeployGameImplWithFakeVkeys + UpgradeGameImplementation with single UpgradeGameImplWithFakeVkeys that calls the Forge script - Update E2E test to use the new combined method * fix(ci): formatting and integration test block offset - Run cargo fmt to fix line formatting in proposer.rs and env.rs - Fix integration test block offset from +1 to +10 to match other tests * fix(contracts): return gameImpl address from UpgradeOPSuccinctFDG script The Rust integration test expects the Forge script to return the gameImpl address in JSON output. Add return value to run() function. * fix(tests): increase future block offset to avoid race condition The test_proposer_rejects_future_starting_block test was flaky on eigenda because the L2 chain could advance during test setup. With the PR's added identity computation overhead, there was enough time for the eigenda chain to catch up and invalidate the "future block" test scenario. Increased the offset from 100 to 10000 blocks to provide ~5.5 hours of buffer with 2-second blocks, ensuring the test is robust regardless of setup time or block production rate. * fix(fault-proof): address review comments for vkey validation PR - Revert BACKUP_VERSION to 1 (no release since backup feature added) - Replace unwrap() with proper error handling in aggregation vkey decode - Fix agg_vk.vk.bytes32() to agg_vk.bytes32() for consistency * docs(fault-proof): add hardfork transition workflow documentation Document the vkey validation feature that enables zero-downtime hardfork transitions. Covers proposer identity, owned vs foreign games, hardfork detection, and step-by-step transition workflow for operators. * chore: re-trigger CI after pushing submodule commit * fix(tests): fix compilation errors after rebase - Remove unused import start_proposer_prove_only from env.rs - Fix setImplementationCall to setImplementation_0Call (op-contracts v5.0.0) - Add prove_only_mode field to ProposerConfig in process.rs * refactor(fault-proof): remove unused prove_only_mode, improve logging - Remove prove_only_mode config field (vkey validation handles this automatically) - Promote foreign game skip log from DEBUG to INFO for better visibility during hardfork transitions * refactor(proposer): simplify vkey computation using bytes32_raw/hash_bytes Use SP1 SDK's direct byte conversion methods instead of hex roundtrip. --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> * chore: bump tests/optimism to tip of op-succinct-sysgo (#785) Updates the submodule to point to the properly merged commit on op-succinct-sysgo branch, replacing the orphaned merge commit that was created before PR #336 was merged. * feat: add backport automation for multi-version release management (#789) - Add GitHub Action workflow using tibdex/backport@v2 - Detects backport/* labels on merged PRs to main - Automatically cherry-picks changes to maintenance branches - Posts comments on original PR if conflicts detected - Update CONTRIBUTING.md with backporting guidelines * test(precompiles): add cycle tracker regression tests (#772) * test(precompiles): add cycle tracker regression tests Add unit tests for precompile cycle tracking to prevent regressions like the one in commit d3b31279 where cycle tracking was dropped. Changes: - Add shared `cycle_tracker` constants module with names and keys - Refactor `get_precompile_tracker_name…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Enables the delegatecall tests in the access-list tests that were previously commented out.