From 98b01a462dfc8d3280396d76c887ff8a3e1cd2e5 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 12 Nov 2020 16:33:26 +0100 Subject: [PATCH] Mark Polkadot 26 upgrade (#2843) --- .../types-known/src/upgrades/index.spec.ts | 10 +++++++ packages/types-known/src/upgrades/index.ts | 29 +++++++++++++++---- packages/types/src/types/registry.ts | 1 + 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 packages/types-known/src/upgrades/index.spec.ts diff --git a/packages/types-known/src/upgrades/index.spec.ts b/packages/types-known/src/upgrades/index.spec.ts new file mode 100644 index 0000000000..6157f53e04 --- /dev/null +++ b/packages/types-known/src/upgrades/index.spec.ts @@ -0,0 +1,10 @@ +// Copyright 2017-2020 @polkadot/types-known authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import all from '.'; + +describe('upgrades', (): void => { + it('is valid', (): void => { + expect(all).toBeDefined(); + }); +}); diff --git a/packages/types-known/src/upgrades/index.ts b/packages/types-known/src/upgrades/index.ts index cd2b96fea4..73f1fe4bcd 100644 --- a/packages/types-known/src/upgrades/index.ts +++ b/packages/types-known/src/upgrades/index.ts @@ -5,16 +5,33 @@ import { ChainUpgrades } from '@polkadot/types/types'; import { ChainUpgradesRaw } from './types'; import BN from 'bn.js'; -import { hexToU8a } from '@polkadot/util'; +import { assert, hexToU8a } from '@polkadot/util'; import kusama from './kusama'; import polkadot from './polkadot'; import westend from './westend'; -function rawToFinal ({ genesisHash, versions }: ChainUpgradesRaw): ChainUpgrades { +/** @internal */ +function checkOrder (network: string, versions: [number, number][]): [number, number][] { + const ooo = versions.filter((curr, index): boolean => { + const prev = versions[index - 1]; + + return index === 0 + ? false + : curr[0] <= prev[0] || curr[1] <= prev[1]; + }); + + assert(!ooo.length, `${network}: Mismatched upgrade ordering: ${JSON.stringify(ooo)}`); + + return versions; +} + +/** @internal */ +function rawToFinal (network: string, { genesisHash, versions }: ChainUpgradesRaw): ChainUpgrades { return { genesisHash: hexToU8a(genesisHash), - versions: versions.map(([blockNumber, specVersion]) => ({ + network, + versions: checkOrder(network, versions).map(([blockNumber, specVersion]) => ({ blockNumber: new BN(blockNumber), specVersion: new BN(specVersion) })) @@ -23,9 +40,9 @@ function rawToFinal ({ genesisHash, versions }: ChainUpgradesRaw): ChainUpgrades // Type overrides for specific spec types & versions as given in runtimeVersion const upgrades: ChainUpgrades[] = [ - rawToFinal(kusama), - rawToFinal(polkadot), - rawToFinal(westend) + rawToFinal('kusama', kusama), + rawToFinal('polkadot', polkadot), + rawToFinal('westend', westend) ]; export default upgrades; diff --git a/packages/types/src/types/registry.ts b/packages/types/src/types/registry.ts index 4ba9b90c8d..0025b8e406 100644 --- a/packages/types/src/types/registry.ts +++ b/packages/types/src/types/registry.ts @@ -21,6 +21,7 @@ export interface ChainUpgradeVersion { export interface ChainUpgrades { genesisHash: Uint8Array; + network: string; versions: ChainUpgradeVersion[]; }