Skip to main content

Cryptography Overview

A private payment protocol must satisfy three properties at once:

  1. Hiding: observers cannot tell who paid whom, or how much.
  2. Binding: no one can create value from nothing.
  3. Verifiability: the chain confirms validity without seeing private data.

No single primitive does all three. Platus layers several, inspired from Zcash to the BabyJubJub curve, the Poseidon2 hash, and the BN254 proof field.

The stack

What each layer provides

LayerPrimitiveProvidesDeep dive
KeysSHA-512 PRF tree → BJJ point ak, scalar ivkSingle seed; selective disclosureKey Hierarchy
AddressesDiversifyHash (hash-to-curve) + pkd = ivk·gdUnlinkable per-payment receivingStealth Addresses
CommitmentPoseidon2 over 11 note fieldsHiding + binding anchor in the treeNotes & Commitments
NullifierPoseidon2(NF_DOMAIN, nk, ρ, ψ, cm)Double-spend prevention, unlinkableNullifiers
ValuePedersen cv = rcv·G + v·HHidden amounts that still balanceValue Commitments & Binding
Spend authBJJ Schnorr over rerandomized rkOnly the owner spends; key unlinkableSpend Authorization
EncryptionECDH + ML-KEM-768 + HKDF + ChaCha20-Poly1305Confidential note delivery + recoveryNote Encryption

Curves and fields

Curve / fieldUsed forWhy
BabyJubJub (twisted Edwards)keys, addresses, value commitments, signaturesIts base field is BN254's scalar field, so BJJ arithmetic is native inside the circuit.
BN254 (alt_bn128)the ZK proof systemEthereum precompiles make on-chain verification cheap.

Hashes

HashUsed forWhy
Poseidon2 (BN254)commitments, nullifiers, ivk, the Merkle tree, in-circuit challengesZK-friendly: very few constraints per hash.
SHA-256per-action digest + the aggregation tree foldone source of truth across circuit, contract, SDK, bundler.
SHA-512the key-derivation PRF (PRF^expand)standard, off-circuit.
HKDF-SHA256note-encryption key derivationstandard, well-analyzed KDF.
Keccak-256opDigest, authCtx, payload digests, AppAccount digestsEVM-native, cheap on-chain.