Alpha · Olympia · Engine API on Sepolia

The world's first vibe-coded Ethereum client.

Fukuii is an EVM-compliant execution layer client in Scala 3. Run it on ETC and Mordor natively, or pair it with any consensus client — Lighthouse, Prysm, Teku, Lodestar, Nimbus — to follow Ethereum mainnet or Sepolia via Engine API V1–V4 through Prague/Electra.

0 tests passing
0 Hive simulators
0 supported networks
0 alpha bugs squashed
JDK 25 LTS Scala 3.3 LTS · Pekko 1.1

An Ethereum execution client with a strange origin story.

Forked from Mantis (IOHK's abandoned Scala client), modernised, and pointed at a single goal: be a credible second non-Geth EVM client for both Ethereum Classic and post-Merge Ethereum.

Dual EL client

Native Ethash for ETC mainnet and Mordor. Engine API for post-Merge Ethereum, validated on Sepolia with 21+ EL peers. One binary, two worlds.

Pluggable consensus

Three layers: fukuii-core (chain-agnostic EVM), fukuii-env (sync, RPC, networking), and a consensus module you can swap. Ethash today, more tomorrow.

Vibe-coded origin

Chordodes Fukuii is a horsehair worm that hijacks a mantis. Fukuii hijacks Mantis and drives it toward Olympia — ECIP-1111, 1112, 1121.

One client, four chains.

Run a PoW node on Ethereum Classic, follow Sepolia under any consensus client, or stand up Ethereum mainnet — all from the same codebase.

Ethereum Classic chain 61

Production · full sync validated

  • Consensus: PoW Ethash
  • Sync: SNAP / fast / regular
  • Native execution & consensus
Mordor chain 63

Production · full sync validated

  • Consensus: PoW Ethash
  • Sync: SNAP / fast / regular
  • ETC testnet
Sepolia chain 11155111

Validated · 21+ EL peers

  • Consensus: PoS via Engine API
  • Paired with Lighthouse
  • Engine API V1–V4
Ethereum Mainnet chain 1

Configuration available

  • Consensus: PoS via Engine API
  • Pair with any CL
  • Prague / Electra ready

Everything an execution client should be.

Sync modes, EVM forks, Engine API, JSON-RPC, Hive compliance, operational glue. Click around — keyboard works too.

SNAP, fast, and regular sync

Three sync modes with bootstrap checkpoints from well-known fork blocks, automatic fallback between modes, and in-place pivot refresh so a stale state root doesn't cost you the whole sync.

  • SNAP — flat storage, deferred Merkleization, adaptive batching, capability check, dynamic concurrency, partial-range resume
  • Fast — headers → state → bodies, with ExcludingPeers selectors and exponential backoff
  • Regular — block-by-block from genesis when you need certainty

Twenty bugs squashed on the road to Olympia.

Real changes from real production traffic. Critical first.

  1. Critical

    Bug 18 — SNAP OOM

    DeferredWriteMptStorage flushes per batch, file-backed contractAccounts at ~45M entries, crash-safe progress checkpoints. SNAP no longer eats your heap.

  2. Critical

    Bug 6 — RPC starvation

    Sync actors moved to a dedicated sync-dispatcher. JSON-RPC stays responsive even under heavy SNAP load.

  3. Critical

    ETH68 handshake

    Protocol messages now decoded before capability messages. Geth and Nethermind peers actually connect.

  4. High

    Bug 20 — SNAP post-download pipeline

    Phase handoff timeout: Bloom-filter dedup (73.5M → 2M codeHashes), 10K-batch storage streaming, StorageConsistencyChecker skip on SnapSyncDone, recovery actor forwarding, MptStorage.decodeNode() visited-set fix.

  5. High

    Bug 2 — SNAP fallback resilience

    Counter persistence across restartSnapSync() with exponential backoff bootstrap retry.

  6. High

    Bug 8 — block body stall

    ExcludingPeers selector + backoff + maxBodyFetchRetries. Body downloads no longer get wedged on a single bad peer.

  7. Medium

    Bugs 7 & 10 — MissingNodeException

    .recover added to eth_call, eth_estimateGas, eth_getCode, personal_sendTransaction. State RPC degrades gracefully during sync.

  8. Medium

    Bug 9 — net_listPeers timeout

    In-process peerStatusCache. The peer list is no longer an RPC roundtrip storm.

  9. Medium

    Bugs 11–17 — SNAP coordinator hardening

    Capability check, stagnation watchdog, partial-range resume, dynamic concurrency, in-place pivot refresh, peer dedup, stale-root guard. Seven independent fixes, one calmer SNAP coordinator.

  10. Low

    Bugs 1, 3, 4, 5, 19

    Config cache (ConfigFactory.invalidateCaches()), FastSync best-block tracking, JSON-RPC null-id coercion, actor name-collision generation counter, ResilientRollingFileAppender for log rotation under disk pressure.

Three layers, cleanly separated.

Chain-agnostic at the bottom, opinionated at the top. Swap consensus without touching the EVM.

consensus module

Engine API, beacon root handling, fork choice integration. Ethash today; pluggable tomorrow.

fukuii-env

Networking, JSON-RPC, sync controllers, Prometheus metrics, storage glue. The "everything around the EVM" layer.

fukuii-core

EVM, state trie, RLP, txpool. Chain-agnostic. The library you'd reach for to build the next client.

Pick your path.

Source build for hackers, Docker for operators, Sepolia + Lighthouse for the brave.

01

Mordor SNAP

Build from source and SNAP-sync the ETC testnet.

git clone https://github.com/chippr-robotics/fukuii
cd fukuii
sbt assembly

java -Xmx4g \
  -Dfukuii.datadir=/var/lib/fukuii \
  -Dfukuii.network=mordor \
  -jar target/fukuii-assembly-<ver>.jar mordor
02

Docker

Signed images on GHCR. Mount a datadir and go.

docker pull ghcr.io/chippr-robotics/fukuii:latest

docker run -d \
  --name fukuii \
  -p 8553:8553 \
  -p 30305:30305 \
  -v fukuii-data:/var/lib/fukuii \
  ghcr.io/chippr-robotics/fukuii:latest etc
03

Sepolia + CL

Pair with any consensus client over Engine API.

java -Xmx8g \
  -Dfukuii.network=sepolia \
  -Dfukuii.engine.enabled=true \
  -Dfukuii.engine.port=8551 \
  -Dfukuii.engine.jwt-secret=/etc/fukuii/jwt.hex \
  -jar fukuii-assembly-<ver>.jar sepolia

# then point Lighthouse / Prysm / Teku / Lodestar / Nimbus
# at http://localhost:8551 with the same JWT secret
Alpha software

Run it. Break it. Tell us.

Fukuii is alpha. Things will misbehave on edge networks and exotic configs. File issues, start discussions — that's the whole point of the alpha.