tools/community/discord-hooks.mjs (Node 22, standard library): one ember embed per post to #numbers, #announcements and #incidents. Network pulse every 6 h (03/09/15/21 UK) from /api/stats, /api/live, /api/supply with the 6 h window from its own snapshot and a Devnet 2 line that uses the fleet file's numbers and gate word only; a 24 h digest and the reddit kit's weekly template at 09:00 UK; a release subcommand for the shipper (three downloads with sha256, node commit, digest, up to five plain "what changed" lines read from the release plan); incident open and resolve by hand; a watcher that opens one incident per condition (finality paused 5 min, median proof lag 15 min, observer silent 3 min) and resolves after 2 clear minutes, and never opens on a condition already firing when it first looks (the pulse says "finality paused since" instead). Guards before every post: the founder's name and logins, hosts, machine ids, paths, IP addresses, standalone 32-hex tokens, dl.igneum.network outside /public/, webhook URLs, mentions, the tools/ci/forbidden-strings.txt patterns; Discord's limits refused rather than cut; idempotency keys per slot in a state file; exponential backoff on 429; dry run by default with a Discord-like preview in tools/community/out/preview.html. 30 tests on fixtures cut from the live API. infra/build-server/discord-hooks: a tick every minute on igneum-build-1 (the Mac sleeps). install.sh copies the webhook file to /srv/discord-hooks/env (mode 600, over ssh stdin) and refuses without IGNEUM_SECRET_ON_BOX_OK=1; the recorded exception to rule R6 is in docs/plans/build-server.md (main's ruling, 6 October 2026). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
58 lines
No EOL
1.8 KiB
JSON
58 lines
No EOL
1.8 KiB
JSON
{
|
|
"ok": true,
|
|
"now": "2026-10-06T18:44:46.965Z",
|
|
"network": "igneum-devnet",
|
|
"chain_id": 4463,
|
|
"node_version": "2.1.0",
|
|
"algorithm": "Igneum lottery hash: random-program GPU hash, new program every hour, generator v2 (docs/spec/01-lottery-hash.md)",
|
|
"stale": false,
|
|
"age_s": 1.2,
|
|
"height": 141642,
|
|
"block_count": 120745,
|
|
"header_count": 120745,
|
|
"daa": 209508,
|
|
"blue_score": 205566,
|
|
"difficulty": 1247142070.3541756,
|
|
"hashrate": 2562646398,
|
|
"hashrate_unit": "H/s",
|
|
"hashrate_source": "the node's estimateNetworkHashesPerSecond over a 1,000-block window; blue work added per second over 10 min when the node refuses the window",
|
|
"block_time_target_s": 1,
|
|
"block_time_measured_s": 1.429,
|
|
"blocks_per_day_target": 86400,
|
|
"blocks_per_day_measured": 70872,
|
|
"block_reward": {
|
|
"sompi": "547398513",
|
|
"ign": "5.47398513",
|
|
"miner_ign": "4.37918811",
|
|
"proving_pool_ign": "1.09479702",
|
|
"split": "80% block producer, 20% proving pool",
|
|
"daa_used": 209508,
|
|
"ramp_factor": 0.172746,
|
|
"halving_period": 0,
|
|
"next_halving_daa": 63115200,
|
|
"next_halving_in_s": 62905692
|
|
},
|
|
"last_block": {
|
|
"hash": "6b02375e3ed60d3c896d354d77dc76d3706cbe055bbd8bcda5a4087160132718",
|
|
"time": "2026-10-06T18:44:45.474Z",
|
|
"ts_ms": 1791312285474,
|
|
"age_s": 1.5,
|
|
"blue_score": 205568,
|
|
"daa": 209508,
|
|
"miner": "igneumdev:qqrhqjeufh77cd50tdyycnq80vdwgp6av0nd5knkatazfc0mg50gj4ca46t8c",
|
|
"miner_id": "9fe4048a",
|
|
"tx_count": 0,
|
|
"chain": true
|
|
},
|
|
"finality": {
|
|
"active": true,
|
|
"latest_locked_index": 6842,
|
|
"latest_locked_blue_score": 205262,
|
|
"chain_id": "igneum-devnet"
|
|
},
|
|
"peers": 5,
|
|
"mempool": 0,
|
|
"miners_10m": 56,
|
|
"observer_updated_at": "2026-10-06T18:44:45.798072+00:00",
|
|
"source": "tools/observer reading one node every 2 s; reward from docs/spec/02-consensus.md 2.5 at the node's DAA score"
|
|
} |