Skip to content

Support for Fusaka #666

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 5 commits into
base: develop
Choose a base branch
from
Draft

Support for Fusaka #666

wants to merge 5 commits into from

Conversation

bharath-123
Copy link

@bharath-123 bharath-123 commented Jul 21, 2025

This PR updates rbuilder to support Fusaka. These changes have been tested locally using Kurtosis

Things to consider in rbuilder:

Breaking changes:

  1. alloy/nybbles: perf: U256 representation alloy-rs/nybbles#17 updates the internal representation of Nibble from a SmallVec<[u8; 64]> to a U256. This breaks code in the merkle eth sparse tree as the code indexes a lot into the SmallVec representation
  2. alloy/eips: https://github.com/alloy-rs/alloy/blob/fusaka/devnet2/crates/eips/src/eip7594/sidecar.rs#L25 we need to use BlobTransactionSidecarVariant enum which contains PeerDas type blob sidecars too. The only different b/w EIP-7954 sidecars from EIP-4844 sidecars is EIP-7954 sidecars use cell_proofs instead of proofs. rbuilder just uses BlobTransactionSidecar which breaks with the fulu hard fork.
  3. revm/context: bluealloy/revm@c70bb9a this commit updates the BlockNumber and Timestamp to use U256 instead of u64. There are inconsistencies in code where u64 is used for block number which fails to build as a result.
  4. revm/state: changes made for EIP-7907: bluealloy/revm@d8c4567 introduces the CodeSize field to the AccountInfo . It was previously an Option but the mentioned commit makes it a mandatory field.
  5. alloy/evm: The Database trait in the alloy/evm repo now implements std::fmt::Debug implemented by alloy-rs/evm@3d6a01b. This broke code since a dependency was using the updated Database trait from alloy/evm. Using the Database trait from alloy/evm seems to have fixed this.
  6. revm/inspector: It appears that the step method has been removed from the access_list_inspector. We need to update the revm-inspectors crate.
  7. The method bytecode_by_hash is now defined in trait BytecodeReader rather than in the StateProvider

Notes

  1. We need to send BlobsBundleV2 to the relay. https://github.com/alloy-rs/alloy/blob/fusaka/devnet2/crates/rpc-types-engine/src/payload.rs#L906
  2. We need to send a SignedBidSubmissionV5 to the relay overall: https://github.com/alloy-rs/alloy/blob/main/crates/rpc-types-beacon/src/relay.rs#L183

✅ I have completed the following steps:

  • Run make lint
  • Run make test
  • Added tests (if applicable)

Cargo.toml Outdated
reth-payload-util = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.8" }
reth-rpc-layer = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.8" }
reth-testing-utils = { git = "https://github.com/paradigmxyz/reth", tag = "v1.4.8" }
reth-chainspec = { git = "https://github.com/bharath-123/reth", branch = "bharath/fusaka-revm-fix" }
Copy link
Author

@bharath-123 bharath-123 Jul 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current reth fusaka-devnet-2 branch breaks with rbuilder because of breaking changes in revm with eip-7097. This should be resolved by fusaka-devnet-3. We are temporarily using a fork of reth for now.

Comment on lines +733 to +735
blobs_sidecar: Arc::new(BlobTransactionSidecarVariant::Eip4844(
BlobTransactionSidecar::default(),
)),
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We ideally need to know which fork we are currently at, in order to create an EIP-4844 type sidecar or EIP-7954 sidecar. We unfortunately don't have this info here.

let blob_sidecar = pool
.get_blob(*tx.inner().hash())?
.and_then(|b| b.as_eip4844().cloned());
let mut blobs = pool.get_all_blobs(vec![*tx.inner().hash()])?;
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pool.get_blob wasn't able to retrive the blob in my testing. using pool.get_all_blobs worked in this case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant