Accounts
Minerva accounts
Every account is a contract at a CREATE2-derived address, controlled by an ML-DSA-65 key that is recorded on-chain and can be rotated. There are no externally owned accounts.

Account lifecycle
- 1
Create
An account address is derived with CREATE2 from the factory, the initial ML-DSA-65 key and a salt. It can receive funds before any contract exists, and it can deploy itself with its own first transaction.
- 2
Authorize
Every native transaction carries the account, the public key, the algorithm, the policy version and a signature over a hash that binds chain id, nonce and the whole envelope. The node verifies it against the account's control record before gas is charged.
- 3
Rotate
rotatePQKey, signed by the current key, writes the new key commitment and increments the policy version in the Account Control Registry. From that block the previous key is rejected on the native path at every policy version.
- 4
Delegate
Device keys are enrolled with scopes: allowed targets or any, a value limit per window, an expiry, and protected targets no scope can include. Consensus admits a device key only for zero-value self-calls; the account contract enforces the scope.
- 5
Recover
Today recovery means restoring the encrypted ML-DSA key from the Recovery Kit and rotating. Policy-based recovery (guardians) would end in the same registry write; it is planned, not shipped.
The diagram follows the implemented model. The steps marked as planned are design targets and are labeled as such on the Core v1 page.
Overview graphics
Native transaction
MinervaPQTxV1 is the only transaction type a Minerva network accepts. Legacy Ethereum types are invalid by consensus, so no ECDSA path exists for any account.
- Type byte
- 0x4D
- Fields
- chainId, nonce, fees, gas, account, factorySalt, to, value, data, accessList, pqAlgorithm, pqPublicKey, policyVersion, pqSignature
- Signing context
- MINERVA_PQ_TX_V1
- Account context
- MINERVA_ACCOUNT_V1 (executePQ, rotatePQKey, isValidSignature)
- Authorizing key in-contract
- MINERVA_TX_CONTEXT precompile at 0x0000000000000000000000000000000000004D01
- Control record
- AccountControlRegistry at 0x…0204: commitment, algorithm, policyVersion
Account control in Minerva Wallet
Identity
- Address
- 0x7D3488118952dD7A7d087Ff7845151fd3C1A5829
- Network
- Minerva Testnet · chain 77138
- Control Key
- on-chain record · policy v1
- Key commitment
- 0xdff7…90b9
- Authorization policy
- native-only · 0 device keys
- Recovery configuration
- Recovery Kit (encrypted key backup)
- Last confirmed update
- 0x9c4e…a1d7 · block 12,418
Control actions
- Control Key rotationConfirmed · v1
Shows the key that is authoritative now, read from the Account Control Registry, not the key the account was created with.
- Pending rotationRequested · not effective
A requested rotation is listed separately until its block confirms. The previous key stays valid until then.
- Recovery policyRecovery Kit
An encrypted backup of the ML-DSA key with a rehearsal flow. Guardian-based recovery is specified, not shipped.
- Device keys0 enrolled
Scoped keys limited to zero-value self-calls; revocation takes effect at consensus.
This page never asks for a key or a Recovery Kit. Signing and recovery happen in Minerva Wallet 0.1.2; the account model is described under Accounts.
Documentation
- PQ-native transaction layer
sender rule, node responsibilities, device keys
- Architecture overview
node, precompile, contracts, services
- @minerva/sdk
create accounts and send native transactions



