diff --git a/packages/api-base/src/bundle.ts b/packages/api-base/src/bundle.ts index dbf979cc8a..6653a8d307 100644 --- a/packages/api-base/src/bundle.ts +++ b/packages/api-base/src/bundle.ts @@ -1,4 +1,4 @@ -// Copyright 2017-2022 @polkadot/api-contract authors & contributors +// Copyright 2017-2022 @polkadot/api-base authors & contributors // SPDX-License-Identifier: Apache-2.0 export { packageInfo } from './packageInfo'; diff --git a/packages/api-base/src/detectOther.ts b/packages/api-base/src/detectOther.ts index c9ddad5af9..ab56a83c19 100644 --- a/packages/api-base/src/detectOther.ts +++ b/packages/api-base/src/detectOther.ts @@ -1,4 +1,4 @@ -// Copyright 2017-2022 @polkadot/api-contract authors & contributors +// Copyright 2017-2022 @polkadot/api-base authors & contributors // SPDX-License-Identifier: Apache-2.0 import { packageInfo as rpcInfo } from '@polkadot/rpc-core/packageInfo'; diff --git a/packages/api-base/src/index.ts b/packages/api-base/src/index.ts index 33c528120f..711ec511b7 100644 --- a/packages/api-base/src/index.ts +++ b/packages/api-base/src/index.ts @@ -1,4 +1,4 @@ -// Copyright 2017-2022 @polkadot/api-contract authors & contributors +// Copyright 2017-2022 @polkadot/api-base authors & contributors // SPDX-License-Identifier: Apache-2.0 import './detectPackage'; diff --git a/packages/api-base/src/mod.ts b/packages/api-base/src/mod.ts index 40312d9520..a1418e7b75 100644 --- a/packages/api-base/src/mod.ts +++ b/packages/api-base/src/mod.ts @@ -1,4 +1,4 @@ -// Copyright 2017-2022 @polkadot/api-contract authors & contributors +// Copyright 2017-2022 @polkadot/api-base authors & contributors // SPDX-License-Identifier: Apache-2.0 export * from './index'; diff --git a/packages/types-known/src/upgrades/e2e/index.spec.ts b/packages/types-known/src/upgrades/e2e/index.spec.ts index df5df1b02f..6ed558278c 100644 --- a/packages/types-known/src/upgrades/e2e/index.spec.ts +++ b/packages/types-known/src/upgrades/e2e/index.spec.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { HexString } from '@polkadot/util/types'; -import type { ChainUpgradesGenerated } from '../types'; +import type { ChainUpgradesExpanded } from '../types'; import fs from 'fs'; @@ -20,7 +20,7 @@ const urls = { describe.each(keys)('generate %s', (chain): void => { const avail = allGen[chain]; - const final: ChainUpgradesGenerated = []; + const final: ChainUpgradesExpanded = []; let api: ApiPromise; beforeAll(async (): Promise => { @@ -34,9 +34,9 @@ describe.each(keys)('generate %s', (chain): void => { // Auto-generated from on-chain data & manual definitions, do not edit /* eslint-disable quotes, comma-spacing */ -import type { ChainUpgradesGenerated } from '../types'; +import type { ChainUpgradesExpanded } from '../types'; -const upgrades: ChainUpgradesGenerated = ${JSON.stringify(final, null, 2)}; +const upgrades: ChainUpgradesExpanded = ${JSON.stringify(final, null, 2)}; export default upgrades; `); diff --git a/packages/types-known/src/upgrades/e2e/kusama.ts b/packages/types-known/src/upgrades/e2e/kusama.ts index 38be16179c..873ffd9a83 100644 --- a/packages/types-known/src/upgrades/e2e/kusama.ts +++ b/packages/types-known/src/upgrades/e2e/kusama.ts @@ -4,9 +4,9 @@ // Auto-generated from on-chain data & manual definitions, do not edit /* eslint-disable quotes, comma-spacing */ -import type { ChainUpgradesGenerated } from '../types'; +import type { ChainUpgradesExpanded } from '../types'; -const upgrades: ChainUpgradesGenerated = [ +const upgrades: ChainUpgradesExpanded = [ [ 0, 1020, diff --git a/packages/types-known/src/upgrades/e2e/polkadot.ts b/packages/types-known/src/upgrades/e2e/polkadot.ts index 214f650018..faeb2a5331 100644 --- a/packages/types-known/src/upgrades/e2e/polkadot.ts +++ b/packages/types-known/src/upgrades/e2e/polkadot.ts @@ -4,9 +4,9 @@ // Auto-generated from on-chain data & manual definitions, do not edit /* eslint-disable quotes, comma-spacing */ -import type { ChainUpgradesGenerated } from '../types'; +import type { ChainUpgradesExpanded } from '../types'; -const upgrades: ChainUpgradesGenerated = [ +const upgrades: ChainUpgradesExpanded = [ [ 0, 0, diff --git a/packages/types-known/src/upgrades/e2e/westend.ts b/packages/types-known/src/upgrades/e2e/westend.ts index 24a13d3b7b..00d63a0221 100644 --- a/packages/types-known/src/upgrades/e2e/westend.ts +++ b/packages/types-known/src/upgrades/e2e/westend.ts @@ -4,9 +4,9 @@ // Auto-generated from on-chain data & manual definitions, do not edit /* eslint-disable quotes, comma-spacing */ -import type { ChainUpgradesGenerated } from '../types'; +import type { ChainUpgradesExpanded } from '../types'; -const upgrades: ChainUpgradesGenerated = [ +const upgrades: ChainUpgradesExpanded = [ [ 214356, 4, diff --git a/packages/types-known/src/upgrades/index.spec.ts b/packages/types-known/src/upgrades/index.spec.ts index c0f9b75e1f..5e7e696224 100644 --- a/packages/types-known/src/upgrades/index.spec.ts +++ b/packages/types-known/src/upgrades/index.spec.ts @@ -1,7 +1,9 @@ // Copyright 2017-2022 @polkadot/types-known authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { u8aEq } from '@polkadot/util'; +import type { ChainUpgradesExpanded, ChainUpgradesRaw } from './types'; + +import { stringify, u8aEq } from '@polkadot/util'; import * as allGen from './e2e'; import * as allMan from './manual'; @@ -40,6 +42,20 @@ const TESTS: TestDef[] = [ } ]; +function checkOrder (network: string, versions: [number, number, ...unknown[]][]): void { + const ooo = versions.filter((curr, index): boolean => { + const prev = versions[index - 1]; + + return index === 0 + ? false + : curr[0] <= prev[0] || curr[1] <= prev[1]; + }); + + if (ooo.length) { + throw new Error(`${network}: Mismatched upgrade ordering: ${stringify(ooo)}`); + } +} + describe('generated', (): void => { it('should have all the chains', (): void => { expect(Object.keys(allMan).sort()).toEqual(Object.keys(allGen).sort()); @@ -58,6 +74,14 @@ describe('generated', (): void => { throw new Error(`${chain}:: missing generated apis found, run yarn test:one packages/types-known/src/upgrades/e2e`); } }); + + it('manual should be correctly ordered', (): void => { + checkOrder(chain, (allGen as Record)[chain]); + }); + + it('generated should be correctly ordered', (): void => { + checkOrder(chain, (allMan as Record)[chain]); + }); }); }); diff --git a/packages/types-known/src/upgrades/index.ts b/packages/types-known/src/upgrades/index.ts index 8b5796a0a3..172c7c27b2 100644 --- a/packages/types-known/src/upgrades/index.ts +++ b/packages/types-known/src/upgrades/index.ts @@ -2,39 +2,23 @@ // SPDX-License-Identifier: Apache-2.0 import type { ChainUpgrades } from '@polkadot/types/types'; -import type { ChainUpgradesGenerated } from './types'; +import type { HexString } from '@polkadot/util/types'; +import type { ChainUpgradesExpanded } from './types'; import { selectableNetworks } from '@polkadot/networks'; -import { BN, hexToU8a, stringify } from '@polkadot/util'; +import { BN, hexToU8a } from '@polkadot/util'; import * as allKnown from './e2e'; // testnets are not available in the networks map -const NET_EXTRA: Record = { +const NET_EXTRA: Record = { westend: { genesisHash: ['0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e'] } }; /** @internal */ -function checkOrder (network: string, versions: ChainUpgradesGenerated): ChainUpgradesGenerated { - const ooo = versions.filter((curr, index): boolean => { - const prev = versions[index - 1]; - - return index === 0 - ? false - : curr[0] <= prev[0] || curr[1] <= prev[1]; - }); - - if (ooo.length) { - throw new Error(`${network}: Mismatched upgrade ordering: ${stringify(ooo)}`); - } - - return versions; -} - -/** @internal */ -function mapRaw ([network, versions]: [string, ChainUpgradesGenerated]): ChainUpgrades { +function mapRaw ([network, versions]: [string, ChainUpgradesExpanded]): ChainUpgrades { const chain = selectableNetworks.find((n) => n.network === network) || NET_EXTRA[network]; if (!chain) { @@ -44,7 +28,7 @@ function mapRaw ([network, versions]: [string, ChainUpgradesGenerated]): ChainUp return { genesisHash: hexToU8a(chain.genesisHash[0]), network, - versions: checkOrder(network, versions).map(([blockNumber, specVersion, apis]) => ({ + versions: versions.map(([blockNumber, specVersion, apis]) => ({ apis, blockNumber: new BN(blockNumber), specVersion: new BN(specVersion) @@ -53,6 +37,6 @@ function mapRaw ([network, versions]: [string, ChainUpgradesGenerated]): ChainUp } // Type overrides for specific spec types & versions as given in runtimeVersion -const upgrades = Object.entries(allKnown).map(mapRaw); +const upgrades = Object.entries(allKnown).map(mapRaw); export default upgrades; diff --git a/packages/types-known/src/upgrades/manual/kusama.ts b/packages/types-known/src/upgrades/manual/kusama.ts index 49ea4d3cb8..669d0e5feb 100644 --- a/packages/types-known/src/upgrades/manual/kusama.ts +++ b/packages/types-known/src/upgrades/manual/kusama.ts @@ -1,9 +1,9 @@ // Copyright 2017-2022 @polkadot/types-known authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { ChainUpgradesManual } from '../types'; +import type { ChainUpgradesRaw } from '../types'; -const upgrades: ChainUpgradesManual = [ +const upgrades: ChainUpgradesRaw = [ [0, 1020], [26669, 1021], [38245, 1022], [54248, 1023], [59659, 1024], [67651, 1025], [82191, 1027], [83238, 1028], [101503, 1029], [203466, 1030], [295787, 1031], [461692, 1032], [504329, 1033], [569327, 1038], [587687, 1039], diff --git a/packages/types-known/src/upgrades/manual/polkadot.ts b/packages/types-known/src/upgrades/manual/polkadot.ts index 3fc717e570..62ea615399 100644 --- a/packages/types-known/src/upgrades/manual/polkadot.ts +++ b/packages/types-known/src/upgrades/manual/polkadot.ts @@ -1,9 +1,9 @@ // Copyright 2017-2022 @polkadot/types-known authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { ChainUpgradesManual } from '../types'; +import type { ChainUpgradesRaw } from '../types'; -const upgrades: ChainUpgradesManual = [ +const upgrades: ChainUpgradesRaw = [ [0, 0], [29231, 1], [188836, 5], [199405, 6], [214264, 7], [244358, 8], [303079, 9], [314201, 10], [342400, 11], [443963, 12], [528470, 13], [687751, 14], [746085, 15], [787923, 16], [799302, 17], diff --git a/packages/types-known/src/upgrades/manual/westend.ts b/packages/types-known/src/upgrades/manual/westend.ts index c6b61f838b..cc80721707 100644 --- a/packages/types-known/src/upgrades/manual/westend.ts +++ b/packages/types-known/src/upgrades/manual/westend.ts @@ -1,9 +1,9 @@ // Copyright 2017-2022 @polkadot/types-known authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { ChainUpgradesManual } from '../types'; +import type { ChainUpgradesRaw } from '../types'; -const upgrades: ChainUpgradesManual = [ +const upgrades: ChainUpgradesRaw = [ [214356, 4], [392764, 7], [409740, 8], [809976, 20], [877581, 24], [879238, 25], [889472, 26], [902937, 27], [932751, 28], [991142, 29], [1030162, 31], [1119657, 32], [1199282, 33], [1342534, 34], [1392263, 35], diff --git a/packages/types-known/src/upgrades/types.ts b/packages/types-known/src/upgrades/types.ts index 9f8c0e7a35..ab35aa16d4 100644 --- a/packages/types-known/src/upgrades/types.ts +++ b/packages/types-known/src/upgrades/types.ts @@ -3,8 +3,6 @@ import type { HexString } from '@polkadot/util/types'; -export type ChainUpgradesRaw = [number, number][]; +export type ChainUpgradesRaw = [blockNumber: number, specVersion: number][]; -export type ChainUpgradesGenerated = [number, number, [HexString, number][]][]; - -export type ChainUpgradesManual = [number, number][]; +export type ChainUpgradesExpanded = [blockNumber: number, specVersion: number, runtimeApis: [apiHash: HexString, apiVersion: number][]][]; diff --git a/packages/types-known/src/util.ts b/packages/types-known/src/util.ts index a8a0e9b3fa..eb55614a08 100644 --- a/packages/types-known/src/util.ts +++ b/packages/types-known/src/util.ts @@ -13,20 +13,26 @@ import typesChain from './chain'; import typesSpec from './spec'; import upgrades from './upgrades'; +/** + * @description Perform the callback function using the stringified spec/chain + * @internal + * */ function withNames (chainName: Text | string, specName: Text | string, fn: (c: string, s: string) => T): T { return fn(chainName.toString(), specName.toString()); } -// flatten a VersionedType[] into a Record -/** @internal */ +/** + * @descriptionFflatten a VersionedType[] into a Record + * @internal + * */ function filterVersions (versions: OverrideVersionedType[] = [], specVersion: number): RegistryTypes { return versions .filter(({ minmax: [min, max] }) => (min === undefined || min === null || specVersion >= min) && (max === undefined || max === null || specVersion <= max) ) - .reduce((result: RegistryTypes, { types }): RegistryTypes => - objectSpread(result, types), {} + .reduce((result: RegistryTypes, { types }) => + objectSpread(result, types), {} ); } @@ -65,6 +71,9 @@ export function getSpecTypes ({ knownTypes }: Registry, chainName: Text | string ); } +/** + * @description Based on the chain or spec, return the hasher used + */ export function getSpecHasher ({ knownTypes }: Registry, chainName: Text | string, specName: Text | string): CodecHasher | null { return withNames(chainName, specName, (c, s) => knownTypes.hasher ||