Skip to content

v1.0.11.7-testnet — silent-hang hardening (rollup: v1.0.11.5 + v1.0.11.6 + v1.0.11.7)

Latest

Choose a tag to compare

@ghostrider1092 ghostrider1092 released this 20 Jun 20:17
· 67 commits to main since this release
v1.0.11.7-testnet
021350c

🚀 How to use this release (new operators start here)

# 1. Download the Linux x86_64 binary (attached below)
wget https://github.com/ghostrider1092/Coincync-Testnet-/releases/download/v1.0.11.7-testnet/coincync-node-linux-x86_64-v1.0.11.7-testnet
chmod +x coincync-node-linux-x86_64-v1.0.11.7-testnet
mv coincync-node-linux-x86_64-v1.0.11.7-testnet coincync-node

# 2. Verify SHA-256 matches the published hash (see below)
sha256sum coincync-node

# 3. Run it (DNS bootstrap is live — no --addnode flags needed)
./coincync-node --network testnet

# 4. Verify it's syncing (in another shell, ~60s later)
curl -s http://127.0.0.1:28081/rpc/testnet \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"get_info"}'
# Expect: peer_count >= 3, height climbing toward current tip (~3200+)

Want to run a testnet miner? This is the single most useful thing community members can do right now — there's currently one miner on the network and any second miner eliminates the single-point-of-failure entirely. See the Run a testnet miner section of the README, or DM ghostrider1092 on Discord (#mining channel).

Need to bypass DNS? Some networks/ISPs block or poison DNS. Belt-and-suspenders form:

./coincync-node --network testnet \
  --addnode 66.135.23.193:28080 \
  --addnode 140.82.57.168:28080 \
  --addnode 45.32.251.6:28080 \
  --addnode 207.148.6.50:28080 \
  --addnode 173.199.93.21:28080

Live chain status (verify before bootstrapping): api.coincync.network/rpc/testnet (POST a get_info JSON-RPC) · explorer.coincync.network.


Rollup release — v1.0.11.5 + v1.0.11.6 + v1.0.11.7

This release bundles three hardening passes shipped over the prior 24 hours. v1.0.11.5 and v1.0.11.6 git tags exist on the repo but no GitHub Release was cut for them — this one covers all three. Operators can deploy this binary directly; it supersedes both intermediate tags.

Binary attached: coincync-node-linux-x86_64-v1.0.11.7-testnet
SHA-256: 26916e5d18daffcfa73ad52a01b929a61b300d7785cb9b514a4f83dcaef08d94
Internal version string: coincync-node 1.0.12 (Cargo.toml semver remains 1.0.12 as v1.0.11 line tracks the v1.0.12 backport schedule).


v1.0.11.5-testnet — broadcast stall fix (e80a2df cherry-pick)

Closes the recurring ~640-second stall pattern observed every 1-2 hours on v1.0.11.4 fleet binaries (11 stalls in one 13-hour session). Root cause: stale peer height claims pinned best_known_height above local, blocking the broadcast path indefinitely. The fix prunes peer-height entries the moment local advances past them, exactly mirroring Monero's cryptonote_protocol_handler per-peer-remaining-work-collapse semantics.

Reference impl: Monero cryptonote_protocol_handler::process_payload_sync_data.


v1.0.11.6-testnet — full sync state-machine refactor

Wholesale replacement of src/network/sync.rs (+634/-111 lines) from the refactor/sync-state-model work. Closes the underlying V1+V2+V4+I8+I10 violations documented in docs/architecture/sync-state-machine.md:

  • V1best_known_height was monotonic-grow; recompute_best_known() now re-derives from max(local_height, max(peer_heights.values())) on every state mutation. Field can now SHRINK when peers leave (pattern: Bitcoin Core pindexBestHeader).
  • V2 — stale peer-height pruning is now applied in BOTH set_local_tip AND update_peer_height_for (strictly stronger than the v1.0.11.5 narrower fix).
  • V4downloading / download_timestamps / pending_requests are now atomically synced via unified record_request (Bitcoin Core mapBlocksInFlight pattern).
  • I8 (corrected)downloading ≡ download_timestamps; pending_requests ⊆ downloading. Enforced at every requeue/recover path.
  • I10 (refined)Synced state tolerates ≤16 in-flight blocks for InvBlock tip-catch-up (matches Bitcoin Core's IsInitialBlockDownload() carve-out); pending_headers must be empty. All requeue paths (requeue_failed, get_blocks_to_retry, recover_stuck_downloads, on_peer_disconnected) transition Synced → Blocks when they push to pending_headers.
  • Phase 2a (V3 partial) — Internal peer_difficulties + best_known_difficulty model added (advisory only; wire-format change for cumulative-work peer selection deferred to v1.0.12 hard fork).

Tests: 10 sync unit tests (including a 2,048-case proptest harness across 12 SyncEvent variants), 646/646 lib tests pass.


v1.0.11.7-testnet — silent-hang hardening trio (NEW in this release)

Targets the silent-process-hang class observed on 2026-06-19 (3 of 5 fleet nodes had their maintenance loop die silently while systemd kept reporting active for 17 hours).

  • C1 — Maintenance task supervisor. The maintenance loop now runs inside a JoinHandle; a sibling watcher logs CRITICAL on any termination path (clean exit, panic, abort). Previously a panic inside any .await would silently terminate the loop without alerting anyone. Reference: zebrad actor-model wrappers.
  • C2 — 30-second heartbeat. Single INFO line emitted every 30s with tick counter + peer counts:
    [INFO node::heartbeat] maintenance tick=N peers=M outbound=K
    
    External watchdogs (or journalctl -fu coincync-node | grep heartbeat) detect a silent freeze within ~60s instead of the 17 hours observed in the production incident.
  • C2b — biased; select! in maintenance. ping_interval is now polled first under load so PEER_TIMEOUT=300s is never starved by the higher-frequency cleanup_interval.
  • C3 — shadow_evict_invalid in spawn_blocking. Moves the synchronous parking_lot::RwLock contention off the tokio worker thread. Previously held the chain RwLock for the duration of a mempool walk, blocking other tokio tasks on the same worker. Bitcoin Core's MaybeUpdateMempoolForReorg uses the same separate-thread pattern.

Tests: 646/646 lib tests pass on this branch.


Combined deploy checklist (operators)

  1. wget or curl the attached coincync-node-linux-x86_64-v1.0.11.7-testnet.
  2. sha256sum and verify against 26916e5d18daffcfa73ad52a01b929a61b300d7785cb9b514a4f83dcaef08d94.
  3. systemctl stop coincync-node (and coincync-rig if you mine on the same box — restart it AFTER node is back up; the rig depends on node RPC).
  4. install -m 755 ./coincync-node-linux-x86_64-v1.0.11.7-testnet /usr/local/bin/coincync-node
  5. systemctl start coincync-node
  6. Within ~30 seconds you should see in the journal:
    INFO node::heartbeat maintenance tick=1 peers=N outbound=M
    
    If you don't see a heartbeat line within 60 seconds, the maintenance task didn't start — check journalctl -u coincync-node -n 50 for a CRITICAL node::supervisor line.

What is NOT in this release

The wider refactor/sync-state-model branch carries 18 additional audit-fix commits (RPC bearer-hash, inbound-eviction module, ratelimit wire-in, TLS gate, key rotation versioning, mempool atomic-write, etc.). Those have API drift against the v1.0.11 fleet branch and need individual back-porting — folded into the v1.0.12 hard-fork preparation cycle (activation target ~2026-07-01) rather than rushed into the v1.0.11 line.

🤖 Generated with Claude Code