Skip to content
Minerva. Post-quantum, proof of work.

Documentation · Protocol

CoreGeth ML-DSA Precompile Adapter

network/docs/devnet/coregeth-precompile-adapter.md · commit e561109 · 2026-10-23

Minerva reserves this precompile:

0x0000000000000000000000000000000000000100

The first implementation is registered directly inside the local CoreGeth fork:

clients/minerva-node/coregeth/core/vm/contracts_minerva.go

It uses Cloudflare CIRCL ML-DSA-65:

github.com/cloudflare/circl/sign/mldsa/mldsa65

The precompile input is raw ABI data, without a function selector:

abi.encode(bytes publicKey, bytes message, bytes context, bytes signature)

The output is:

abi.encode(bool valid)

Gas pricing is intentionally conservative for the first devnet: one verification costs 250000 gas. Before public testnet, benchmark ML-DSA-65 verification on target node hardware and replace the fixed devnet cost with a documented gas model.

Tests

pnpm coregeth:test

This covers:

  • valid and invalid real ML-DSA-65 signatures
  • malformed ABI input returning false
  • activation by the minervaMLDSA65PrecompileBlock fork in chain config, on every Minerva network

Acceptance Check

After the local binary is built:

  1. Start the Minerva devnet.
  2. Deploy MinervaAccountFactory.
  3. Create an account with an ML-DSA-65 public key.
  4. Sign executeMessage(...) with the matching private key.
  5. Call executePQ(...).
  6. Confirm the transaction succeeds and a replay with the same nonce fails.