You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Phase 2: dial-back verification (verified working overnight — 413/413 probes passed)
New PoolVerifier class runs a background thread every 60 seconds that walks
the nodes table, pulls up to 10 least-recently-verified peerIds, and for each
one calls the local IPFS node's /api/v0/swarm/connect. Success = the peer is
findable and reachable via IPFS. Failure increments verifyFails. Nodes with
3+ consecutive failures are excluded from /nodes.json and from Phase 3 payouts.
Self-detection: when the pool server and client run on the same machine, the
verifier detects that the peer's multiaddr contains the local IPFS node's own
peerId and auto-verifies without attempting swarm/connect (which would fail
due to NAT hairpinning on most consumer routers).
Schema migration: ALTER TABLE adds lastVerifyOk and verifyFails columns to
the nodes table. Existing pool.db files get the migration automatically; fresh
databases get all columns in the initial CREATE TABLE.
Phase 3: operator-approved payout pipeline (code complete, untested with real DGB)
[P] key shows a payout preview: count of verified nodes, pool budget from
poolspendperperiod config key, per-node share, and each eligible payout address.
Read-only — safe to press at any time.
[E] key executes a payout with explicit Y/N confirmation. Guards refuse to
execute if poolpayouts=0, poolspendperperiod is missing/zero, no verified
nodes, or rpcuser not configured. On confirmation, calls sendtoaddress on the
local DigiByte Core wallet via JSON-RPC for each eligible node, logs each txid
or error, and records in the payouts_ledger table. Dashboard Payouts row shows
real paid-total from the ledger instead of a placeholder.
New pool.cfg keys for Phase 3: rpcuser, rpcpassword, rpcport (wallet RPC
credentials), poolspendperperiod (DGB to distribute per [E] press).
PeerId bug fix
IPFS::getPeerId now filters the /id response's address list to only include
entries whose trailing /p2p/<id> segment matches the local node's own ID field.
Previously, findPublicAddress could return a bootstrap node's multiaddr
(104.131.131.82/QmaCpDMG...) as if it were ours. New extractIdField() helper
pulls the ID from the /id JSON response. If the filter removes all addresses,
falls back to the bare peerId string.
Confirmed working: the keepalive log now shows the real peerId
/ip4/64.182.71.30/tcp/4001/p2p/12D3KooWQ5wFb1PLNb3i6BET6R... instead of the
DigitalOcean bootstrap's Qm-prefixed address.
UI polish
- DigiAssetCore [H] help rewritten as numbered sub-menus: press H for a 3-line
topic index, then 1-6 for detail sections that fit on one screen. No more
40-line dump that scrolls off the log area.
- Pool server dashboard now uses the same cell() fixed-column helper as the
main exe for aligned two-column status rows. Same COL1_LABEL_W / COL1_VALUE_W
/ COL2_LABEL_W constants.
- Pool server header shows version string matching the main exe's format.
- Pool server log area dynamically sizes from terminal height (no blank gap).
- Pool server uptime format matches the main exe (N sec / N min / N.N hours).
- Pool server [H] handler prints a concise 6-line help block.
- Phase 3 keys [P] [E] are dimmed in the key-hints bar since payouts default off.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0 commit comments