Every protocol-wide constant in one place — field, tree, hashing arities, chains, tokens, and encodings.
A single reference for the frozen parameters. These are shared across @hestia/common, the
circuits, and the contracts; changing any of them would break conformance.
| Constant | Value |
|---|
HESTIA_PROTOCOL_VERSION | "0.1.0" |
SDK_VERSION / PROTOCOL_VERSION (SDK) | "0.1.0" |
ROUTE_API_VERSION | "v1" |
| Constant | Value |
|---|
FIELD_MODULUS (BN254 scalar field r) | 21888242871839275222246405745257275088548364400416034343698204186575808495617 |
MAX_VALUE (max note value) | 2^248 − 1 |
All proof values are canonical elements in [0, r). Note values are capped at 2^248 so the
circuit's range and balance checks are sound. See cryptography.
| Constant | Value | Meaning |
|---|
TREE_DEPTH / DEFAULT_TREE_DEPTH | 32 | ~4.3 billion leaves |
ZERO_VALUE | 0 | empty-leaf sentinel |
ROOT_HISTORY_SIZE | 64 | recent roots accepted on-chain |
| Use | Constant | Arity | Definition |
|---|
| Commitment | COMMITMENT_ARITY | 5 | poseidon([value, token, owner, label, randomness]) |
| Nullifier | NULLIFIER_ARITY | 3 | poseidon([commitment, leafIndex, sk]) |
| Merkle parent | — | 2 | poseidon([left, right]) |
| Spending key | — | 1 | SK = poseidon([sk]) |
| Constant | Value |
|---|
CIRCUIT_ARITIES | ["1x2", "2x2"] |
| Proving system | Groth16 over BN254 (snarkjs) |
| Language | Circom 2 |
| Name | CHAIN_IDS | Meta-address CHAIN_TAG |
|---|
base | 8453 | 0 |
baseSepolia | 84532 | 1 |
The live deployment on Base mainnet (chain 8453). Full table with explorer links and the
trusted-setup note lives in smart contracts.
| Contract | Address |
|---|
HestiaPool | 0x38e8131d9A6A2Fc89489F21Fc01bB4E17c70B1f6 |
AssociationSetRegistry | 0x378d2e9985AC04c51De9Ae8396474FC6c382CA3f |
TransactionVerifier1x2 | 0x9D47926a6b967E6195a7B4d15dc1A0b29DbA2EF6 |
TransactionVerifier2x2 | 0x7Db8dCF4D20B289Ddc9bae0B08e1E380539891AD |
Poseidon T2 / T3 / T6 | 0xfAB6…a06b / 0xb0f4…7b6D / 0xE0be…9635 |
| Constant | Value |
|---|
NATIVE_ETH (pool sentinel) | 0x0000000000000000000000000000000000000000 |
USDC_ADDRESS.base | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
USDC_ADDRESS.baseSepolia | 0x036CbD53842c5426634e7929541eC2318f3dCF7e |
Inside the pool, ETH is the token field 0; an ERC-20 is addressToField(address). Verify the
USDC address against the target chain at deploy time.
| Constant | Value |
|---|
KEY_DERIVATION_MESSAGE | "hestia.io/keys/v1" |
META_ADDRESS_HRP | "hestia" |
META_ADDRESS_VERSION | 1 |
| Meta-address encoding | Bech32m |
| Component | Algorithm |
|---|
| Key agreement | X25519 (ephemeral) |
| Key derivation | HKDF-SHA256 |
| AEAD | ChaCha20-Poly1305 |
| Blob layout | ephemeralPublicKey ‖ ciphertext |
seed (from signature) = keccak256(signature)
sk = poseidon([toField(seed), 0]) SK = poseidon([sk])
vk = keccak256(seed ‖ 0x01) VK = X25519(vk)