mirror of
https://github.com/pezkuwichain/pezkuwi-common.git
synced 2026-10-20 18:56:18 +00:00
networks: describe the Pezkuwi chains as their nodes do
The registry gave the mainnet relay prefix 0, PZW and 10 decimals and Zagros prefix 2 and ZGS, with genesis hashes from chains since relaunched; the nodes report ss58Format 42, HEZ and 12 decimals. Today a lookup by genesis fails and apps fall back to 42, so addresses come out right by accident; with a current genesis they would have been formatted with prefix 0. - pezkuwi and zagros: prefix 42, HEZ, 12 decimals (decided 2026-10-07; the relaunched mainnet keeps them) - Zagros genesis is the live one; the mainnet has none until its relaunch, since a stale hash identifies a chain that no longer exists - the PezkuwiChain entry (prefix 1453, PZC) and the dicle genesis describe no chain and are removed The spec now holds the real data: the Pezkuwi networks report 42/HEZ/12, a prefix is shared only at 42 (upstream's one-network-per-prefix rule cannot hold when the chains share the generic format), no two networks claim one genesis. Red with the mainnet back at prefix 0. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
e9cccd2a04
commit
e1f3074c39
3 files changed
+50
-69
No files matched your search
@@ -11,6 +11,9 @@ import type { KnownGenesis } from '../types.js';
|
||||
// IMPORTANT: Apart from the test relays, this list is limited to live parachains
|
||||
// and live production networks. It does not and should not contain any testnets,
|
||||
// either stand-alone or connected to test relays such as Westend/Rococo
|
||||
// pezkuwi (the mainnet relay) has no entry while the chain is relaunched from
|
||||
// genesis: a stale hash would identify a chain that no longer exists, and an
|
||||
// absent one leaves the app to read the connected node.
|
||||
export const knownGenesis: KnownGenesis = {
|
||||
acala: [
|
||||
'0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c'
|
||||
@@ -61,9 +64,6 @@ export const knownGenesis: KnownGenesis = {
|
||||
'0x6bfe24dca2a3be10f22212678ac13a6446ec764103c0f3471c71609eac384aae',
|
||||
'0xf73467c6544aa68df2ee546b135f955c46b90fa627e9b5d7935f41061bb8a5a9'
|
||||
],
|
||||
dicle: [
|
||||
'0xd9d3cd7c1e5d890d969b957f4c5b71a111bbeeabc968f1d0d4538c2663f080a7'
|
||||
],
|
||||
edgeware: [
|
||||
'0x742a2ca70c2fda6cee4f8df98d64c4c670a052d9568058982dad9d5a7a135c5b'
|
||||
],
|
||||
@@ -138,12 +138,6 @@ export const knownGenesis: KnownGenesis = {
|
||||
pendulum: [
|
||||
'0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86'
|
||||
],
|
||||
pezkuwi: [
|
||||
'0xbb4a61ab0c4b8c12f5eab71d0c86c482e03a275ecdafee678dea712474d33d75'
|
||||
],
|
||||
pezkuwichain: [
|
||||
'0x32154fd2c844f928c82964ff66168b41b15fc235f3a956d14393734c1ed4326b'
|
||||
],
|
||||
phala: [
|
||||
'0x1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736'
|
||||
],
|
||||
@@ -218,7 +212,7 @@ export const knownGenesis: KnownGenesis = {
|
||||
'0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa'
|
||||
],
|
||||
zagros: [
|
||||
'0x297f5a4d105b4b28312586ff1915572ffe4ee015ff772b76399ecbff25a22026'
|
||||
'0x1b0b4727bbb5e44ed587d1056b4ad537ffb330034509a58866a088d77e792cd5'
|
||||
],
|
||||
zeitgeist: [
|
||||
'0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060'
|
||||
|
||||
@@ -3,19 +3,12 @@
|
||||
|
||||
/// <reference types="@pezkuwi/dev-test/globals.d.ts" />
|
||||
|
||||
import type { BizinikwiNetwork } from './types.js';
|
||||
|
||||
import { knownGenesis, knownIcon, knownLedger, knownTestnet } from './defaults/index.js';
|
||||
import { allNetworks, availableNetworks, selectableNetworks } from './index.js';
|
||||
|
||||
describe('availableNetworks', (): void => {
|
||||
it('has the correct starting order', (): void => {
|
||||
expect(availableNetworks.slice(0, 3).map(({ prefix }) => prefix)).toEqual([0, 2, 42]);
|
||||
});
|
||||
|
||||
it('has a sorted list (first external, last external)', (): void => {
|
||||
expect(availableNetworks[3].displayName).toEqual('3DP network');
|
||||
expect(availableNetworks[availableNetworks.length - 1].displayName).toEqual('ZERO');
|
||||
it('lists the Pezkuwi networks first, in their declared order', (): void => {
|
||||
expect(availableNetworks.map(({ network }) => network)).toEqual(['pezkuwi', 'zagros', 'bizinikiwi']);
|
||||
});
|
||||
|
||||
it('has no ignored networks', (): void => {
|
||||
@@ -70,51 +63,52 @@ describe('availableNetworks', (): void => {
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it('has all the correct fields', (): void => {
|
||||
expect(availableNetworks[0]).toEqual({
|
||||
decimals: [10],
|
||||
displayName: 'Polkadot Relay Chain',
|
||||
genesisHash: [
|
||||
'0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3'
|
||||
],
|
||||
hasLedgerSupport: true,
|
||||
icon: 'polkadot',
|
||||
isIgnored: false,
|
||||
isTestnet: false,
|
||||
network: 'polkadot',
|
||||
prefix: 0,
|
||||
slip44: 354,
|
||||
standardAccount: '*25519',
|
||||
symbols: ['DOT'],
|
||||
website: 'https://polkadot.network'
|
||||
// What the nodes report (system_properties) and what a wallet formats
|
||||
// addresses with must agree: ss58Format 42, HEZ, 12 decimals.
|
||||
it('gives the Pezkuwi chains the format their nodes report', (): void => {
|
||||
for (const network of ['pezkuwi', 'zagros']) {
|
||||
const n = availableNetworks.find((a) => a.network === network);
|
||||
|
||||
expect(n && { decimals: n.decimals, prefix: n.prefix, symbols: n.symbols }).toEqual({
|
||||
decimals: [12],
|
||||
prefix: 42,
|
||||
symbols: ['HEZ']
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
it('knows Zagros by its genesis, and not the mainnet while it is relaunched', (): void => {
|
||||
expect(availableNetworks.find((a) => a.network === 'zagros')?.genesisHash).toEqual([
|
||||
'0x1b0b4727bbb5e44ed587d1056b4ad537ffb330034509a58866a088d77e792cd5'
|
||||
]);
|
||||
expect(availableNetworks.find((a) => a.network === 'pezkuwi')?.genesisHash).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('allNetworks', (): void => {
|
||||
it('has no ss58 duplicates', (): void => {
|
||||
const dupes: BizinikwiNetwork[] = [];
|
||||
const uniques: BizinikwiNetwork[] = [];
|
||||
// Upstream's registry gives every prefix to one network. The Pezkuwi chains
|
||||
// share the generic format 42 by design; any other prefix stays unique.
|
||||
it('shares an ss58 prefix only at 42', (): void => {
|
||||
const seen = new Map<number, string[]>();
|
||||
|
||||
allNetworks.forEach((a): void => {
|
||||
if (uniques.some((u) => u.prefix === a.prefix)) {
|
||||
dupes.push(a);
|
||||
} else {
|
||||
uniques.push(a);
|
||||
}
|
||||
allNetworks.forEach(({ network, prefix }): void => {
|
||||
seen.set(prefix, [...(seen.get(prefix) || []), network]);
|
||||
});
|
||||
|
||||
expect(dupes).toEqual([]);
|
||||
expect([...seen.entries()].filter(([prefix, networks]) => prefix !== 42 && networks.length > 1)).toEqual([]);
|
||||
});
|
||||
|
||||
it('has no two networks claiming one genesis', (): void => {
|
||||
const hashes = allNetworks.flatMap(({ genesisHash }) => genesisHash);
|
||||
|
||||
expect(hashes.length).toEqual(new Set(hashes).size);
|
||||
});
|
||||
});
|
||||
|
||||
describe('selectableNetworks', (): void => {
|
||||
it('has the correct starting order', (): void => {
|
||||
expect(selectableNetworks.slice(0, 3).map(({ prefix }) => prefix)).toEqual([0, 2, 42]);
|
||||
});
|
||||
|
||||
it('has a sorted list (first external, last external)', (): void => {
|
||||
expect(selectableNetworks[3].displayName).toEqual('3DP network');
|
||||
expect(selectableNetworks[selectableNetworks.length - 1].displayName).toEqual('Zeitgeist');
|
||||
// selectable = has a genesis, or uses the generic format 42; every Pezkuwi
|
||||
// network uses 42, so the mainnet stays selectable while it has no genesis
|
||||
it('offers every Pezkuwi network', (): void => {
|
||||
expect(selectableNetworks.map(({ network }) => network)).toEqual(['pezkuwi', 'zagros', 'bizinikiwi']);
|
||||
});
|
||||
});
|
||||
@@ -5,27 +5,29 @@ import type { BizinikwiNetwork, KnownBizinikiwi, Network } from './types.js';
|
||||
|
||||
import { knownGenesis, knownIcon, knownLedger, knownTestnet } from './defaults/index.js';
|
||||
|
||||
// These are known prefixes that are not sorted
|
||||
const UNSORTED = [0, 2, 42];
|
||||
// Prefixes kept in their declared order at the head of the list
|
||||
const UNSORTED = [42];
|
||||
const TESTNETS = ['testnet'];
|
||||
|
||||
const customNetworks: KnownBizinikiwi[] = [
|
||||
// The Pezkuwi chains encode addresses with the generic prefix 42, the format
|
||||
// their nodes report (system_properties: ss58Format 42, HEZ, 12 decimals).
|
||||
{
|
||||
decimals: [10],
|
||||
decimals: [12],
|
||||
displayName: 'Pezkuwi Relay Chain',
|
||||
network: 'pezkuwi',
|
||||
prefix: 0,
|
||||
prefix: 42,
|
||||
standardAccount: '*25519',
|
||||
symbols: ['PZW'],
|
||||
symbols: ['HEZ'],
|
||||
website: 'https://pezkuwichain.io'
|
||||
},
|
||||
{
|
||||
decimals: [12],
|
||||
displayName: 'Zagros Relay Chain',
|
||||
network: 'zagros',
|
||||
prefix: 2,
|
||||
prefix: 42,
|
||||
standardAccount: '*25519',
|
||||
symbols: ['ZGS'],
|
||||
symbols: ['HEZ'],
|
||||
website: 'https://zagros.pezkuwichain.io'
|
||||
},
|
||||
{
|
||||
@@ -36,15 +38,6 @@ const customNetworks: KnownBizinikiwi[] = [
|
||||
standardAccount: '*25519',
|
||||
symbols: ['BZN'],
|
||||
website: 'https://bizinikiwi.pezkuwichain.io'
|
||||
},
|
||||
{
|
||||
decimals: [18],
|
||||
displayName: 'PezkuwiChain',
|
||||
network: 'pezkuwichain',
|
||||
prefix: 1453,
|
||||
standardAccount: '*25519',
|
||||
symbols: ['PZC'],
|
||||
website: 'https://network.pezkuwichain.io'
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
Reference in new issue
Block a user