Skip to main content
The Agon protocol is currently live on Solana devnet. This page records the canonical identifiers and parameters of that deployment.

Live deployment

FieldValue
Program IDBa2puU8D2CLD1dYfRQ4YBXxirdyz3zVLLChvMf9AqJ1Y
Clusterdevnet
Chain ID1
FrameworkAnchor
Sourcegithub.com/Agonx402/agon-protocol

Chain IDs

Agon distinguishes deployments by a protocol-level chain ID stored in GlobalConfig and folded into the signed message domain.
Chain IDNetwork
0Mainnet
1Devnet
2Testnet
3Localnet
Different chain IDs produce different message domains even when the program ID is identical. A commitment signed for one chain will never verify on another.

Timelocks

Timelocks differ between mainnet and non-mainnet deployments:
ActionMainnetDevnet / Testnet / Localnet
Withdrawal unlock7 days2 seconds
Channel unlock7 days2 seconds
Authorized signer rotation7 days2 seconds
Non-mainnet timelocks are intentionally short to make integration testing fast. Do not model production flows against devnet timelocks.

Fee parameters

ParameterRange
Withdrawal fee (fee_bps)330 bps (0.03%–0.3%)
Minimum withdrawal fee50,000 native units (6-decimal tokens)
Registration fee0, or between 0.001 SOL and 0.01 SOL
The fee recipient is a wallet configured in GlobalConfig and can be updated by the config authority.

Authority model

Agon uses two administrative roles, both of which use a two-step pending/accept handoff:
  • Config authority — can update fee_recipient, fee_bps, registration_fee_lamports, and nominate a successor.
  • Registry authority — can register new settlement tokens in TokenRegistry.
Neither authority can:
  • move participant funds
  • alter settled balances
  • rewrite the chain ID or message domain (these are fixed at initialize time)
  • upgrade which token an existing token_id maps to
See Trust model for the full security posture and upgrade model.

Message domain

The signing domain for a deployment is derived inside the program as:
message_domain = SHA256(
    "agon-message-domain-v1"
    || program_id
    || chain_id (little-endian u16)
)[..16]
Every signed agon-cmt-v5 and agon-round-v4 message carries this 16-byte domain, and the program rejects any message whose domain does not match GlobalConfig.message_domain for the executing deployment. See Message formats.

See also