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