HESTIAdocs

Parameters & constants

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.

Protocol

ConstantValue
HESTIA_PROTOCOL_VERSION"0.1.0"
SDK_VERSION / PROTOCOL_VERSION (SDK)"0.1.0"
ROUTE_API_VERSION"v1"

Field

ConstantValue
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.

Commitment tree

ConstantValueMeaning
TREE_DEPTH / DEFAULT_TREE_DEPTH32~4.3 billion leaves
ZERO_VALUE0empty-leaf sentinel
ROOT_HISTORY_SIZE64recent roots accepted on-chain

Hashing arities (Poseidon)

UseConstantArityDefinition
CommitmentCOMMITMENT_ARITY5poseidon([value, token, owner, label, randomness])
NullifierNULLIFIER_ARITY3poseidon([commitment, leafIndex, sk])
Merkle parent2poseidon([left, right])
Spending key1SK = poseidon([sk])

Circuits

ConstantValue
CIRCUIT_ARITIES["1x2", "2x2"]
Proving systemGroth16 over BN254 (snarkjs)
LanguageCircom 2

Chains

NameCHAIN_IDSMeta-address CHAIN_TAG
base84530
baseSepolia845321

Deployed contracts (Base mainnet)

The live deployment on Base mainnet (chain 8453). Full table with explorer links and the trusted-setup note lives in smart contracts.

ContractAddress
HestiaPool0x38e8131d9A6A2Fc89489F21Fc01bB4E17c70B1f6
AssociationSetRegistry0x378d2e9985AC04c51De9Ae8396474FC6c382CA3f
TransactionVerifier1x20x9D47926a6b967E6195a7B4d15dc1A0b29DbA2EF6
TransactionVerifier2x20x7Db8dCF4D20B289Ddc9bae0B08e1E380539891AD
Poseidon T2 / T3 / T60xfAB6…a06b / 0xb0f4…7b6D / 0xE0be…9635

Tokens

ConstantValue
NATIVE_ETH (pool sentinel)0x0000000000000000000000000000000000000000
USDC_ADDRESS.base0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
USDC_ADDRESS.baseSepolia0x036CbD53842c5426634e7929541eC2318f3dCF7e

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.

Keys & meta-address

ConstantValue
KEY_DERIVATION_MESSAGE"hestia.io/keys/v1"
META_ADDRESS_HRP"hestia"
META_ADDRESS_VERSION1
Meta-address encodingBech32m

Note encryption

ComponentAlgorithm
Key agreementX25519 (ephemeral)
Key derivationHKDF-SHA256
AEADChaCha20-Poly1305
Blob layoutephemeralPublicKey ‖ ciphertext

Key derivations

text
seed (from signature) = keccak256(signature)
sk = poseidon([toField(seed), 0])     SK = poseidon([sk])
vk = keccak256(seed ‖ 0x01)           VK = X25519(vk)