0.10.0 — JDK 25, transaction parity, portable chain files¶
Promotion of staging (0.9.x series, through 0.9.127) to main. 0.10.0 brings no hard fork and no fork schedule
change: nothing in it needs an upgrade by a fixed date. Full detail is in the
changelog.
Read before upgrading¶
- JDK 25 is required, and every JVM must run with the C2 workaround (#1642, #1643). HotSpot C2 on JDK 23 and
later miscompiles
ReduceAllocationMerges(JDK-8385993), a consensus-divergence risk.bin/fukuii, the Docker images and the Debian package carry-XX:+UnlockDiagnosticVMOptions -XX:-ReduceAllocationMerges. A hand-writtenjava -jarcommand or systemd unit must add both flags, or the node refuses to start (exit status 78). The escape hatch is-Dfukuii.allow-c2-reduce-allocation-merges=trueorFUKUII_ALLOW_C2_REDUCE_ALLOCATION_MERGES=true. See ADR INF-007 and docs/runbooks/known-issues.md Issue 16. - Debian installs now read
/etc/fukuii/application.ini(#1644). Before this release, deb installs never applied it. After the upgrade the JVM runs with the shipped heap (-Xmx3g). Raise it there for a large mainnet node. - Custom ETH-family chain configs need a
blob-schedulefor every blob fork they declare (#1637, #1646), or the node refuses to load them. If you run Ephemery, re-runscripts/ephemery/fetch-genesis.sh: before this release, Ephemery blocks at or above its blob target failed import. - RPC transaction submission follows go-ethereum's rules (#1641, #1647).
- Transactions without replay protection (no EIP-155 chain id) are refused unless
fukuii.network.rpc.allow-unprotected-txs = true. - There is a fee cap:
rpc.tx-fee-cap, default 1 ether. - On ETH-family chains, the pool's replacement, overdraft and blob/non-blob reservation rules apply.
eth_getTransactionCount(addr, "pending")answers the pool's next nonce (#1647).- A fresh ETC node answers
eth_gasPricewith 1 gwei instead of 1 wei (#1640).
What's new¶
- Typed transactions on every RPC interface (#1629). Legacy, EIP-2930, EIP-1559, EIP-4844 and EIP-7702
transactions are handled on JSON-RPC and GraphQL with go-ethereum's rules, error strings and defaults. New
eth_signTransaction,personal_signTransactionandeth_fillTransaction; call and estimate methods accept state and block overrides; there is a gas price oracle ported from geth. - Portable chain files (#1651).
fukuii <network> export|import(offline) andadmin_exportChain/admin_importChainread and write go-ethereum's chain format, gzipped when the name ends in.gz. Files move between fukuii and geth in either direction. See docs/runbooks/backup-restore.md, "Portable Chain Snapshots". - Per-chain blob schedules (#1637, #1646) (EIP-7840
blobSchedule, EIP-7892 BPO forks). - Ephemery is a known network (#1628).
Fixes worth knowing¶
- discv4 no longer saturates the CPU (#1648). On a 4-core Ephemery node, CPU dropped from about 286% to about 15%, and Engine API requests no longer queue behind discovery crypto. Inbound discovery requests are now rate-limited per IP.
- The SNAP pivot block is stored with its body (#1652, every chain). A one-time startup repair fixes nodes that synced with an earlier release.
- Checkpoint archives carry the exact total difficulty (#1653, ETC/Mordor).
- A tx pool memory leak is fixed: during SNAP sync, blob sidecars were kept, and a Sepolia node held 2.6 GB of them.
Validation¶
- Unit and integration tests:
testEssential, 6,428 passed and 0 failed (staging21f2e6127);testStandard, 6,424 passed, 0 failed and 3 ignored (staging980227f49). CI, the hive gates, EEST Amsterdam and Gate Integrity are green on the release candidate. The three-hourtestComprehensivesuite was not run for this release. - Ephemery load run (blocks 145,609–147,609):
- 51,067 typed transactions and 2,000 blob transactions sent through fukuii's RPC;
- 0 errors and 0 gas mismatches;
- 6,753 consensus-layer withdrawals imported, in every 20th block from 135,090 to 149,638, with state roots matching the network.
- Chain files:
- a 12,520-block Ephemery file written by Erigon imports, and re-exports byte-identical;
- a 2,000-block Mordor range imports into core-geth, which validates proof of work, and also re-exports byte-identical.
- Mordor checkpoint archive: produced (pivot 17,207,611, matching public RPC), then imported by a fresh node, which regular-synced 1,324 blocks past it.
Known issues¶
- ETC/Mordor checkpoint archives from SNAP-synced nodes.
checkpoint exportrefuses until header backfill reaches genesis. Don't publish archives made with--allow-estimated-tdon a SNAP-synced node, or archives made before 0.10.0. - Total difficulty rewritten on restart (#1654, ETC/Mordor, present since 0.7.0). Can bias fork choice between branches that fork below the rewritten block. A fix is in progress.
- Deposits and execution-layer withdrawal and consolidation requests (EIP-6110/7002/7251) have hive and EEST coverage but have not yet been exercised on a live network (#1655, planned after the next Ephemery reset).
sbt formatCheckfails (#1656). Tooling only.
Upgrade steps¶
- Install JDK 25. If you launch fukuii with your own
javacommand or unit, add the two C2 flags above. - Stop the node and replace the binary or image. A 0.9.x datadir needs no migration. On first start, the pivot-body repair runs once.
- If you run a custom ETH-family chain, add
blob-schedule. If you run Ephemery, regenerate its config. - Start the node, then confirm the version, the peers, and that the head is following.