Diagnosing a stuck node — the field guide
A common pattern in #issues and #support: “my node was running fine, now it isn’t syncing / can’t connect / says X.” This thread documents the checks to run before asking for help, in order, so you (and we) can resolve faster.
Always include OS + INTcoin version with any help request.
uname -a(Linux/macOS) orwinver(Windows) +intcoin-cli getnetworkinfo | grep -E "subversion|protocolversion". Most diagnostic time is wasted re-asking for these basics.
Stage 1 — Is the daemon actually running?
# Linux / macOS
intcoin-cli getblockchaininfo | head -5
# or
ps aux | grep intcoind
# Windows
tasklist | findstr intcoind
Expected output: a blocks: <number> line. If you get error: Could not connect to server 127.0.0.1:2211, the daemon is dead.
Common causes of a dead daemon:
- OOM kill during RandomX dataset init (~2 GB needed, light mode ~256 MB). Check
dmesg | tail -30forKilled process intcoindlines. - Disk full. Mainnet datadir ~5–10 GB and growing.
df -hon the datadir mount. - Crash on shutdown left a stale lock file. Check
~/.intcoin/.lock— if present without a running daemon, delete it:rm ~/.intcoin/.lock. - Datadir corruption after ungraceful shutdown. Try
intcoind -reindex-chainstateto rebuild the UTXO set without re-downloading blocks.
Stage 2 — Is the daemon talking to peers?
intcoin-cli getnetworkinfo | jq '{version, subversion, protocolversion, connections, networks: [.networks[] | select(.reachable) | .name]}'
intcoin-cli getpeerinfo | jq '[.[] | {addr, subver, protover: .version, conntime_ago: ((now - .conntime) | floor)}]'
Expected: ≥ 1 connection, peers’ subver matching your major version (/INTcoin Core:1.0.6.1/ etc.).
If connections: 0:
- Outbound blocked. Most home networks let intcoind dial out; corporate / hotel / mobile networks often don’t. Test:
nc -zv seed1.international-coin.org 2210should printsucceeded. - DNS seeds unreachable. Daemon falls back to hardcoded seed IPs (US
74.208.48.149, EU82.165.126.194, UK51.155.97.192). If even these are unreachable, you have an upstream firewall. - Wrong network selected. A
-testnetflag on a mainnet datadir won’t find peers. Checkgetblockchaininfo.chain— it should match what you intended. - Protocol-version mismatch. v1.0.6.1 refuses v1.0.6 peers and earlier. If your subver is
1.0.5and you can only see1.0.6.1peers in the wild, you’ll get zero connections. Upgrade.
Stage 3 — Is the chain actually advancing?
intcoin-cli getblockchaininfo | jq '{blocks, headers, time, time_lag_min: ((now - .time) / 60 | floor), verificationprogress}'
blocks == headers and time_lag_min < 10 minutes means you’re caught up. Common pathologies:
headers > blockssignificantly. You’ve fetched headers but blocks aren’t downloading. Either no peers have the blocks (unlikely) or your daemon is bandwidth-throttled. Checkgetnettotals.uploadtarget.blocksnot advancing for ≥ 30 min. Either the network is stalled (rare; check the public dashboard at Grafana) or you’re on a stuck local fork. Tryintcoin-cli reconsiderblock <bestblockhash>to reapply validation.verificationprogress < 1.0for hours. Initial Block Download (IBD) — normal for a fresh node, takes 30 min – 2 hours depending on disk speed and network.- Time skew. If your system clock is wrong by > 2 hours, your daemon will reject peer headers as “time too far in future” or “time too old” silently. Check
date -uagainst an NTP source. Runsudo systemctl restart systemd-timesyncd(or ntpd / chrony) if drift is real.
Stage 4 — Is the wallet healthy?
intcoin-cli getwalletinfo
intcoin-cli getbalance
intcoin-cli listunspent 0 9999999 | jq 'length'
Common pathologies:
balance: 0after mining. Coinbase rewards take 100 confirmations to mature.getwalletinfo.immature_balanceshows the maturing portion. Wait.Wallet not found. The daemon’s auto-open path looks atwallets/default/only. Custom names needintcoin-cli loadwallet "<name>"after daemon start.Failed to open wallet: error 2=WalletError::KEY_NOT_FOUND. Wallet’s LevelDB is missing thehdmasterkey — usually a partial-init from a crashedcreatewallet. Move the brokendefault/aside, restorewallet from your seed.- Coinbase rewards going to a different address than expected. The miner uses whatever
-address=the unit file specifies, NOT the wallet’s “default” address. Checksystemctl cat intcoin-miner(Linux) or the miner CLI args you launched with.
Stage 5 — When to ask for help
After the above, if still broken, post in #issues with:
- OS: <output of uname -a or winver>
- Version: <output of intcoind --version>
- Network: <mainnet / testnet / signet / regtest>
- What you ran: <exact command>
- What happened: <full error message OR last 30 lines of debug.log>
- What you expected: <the expected behaviour>
- Already tried: <stages 1-4 results>
Without those fields the diagnostic loop takes 3-5 round trips. With them, it’s usually 1-2.
Common gotchas worth knowing about
- HiveOS / RaveOS / mining-distro hosts: not officially supported. INTcoin daemon depends on standard distro libc (Ubuntu 22.04+ / Debian 12+ recommended). Running daemon binaries via ld-linux GLIBC wrappers from miner-distro hosts can break LevelDB key resolution in subtle ways.
- Apple Silicon Macs: build from source via
make -C depends QT=1thencmake -B build --toolchain=depends/aarch64-apple-darwin/toolchain.cmake. We don’t ship pre-built macOS binaries; the dev runner that exists is for QA only. - Windows SmartScreen: right-click the downloaded zip → Properties → Unblock before extracting, else SmartScreen tags every binary inside as untrusted.
- VPN / Tor users: V2 transport is post-quantum encrypted by default; doesn’t matter if your transport is Tor or clearnet, the application-layer crypto is the same. But check
g_reachable_netsif you’re doing-onlynet=onionstyle isolation — it’ll affect peer-discovery defaults.
— INT-devs