github 0gfoundation/0gchain-NG v3.0.6
Galileo-v3.0.6

4 hours ago

Summary

Galileo v3.0.6 enables double-sign slashing on the 0G testnet. When a validator signs conflicting votes at the same height, the consensus layer applies a balance penalty and (after the Slashing fork) coordinates on-chain stake reduction via the execution layer.

All node operators on Galileo must upgrade CL and EL before the fork timestamps below.


Testnet (Galileo) Schedule

Milestone UTC Behavior
Slashing Fork 2026-06-15 00:00:00 New SSZ layout, ExecutionPayload.slashed, on-chain slashValidator system calls. Re-slash after fork triggers validator exit and proposer ban.

What's New

Consensus Layer (0g-chain-ng)

  • CometBFT DUPLICATE_VOTE misbehavior → double-sign slashing in beacon state transition
  • Penalty: 2% of effective balance (min 1 gwei); capped at 500 0G after Slashing fork
  • Up to 16 slashed validators per block (MaxSlashedValidatorsPerPayload)
  • ExecutionPayload.slashed / ExecutionPayloadHeader.slashedRoot (Slashing fork+)
  • Payload slashed list validated against CometBFT evidence at FinalizeBlock
  • Backward-compatible SSZ for pre-fork blocks (528/584 → 532/616 byte layouts) — upgrade without wiping chain data
  • Backward-compatible Engine JSON: slashed omitted pre-fork to avoid EL -32602 Invalid params
  • Pre-fork slashed validators may still propose; only post-fork re-slash initiates exit and bans proposing

Execution Layer

0g-geth

  • ExecutableData.slashed in engine_newPayloadV4
  • ProcessStakingSlashingsStakingContract.slashValidator system call
  • Block body / P2P / RPC expose slashed (not included in block hash)

0g-reth (+ alloy, alloy-evm)

  • ExecutionPayloadV3.slashed, BlockBody.slashed
  • BlockSlashed DB table for persistence
  • apply_staking_slashings executes on-chain slash during block execution

On-Chain Contracts

  • StakingContract.slashValidator(address, amount) — system-call only
  • ValidatorContract.slash(amount, exited) — reduces stake; exited=true on post-fork slash path

Upgrade Instructions

  1. Upgrade 0g-chain-ng to Galileo-v3.0.6.
  2. Upgrade 0g-geth or 0g-reth to the slashing-compatible release.
  3. Verify Engine API JWT is configured between CL and EL.
  4. Restart nodes before 2026-06-15 00:00:00 UTC.
  5. No chain wipe required for operators upgrading from a pre-slashing build.

Breaking Changes

  • SSZ layout change at Slashing fork (ExecutionPayload 528→532 bytes, header 584→616 bytes).
  • Engine API schema extension: post-fork engine_newPayloadV4 includes optional slashed array.
  • Pre-fork slashed validators remain active proposers until Slashing fork; re-slash after fork forces exit.

Component Versions

Component Tag / Branch
0g-chain-ng (CL) Galileo-v3.0.6
0g-geth (EL) slashing release (align with CL)
0g-reth (EL) slashing release (align with CL)

Verification Checklist

  • CL + EL upgraded and synced before 2026-06-15 00:00:00 UTC
  • Engine JWT auth working (engine_newPayload succeeds on startup)
  • Double-sign test: CL balance penalty applied
  • Post 2026-06-15: ExecutionPayload.slashed matches evidence; EL slashValidator succeeds
  • Pre-fork slashed validator can still propose; post-fork re-slash triggers exit

Full Changelog

  • feat: Slashing fork version (testnet)
  • feat: CometBFT duplicate-vote → CL double-sign slashing
  • feat: ExecutionPayload.slashed / SSZ extension and backward-compatible decode
  • feat: Engine JSON fork-gating for slashed field
  • feat: Proposer ban only after post-fork slash exit (IsProposerBannedDueToSlashing)
  • feat: EL ProcessStakingSlashings / apply_staking_slashings
  • feat: StakingContract.slashValidator and ValidatorContract.slash

Don't miss a new 0gchain-NG release

NewReleases is sending notifications on new releases.