-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy path.env.example
More file actions
248 lines (219 loc) · 11.5 KB
/
Copy path.env.example
File metadata and controls
248 lines (219 loc) · 11.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
# =============================================================================
# Dealbot backend — environment configuration
# =============================================================================
# See docs/environment-variables.md for the full reference.
#
# Multi-network primer
# --------------------
# `NETWORKS` is a comma-separated list of Filecoin networks the instance should
# drive (supported: `calibration`, `mainnet`).
#
# NETWORKS=calibration,mainnet
#
# Each per-network variable resolves as:
# <NETWORK>_<VAR> (per-network override)
# -> <VAR> (unprefixed shared value, applies to all active networks)
# -> default
#
# So set a shared value once and override only where a network differs:
# DEAL_JOB_TIMEOUT_SECONDS=360 # shared by both networks
# MAINNET_DEALS_PER_SP_PER_HOUR=1 # mainnet-only override
#
# Chain-specific variables never inherit the unprefixed slot and MUST be
# prefixed: WALLET_ADDRESS, WALLET_PRIVATE_KEY, SESSION_KEY_PRIVATE_KEY, RPC_URL,
# CLICKHOUSE_URL, PDP_SUBGRAPH_ENDPOINT, SUBGRAPH_ENDPOINT, DEALBOT_DATASET_VERSION,
# BLOCKED_SP_IDS, BLOCKED_SP_ADDRESSES, EXPECTED_APPROVED_SP_IDS,
# EXPECTED_APPROVED_SP_ADDRESSES, DATASET_LIFECYCLE_CHECK_ENABLED
# (network-dependent default: off on mainnet, so a shared =true must not enable
# the canary there).
#
# Full-rate/trickle tiering is applied after provider eligibility. See
# docs/environment-variables.md#full-rate-vs-trickle-tier.
#
# Process globals (database, HTTP ports, ClickHouse batching, pg-boss) have no
# per-network form. Variables for INACTIVE networks are ignored; only active
# networks are validated at startup.
# =============================================================================
# -----------------------------------------------------------------------------
# Application
# -----------------------------------------------------------------------------
NODE_ENV=production
# api | worker | both (default: both)
DEALBOT_RUN_MODE=both
DEALBOT_PORT=8080
DEALBOT_HOST=localhost
# Optional public base URL for DealBot HTTP API (used to construct hosted-piece source URLs for SP pull checks)
# DEALBOT_API_PUBLIC_URL=https://dealbot.example.com
# Metrics-only HTTP server (used when DEALBOT_RUN_MODE=worker)
DEALBOT_METRICS_PORT=9090
DEALBOT_METRICS_HOST=0.0.0.0
# Comma-separated list of allowed origins for CORS (for web dev)
DEALBOT_ALLOWED_ORIGINS=http://localhost:5173,http://127.0.0.1:5173
# -----------------------------------------------------------------------------
# Database
# -----------------------------------------------------------------------------
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=dealbot
DATABASE_PASSWORD=dealbot
DATABASE_NAME=dealbot
DATABASE_POOL_MAX=1
# -----------------------------------------------------------------------------
# Network selection
# -----------------------------------------------------------------------------
# Comma-separated. Default: calibration.
NETWORKS=calibration,mainnet
# -----------------------------------------------------------------------------
# Per-network configuration — CALIBRATION
# -----------------------------------------------------------------------------
# At least one of WALLET_PRIVATE_KEY or SESSION_KEY_PRIVATE_KEY is required
# for each ACTIVE network. Session key (if present) takes precedence.
CALIBRATION_WALLET_ADDRESS=0x0000000000000000000000000000000000000000
CALIBRATION_WALLET_PRIVATE_KEY=0x0000000000000000000000000000000000000000000000000000000000000000
# CALIBRATION_SESSION_KEY_PRIVATE_KEY=
# Optional: custom RPC (authenticated endpoints avoid public rate limits)
CALIBRATION_RPC_URL=
# Optional ClickHouse database for calibration check results.
CALIBRATION_CLICKHOUSE_URL=
# Per-request RPC timeout (ms); kept above eRPC's failover budget. See #604.
CALIBRATION_RPC_REQUEST_TIMEOUT_MS=30000
CALIBRATION_CHECK_DATASET_CREATION_FEES=true
CALIBRATION_USE_ONLY_APPROVED_PROVIDERS=true
# Upstream pdp-explorer subgraph — drives the data-retention / overdue-periods path.
CALIBRATION_PDP_SUBGRAPH_ENDPOINT=
# Dealbot-owned subgraph (see apps/subgraph/README.md) — drives the sampled-retrieval
# candidate-piece query. When unset, sampled-retrieval schedules are not created.
CALIBRATION_SUBGRAPH_ENDPOINT=
# Minimum number of datasets per SP. When > 1, a separate data_set_creation
# job provisions extra datasets.
CALIBRATION_MIN_NUM_DATASETS_FOR_CHECKS=1
# Optional: dataset versioning (e.g. "dealbot-v1", "dealbot-v2").
# CALIBRATION_DEALBOT_DATASET_VERSION=dealbot-v1
# Per-network scheduling rates (per hour; fractional values supported)
CALIBRATION_DEALS_PER_SP_PER_HOUR=4
CALIBRATION_DATASET_CREATIONS_PER_SP_PER_HOUR=0.01
CALIBRATION_RETRIEVALS_PER_SP_PER_HOUR=1
# Sampled (anonymous) retrievals; defaults to CALIBRATION_RETRIEVALS_PER_SP_PER_HOUR when unset.
CALIBRATION_SAMPLED_RETRIEVALS_PER_SP_PER_HOUR=
CALIBRATION_PIECE_CLEANUP_PER_SP_PER_HOUR=0.1
# data_set_lifecycle_check canary: creates a throwaway data set and terminates it each tick
# (default: enabled on calibration, disabled on mainnet).
# CALIBRATION_DATASET_LIFECYCLE_CHECK_ENABLED=true
CALIBRATION_DATASET_LIFECYCLE_CHECKS_PER_SP_PER_HOUR=1
CALIBRATION_DEAL_JOB_TIMEOUT_SECONDS=360 # 6m: max runtime for deal jobs
CALIBRATION_RETRIEVAL_JOB_TIMEOUT_SECONDS=60 # 1m: max runtime for retrieval jobs
CALIBRATION_SAMPLED_RETRIEVAL_JOB_TIMEOUT_SECONDS=360 # 6m: max runtime for sampled retrieval jobs (pieces up to ~500 MiB)
CALIBRATION_DATA_SET_CREATION_JOB_TIMEOUT_SECONDS=300 # 5m: max runtime for dataset-creation jobs
CALIBRATION_DATA_SET_LIFECYCLE_CHECK_JOB_TIMEOUT_SECONDS=600 # 10m: create + upload + terminate + pdpEndEpoch poll
CALIBRATION_MAX_PIECE_CLEANUP_RUNTIME_SECONDS=3000 # 50m: max runtime for piece cleanup
# Per-network job intervals (seconds)
CALIBRATION_PROVIDERS_REFRESH_INTERVAL_SECONDS=14400 # 4 hours
CALIBRATION_DATA_RETENTION_POLL_INTERVAL_SECONDS=3600 # 1 hour
# Per-network maintenance windows (UTC)
CALIBRATION_MAINTENANCE_WINDOWS_UTC=07:00,22:00
CALIBRATION_MAINTENANCE_WINDOW_MINUTES=20
# Per-network piece cleanup configuration
CALIBRATION_MAX_DATASET_STORAGE_SIZE_BYTES=1048576000
CALIBRATION_TARGET_DATASET_STORAGE_SIZE_BYTES=1
# Per-network pull check configuration
CALIBRATION_PULL_CHECKS_PER_SP_PER_HOUR=1
CALIBRATION_PULL_CHECK_JOB_TIMEOUT_SECONDS=300
CALIBRATION_PULL_CHECK_POLL_INTERVAL_SECONDS=2
CALIBRATION_PULL_CHECK_PIECE_SIZE_BYTES=10485760
CALIBRATION_PULL_PIECE_CLEANUP_INTERVAL_SECONDS=604800
# Per-network SP blocklists
# CALIBRATION_BLOCKED_SP_IDS=1234,5678
# CALIBRATION_BLOCKED_SP_ADDRESSES=0xAbCd...,0x1234...
# Optional full-rate overrides for unapproved providers. Effective only when
# CALIBRATION_USE_ONLY_APPROVED_PROVIDERS=false.
# CALIBRATION_EXPECTED_APPROVED_SP_IDS=1234,5678
# CALIBRATION_EXPECTED_APPROVED_SP_ADDRESSES=0xAbCd...,0x1234...
# -----------------------------------------------------------------------------
# Per-network configuration — MAINNET (uncomment when adding to NETWORKS)
# -----------------------------------------------------------------------------
MAINNET_WALLET_ADDRESS=0x0000000000000000000000000000000000000000
MAINNET_WALLET_PRIVATE_KEY=0x0000000000000000000000000000000000000000000000000000000000000000
# MAINNET_SESSION_KEY_PRIVATE_KEY=
# MAINNET_RPC_URL=
# MAINNET_CLICKHOUSE_URL=
MAINNET_RPC_REQUEST_TIMEOUT_MS=30000
MAINNET_CHECK_DATASET_CREATION_FEES=false
MAINNET_USE_ONLY_APPROVED_PROVIDERS=true
MAINNET_PDP_SUBGRAPH_ENDPOINT=
MAINNET_SUBGRAPH_ENDPOINT=
MAINNET_MIN_NUM_DATASETS_FOR_CHECKS=1
# MAINNET_DEALBOT_DATASET_VERSION=
MAINNET_DEALS_PER_SP_PER_HOUR=1
MAINNET_DATASET_CREATIONS_PER_SP_PER_HOUR=0.01
MAINNET_RETRIEVALS_PER_SP_PER_HOUR=1
MAINNET_SAMPLED_RETRIEVALS_PER_SP_PER_HOUR=
MAINNET_PIECE_CLEANUP_PER_SP_PER_HOUR=0.05
# data_set_lifecycle_check defaults to disabled on mainnet; set true to enable.
# MAINNET_DATASET_LIFECYCLE_CHECK_ENABLED=false
MAINNET_DATASET_LIFECYCLE_CHECKS_PER_SP_PER_HOUR=1
MAINNET_DEAL_JOB_TIMEOUT_SECONDS=360
MAINNET_RETRIEVAL_JOB_TIMEOUT_SECONDS=60
MAINNET_SAMPLED_RETRIEVAL_JOB_TIMEOUT_SECONDS=360
MAINNET_DATA_SET_CREATION_JOB_TIMEOUT_SECONDS=300
MAINNET_DATA_SET_LIFECYCLE_CHECK_JOB_TIMEOUT_SECONDS=600
MAINNET_PROVIDERS_REFRESH_INTERVAL_SECONDS=14400
MAINNET_DATA_RETENTION_POLL_INTERVAL_SECONDS=3600
MAINNET_MAINTENANCE_WINDOWS_UTC=07:00,22:00
MAINNET_MAINTENANCE_WINDOW_MINUTES=20
# MAINNET_BLOCKED_SP_IDS=1234,5678
# MAINNET_BLOCKED_SP_ADDRESSES=0xAbCd...,0x1234...
# Optional full-rate overrides for unapproved providers. Effective only when
# MAINNET_USE_ONLY_APPROVED_PROVIDERS=false.
# MAINNET_EXPECTED_APPROVED_SP_IDS=1234,5678
# MAINNET_EXPECTED_APPROVED_SP_ADDRESSES=0xAbCd...,0x1234...
MAINNET_MAX_DATASET_STORAGE_SIZE_BYTES=25769803776
MAINNET_TARGET_DATASET_STORAGE_SIZE_BYTES=21474836480
MAINNET_MAX_PIECE_CLEANUP_RUNTIME_SECONDS=3000
MAINNET_PULL_CHECKS_PER_SP_PER_HOUR=1
MAINNET_PULL_CHECK_JOB_TIMEOUT_SECONDS=300
MAINNET_PULL_CHECK_POLL_INTERVAL_SECONDS=2
MAINNET_PULL_CHECK_PIECE_SIZE_BYTES=10485760
MAINNET_PULL_PIECE_CLEANUP_INTERVAL_SECONDS=604800
# -----------------------------------------------------------------------------
# Jobs (pg-boss)
# -----------------------------------------------------------------------------
# See docs/environment-variables.md for details, limits, and sizing guidance.
PG_BOSS_LOCAL_CONCURRENCY=20
JOB_SCHEDULER_POLL_SECONDS=120
JOB_WORKER_POLL_SECONDS=60
JOB_CATCHUP_MAX_ENQUEUE=10
JOB_SCHEDULE_PHASE_SECONDS=0
JOB_ENQUEUE_JITTER_SECONDS=0
IPFS_BLOCK_FETCH_CONCURRENCY=6 # parallel block fetches during IPFS DAG validation
SAMPLED_RETRIEVAL_BLOCK_SAMPLE_COUNT=5 # CAR blocks sampled for IPNI / block-fetch validation
DEALBOT_PGBOSS_POOL_MAX=1
DEALBOT_PGBOSS_SCHEDULER_ENABLED=true
# -----------------------------------------------------------------------------
# Pull Piece
# -----------------------------------------------------------------------------
PULL_PIECE_MAX_CONCURRENT_STREAMS=50 # Max concurrent streams across all pieces (DoS protection)
PULL_PIECE_MAX_STREAMS_PER_CID=3 # Max concurrent streams per pieceCid (prevents spam of single piece)
# -----------------------------------------------------------------------------
# ClickHouse batching (shared by every configured network)
# -----------------------------------------------------------------------------
CLICKHOUSE_BATCH_SIZE=
CLICKHOUSE_FLUSH_INTERVAL_MS=
CLICKHOUSE_MAX_BUFFER_SIZE=
# -----------------------------------------------------------------------------
# Prometheus metrics
# -----------------------------------------------------------------------------
PROMETHEUS_WALLET_BALANCE_TTL_SECONDS=3600 # refresh cache every 1h
PROMETHEUS_WALLET_BALANCE_ERROR_COOLDOWN_SECONDS=60 # cooldown after fetch failure
# -----------------------------------------------------------------------------
# Dataset generation
# -----------------------------------------------------------------------------
DEALBOT_LOCAL_DATASETS_PATH=./datasets
RANDOM_PIECE_SIZES=10485760 # 10 MiB (comma-separated list supported)
# -----------------------------------------------------------------------------
# HTTP timeouts (milliseconds)
# -----------------------------------------------------------------------------
CONNECT_TIMEOUT_MS=10000 # 10s: initial connection timeout
HTTP_REQUEST_TIMEOUT_MS=240000 # 4m: total transfer timeout (HTTP/1.1)
HTTP2_REQUEST_TIMEOUT_MS=240000 # 4m: total transfer timeout (HTTP/2)
IPNI_VERIFICATION_TIMEOUT_MS=60000 # 60s: IPNI propagation wait
IPNI_VERIFICATION_POLLING_MS=2000 # 2s: IPNI polling interval