diff options
| author | Your Name <you@example.com> | 2026-05-19 04:13:11 +0530 |
|---|---|---|
| committer | Your Name <you@example.com> | 2026-05-19 04:13:11 +0530 |
| commit | beb73a2eeacf7dbe5e292ce6e26a95a933808267 (patch) | |
| tree | 3a9b711e1475c09ed544b96358587df3e5362555 /main/config.c | |
| parent | c75230e551a778408b2e370b208aff76b74c6560 (diff) | |
feat(mining): integrate mining subsystem into existing modules
- CMakeLists.txt: add 6 mining sources + tcp_transport dependency
- config.h/c: mining_payout_mode_t enum, mining config fields, JSON parsing
- tollgate_main.c: mining init in start_services(), stratum_client_tick in main loop
- tollgate_api.c: GET /mining/job, POST /mining/share, GET /mining/stats endpoints
- session.h/c: payment_method_t enum (CASHU/MINING/BYTES)
- firewall.h/c: sandbox allowlist for mining port + mint URLs
- tollgate_client.h/c: TG_CLIENT_MINING state, mining discovery tag parsing
- captive_portal.c: tabbed UI with Cashu/Mine tabs, live hashrate polling
Diffstat (limited to 'main/config.c')
| -rw-r--r-- | main/config.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/main/config.c b/main/config.c index b991991..e27a39b 100644 --- a/main/config.c +++ b/main/config.c | |||
| @@ -37,6 +37,11 @@ esp_err_t tollgate_config_init(void) | |||
| 37 | strncpy(g_config.cvm_relays, "wss://relay.primal.net", sizeof(g_config.cvm_relays) - 1); | 37 | strncpy(g_config.cvm_relays, "wss://relay.primal.net", sizeof(g_config.cvm_relays) - 1); |
| 38 | g_config.nostr_sync_interval_s = 1800; | 38 | g_config.nostr_sync_interval_s = 1800; |
| 39 | g_config.nostr_fallback_sync_interval_s = 21600; | 39 | g_config.nostr_fallback_sync_interval_s = 21600; |
| 40 | g_config.mining_enabled = false; | ||
| 41 | g_config.mining_payout_mode = MINING_PAYOUT_AUTO; | ||
| 42 | g_config.stratum_port = 3333; | ||
| 43 | g_config.mining_port = 3334; | ||
| 44 | g_config.mining_sandbox_mint_access = true; | ||
| 40 | 45 | ||
| 41 | esp_vfs_spiffs_conf_t conf = { | 46 | esp_vfs_spiffs_conf_t conf = { |
| 42 | .base_path = "/spiffs", | 47 | .base_path = "/spiffs", |
| @@ -279,6 +284,46 @@ esp_err_t tollgate_config_init(void) | |||
| 279 | cJSON *fallback_interval = cJSON_GetObjectItem(root, "nostr_fallback_sync_interval_s"); | 284 | cJSON *fallback_interval = cJSON_GetObjectItem(root, "nostr_fallback_sync_interval_s"); |
| 280 | if (fallback_interval) g_config.nostr_fallback_sync_interval_s = fallback_interval->valueint; | 285 | if (fallback_interval) g_config.nostr_fallback_sync_interval_s = fallback_interval->valueint; |
| 281 | 286 | ||
| 287 | cJSON *mining = cJSON_GetObjectItem(root, "mining"); | ||
| 288 | if (mining && cJSON_IsObject(mining)) { | ||
| 289 | cJSON *m_en = cJSON_GetObjectItem(mining, "enabled"); | ||
| 290 | if (m_en && cJSON_IsBool(m_en)) g_config.mining_enabled = cJSON_IsTrue(m_en); | ||
| 291 | |||
| 292 | cJSON *m_mode = cJSON_GetObjectItem(mining, "payout_mode"); | ||
| 293 | if (m_mode && cJSON_IsString(m_mode)) { | ||
| 294 | if (strcmp(m_mode->valuestring, "pool") == 0) g_config.mining_payout_mode = MINING_PAYOUT_POOL; | ||
| 295 | else if (strcmp(m_mode->valuestring, "upstream") == 0) g_config.mining_payout_mode = MINING_PAYOUT_UPSTREAM; | ||
| 296 | else if (strcmp(m_mode->valuestring, "proxy_only") == 0) g_config.mining_payout_mode = MINING_PAYOUT_PROXY_ONLY; | ||
| 297 | } | ||
| 298 | |||
| 299 | cJSON *m_host = cJSON_GetObjectItem(mining, "stratum_host"); | ||
| 300 | if (m_host && cJSON_IsString(m_host)) strncpy(g_config.stratum_host, m_host->valuestring, sizeof(g_config.stratum_host) - 1); | ||
| 301 | |||
| 302 | cJSON *m_port = cJSON_GetObjectItem(mining, "stratum_port"); | ||
| 303 | if (m_port) g_config.stratum_port = (uint16_t)m_port->valueint; | ||
| 304 | |||
| 305 | cJSON *m_user = cJSON_GetObjectItem(mining, "stratum_user"); | ||
| 306 | if (m_user && cJSON_IsString(m_user)) strncpy(g_config.stratum_user, m_user->valuestring, sizeof(g_config.stratum_user) - 1); | ||
| 307 | |||
| 308 | cJSON *m_pass = cJSON_GetObjectItem(mining, "stratum_pass"); | ||
| 309 | if (m_pass && cJSON_IsString(m_pass)) strncpy(g_config.stratum_pass, m_pass->valuestring, sizeof(g_config.stratum_pass) - 1); | ||
| 310 | |||
| 311 | cJSON *m_fb_host = cJSON_GetObjectItem(mining, "stratum_fallback_host"); | ||
| 312 | if (m_fb_host && cJSON_IsString(m_fb_host)) strncpy(g_config.stratum_fallback_host, m_fb_host->valuestring, sizeof(g_config.stratum_fallback_host) - 1); | ||
| 313 | |||
| 314 | cJSON *m_fb_port = cJSON_GetObjectItem(mining, "stratum_fallback_port"); | ||
| 315 | if (m_fb_port) g_config.stratum_fallback_port = (uint16_t)m_fb_port->valueint; | ||
| 316 | |||
| 317 | cJSON *m_mport = cJSON_GetObjectItem(mining, "mining_port"); | ||
| 318 | if (m_mport) g_config.mining_port = (uint16_t)m_mport->valueint; | ||
| 319 | |||
| 320 | cJSON *m_hp = cJSON_GetObjectItem(mining, "hashprice_sats_per_ghs_day"); | ||
| 321 | if (m_hp) g_config.hashprice_sats_per_ghs_day = (uint64_t)m_hp->valuedouble; | ||
| 322 | |||
| 323 | cJSON *m_sandbox = cJSON_GetObjectItem(mining, "sandbox_mint_access"); | ||
| 324 | if (m_sandbox && cJSON_IsBool(m_sandbox)) g_config.mining_sandbox_mint_access = cJSON_IsTrue(m_sandbox); | ||
| 325 | } | ||
| 326 | |||
| 282 | cJSON_Delete(root); | 327 | cJSON_Delete(root); |
| 283 | 328 | ||
| 284 | if (g_config.payout.recipient_count == 0) { | 329 | if (g_config.payout.recipient_count == 0) { |