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

  1. Disable PoW mining (--mine / miner threads) against chains verified by this engine.
  2. For private networks, use a chain with a supported consensus/sealer.
  3. In code, remove miner paths that call Seal on the Ethash engine.
  4. 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

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


AI-assisted analysis of ethereum/go-ethereum@6bb0588ad8 (2026-08-15). Data as JSON: /api/errors/8dbdd40574110341. Report an issue: GitHub.