Configuration¶
Precedence¶
Tidal loads settings in this order:
environment variables > ~/.tidal/config.yaml > Python defaults
Secrets belong in ~/.tidal/.env. Operational knobs belong in ~/.tidal/config.yaml.
Files¶
| File | Purpose |
|---|---|
~/.tidal/config.yaml |
Runtime settings for scanner, API, multicall, pricing, and transaction behavior |
~/.tidal/.env |
Secrets such as RPC_URL, API keys, and keystore secrets |
~/.tidal/auction_pricing_policy.yaml |
Auction pricing profiles and token-specific USD sizing caps |
Role Model¶
Tidal uses one runtime config format, but not every key matters to every user:
Server operator: runstidal-server, owns scans, SQLite, API serving, and reconciliation.CLI client: runstidal, calls the API, and may sign/broadcast locally.
The generated scaffold in ~/.tidal/config.yaml is organized into:
SharedServer operator onlyShared execution defaultsCLI client convenience
~/.tidal/.env¶
Common environment variables:
- Server operator:
RPC_URL,TOKEN_PRICE_AGG_KEY - CLI client:
TIDAL_API_KEY,TXN_KEYSTORE_PATH,TXN_KEYSTORE_PASSPHRASE - Either role when useful:
TIDAL_API_BASE_URL,TIDAL_API_HOST,TIDAL_API_PORT
Less common but supported:
DB_PATHCHAIN_ID- any setting declared in
tidal/config.py
~/.tidal/config.yaml¶
Run tidal init to scaffold the default files under ~/.tidal/. The generated config.yaml is the best starting point.
Shared¶
Used by both roles, or by any command that needs local RPC access:
db_pathchain_idrpc_timeout_secondsrpc_retry_attempts
Server operator only¶
These drive scanning, cached state, discovery, and API serving:
scan_interval_secondsscan_concurrencyscan_auto_settle_enabledmonitored_fee_burnersmulticall_enabledmulticall_addressmulticall_discovery_batch_callsmulticall_rewards_batch_callsmulticall_rewards_index_maxmulticall_balance_batch_callsmulticall_overflow_queue_maxmulticall_auction_batch_callsauction_factory_addressprice_refresh_enabledtoken_price_agg_base_urlprice_timeout_secondsprice_retry_attemptsprice_concurrencyprice_delay_secondsauctionscan_base_urlauctionscan_api_base_urlauctionscan_recheck_secondstidal_api_hosttidal_api_porttidal_api_receipt_reconcile_interval_secondstidal_api_receipt_reconcile_threshold_secondstidal_api_cors_allowed_origins
Shared execution defaults¶
These affect local execution and server-side transaction logic:
auction_kicker_addresstxn_usd_thresholdtxn_max_base_fee_gweitxn_max_priority_fee_gweitxn_max_gas_limittxn_start_price_buffer_bpstxn_min_price_buffer_bpstxn_quote_spot_warning_threshold_pcttxn_max_data_age_secondstxn_cooldown_secondstxn_require_curve_quotemax_batch_kick_sizebatch_kick_delay_seconds
CLI client convenience¶
These are mainly useful to the tidal CLI client:
tidal_api_base_urltidal_api_request_timeout_seconds
monitored_fee_burners¶
config.yaml stores fee burners as a list:
monitored_fee_burners:
- address: "0x..."
want_address: "0x..."
label: "Human name"
These entries are used by the scanner to:
- load fee-burner balances
- resolve source names
- map fee burners to auctions using
(receiver, want)
~/.tidal/auction_pricing_policy.yaml¶
This file controls two things:
- auction pricing profiles
- token-specific USD sizing caps
Pricing profiles¶
default_profile: volatile
profiles:
volatile:
start_price_buffer_bps: 1000
min_price_buffer_bps: 500
step_decay_rate_bps: 50
stable:
start_price_buffer_bps: 100
min_price_buffer_bps: 50
step_decay_rate_bps: 2
Auction overrides¶
Map auction -> sell token -> profile:
auctions:
"0xAuction":
"0xSellToken": stable
Anything not listed falls back to default_profile.
USD kick caps¶
Limit how much USD value of a specific sell token is used in one kick:
usd_kick_limit:
"0xToken": 10000
This cap is applied after the live source balance is read and before the live quote is requested.
Important Defaults¶
Current defaults from tidal/config.py include:
scan_interval_seconds = 300rpc_timeout_seconds = 10price_timeout_seconds = 10txn_usd_threshold = 100txn_max_base_fee_gwei = 0.5txn_max_priority_fee_gwei = 2txn_quote_spot_warning_threshold_pct = 2txn_cooldown_seconds = 3600tidal_api_request_timeout_seconds = 30
Rule Of Thumb¶
- run
tidal init - put secrets in
~/.tidal/.env - put operational settings in
~/.tidal/config.yaml - put pricing intent in
~/.tidal/auction_pricing_policy.yaml