Skip to content

feat: add Fulu support#1485

Open
MegaRedHand wants to merge 67 commits intomainfrom
fulu-support
Open

feat: add Fulu support#1485
MegaRedHand wants to merge 67 commits intomainfrom
fulu-support

Conversation

@MegaRedHand
Copy link
Copy Markdown
Collaborator

@MegaRedHand MegaRedHand commented Mar 3, 2026

Motivation

Since development on this project halted, Ethereum transitioned to its next hard fork: Fulu/Fusaka. We need to add support for it to be able to test our client against live testnets and mainnet.

Description

This PR adds support for the Fulu fork.

Code for supporting Electra was kept, but it might not be working completely. We may remove this code on a later PR.

It also introduces timing logs for the block processing pipeline and some fixes for bugs already on main that were found while debugging.

Some notable changes are:

  • new endpoints in the engine API
  • deposit tree functionality was removed, since we now have execution requests 🎉
  • peer DAS changes: column custody logic, with challenges
  • elixir (and OTP) was updated to the latest version
  • Nix flake and go/rust versions were updated to latest
  • Documentation was updated to the fulu fork. Electra specs were removed
  • fork ID computation was updated due to BPOs
  • some pre-existing bugs were fixed

Left for other PRs:

  • fix the rest of the pre-existing bugs (OOM errors, blocks marked as invalid when data is unavailable, etc.)
  • introduce or remove Electra support
  • fix gnosis support. I read they are on the Electra fork, so re-introducing it will take some work
  • update readme and local setup commands

How to run

As said above, instructions will be added to the readme in another PR.

# install nix, see https://github.com/DeterminateSystems/nix-installer
# curl -fsSL https://install.determinate.systems/nix | sh -s -- install

# enter nix environment
make nix   # or `make nix-zsh` for zsh users

# install dependencies, generate protobuf files
make deps

# start node
make mainnet

@MegaRedHand MegaRedHand marked this pull request as ready for review March 9, 2026 20:39
@MegaRedHand MegaRedHand requested a review from a team as a code owner March 9, 2026 20:39
Two issues caused the GenServer to stall for 30+ minutes after restart
with 229 blocks needing data column downloads:

1. column_present? called get_data_column_sidecar which reads the full
   sidecar from LevelDB AND deserializes it from SSZ — just to check
   existence. Added has_column? that only does Db.get without SSZ decode.

2. Each block in add_block_fulu scheduled its own retry_download_columns
   timer. With 229 blocks, this created 229 retry messages, each scanning
   all 229 blocks × 4 custody columns = ~210K LevelDB reads. The handler
   also scheduled another timer per invocation, compounding the problem.
   Added drain_messages to deduplicate pending retry messages.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant