<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/tests/unit/Makefile, branch feature/tollgate-core-v2</title>
<subtitle>[no description]</subtitle>
<id>https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/atom?h=feature%2Ftollgate-core-v2</id>
<link rel='self' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/atom?h=feature%2Ftollgate-core-v2'/>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/'/>
<updated>2026-05-28T12:24:44+00:00</updated>
<entry>
<title>feat: implement 3 missing API functions + test + fix plan</title>
<updated>2026-05-28T12:24:44+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-28T12:24:44+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=96589ce5d0bc49a3f6b006b0bb443b81d1dd8e03'/>
<id>urn:sha1:96589ce5d0bc49a3f6b006b0bb443b81d1dd8e03</id>
<content type='text'>
- tollgate_core_on_share_accepted(): tracks hashrate, creates/extends
  mining sessions, calls platform callback
- tollgate_core_calc_hashprice(): returns nbits-derived hashprice or
  manual override from platform
- tollgate_core_get_mining_status_json(): returns proxy stats as JSON
- test_mining_api: 19 assertions covering all 3 functions
- PLAN_BITAXE_FIXES.md: comprehensive fix plan with checklist
</content>
</entry>
<entry>
<title>test: add relay_types, sub_manager, deletion unit tests</title>
<updated>2026-05-23T17:54:07+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-23T17:54:07+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=e40645e07e4076610abc8270fba421dbdd8fc217'/>
<id>urn:sha1:e40645e07e4076610abc8270fba421dbdd8fc217</id>
<content type='text'>
- test_relay_types: hex_to_bytes/bytes_to_hex with known vectors,
  roundtrip, edge cases (17 assertions)
- test_sub_manager: hex_prefix_match, filter_matches_event for
  NIP-01 kind/author/since/until filtering (23 assertions)
- test_deletion: extract_event_id_field, extract_pubkey_hex with
  valid/invalid JSON vectors (14 assertions)
- All 28 test files pass, 0 failures
</content>
</entry>
<entry>
<title>Phase 8c-8f: Extract portal, stratum_client, mint_health, client into tollgate_core</title>
<updated>2026-05-23T09:56:52+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-23T09:56:52+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=be4d490e96de3d20cc6c9921f09534cde0ca0765'/>
<id>urn:sha1:be4d490e96de3d20cc6c9921f09534cde0ca0765</id>
<content type='text'>
New component modules:
- tollgate_core_portal.c/h: template rendering, usage calc, captive URI detection
- tollgate_core_stratum_client.c/h: Stratum V1 JSON protocol parsing, message building
- tollgate_core_mint_health.c/h: mint health state tracking, recovery threshold logic
- tollgate_core_client.c/h: discovery/session/usage JSON parsing, renewal check, price calc

Main shims updated to delegate pure logic to component:
- captive_portal.c: uses tollgate_core_portal_render(), format_usage(), is_captive_uri()
- stratum_client.c: uses tollgate_core_stratum_parse_notify/build_*()
- mint_health.c: uses tollgate_core_mint_health_update/is_reachable/mark_unreachable()
- tollgate_client.c: uses tollgate_core_client_parse_*/should_renew/calc_price_per_min()

4 new unit tests (test_portal, test_stratum_client, test_mint_health_core, test_client_core)
All 25 unit tests pass. ESP-IDF build passes (68% partition free).
</content>
</entry>
<entry>
<title>Phase 8a-8b: extract beacon_price and market into component</title>
<updated>2026-05-23T00:54:33+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-23T00:54:33+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=0642900ae44d84cfe24abe6911dbed4cd31ab8ad'/>
<id>urn:sha1:0642900ae44d84cfe24abe6911dbed4cd31ab8ad</id>
<content type='text'>
- tollgate_core_beacon.c/h: pure logic (hash_mint, hash_npub, build_ie)
  with platform-agnostic tollgate_beacon_config_t input struct
- tollgate_core_market.c/h: market table logic (parse_ie, find_cheapest,
  update_ssid) with platform callbacks for time
- main/beacon_price.c: thin shim delegates to component, WiFi IE start/stop
- main/market.h: typedef aliases to component types
- All 21 unit tests pass, ESP-IDF build passes
- Hardware smoke test: 5/6 pass (AP, portal, grant/revoke, firewall)
- Market scanner discovers other TollGates via vendor IEs on hardware
</content>
</entry>
<entry>
<title>Phase 7: eliminate shims - consumer files use component headers directly</title>
<updated>2026-05-23T00:02:22+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-23T00:02:22+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=5140a30be35aaf3574efce9193549f18524ce46e'/>
<id>urn:sha1:5140a30be35aaf3574efce9193549f18524ce46e</id>
<content type='text'>
- Deleted standalone shims: session.c/h, cashu.c/h, mining_payment.c/h, firewall.c/h
- Updated captive_portal.c, tollgate_api.c, tollgate_main.c, mcp_handler.c,
  cvm_server.c, sw_miner.c, stratum_client.c to include component headers
- Moved tollgate_ip4_canforward_filter() lwIP hook into tollgate_main.c
- Fixed all unit tests to use component API (test_cashu, test_session,
  test_mining_payment, test_stratum_proxy, test_session_payment_method,
  test_firewall_sandbox, test_mcp_handler)
- Removed deleted source files from Makefile targets
- All 21 unit tests pass, ESP-IDF build passes
</content>
</entry>
<entry>
<title>Phase 5: Wire main/ shims to components/tollgate_core</title>
<updated>2026-05-22T22:40:28+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-22T22:40:28+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=851801f50f1282ab1db5f8a241dbd245f59e447e'/>
<id>urn:sha1:851801f50f1282ab1db5f8a241dbd245f59e447e</id>
<content type='text'>
- session.c/h: thin shim casting session_t* &lt;-&gt; tg_session_t*, delegates to tollgate_core_session_*
- firewall.c/h: keeps ESP-specific lwIP hooks, delegates allowlist to tollgate_core_fw_*
- cashu.c/h: shim delegates to tollgate_core_cashu_*, multi-mint via config directly
- mining_payment.c: shim delegates to tollgate_core_mining_*
- tollgate_main.c: calls tollgate_core_init(tollgate_esp_get_platform(), ap_ip) in start_services()
- tollgate_esp: removed target_sources for standalone sources, depends on tollgate_core component
- tollgate_core component: added tollgate_core_get_platform(), tg_payment_method_t enum
- Unit tests: updated Makefile for component source compilation, all 22 tests pass
- Hardware verified: Board A boots, AP visible, 5/6 smoke tests pass (internet test needs upstream WiFi)
</content>
</entry>
<entry>
<title>chore: fix unit test build rules, add relay_selector+relay_validator tests, persist core extraction plan</title>
<updated>2026-05-22T20:48:41+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-22T20:48:41+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=10c69b0ddc34a1fafada3f8b68a622b4aa2bea77'/>
<id>urn:sha1:10c69b0ddc34a1fafada3f8b68a622b4aa2bea77</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: resolve merge conflicts + test build fixes</title>
<updated>2026-05-19T09:04:12+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-19T09:04:12+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=55917e09b186c44afc53fc0dd2d3635b34febcd8'/>
<id>urn:sha1:55917e09b186c44afc53fc0dd2d3635b34febcd8</id>
<content type='text'>
- config.h: remove duplicate nostr_sync fields
- Makefile: add mint_health stub for test_session_payment_method
- test_tollgate_client_mining: inline market_t stub to avoid dependency cascade
- CMakeLists: add negentropy_adapter.c + esp_littlefs + negentropy REQUIRES
</content>
</entry>
<entry>
<title>feat(mining): Bitcoin mining-for-bandwidth payment system</title>
<updated>2026-05-19T08:55:18+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-19T08:55:18+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=e366ceb336550a72c76efea4c98a2a08cca27bce'/>
<id>urn:sha1:e366ceb336550a72c76efea4c98a2a08cca27bce</id>
<content type='text'>
New modules:
- mining_payment.c/h: hashprice calc (nbits-&gt;difficulty-&gt;sat/GH/s/day),
  share validation, client stats, allotment conversion (ms + bytes)
- stratum_client.c/h: SV1 upstream pool connection (subscribe/authorize/submit)
- stratum_proxy.c/h: Local SV1 TCP server for downstream miners, job broadcast
- sw_miner.c/h: Software SHA256d miner (ESP32 CPU fallback)
- asic_miner.c/h: ASIC detection stub (BM1366/BM1368 SPI)

Config:
- config.h/c: mining_payout_mode_t enum (auto/pool/upstream/proxy_only),
  stratum pool settings, mining port, hashprice override, sandbox mint access
- Defaults fill nostr_seed_relays (8/8) and nostr_relays (4/4) with fast relays

Integration into existing modules:
- session.h/c: payment_method_t enum (CASHU/MINING/BYTES)
- firewall.h/c: firewall_set_mining_port(), firewall_set_sandbox_mint_access()
- tollgate_api.c: GET /mining/job, POST /mining/share, GET /mining/stats
- tollgate_client.h/c: TG_CLIENT_MINING state, mining discovery tag parsing
- tollgate_main.c: mining init in start_services(), stratum_client_tick() in loop
- captive_portal.c: tabbed Cashu/Mine UI with live hashrate polling

Unit tests (69 new assertions across 4 suites):
- test_mining_payment (23 tests): nbits-&gt;difficulty, hashprice, client stats, allotment
- test_stratum_proxy (21 tests): job set/get, stats, type validation
- test_session_payment_method (12 tests): PAYMENT_METHOD enum, bytes/cashu methods
- test_tollgate_client_mining (20 tests): mining tag parsing, discovery struct
- test_firewall_sandbox (16 tests): client grant/revoke, max clients, setters

Enhanced test stubs:
- BaseType_t/pdPASS in freertos/task.h
- lwip: sockets.h, etharp.h, prot/ip.h, prot/ip4.h, prot/tcp.h, netif.h
- dns_server.h, esp_wifi_ap_get_sta_list.h

Build fixes:
- cvm_server.c: replace esp_timer_get_time() with xTaskGetTickCount(),
  fix process_relay_message() 3-arg call to 2-arg, add WS keepalive ping
- stratum_proxy.c: widen task_name buffer 16-&gt;20
- sw_miner.c: add missing #include esp_random.h
- nucula_src: save_proofs() moved to public in wallet.hpp

Nostr relay updates:
- nostr_seed_relays: +relay.anzenkodo.workers.dev, +nostr.koning-degraaf.nl,
  +knostr.neutrine.com, +nostr.einundzwanzig.space (8/8 slots)
- nostr_relays: +relay.anzenkodo.workers.dev, +nostr.koning-degraaf.nl (4/4 slots)

Squash-merge of feature/mining-payment (5 commits: c75230e..9d98ba1)
</content>
</entry>
<entry>
<title>feat: multi-mint wallet with health tracking, WPA auto-detect, display gating</title>
<updated>2026-05-19T08:01:08+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-19T07:51:25+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=eeba74a4a1c011e85e33dea4252b381e35a64ea4'/>
<id>urn:sha1:eeba74a4a1c011e85e33dea4252b381e35a64ea4</id>
<content type='text'>
Squash merge of feature/multi-mint-support (21 commits):

Multi-mint wallet:
- Accept payments from 4 mints: minibits, coinos, 21mint, lnvoltz
- Periodic health probing (300s interval, 3 recovery threshold)
- Multi-wallet init with nucula_wallet_init_multi()
- /mints and /wallet API endpoints

WPA auto-detect:
- wifi_auth_mode config field (default WPA2, supports WPA3)
- Runtime mapping to wifi_auth_mode_t in STA config

Display gating:
- display_enabled config field (default true)
- Guards display_init/display_update per-board

Bug fixes:
- 3s delay before service start prevents lwip mem_free assertion
- Real npub in discovery (identity_get()-&gt;npub_hex)
- Health probe interval 300s (production value)
- Duplicate services_start_task call removed
- UTF-8 arrow replaced with ASCII in log message

Tests: 61+14 unit tests passing, firmware builds clean
</content>
</entry>
</feed>
