Concepts

Account Model

Addresses, EOAs, contracts · Estimated read time: 5 minutes

TL;DR

Valdium uses an account model (not UTXO), in the Ethereum account-model family. Addresses are 20 bytes, rendered as 0x-prefixed hex strings (the Ethereum address format). Two kinds of accounts exist: externally-owned accounts (EOAs, controlled by a Dilithium3 keypair) and contracts (controlled by deployed JavaScript code). Every account has a balance and a nonce.

Address format

Addresses are 20 bytes, presented as 40 lowercase hex characters with a 0x prefix. Example:

0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B

A wallet that honours the checksum verifies the mixed-case digest and rejects addresses where the case doesn't match — which catches most transcription errors.

Address derivation

address = BLAKE3(pubkey)[0:20]

The pubkey is a Dilithium3 (ML-DSA-65) public key — around 1.9 KB. We hash with BLAKE3 and take the first 20 bytes. Ethereum uses blake3(pubkey)[12:32] — same 20-byte size, different hash, different slice. Addresses are not interoperable across chains.

Contract addresses are derived as BLAKE3(deployer_address || deployment_nonce)[0:20] — deterministic and pre-computable before deploy.

EOA vs contract

From outside, they look the same — both are 20-byte addresses with balances. The explorer distinguishes them by whether getCode returns a non-empty body.

Nonces

Every EOA has a nonce — a sequential transaction counter. Every signed transaction includes the sender's current nonce. The chain rejects a tx if the nonce is lower than the account's current nonce (replay attempt) or skips in the sequence. Nonces make transactions replay-safe.

Balances

Balances are stored in wei — 10⁻¹⁸ VLD. Every balance and every value in a transaction is a 256-bit unsigned integer. There are no fractional wei.

1 VLD = 1,000,000 wei. Six decimals, the Ethereum ERC-20 standard (same as USDC). Use parseVld / formatVld from the SDK to convert.

No HD derivation in v1

Ethereum wallets use BIP-32 HD derivation over secp256k1 to generate arbitrary numbers of accounts from a single seed. There is no production-ready BIP-32 equivalent for Dilithium3 yet.

In v1 we treat each account as an independent keypair. The Valdium wallet and CLI support multiple accounts inside one vault by storing independent Dilithium3 secret keys, each encrypted under the same master password.