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
minervaMLDSA65PrecompileBlockfork in chain config, on every Minerva network
Acceptance Check
After the local binary is built:
- Start the Minerva devnet.
- Deploy
MinervaAccountFactory. - Create an account with an ML-DSA-65 public key.
- Sign
executeMessage(...)with the matching private key. - Call
executePQ(...). - Confirm the transaction succeeds and a replay with the same nonce fails.
