Overview
.env and agent.toml are both created by cloud-agent onboard β you typically donβt write them from scratch. The tables below describe each field so you can tune an existing config.
.env β Environment Variables
| Variable | Description | Written byonboard |
|---|---|---|
PARTY_AGENT | Your Canton party ID | yes |
PARTY_AGENT_PRIVATE_KEY | Base58 Ed25519 private key (32-byte seed) | yes |
PARTY_AGENT_PUBLIC_KEY | Base58 Ed25519 public key (derived from the private key) | yes |
ORDERBOOK_GRPC_URL | Orderbook gRPC endpoint | yes |
CANTON_CHAIN | devnet | testnet | mainnet | yes |
SYNCHRONIZER_ID | Canton synchronizer ID | yes |
NODE_NAME | Canton node name for routing | yes |
LEDGER_SERVICE_PUBLIC_KEY | Base58 public key of the ledger service (for verifying responses) | yes |
DSO | DSO (Canton Coin admin) party ID | yes |
PARTY_SETTLEMENT_OPERATOR | Settlement operator party ID | yes |
PARTY_ORDERBOOK_FEE | Orderbook fee collection party | yes |
PARTY_TRAFFIC_FEE | Sequencer traffic fee party | yes |
TRAFFIC_FEE_PRICE_USD_MB | Traffic fee rate in USD per MB | yes |
JOIN_TRAFFIC_TRANSACTIONS | Batch traffic-fee transactions (default: true) | yes |
AGENT_FEE_RESERVE_CC | CC balance held back for fees (default: 5.0) | yes |
AGENT_FEE_CC | Per-tx agent fee (CC) | yes |
PARTICIPANT_FEE_CC | Per-tx participant fee (CC) | yes |
SIGNATURE_FEE_CC | Per-tx signature fee (CC) | yes |
MERGE_THRESHOLD | Merge worker triggers when selectable amulets exceed this count | yes |
MERGE_MAX_AMULETS | Max amulets merged per round (default: 100) | yes |
MERGE_POLL_INTERVAL_SEC | Merge worker poll interval in seconds (default: 600) | yes |
LOG_DESTINATION | console | file (paired with LOG_DIR, LOG_FILE_PREFIX) | yes |
RECURRING_PAYMENT_PACKAGE_NAME | Recurring-payment package name; required for subscription * commands | yes |
SETTLEMENT_THREAD_COUNT | Concurrent settlement threads (default used when unset) | no |
AGENT_MAX_SETTLEMENTS | Max active settlements (default used when unset) |
agent.toml β Agent Settings
Full example for an LP with grid orders and RFQ:
role = "trader"
auto_settle = true
poll_interval_secs = 7
token_ttl_secs = 3600
connection_timeout_secs = 30
# Liquidity provider identity (enables RFQ handling)
[liquidity_provider]
name = "My LP"
max_concurrent_rfqs = 10
default_quote_valid_secs = 60
[[markets]]
market_id = "CC-USDC"
enabled = true
price_change_threshold_percent = 0.1
# 3 bids below mid (negative deltas)
[[markets.bid_levels]]
delta_percent = -0.015
quantity = "10"
[[markets.bid_levels]]
delta_percent = -0.2
quantity = "10"
[[markets.bid_levels]]
delta_percent = -0.3
quantity = "10"
# 3 offers above mid (positive deltas)
[[markets.offer_levels]]
delta_percent = 0.015
quantity = "10"
[[markets.offer_levels]]
delta_percent = 0.2
quantity = "10"
[[markets.offer_levels]]
delta_percent = 0.3
quantity = "10"
# RFQ configuration for this market
[markets.rfq]
enabled = true
min_quantity = "5"
max_quantity = "1000"
bid_spread_percent = 0.5
offer_spread_percent = 0.5
quote_valid_secs = 60
allocate_before_secs = 3600
settle_before_secs = 7200