Accounts & Keys

Ed25519 key pairs, addresses, signing, multisig, and delegation.


Every XE account is an ed25519 key pair. The public key, hex-encoded (64 hex chars / 32 bytes), is the account address. No prefixes, no checksums.

Key Generation

kp, err := core.GenerateKeyPair()        // random
kp := core.KeyPairFromSeed(seed)         // deterministic from 32-byte seed

Block Signing

  1. Canonical encoding via MarshalBlockCanonical()
  2. SHA-256(networkID ‖ canonical ‖ aux)b.Hash — the aux tail (MarshalBlockAux) is the certificate hash plus timekeeper attestations, empty for non-lease blocks; genesis is hashed with the network-ID prefix cleared
  3. ed25519.Sign(privateKey, hashBytes)b.Signature

Multisig Accounts

  • Address = sha256(canonical(keyset)) (hash-derived)
  • Opened with multisig_open block
  • Rotated via multisig_update blocks
  • Spending: M-of-N threshold; Receiving: 1-of-N

Delegation

Each block includes an optional Representative field. Empty means keep current delegation. Delegation weight is the account's XE balance in micro-XE — XUSD is mintable by authorized minters and must not mint consensus weight, so it contributes nothing.