ethereum/go-ethereum · critical
ethash (pow) sealing not supported any more
Error message
ethash (pow) sealing not supported any more
What it means
Ethash.Seal unconditionally panics with 'ethash (pow) sealing not supported any more'. The Ethash engine remains for verifying historical PoW headers (difficulty, seal checks), but mining/sealing new blocks through the Engine API was removed from this codebase, so calling Seal is a hard programming/configuration error.
Source
Thrown at consensus/ethash/ethash.go:77
// NewFullFaker creates an ethash consensus engine with a full fake scheme that
// accepts all blocks as valid, without checking any consensus rules whatsoever.
func NewFullFaker() *Ethash {
return &Ethash{
fakeFull: true,
}
}
// Close closes the exit channel to notify all backend threads exiting.
func (ethash *Ethash) Close() error {
return nil
}
// Seal generates a new sealing request for the given input block and pushes
// the result into the given channel. For the ethash engine, this method will
// just panic as sealing is not supported anymore.
func (ethash *Ethash) Seal(chain consensus.ChainHeaderReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error {
panic("ethash (pow) sealing not supported any more")
}
View on GitHub (pinned to 6bb0588ad8)
Solutions
- Disable PoW mining (--mine / miner threads) against chains verified by this engine.
- For private networks, use a chain with a supported consensus/sealer.
- In code, remove miner paths that call Seal on the Ethash engine.
- If PoW sealing is required, maintain a fork restoring the removed ethash sealing code.
Example fix
// before ethash.Seal(chain, block, results, stop) // panics // after // Verification only: use ethash.VerifySeal etc.; never call Seal.
Defensive patterns
Strategy: validation
Validate before calling
// refuse to start mining on verify-only engines
func validateMinerEngine(engine consensus.Engine) error {
if _, ok := engine.(*ethash.Ethash); ok {
return errors.New("ethash sealing removed; disable --mine or use a supported sealer")
}
return nil
} Type guard
func isEthash(e consensus.Engine) bool {
_, ok := e.(*ethash.Ethash)
return ok
} Prevention
- Remove miner code paths that call Seal on PoW engines.
- Gate mining flags behind a supported-sealer check at node startup.
- Treat Ethash in this codebase as verification-only.
When it happens
Trigger: Starting geth with --mine on a PoW chain in this fork, or calling ethash.Seal(chain, block, results, stop) from miner code or tests. Every call panics; there is no supported PoW production path.
Common situations: Legacy mining setups or CI tests that assumed the miner calls engine.Seal; upgrading a codebase that forked geth's miner onto a version where Ethash.Seal is a stub panic; tutorials describing pre-merge CPU/GPU mining.
Related errors
- clique (poa) sealing not supported any more
- nil chainID
- error decoding contract deployer hex %s: %v
- Could not create random uuid: %v
- key generation: could not read from random source:
AI-assisted analysis of ethereum/go-ethereum@6bb0588ad8 (2026-08-15).
Data as JSON: /api/errors/8dbdd40574110341.
Report an issue: GitHub.