Skip to main content

Networks

Programs

ProgramIDStatus
toda-commit5SwaBH3pXzEKhmL6pbqZ1JgeDiGaf6i5oVj8951RX9smDevnet
toda-stakingDPV1ytT8jGMwUx4FKZJRXs6MTCsxmTA8nQfkEtAM2kaeNot deployed

Devnet state is not permanent. Do not use devnet commitments for long-term records.

Cluster configuration

VariableDefaultPurpose
SOLANA_RPC_URLhttps://api.devnet.solana.comRPC endpoint
TODA_PROGRAM_IDNoneCommitment program
ANCHOR_AUTHORITY_KEYPAIR./authority-keypair.jsonCommit signer
ANCHOR_INTERVAL_MS300000Sweep interval
SIWS_CHAIN_IDdevnetSIWS chain name

Generate a devnet authority with bin/dev-keypair.sh. The generated file is gitignored.

Account layout

FieldBytes
Anchor discriminator8
owner32
authority32
merkle_root32
memory_count8
nonce8
last_updated8
bump1
Total129

The account size is independent of memory count.

Deriving addresses

const [commitPda] = PublicKey.findProgramAddressSync(
[Buffer.from("user"), owner.toBuffer()],
TODA_COMMIT_PROGRAM_ID,
);

const [stakeAuthority] = PublicKey.findProgramAddressSync(
[Buffer.from("stake"), owner.toBuffer()],
TODA_STAKING_PROGRAM_ID,
);

The SDK exports deriveUserCommitPda() and deriveStakeAuthorityPda().

Service ports

ServicePort
Dashboard3000
API3001
Extension API3002
Docs3003
Postgres5432

Protocol constants

DOMAIN_SEP_LEAF = "toda:leaf:v1"
DOMAIN_SEP_NODE = "toda:node:v1"
USER_COMMIT_SEED = "user"
STAKE_AUTHORITY_SEED = "stake"
BATCH_SEAL = { maxLeaves: 64, maxAgeMs: 300_000 }

Mainnet

Mainnet requires a deployed program, a mainnet RPC, SIWS_CHAIN_ID=mainnet, and a funded authority.

Commitments do not migrate between clusters. Moving from devnet to mainnet starts a new commitment account.

See Production readiness.