Build
Familiar EVM. Different authorization.
Contracts run on a Shanghai-level EVM with 0x addresses. What changes is who can sign: every sender is a post-quantum smart account, and the SDK handles that for you.

SDK
@minerva/sdk exposes network metadata, JSON-RPC helpers, balances, account status reads and native transaction helpers. It holds no keys and no service secrets.
import {
createMinervaClient,
createPQAccount,
getMrvBalance,
sendPQTransaction,
} from "@minerva/sdk";
const client = createMinervaClient({ networkName: "testnet" });
// A new ML-DSA-65 account. Its address exists before any contract does.
const account = createPQAccount();
const balance = await getMrvBalance(client, account.address);
// policyVersion is resolved from the chain before signing, so a rotated-out
// key is refused here, not after submission.
const txHash = await sendPQTransaction(client, {
nonce: await client.getTransactionCount(account.address),
gasTipCap: 1_000_000_000n,
gasFeeCap: 2_000_000_000n,
gas: 21_000n,
to: "0x000000000000000000000000000000000000dEaD",
value: 1_000_000_000_000_000_000n,
pqPublicKey: account.publicKey,
pqPrivateKey: account.privateKey,
});Protocol constants
- Transaction type
- 0x4D (MinervaPQTxV1)
- Signing context
- MINERVA_PQ_TX_V1
- ML-DSA-65 verify
- 0x0000000000000000000000000000000000004D00
- MINERVA_TX_CONTEXT
- 0x0000000000000000000000000000000000004D01
- SecurityModeRegistry
- 0x…0201
- AccountReadinessRegistry
- 0x…0202
- MinervaAccountFactory
- 0x…0203
- AccountControlRegistry
- 0x…0204
- MinervaMigrationReserve
- 0x…0205
- Testnet RPC
- https://testnet.minerva.build/rpc · chain 77138
Compatibility notes
Decisions are documented and fixed; a future change ships as a named fork, never a silent edit.
EVM
Shanghai-level EVM at genesis; no blob transactions; no EIP-7702; every transaction type other than 0x4D is invalid
Senders
Every sender is a Minerva account. ecrecover still exists for contract logic, but no EOA can send a transaction; use ERC-1271 (isValidSignature) to verify account signatures.
Permits and signers
Flows that assume an ECDSA signer (permit, EIP-712 with ecrecover against the account) do not apply to Minerva accounts. Design around contract signatures.
Gas
A native transaction is about 5.4 KB before calldata; ML-DSA verification currently costs a flat 250,000 gas placeholder.
RPC
Standard eth_* methods plus minerva_sendRawPQTransaction, minerva_getAccountControl, minerva_getDeviceKey and minerva_networkInfo.
Decoding
Dispatch on the first byte: 0x4D goes to the Minerva decoder. Never hand a Minerva envelope to a generic Ethereum parser.
Wallet integration
Minerva Wallet 0.1.2 (mobile, browser extension, desktop) injects an EIP-1193 provider with the Minerva chain and routes eth_sendTransaction through the account's post-quantum path. Integrate the existing wallet and SDK rather than a generic EVM wallet flow; a classical wallet cannot produce a valid Minerva signature.



