← Back to Dashboard
Last updated: June 30, 2026. Mainnet launched 26 Jun 2026 (block 1170+). Deep code audit on 29 Jun found and fixed 12 bugs (5 critical, 5 high, 2 medium). 3-node network active (Indonesia + USA + Singapore) with DNS seed live. See also the changelog and mainnet checklist.
✅ Mainnet Live — 26 Jun 2026 (1170+ blocks)
✅ Mainnet genesis block — hash b4a26aef..., nBits 0x2001a41a, timestamp 26 Jun 2026 (Unix: 1782474812)
✅ 3-node network — Indonesia (main VPS) + USA (KC) + Singapore (SG), all mining 24/7 via systemd
✅ DNS seed live — seed.assentian.network, seed2.assentian.network, seed3.assentian.network (round-robin 3 IP)
✅ Send/receive SNTI — wallet-to-wallet transactions verified end-to-end on mainnet
✅ Web wallet live — assentian.network/wallet/ (custodial, Flask + SQLite)
✅ Block explorer — assentian.network/explorer/, API /api/ proxied via nginx
✅ SSL + domain — assentian.network (Certbot, Let's Encrypt)
✅ Deep Code Audit — 29 Jun 2026 (12 bugs found & fixed)
[Critical] HKDF 32-byte — output is now 96 bytes (SEED_BYTES) instead of 32. Fix: pouw_v2_keyder.h
[Critical] GetRemainingSignatures underflow — guard leaf_index >= 1024 returns 0. Fix: xmss_keystore.h
[Critical] Preimage v3 block 200 — code verified: nPoUWv3StartHeight=200 identical in mining.cpp and validation.cpp. No actual bug.
[Critical] WOTS+ reuse wallet locked — wallet.cpp now rejects signing while the wallet is locked. Fix: wallet.cpp:2193-2194
[Critical] sm_buf_size hardcoded — now computed dynamically from params.sig_bytes. Fix: xmss_state.h, xmss_bridge.cpp
[High] Wrong FSL offset — seed extraction now reads SK_SEED+SK_PRF+PUB_SEED separately. Fix: mining.cpp:307-312
[High] nPoUWMaxSigSize not enforced — size check added before Deserialize. Fix: validation.cpp
[High] IsXMSSScript off-by-onescript.size() == 66 (not 65). Fix: xmss_signer.cpp:417
[High] Weak signature check — added verification that the recovered message == original hash. Fix: xmss_bridge.cpp
[High] Duplicate chain_id — regtest nXMSSChainId=4 (was 3, same as signet). Fix: chainparams.cpp
[Medium] min_target underflow — clamped to 1 if the division result is 0. Fix: pow.cpp:101
[Medium] Wrong comment in GetBlockSubsidy — "2,100,000 blocks (~4 years at 60s/block)". Fix: validation.cpp:1707
✅ PoUW V2 Difficulty + RPC Fix — 29 Jun 2026
Root cause: burst mining at blocks 286–296 (one XMSS tree reused for 11 blocks in ~2 seconds) → EMA jumped 2× → target became too tight (~14,000 trees/block)
✅ EMA upper clamp 4× → 20× — recovery ratio 1.3× → 2.9× per slow block. Fix: pouw_v2.h
✅ Stuck-chain detection — elapsed > 10×target → force 20× EMA recovery. Fix: pow.cpp
✅ PermittedDifficultyTransition max swing 4× → 20×. Fix: pow.cpp
✅ POUW_MAX_TREES_PER_CALL=20 — miner yields every ~50s, RPC stays responsive. Fix: rpc/mining.cpp
✅ Chain recovered: block 296 → 786+ with no manual intervention
Verified (20 Jun) — pre-mainnet baseline
OP_XMSS_CHECKSIG — real mathematical verification at the consensus layer, not a stub
✅ XMSS state save/load — survives a clean restart and a sudden kill -9
✅ Key retirement (one-time address) — a second sign attempt with the same key is correctly rejected
CheckPoUW() fully reviewed — real XMSS verification at the consensus layer
✅ Minimum sig length — exact-match 2500 bytes, stricter than the audit's recommendation
✅ Sighash-v2 — cross-index recombination attack gap CLOSED. SHA256(sighash_v1 || leaf_index_BE)
✅ XMSS state encryption at rest — verified end-to-end (locked→ismine:false, unlock→automatic decrypt)
✅ Multi-node sync — 110/110 blocks, identical tip hash. P2P relay verified (Phase 6.9)
✅ External mining proven — separate VM, built from scratch, public internet, block accepted and propagated