From 942e82bb9e78036fe3a4efe2d01be244034a56a4 Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Thu, 8 Oct 2026 15:40:24 +0000 Subject: [PATCH] Igneum 2.0: one network in the window, the Igneum 2.0 devnet; the testnet card and its note are gone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The founder's word of 8 October 2026 (16:2x BST): the testnet is scrapped and the devnet is one network, served as "the Igneum 2.0 devnet" (the engine runs igneum-devnet-4 and serves the label as state.chain, the shipper's engine commit on the same line). The network step (step 3 of 4) and the Settings Node card show one card, "Igneum 2.0 devnet · igneum-devnet-4 · the chain may reset, coins have no value", the fresh-install default and the only choice; an existing install keeps what it runs ("This machine runs the Igneum 2.0 devnet (igneum-devnet-4)."); an older network name reads as the one network. The "igneum-testnet-1 opens when…" note, the testnet card, "Devnet 3" and "devnet v4" leave index.html and app.js (the welcome eyebrow and the node facts default read "Igneum 2.0 devnet"). The mock's recorded state carries the new chain label and network name. Tests known-failed first on build-2 (once.test.mjs: one NETWORKS entry, one card, the words, no testnet or old label in the window), then green; the 0.3.23 network tests follow (the Rust-source mirror keeps the network_switch name and its test, and no longer pins the testnet_open signature or the manifest's testnet rule, which the engine commit removes). 126 UI tests green. Co-Authored-By: Claude Fable 5.1 --- app/igneum-app/ui/app.js | 24 +++++++++--------- app/igneum-app/ui/index.html | 7 +++--- app/igneum-app/ui/once.test.mjs | 17 +++++++++++++ app/igneum-app/ui/view.test.mjs | 41 ++++++++++--------------------- tools/ui-mock/recorded/state.json | 2 +- 5 files changed, 45 insertions(+), 46 deletions(-) diff --git a/app/igneum-app/ui/app.js b/app/igneum-app/ui/app.js index 3c33d0f14..7622e33cc 100644 --- a/app/igneum-app/ui/app.js +++ b/app/igneum-app/ui/app.js @@ -306,21 +306,19 @@ var View = (function () { // the tooltip on a card's name: what the tool calls it (gfx1201), its device index, the OpenCL platform, the PCI address function cardTitle(cd) { var t = []; if (cd.code && cd.code !== cd.name) t.push(cd.code); if (cd.device !== undefined && cd.device !== '') t.push(cd.worker + ' device ' + cd.device); if (cd.platform) t.push(cd.platform); if (cd.bus) t.push('bus ' + cd.bus); return t.join(' · '); } - // ---------- the network step (0.3.23) ---------- - // Two cards. A fresh install selects the manifest's default_network (Devnet 3 until the go); the testnet card reads - // "not yet open" and is refused until the manifest names it open; an existing install keeps the network it runs. + // ---------- the network step (Igneum 2.0, 8 October 2026) ---------- + // One network: the Igneum 2.0 devnet (the engine runs igneum-devnet-4 and serves the label as state.chain). The card is the + // fresh-install default and the only choice; an existing install keeps what it runs; an older name reads as this one. var NETWORKS = [ - { id: 'devnet-3', label: 'Devnet 3', name: 'igneum-devnet-3', chain: 4463, sub: 'staging: the chain may reset, coins have no value' }, - { id: 'testnet-1', label: 'igneum-testnet-1', name: 'igneum-testnet-1', chain: 4462, sub: 'the public test chain: coins have no value, resets are announced' } + { id: 'devnet-4', label: 'Igneum 2.0 devnet', name: 'igneum-devnet-4', sub: 'the chain may reset, coins have no value' } ]; - function networkIdOf(name) { for (var i = 0; i < NETWORKS.length; i++) if (NETWORKS[i].name === name) return NETWORKS[i].id; return 'devnet-3'; } + function networkIdOf(name) { for (var i = 0; i < NETWORKS.length; i++) if (NETWORKS[i].name === name) return NETWORKS[i].id; return NETWORKS[0].id; } function networkWords(s) { - s = s || {}; var st = s.settings || {}, u = s.update || {}, open = !!u.testnet_open, current = networkIdOf(s.network_name || ''), pending = s.network_pending || ''; - var chosen = st.network || '', def = (u.default_network === 'testnet-1' && open) ? 'testnet-1' : 'devnet-3'; - var selected = s.setup_done ? (pending || current) : (chosen || def); - var cards = NETWORKS.map(function (n) { var isOpen = n.id !== 'testnet-1' || open; return { id: n.id, label: n.label, name: n.name, line: n.id === 'devnet-3' ? 'igneum-devnet-3, chain id 4463' : (open ? 'chain id 4462' : 'chain id 4462 · not yet open'), sub: n.sub, open: isOpen, selected: n.id === selected, current: !!s.setup_done && n.id === current }; }); + s = s || {}; var st = s.settings || {}, current = networkIdOf(s.network_name || ''), pending = s.network_pending || ''; + var selected = s.setup_done ? (pending || current) : (st.network || NETWORKS[0].id); + var cards = NETWORKS.map(function (n) { return { id: n.id, label: n.label, name: n.name, line: n.name, sub: n.sub, open: true, selected: n.id === selected, current: !!s.setup_done && n.id === current }; }); var pend = NETWORKS.filter(function (n) { return n.id === pending; })[0]; - var line = pend ? 'Switching to ' + pend.name + ' at the next start: quit Igneum Miner and open it again.' : s.setup_done ? 'This machine runs ' + (s.network_name || 'igneum-devnet-3') + '.' : ''; + var line = pend ? 'Switching to ' + pend.label + ' (' + pend.name + ') at the next start: quit Igneum Miner and open it again.' : s.setup_done ? 'This machine runs the ' + NETWORKS[0].label + ' (' + (s.network_name || NETWORKS[0].name) + ').' : ''; return { cards: cards, selected: selected, current: current, pending: pending, line: line, error: s.network_error || '' }; } function networkAsk(want, runningName) { var n = NETWORKS.filter(function (x) { return x.id === want; })[0]; return 'Switch this machine to ' + (n ? n.name : want) + '? The node’s data and the mining state on ' + runningName + ' reset at the next start. Your key and your address stay.'; } @@ -1743,7 +1741,7 @@ if (typeof document !== 'undefined') (function () { } function renderNetworkStep(s) { var w = View.networkWords(s); renderNetCards($('network-cards'), w, netPick); - var note = w.error || (w.cards[1].open ? '' : 'igneum-testnet-1 opens when the network does; Devnet 3 is the chain to mine today.'); + var note = w.error || ''; setText('network-note', note); setHidden('network-note', !note); } $('network-cards').addEventListener('click', function (e) { var b = e.target.closest('.net-card'); if (!b || b.disabled) return; netPick = b.getAttribute('data-net'); if (state) renderNetworkStep(state); }); @@ -1754,7 +1752,7 @@ if (typeof document !== 'undefined') (function () { setText('s-network-line', w.line); setText('s-network-eyebrow', w.pending ? 'next start' : 'running'); setText('s-network-note', w.error); setHidden('s-network-note', !w.error); } - $('s-network-cards').addEventListener('click', function (e) { var b = e.target.closest('.net-card'); if (!b || b.disabled || !state) return; var want = b.getAttribute('data-net'), w = View.networkWords(state); if (want === w.selected) return; $('ask-network-text').textContent = View.networkAsk(want, state.network_name || 'igneum-devnet-3'); $('ask-network').dataset.want = want; $('ask-network').hidden = false; }); + $('s-network-cards').addEventListener('click', function (e) { var b = e.target.closest('.net-card'); if (!b || b.disabled || !state) return; var want = b.getAttribute('data-net'), w = View.networkWords(state); if (want === w.selected) return; $('ask-network-text').textContent = View.networkAsk(want, state.network_name || 'igneum-devnet-4'); $('ask-network').dataset.want = want; $('ask-network').hidden = false; }); $('ask-network-no').addEventListener('click', function () { $('ask-network').hidden = true; }); $('ask-network-yes').addEventListener('click', function () { var want = $('ask-network').dataset.want; $('ask-network').hidden = true; api('api/network', { network: want, confirm: true }).then(function (r) { if (r.ok) toast('Network saved: it takes effect at the next start'); }); }); function saveRegion(code, price, cur) { diff --git a/app/igneum-app/ui/index.html b/app/igneum-app/ui/index.html index 89831b6f5..a7f3dc20f 100644 --- a/app/igneum-app/ui/index.html +++ b/app/igneum-app/ui/index.html @@ -73,7 +73,7 @@
-
devnet v4 · nothing is bought or sold
+
Igneum 2.0 devnet · nothing is bought or sold

Igneum Miner

Runs a node and mines Igneum with your graphics card. Set up in two steps.

@@ -156,8 +156,7 @@
- +
step 3 of 4
@@ -414,7 +413,7 @@
whose node
height0blocks this node holds
peers0other nodes it talks to
-
version--devnet v4
+
version--Igneum 2.0 devnet
headers0headers arrive before blocks
network blocks0blocks the whole network has made (the DAA score)
difficulty0how hard the next block is to find
diff --git a/app/igneum-app/ui/once.test.mjs b/app/igneum-app/ui/once.test.mjs index e3a15924f..42d3d9bde 100644 --- a/app/igneum-app/ui/once.test.mjs +++ b/app/igneum-app/ui/once.test.mjs @@ -295,3 +295,20 @@ test('T-A8 and the copy law: no uppercase on a unit label; no em dash in the win } assert.equal(once(html, '—'), 0, 'no em dash in index.html'); assert.equal(once(src, '—'), 0, 'no em dash in app.js'); }); + +// Igneum 2.0 (the founder, 8 October 2026, 16:2x BST): the testnet is scrapped and the devnet is one network, "the Igneum 2.0 +// devnet" (the engine runs igneum-devnet-4 and serves the label as state.chain). The network step and the Settings Node card +// show one card; no testnet card, no "opens when" note, no "Devnet 3" or "devnet v4" text anywhere in the window. Known-failed +// first on release-2.0.0 b891444f: two cards, the testnet note, the old labels. +test('Igneum 2.0: one network, the Igneum 2.0 devnet; no testnet, no Devnet 3, no devnet v4 anywhere in the window', () => { + assert.equal(V.NETWORKS.length, 1); assert.equal(V.NETWORKS[0].id, 'devnet-4'); assert.equal(V.NETWORKS[0].name, 'igneum-devnet-4'); assert.equal(V.NETWORKS[0].label, 'Igneum 2.0 devnet'); + const fresh = V.networkWords({ setup_done: false, network_name: '', network_pending: '', settings: { network: '' }, update: {} }); + assert.equal(fresh.cards.length, 1); assert.equal(fresh.selected, 'devnet-4'); assert.equal(fresh.cards[0].open, true); assert.equal(fresh.cards[0].selected, true); + assert.equal(fresh.cards[0].line, 'igneum-devnet-4'); assert.equal(fresh.cards[0].sub, 'the chain may reset, coins have no value'); + const running = V.networkWords({ setup_done: true, network_name: 'igneum-devnet-4', network_pending: '', settings: { network: '' }, update: {} }); + assert.equal(running.line, 'This machine runs the Igneum 2.0 devnet (igneum-devnet-4).'); assert.equal(running.cards[0].current, true); + assert.equal(V.networkIdOf('igneum-devnet-3'), 'devnet-4', 'an older name reads as the one network'); + for (const text of [html, src]) { assert.equal(/testnet/i.test(text), false, 'no testnet'); assert.equal(/Devnet 3|devnet-3|devnet v4/.test(text), false, 'no old devnet label'); } + assert.equal(once(html, 'Igneum 2.0 devnet'), 2, 'the welcome eyebrow and the node facts default'); + assert.equal(once(src, 'opens when the network does'), 0); +}); diff --git a/app/igneum-app/ui/view.test.mjs b/app/igneum-app/ui/view.test.mjs index 142fd60b5..ee249863a 100644 --- a/app/igneum-app/ui/view.test.mjs +++ b/app/igneum-app/ui/view.test.mjs @@ -1019,40 +1019,25 @@ test('Settings: "Check for an update" posts api/update/check and "Check for jobs assert.equal(/\$\('s-update'\)[^\n]*api\/jobs\/check/.test(src), false); assert.equal(/\$\('s-jobs-check'\)[^\n]*api\/update\/check/.test(src), false);}); // ---------- the network step (0.3.23, main's design with two corrections, 7 October 2026) ---------- -// A fourth first-run screen and a Settings card: two cards, Devnet 3 and igneum-testnet-1. The fresh-install default comes -// from the manifest's default_network (Devnet 3 until the go); the testnet card reads "not yet open" and is refused until the -// manifest names it open; an existing install keeps its network; nothing switches a running miner without the user's click -// and the confirm that names what resets. -test('network words: the manifest default selects the card on a fresh install, the testnet card is refused until open, an existing install keeps its network (known-failed on 0.3.23)', () => { - const fresh = { setup_done: false, network_name: 'igneum-devnet-3', network_pending: '', settings: { network: '' }, update: { default_network: 'devnet-3', testnet_open: false } }; +// Igneum 2.0 (8 October 2026): one network card, the Igneum 2.0 devnet; the once-test holds the words. An existing install +// keeps what it runs and the card it runs is marked current; nothing switches a running miner without the click and the confirm. +test('network words: one card, selected on a fresh install, current on an existing one; the pending state after a confirmed switch', () => { + const fresh = { setup_done: false, network_name: '', network_pending: '', settings: { network: '' }, update: {} }; const w = V.networkWords(fresh); - assert.deepEqual(w.cards.map((c) => c.id), ['devnet-3', 'testnet-1']); - assert.equal(w.selected, 'devnet-3', 'the manifest default'); - const dn3 = w.cards[0], tn = w.cards[1]; - assert.equal(dn3.label, 'Devnet 3'); assert.equal(dn3.line, 'igneum-devnet-3, chain id 4463'); assert.equal(dn3.sub, 'staging: the chain may reset, coins have no value'); assert.equal(dn3.open, true); - assert.equal(tn.label, 'igneum-testnet-1'); assert.equal(tn.line, 'chain id 4462 · not yet open'); assert.equal(tn.sub, 'the public test chain: coins have no value, resets are announced'); assert.equal(tn.open, false); - assert.equal(V.networkWords({ ...fresh, update: { default_network: '', testnet_open: false } }).selected, 'devnet-3', 'no manifest read yet: Devnet 3'); - const open = V.networkWords({ ...fresh, update: { default_network: 'testnet-1', testnet_open: true } }); - assert.equal(open.selected, 'testnet-1'); assert.equal(open.cards[1].line, 'chain id 4462'); assert.equal(open.cards[1].open, true); - // an existing install keeps what it runs; the card it runs is marked current - const old = V.networkWords({ setup_done: true, network_name: 'igneum-devnet-3', network_pending: '', settings: { network: '' }, update: { default_network: 'testnet-1', testnet_open: true } }); - assert.equal(old.selected, 'devnet-3'); assert.equal(old.current, 'devnet-3'); assert.equal(old.cards[0].current, true); - assert.equal(old.line, 'This machine runs igneum-devnet-3.'); - // the pending state after a confirmed switch - const pend = V.networkWords({ setup_done: true, network_name: 'igneum-devnet-3', network_pending: 'testnet-1', settings: { network: 'testnet-1' }, update: { default_network: 'testnet-1', testnet_open: true } }); - assert.equal(pend.line, 'Switching to igneum-testnet-1 at the next start: quit Igneum Miner and open it again.'); + assert.deepEqual(w.cards.map((c) => c.id), ['devnet-4']); assert.equal(w.selected, 'devnet-4'); + const old = V.networkWords({ setup_done: true, network_name: 'igneum-devnet-4', network_pending: '', settings: { network: '' }, update: {} }); + assert.equal(old.selected, 'devnet-4'); assert.equal(old.current, 'devnet-4'); assert.equal(old.cards[0].current, true); + const pend = V.networkWords({ setup_done: true, network_name: 'igneum-devnet-4', network_pending: 'devnet-4', settings: { network: 'devnet-4' }, update: {} }); + assert.equal(pend.line, 'Switching to Igneum 2.0 devnet (igneum-devnet-4) at the next start: quit Igneum Miner and open it again.'); for (const s of [w, old, pend]) for (const c of s.cards) assert.equal(/—|–/.test(c.label + c.line + c.sub), false); }); -test('the switch is refused without the confirm, and the confirm names what resets; the testnet choice is refused while not open', () => { - assert.equal(V.networkAsk('testnet-1', 'igneum-devnet-3'), 'Switch this machine to igneum-testnet-1? The node’s data and the mining state on igneum-devnet-3 reset at the next start. Your key and your address stay.'); - assert.equal(V.networkAsk('devnet-3', 'igneum-testnet-1'), 'Switch this machine to igneum-devnet-3? The node’s data and the mining state on igneum-testnet-1 reset at the next start. Your key and your address stay.'); - // the Rust rule the server applies (config::network_switch): mirrored here by its source text +test('the switch is refused without the confirm, and the confirm names what resets', () => { + assert.equal(V.networkAsk('devnet-4', 'igneum-devnet-3'), 'Switch this machine to igneum-devnet-4? The node’s data and the mining state on igneum-devnet-3 reset at the next start. Your key and your address stay.'); + // the Rust rule the server applies (config::network_switch): mirrored here by its source text (the signature is the engine's) const cfg = rustSrc('config.rs'); - assert.match(cfg, /pub fn network_switch\(want: &str, running: &str, testnet_open: bool, confirmed: bool\) -> Result<\(\), String>/); + assert.match(cfg, /pub fn network_switch\(/); assert.match(cfg, /fn network_switch_rules\(\)/, 'the Rust test exists'); - assert.match(rustSrc('manifest.rs'), /default_network names the testnet before it is open/, 'a manifest with the testnet default before the open is refused'); - assert.match(rustSrc('manifest.rs'), /fn default_network_rules\(\)/, 'the manifest test exists'); assert.match(rustSrc('server.rs'), /"\/api\/network" =>/); // the markup: the step sits before the address step, four steps now; the Settings card exists const idx = pageHtml; diff --git a/tools/ui-mock/recorded/state.json b/tools/ui-mock/recorded/state.json index 38007b9b1..6213889f9 100644 --- a/tools/ui-mock/recorded/state.json +++ b/tools/ui-mock/recorded/state.json @@ -1 +1 @@ -{"address":{"display":"0xdd442fCbb964A3aFDc90D49B408e8DD296FA86E8","key_saved":true,"source":"generated","value":"0xdd442fcbb964a3afdc90d49b408e8dd296fa86e8","wallet_file":"~/Library/Application Support/Igneum/app/wallet.json"},"chain":"devnet v4","clock":{"checked_at":1791141792.659384,"hint":"System Settings > General > Date & Time: turn on \"Set time and date automatically\", or run: sudo sntp -sS time.apple.com","message":"","severity":"none","skew_s":0.0,"source":"","sync_result":"","syncing":false},"detect_message":"","detecting":false,"display_name":"mac-studio","events":[{"kind":"block","t":1791141792.659396,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141784.773495,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141780.816561,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141765.140061,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141758.844486,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141741.215849,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141721.809453,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141715.330922,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141693.942389,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141689.018952,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141679.870759,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141657.095033,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141651.267551,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141645.265141,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141644.751899,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141643.719755,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141623.660516,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141576.954069,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141562.728779,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141497.070319,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141476.805506,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141464.486529,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141463.975061,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141456.116723,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141453.281813,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141443.764918,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141408.692778,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"build","t":1791141394.020399,"text":"next hourly program compiled and ready"},{"kind":"block","t":1791141393.768472,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141390.668497,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141374.972848,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141367.949444,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141359.800809,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141345.256581,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141344.49173,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141341.695459,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141322.736675,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141313.224097,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141311.190745,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141258.928071,"text":"block accepted by the node (Apple M5 Max)"}],"finality":{"age_s":15.76532793045044,"last_lock":1240,"last_lock_at":1791141781.854171,"message":"","votes":570},"host":"mac-studio","jobs":{"active":false,"allowed":true,"checked_at":1791141794.015375,"error":"","history":[],"id":"","key_fingerprint":"8f186e37b48cfddf52d2b37478c562d78a74236fc87f0a675393ed6a35baac4e","kind":"","last":{"exit":0,"finished_at":0.0,"id":"","kind":"","run_id":"","started_at":0.0,"status":"","summary":"","title":"","uploaded":false},"last_results":[],"message":"","queued":0,"results":[],"run_id":"","stage":"","started_at":0.0,"title":"","url_set":true},"live_page":"https://igneum.network/live","log_dir":"~/Library/Logs/Igneum","machine_id":"0123456789abcdef","mining":{"accepted_session":6783,"accepted_total":8053,"cards":[{"accepted":6783,"detail":"40 GPU cores, 64 GB unified memory","device":"","enabled":true,"hash_avg":23.04,"hash_now":16.88,"identities":1,"ids":["8fafda27"],"index":0,"key":"apple::Apple M5 Max","kind":"apple","last_status_age_s":0.0,"message":"","name":"Apple M5 Max","path":"prebuilt","pid":14686,"power_applied":false,"power_before_w":0.0,"power_default_w":0.0,"power_limit_w":0.0,"power_max_w":0.0,"power_min_w":0.0,"power_note":"","power_pct":0,"power_w":0.0,"prepare":true,"prepared":true,"ready":true,"reason":"","rejected":0,"restart_in_s":0,"restarts":0,"state":"mining","synced":true,"telemetry_at":0.0,"temp_gpu":0.0,"temp_mem":0.0,"template_age_s":0.94,"vendor":"apple","vram_mb":65536,"worker":"Metal"}],"found":[1791138216.574043,1791138225.697665,1791138232.791751,1791138237.103233,1791138243.949566,1791138249.011633,1791138264.7276,1791138282.008339,1791138302.272067,1791138304.302477,1791138324.055243,1791138331.901677,1791138339.51623,1791138429.516579,1791138443.2053,1791138466.520049,1791138493.63345,1791138545.879553,1791138555.02205,1791138564.651655,1791138569.714284,1791138573.018003,1791138585.679625,1791138592.018392,1791138595.306195,1791138625.983751,1791138648.537181,1791138665.760553,1791138686.294336,1791138690.608171,1791138694.914922,1791138738.992256,1791138752.70466,1791138774.254614,1791138776.030881,1791138780.346652,1791138795.045989,1791138802.146932,1791138814.325476,1791138825.988248,1791138834.100366,1791138846.514869,1791138857.673936,1791138859.199142,1791138903.591985,1791138911.439351,1791138915.745913,1791138922.34557,1791138925.888326,1791138927.670742,1791138931.731884,1791138948.971082,1791138949.47371,1791138963.149284,1791138964.418166,1791139003.725285,1791139010.822192,1791139038.171439,1791139040.451441,1791139046.530285,1791139049.572738,1791139054.640835,1791139073.163256,1791139087.381047,1791139092.448433,1791139099.302888,1791139116.030369,1791139119.324547,1791139157.821907,1791139162.380384,1791139174.820154,1791139186.726357,1791139193.07342,1791139202.450408,1791139210.310766,1791139213.098101,1791139232.107076,1791139254.423744,1791139263.292323,1791139286.849799,1791139287.865321,1791139321.035329,1791139353.43567,1791139355.981022,1791139361.2961,1791139372.181396,1791139374.958105,1791139389.393862,1791139400.548015,1791139426.899092,1791139460.095324,1791139461.109187,1791139470.223228,1791139472.750748,1791139507.756583,1791139528.321001,1791139544.541706,1791139550.10821,1791139571.925407,1791139572.433242,1791139583.064615,1791139589.148688,1791139593.218712,1791139616.823976,1791139619.358454,1791139644.91632,1791139672.667823,1791139691.153469,1791139731.202806,1791139745.150247,1791139755.02217,1791139755.77839,1791139768.962765,1791139773.5205,1791139799.106689,1791139800.117086,1791139811.282153,1791139812.552075,1791139825.731143,1791139855.878333,1791139861.205648,1791139871.853908,1791139884.784642,1791139893.399561,1791139904.046238,1791139925.842086,1791139971.601992,1791139984.957904,1791140006.643005,1791140010.975623,1791140012.510067,1791140053.246595,1791140057.823569,1791140068.755368,1791140074.604312,1791140076.634004,1791140117.604698,1791140128.757927,1791140132.055985,1791140132.818727,1791140181.218388,1791140181.982351,1791140193.628323,1791140205.275319,1791140206.290104,1791140240.208862,1791140244.010165,1791140244.773556,1791140274.951692,1791140298.023546,1791140345.730951,1791140352.327287,1791140364.48789,1791140390.595776,1791140397.169197,1791140408.827621,1791140413.897476,1791140419.728664,1791140437.456341,1791140443.042557,1791140466.846068,1791140469.381475,1791140478.528657,1791140481.822259,1791140482.327058,1791140484.866706,1791140487.150133,1791140517.182883,1791140518.199856,1791140522.280443,1791140524.077669,1791140527.899961,1791140530.689242,1791140536.783646,1791140544.666018,1791140546.559656,1791140562.452509,1791140563.212551,1791140572.121526,1791140577.763383,1791140604.877714,1791140606.913714,1791140633.427776,1791140654.225522,1791140665.948962,1791140690.909947,1791140697.356828,1791140710.896789,1791140716.110732,1791140724.171437,1791140748.730109,1791140773.343235,1791140788.02886,1791140825.44664,1791140832.685648,1791140838.360569,1791140840.446381,1791140858.126799,1791140881.737743,1791140912.64696,1791140918.520978,1791140921.080518,1791140923.623283,1791140927.94495,1791140942.226674,1791140950.348717,1791140971.635886,1791140976.710713,1791141004.334877,1791141047.411567,1791141056.779072,1791141229.808096,1791141258.928069,1791141311.190743,1791141313.224095,1791141322.736672,1791141341.695456,1791141344.491728,1791141345.256578,1791141359.800807,1791141367.949441,1791141374.972846,1791141390.668495,1791141393.76847,1791141408.692775,1791141443.764914,1791141453.281809,1791141456.116715,1791141463.975059,1791141464.486526,1791141476.805503,1791141497.070317,1791141562.728776,1791141576.954066,1791141623.660514,1791141643.719753,1791141644.751897,1791141645.265138,1791141651.267548,1791141657.095031,1791141679.870756,1791141689.01895,1791141693.942386,1791141715.33092,1791141721.809451,1791141741.215846,1791141758.844215,1791141765.140058,1791141780.816559,1791141784.773492,1791141792.659393],"hash_total":16.88,"paused":false,"rejected_session":0,"state":"mining"},"network":"devnet","node":{"blocks":39571,"blue":37233,"consensus_switch_daa":33000,"daa":39571,"difficulty":136350545.9,"headers":39571,"last_reading_age_s":5.788984916,"message":"","override_restart_wait":"","peers":4,"pid":14673,"restart_in_s":0,"restarts":0,"starts":3,"state":"synced","synced":true,"tips":1,"version":"igneumd 2.1.0"},"node_dir":"~/Library/Application Support/Igneum/devnet-v4","now":1791141797.666736,"phase":"dashboard","program":{"boundary_daa":39600,"epoch_index":10,"eta_s":29,"message":"next program compiled and ready","prepare_sent":true,"prepared":true},"proving":{"assigned":0,"available":false,"backend":"","current":"","enabled":false,"failed":0,"keys":0,"last_paid":"","last_prove_s":0.0,"message":"","paid":0,"paid_wei":0,"proved":0,"setup_hint":"","started_at":0.0,"status":"off","submitted":0},"quitting":false,"settings":{"auto_update":true,"identities":1,"prove":false,"remote_jobs":true,"start_at_login":false,"vote":true},"setup_done":true,"update":{"activation_height":33000,"applying":false,"auto":true,"available":false,"channel":"devnet","checked_at":1791141355.46191,"downloaded":false,"error":"","file":"","min_supported":"0.3.0","notes":"Difficulty rule v2 from DAA score 33,000 (about 18:35 UTC on 4 October); every node must carry it before then","progress":0.0,"published_at":"2026-10-04T16:56:10Z","ready":false,"rolled_back":"","size":0,"status":"current","unsupported":false,"updated_from":"0.3.2","urgent":false,"urgent_text":"","url":"","version":"0.3.3","wait":""},"uptime_s":15058,"version":"0.3.3"} \ No newline at end of file +{"address":{"display":"0xdd442fCbb964A3aFDc90D49B408e8DD296FA86E8","key_saved":true,"source":"generated","value":"0xdd442fcbb964a3afdc90d49b408e8dd296fa86e8","wallet_file":"~/Library/Application Support/Igneum/app/wallet.json"},"chain":"Igneum 2.0 devnet","clock":{"checked_at":1791141792.659384,"hint":"System Settings > General > Date & Time: turn on \"Set time and date automatically\", or run: sudo sntp -sS time.apple.com","message":"","severity":"none","skew_s":0.0,"source":"","sync_result":"","syncing":false},"detect_message":"","detecting":false,"display_name":"mac-studio","events":[{"kind":"block","t":1791141792.659396,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141784.773495,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141780.816561,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141765.140061,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141758.844486,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141741.215849,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141721.809453,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141715.330922,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141693.942389,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141689.018952,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141679.870759,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141657.095033,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141651.267551,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141645.265141,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141644.751899,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141643.719755,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141623.660516,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141576.954069,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141562.728779,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141497.070319,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141476.805506,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141464.486529,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141463.975061,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141456.116723,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141453.281813,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141443.764918,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141408.692778,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"build","t":1791141394.020399,"text":"next hourly program compiled and ready"},{"kind":"block","t":1791141393.768472,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141390.668497,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141374.972848,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141367.949444,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141359.800809,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141345.256581,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141344.49173,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141341.695459,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141322.736675,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141313.224097,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141311.190745,"text":"block accepted by the node (Apple M5 Max)"},{"kind":"block","t":1791141258.928071,"text":"block accepted by the node (Apple M5 Max)"}],"finality":{"age_s":15.76532793045044,"last_lock":1240,"last_lock_at":1791141781.854171,"message":"","votes":570},"host":"mac-studio","jobs":{"active":false,"allowed":true,"checked_at":1791141794.015375,"error":"","history":[],"id":"","key_fingerprint":"8f186e37b48cfddf52d2b37478c562d78a74236fc87f0a675393ed6a35baac4e","kind":"","last":{"exit":0,"finished_at":0.0,"id":"","kind":"","run_id":"","started_at":0.0,"status":"","summary":"","title":"","uploaded":false},"last_results":[],"message":"","queued":0,"results":[],"run_id":"","stage":"","started_at":0.0,"title":"","url_set":true},"live_page":"https://igneum.network/live","log_dir":"~/Library/Logs/Igneum","machine_id":"0123456789abcdef","mining":{"accepted_session":6783,"accepted_total":8053,"cards":[{"accepted":6783,"detail":"40 GPU cores, 64 GB unified memory","device":"","enabled":true,"hash_avg":23.04,"hash_now":16.88,"identities":1,"ids":["8fafda27"],"index":0,"key":"apple::Apple M5 Max","kind":"apple","last_status_age_s":0.0,"message":"","name":"Apple M5 Max","path":"prebuilt","pid":14686,"power_applied":false,"power_before_w":0.0,"power_default_w":0.0,"power_limit_w":0.0,"power_max_w":0.0,"power_min_w":0.0,"power_note":"","power_pct":0,"power_w":0.0,"prepare":true,"prepared":true,"ready":true,"reason":"","rejected":0,"restart_in_s":0,"restarts":0,"state":"mining","synced":true,"telemetry_at":0.0,"temp_gpu":0.0,"temp_mem":0.0,"template_age_s":0.94,"vendor":"apple","vram_mb":65536,"worker":"Metal"}],"found":[1791138216.574043,1791138225.697665,1791138232.791751,1791138237.103233,1791138243.949566,1791138249.011633,1791138264.7276,1791138282.008339,1791138302.272067,1791138304.302477,1791138324.055243,1791138331.901677,1791138339.51623,1791138429.516579,1791138443.2053,1791138466.520049,1791138493.63345,1791138545.879553,1791138555.02205,1791138564.651655,1791138569.714284,1791138573.018003,1791138585.679625,1791138592.018392,1791138595.306195,1791138625.983751,1791138648.537181,1791138665.760553,1791138686.294336,1791138690.608171,1791138694.914922,1791138738.992256,1791138752.70466,1791138774.254614,1791138776.030881,1791138780.346652,1791138795.045989,1791138802.146932,1791138814.325476,1791138825.988248,1791138834.100366,1791138846.514869,1791138857.673936,1791138859.199142,1791138903.591985,1791138911.439351,1791138915.745913,1791138922.34557,1791138925.888326,1791138927.670742,1791138931.731884,1791138948.971082,1791138949.47371,1791138963.149284,1791138964.418166,1791139003.725285,1791139010.822192,1791139038.171439,1791139040.451441,1791139046.530285,1791139049.572738,1791139054.640835,1791139073.163256,1791139087.381047,1791139092.448433,1791139099.302888,1791139116.030369,1791139119.324547,1791139157.821907,1791139162.380384,1791139174.820154,1791139186.726357,1791139193.07342,1791139202.450408,1791139210.310766,1791139213.098101,1791139232.107076,1791139254.423744,1791139263.292323,1791139286.849799,1791139287.865321,1791139321.035329,1791139353.43567,1791139355.981022,1791139361.2961,1791139372.181396,1791139374.958105,1791139389.393862,1791139400.548015,1791139426.899092,1791139460.095324,1791139461.109187,1791139470.223228,1791139472.750748,1791139507.756583,1791139528.321001,1791139544.541706,1791139550.10821,1791139571.925407,1791139572.433242,1791139583.064615,1791139589.148688,1791139593.218712,1791139616.823976,1791139619.358454,1791139644.91632,1791139672.667823,1791139691.153469,1791139731.202806,1791139745.150247,1791139755.02217,1791139755.77839,1791139768.962765,1791139773.5205,1791139799.106689,1791139800.117086,1791139811.282153,1791139812.552075,1791139825.731143,1791139855.878333,1791139861.205648,1791139871.853908,1791139884.784642,1791139893.399561,1791139904.046238,1791139925.842086,1791139971.601992,1791139984.957904,1791140006.643005,1791140010.975623,1791140012.510067,1791140053.246595,1791140057.823569,1791140068.755368,1791140074.604312,1791140076.634004,1791140117.604698,1791140128.757927,1791140132.055985,1791140132.818727,1791140181.218388,1791140181.982351,1791140193.628323,1791140205.275319,1791140206.290104,1791140240.208862,1791140244.010165,1791140244.773556,1791140274.951692,1791140298.023546,1791140345.730951,1791140352.327287,1791140364.48789,1791140390.595776,1791140397.169197,1791140408.827621,1791140413.897476,1791140419.728664,1791140437.456341,1791140443.042557,1791140466.846068,1791140469.381475,1791140478.528657,1791140481.822259,1791140482.327058,1791140484.866706,1791140487.150133,1791140517.182883,1791140518.199856,1791140522.280443,1791140524.077669,1791140527.899961,1791140530.689242,1791140536.783646,1791140544.666018,1791140546.559656,1791140562.452509,1791140563.212551,1791140572.121526,1791140577.763383,1791140604.877714,1791140606.913714,1791140633.427776,1791140654.225522,1791140665.948962,1791140690.909947,1791140697.356828,1791140710.896789,1791140716.110732,1791140724.171437,1791140748.730109,1791140773.343235,1791140788.02886,1791140825.44664,1791140832.685648,1791140838.360569,1791140840.446381,1791140858.126799,1791140881.737743,1791140912.64696,1791140918.520978,1791140921.080518,1791140923.623283,1791140927.94495,1791140942.226674,1791140950.348717,1791140971.635886,1791140976.710713,1791141004.334877,1791141047.411567,1791141056.779072,1791141229.808096,1791141258.928069,1791141311.190743,1791141313.224095,1791141322.736672,1791141341.695456,1791141344.491728,1791141345.256578,1791141359.800807,1791141367.949441,1791141374.972846,1791141390.668495,1791141393.76847,1791141408.692775,1791141443.764914,1791141453.281809,1791141456.116715,1791141463.975059,1791141464.486526,1791141476.805503,1791141497.070317,1791141562.728776,1791141576.954066,1791141623.660514,1791141643.719753,1791141644.751897,1791141645.265138,1791141651.267548,1791141657.095031,1791141679.870756,1791141689.01895,1791141693.942386,1791141715.33092,1791141721.809451,1791141741.215846,1791141758.844215,1791141765.140058,1791141780.816559,1791141784.773492,1791141792.659393],"hash_total":16.88,"paused":false,"rejected_session":0,"state":"mining"},"network":"devnet","node":{"blocks":39571,"blue":37233,"consensus_switch_daa":33000,"daa":39571,"difficulty":136350545.9,"headers":39571,"last_reading_age_s":5.788984916,"message":"","override_restart_wait":"","peers":4,"pid":14673,"restart_in_s":0,"restarts":0,"starts":3,"state":"synced","synced":true,"tips":1,"version":"igneumd 2.1.0"},"node_dir":"~/Library/Application Support/Igneum/devnet-v4","now":1791141797.666736,"phase":"dashboard","program":{"boundary_daa":39600,"epoch_index":10,"eta_s":29,"message":"next program compiled and ready","prepare_sent":true,"prepared":true},"proving":{"assigned":0,"available":false,"backend":"","current":"","enabled":false,"failed":0,"keys":0,"last_paid":"","last_prove_s":0.0,"message":"","paid":0,"paid_wei":0,"proved":0,"setup_hint":"","started_at":0.0,"status":"off","submitted":0},"quitting":false,"settings":{"auto_update":true,"identities":1,"prove":false,"remote_jobs":true,"start_at_login":false,"vote":true},"setup_done":true,"update":{"activation_height":33000,"applying":false,"auto":true,"available":false,"channel":"devnet","checked_at":1791141355.46191,"downloaded":false,"error":"","file":"","min_supported":"0.3.0","notes":"Difficulty rule v2 from DAA score 33,000 (about 18:35 UTC on 4 October); every node must carry it before then","progress":0.0,"published_at":"2026-10-04T16:56:10Z","ready":false,"rolled_back":"","size":0,"status":"current","unsupported":false,"updated_from":"0.3.2","urgent":false,"urgent_text":"","url":"","version":"0.3.3","wait":""},"uptime_s":15058,"version":"0.3.3","network_name":"igneum-devnet-4"} \ No newline at end of file