diff --git a/.eslintrc.json b/.eslintrc.json index d7849a77..84e58b0c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -42,6 +42,7 @@ "PULL_THRESHOLD_PX": "readonly", "PacketFilter": "readonly", "PathInspector": "readonly", + "PrefixReserved": "readonly", "QRCode": "readonly", "ROLE_COLORS": "readonly", "ROLE_EMOJI": "readonly", diff --git a/public/analytics.js b/public/analytics.js index a198a6bb..cdef5317 100644 --- a/public/analytics.js +++ b/public/analytics.js @@ -1615,6 +1615,14 @@ html += hashMatrixLegendHtml(legendLabels); el.innerHTML = html; initMatrixTooltip(el); + // #1473 — Grey out cells whose first byte the MeshCore firmware keygen + // routine avoids (pub_key[0] in {0x00, 0xFF}). This is a keygen + // CONVENTION, not a protocol-level rejection — see firmware + // examples/simple_repeater/main.cpp:83 (HEAD 8ede7641). Must run BEFORE + // we wire click handlers so .hash-active is stripped first. + if (typeof PrefixReserved !== 'undefined' && PrefixReserved && typeof PrefixReserved.markReservedCells === 'function') { + PrefixReserved.markReservedCells(el); + } el.querySelectorAll('.hash-active').forEach(td => { td.addEventListener('click', () => { clickHandlerFn(td); @@ -2992,6 +3000,12 @@ function destroy() { _stopRolesRefresh(); _stopScopesRefresh(); _analyticsData =

Generate Available Prefix

Find a prefix with zero current collisions.

+

+ + 0x00 and 0xFF excluded as a first byte — the MeshCore firmware keygen routine re-rolls identities whose pub_key[0] is 00 or FF, so by convention you should not see those prefixes on real nodes (see + simple_repeater/main.cpp:83). +