diff --git a/packages/types-known/src/spec/kusama.ts b/packages/types-known/src/spec/kusama.ts index 8ca4563055..169880b639 100644 --- a/packages/types-known/src/spec/kusama.ts +++ b/packages/types-known/src/spec/kusama.ts @@ -5,6 +5,8 @@ import type { OverrideVersionedType } from '@polkadot/types/types'; +import { mapXcm } from '@polkadot/types/interfaces/xcm/definitions'; + const sharedTypes = { CompactAssignments: 'CompactAssignmentsWith24', RawSolution: 'RawSolutionWith24', @@ -191,15 +193,25 @@ const versioned: OverrideVersionedType[] = [ } }, { - minmax: [9010, undefined], + minmax: [9010, 9099], types: { ...sharedTypes, - AssetInstance: 'AssetInstanceV0', - MultiAsset: 'MultiAssetV0', - MultiLocation: 'MultiLocationV0', - Response: 'ResponseV0', - Xcm: 'XcmV0', - XcmOrder: 'XcmOrderV0' + ...mapXcm('V0') + } + }, + { + // jump from 9100 to 9110, however align with Rococo + minmax: [9100, 9105], + types: { + ...sharedTypes, + ...mapXcm('V1') + } + }, + { + // metadata v14 + minmax: [9106, undefined], + types: { + ...sharedTypes } } ]; diff --git a/packages/types-known/src/spec/polkadot.ts b/packages/types-known/src/spec/polkadot.ts index 8b3e25d149..8eb3415997 100644 --- a/packages/types-known/src/spec/polkadot.ts +++ b/packages/types-known/src/spec/polkadot.ts @@ -74,7 +74,14 @@ const versioned: OverrideVersionedType[] = [ } }, { - minmax: [30, undefined], + minmax: [30, 9109], + types: { + ...sharedTypes + } + }, + { + // metadata v14 + minmax: [9110, undefined], types: { ...sharedTypes } diff --git a/packages/types-known/src/spec/rococo.ts b/packages/types-known/src/spec/rococo.ts index f6f33a68c2..fe8a7000e5 100644 --- a/packages/types-known/src/spec/rococo.ts +++ b/packages/types-known/src/spec/rococo.ts @@ -5,6 +5,8 @@ import type { OverrideVersionedType } from '@polkadot/types/types'; +import { mapXcm } from '@polkadot/types/interfaces/xcm/definitions'; + // structs need to be in order /* eslint-disable sort-keys */ @@ -38,15 +40,24 @@ const versioned: OverrideVersionedType[] = [ } }, { - minmax: [229, undefined], + minmax: [229, 9099], types: { ...sharedTypes, - AssetInstance: 'AssetInstanceV0', - MultiAsset: 'MultiAssetV0', - MultiLocation: 'MultiLocationV0', - Response: 'ResponseV0', - Xcm: 'XcmV0', - XcmOrder: 'XcmOrderV0' + ...mapXcm('V0') + } + }, + { + minmax: [9100, 9105], + types: { + ...sharedTypes, + ...mapXcm('V1') + } + }, + { + // metadata v14 + minmax: [9106, undefined], + types: { + ...sharedTypes } } ]; diff --git a/packages/types-known/src/spec/westend.ts b/packages/types-known/src/spec/westend.ts index c117eb0af4..e49428bf8e 100644 --- a/packages/types-known/src/spec/westend.ts +++ b/packages/types-known/src/spec/westend.ts @@ -5,6 +5,8 @@ import type { OverrideVersionedType } from '@polkadot/types/types'; +import { mapXcm } from '@polkadot/types/interfaces/xcm/definitions'; + const sharedTypes = { // 16 validators CompactAssignments: 'CompactAssignmentsWith16', @@ -89,15 +91,24 @@ const versioned: OverrideVersionedType[] = [ } }, { - minmax: [50, undefined], + minmax: [50, 9099], types: { ...sharedTypes, - AssetInstance: 'AssetInstanceV0', - MultiAsset: 'MultiAssetV0', - MultiLocation: 'MultiLocationV0', - Response: 'ResponseV0', - Xcm: 'XcmV0', - XcmOrder: 'XcmOrderV0' + ...mapXcm('V0') + } + }, + { + minmax: [9100, 9105], + types: { + ...sharedTypes, + ...mapXcm('V1') + } + }, + { + // metadata v14 + minmax: [9106, undefined], + types: { + ...sharedTypes } } ]; diff --git a/packages/types-known/src/upgrades/westend.ts b/packages/types-known/src/upgrades/westend.ts index be8211c0b9..5779ba1f4a 100644 --- a/packages/types-known/src/upgrades/westend.ts +++ b/packages/types-known/src/upgrades/westend.ts @@ -11,7 +11,7 @@ const upgrades: ChainUpgradesRaw = [ [2549864, 45], [3925782, 46], [3925843, 47], [4207800, 48], [4627944, 49], [5124076, 50], [5478664, 900], [5482450, 9000], [5584305, 9010], [5784566, 9030], [5879822, 9031], [5896856, 9032], [5897316, 9033], [6117927, 9050], [6210274, 9070], - [6379314, 9080], [6979141, 9090] + [6379314, 9080], [6979141, 9090], [7568453, 9100] ]; export default upgrades; diff --git a/packages/types/src/augment/registry.ts b/packages/types/src/augment/registry.ts index 8262510d6c..12ec1a4f95 100644 --- a/packages/types/src/augment/registry.ts +++ b/packages/types/src/augment/registry.ts @@ -57,7 +57,7 @@ import type { Multiplier } from '@polkadot/types/interfaces/txpayment'; import type { ClassDetails, ClassId, ClassMetadata, DepositBalance, DepositBalanceOf, DestroyWitness, InstanceDetails, InstanceId, InstanceMetadata } from '@polkadot/types/interfaces/uniques'; import type { Multisig, Timepoint } from '@polkadot/types/interfaces/utility'; import type { VestingInfo } from '@polkadot/types/interfaces/vesting'; -import type { AssetInstance, AssetInstanceV0, AssetInstanceV1, BodyId, BodyPart, DoubleEncodedCall, Fungibility, InboundStatus, InstructionV2, InteriorMultiLocation, Junction, JunctionV0, JunctionV1, JunctionV2, Junctions, JunctionsV1, JunctionsV2, MultiAsset, MultiAssetFilter, MultiAssetFilterV1, MultiAssetFilterV2, MultiAssetV0, MultiAssetV1, MultiAssetV2, MultiAssets, MultiAssetsV1, MultiAssetsV2, MultiLocation, MultiLocationV0, MultiLocationV1, MultiLocationV2, NetworkId, OriginKindV0, OriginKindV1, OriginKindV2, OutboundStatus, Outcome, QueryId, QueryStatus, QueueConfigData, Response, ResponseV0, ResponseV1, ResponseV2, ResponseV2Error, ResponseV2Result, VersionMigrationStage, VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, VersionedXcm, WeightLimitV2, WildFungibility, WildMultiAsset, WildMultiAssetV1, Xcm, XcmAssetId, XcmError, XcmErrorV0, XcmErrorV1, XcmErrorV2, XcmOrder, XcmOrderV0, XcmOrderV1, XcmOrigin, XcmOriginKind, XcmV0, XcmV1, XcmV2, XcmVersion, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm'; +import type { AssetInstance, AssetInstanceV0, AssetInstanceV1, AssetInstanceV2, BodyId, BodyPart, DoubleEncodedCall, Fungibility, InboundStatus, InstructionV2, InteriorMultiLocation, Junction, JunctionV0, JunctionV1, JunctionV2, Junctions, JunctionsV1, JunctionsV2, MultiAsset, MultiAssetFilter, MultiAssetFilterV1, MultiAssetFilterV2, MultiAssetV0, MultiAssetV1, MultiAssetV2, MultiAssets, MultiAssetsV1, MultiAssetsV2, MultiLocation, MultiLocationV0, MultiLocationV1, MultiLocationV2, NetworkId, OriginKindV0, OriginKindV1, OriginKindV2, OutboundStatus, Outcome, QueryId, QueryStatus, QueueConfigData, Response, ResponseV0, ResponseV1, ResponseV2, ResponseV2Error, ResponseV2Result, VersionMigrationStage, VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, VersionedXcm, WeightLimitV2, WildFungibility, WildMultiAsset, WildMultiAssetV1, WildMultiAssetV2, Xcm, XcmAssetId, XcmError, XcmErrorV0, XcmErrorV1, XcmErrorV2, XcmOrder, XcmOrderV0, XcmOrderV1, XcmOrderV2, XcmOrigin, XcmOriginKind, XcmV0, XcmV1, XcmV2, XcmVersion, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm'; declare module '@polkadot/types/types/registry' { export interface InterfaceTypes { @@ -104,6 +104,7 @@ declare module '@polkadot/types/types/registry' { AssetInstance: AssetInstance; AssetInstanceV0: AssetInstanceV0; AssetInstanceV1: AssetInstanceV1; + AssetInstanceV2: AssetInstanceV2; AssetMetadata: AssetMetadata; AssetOptions: AssetOptions; AssignmentId: AssignmentId; @@ -1022,6 +1023,7 @@ declare module '@polkadot/types/types/registry' { WildFungibility: WildFungibility; WildMultiAsset: WildMultiAsset; WildMultiAssetV1: WildMultiAssetV1; + WildMultiAssetV2: WildMultiAssetV2; WinnersData: WinnersData; WinnersDataTuple: WinnersDataTuple; WinningData: WinningData; @@ -1036,6 +1038,7 @@ declare module '@polkadot/types/types/registry' { XcmOrder: XcmOrder; XcmOrderV0: XcmOrderV0; XcmOrderV1: XcmOrderV1; + XcmOrderV2: XcmOrderV2; XcmOrigin: XcmOrigin; XcmOriginKind: XcmOriginKind; XcmpMessageFormat: XcmpMessageFormat; diff --git a/packages/types/src/interfaces/xcm/definitions.ts b/packages/types/src/interfaces/xcm/definitions.ts index afb8af655c..3ea1020034 100644 --- a/packages/types/src/interfaces/xcm/definitions.ts +++ b/packages/types/src/interfaces/xcm/definitions.ts @@ -10,25 +10,32 @@ import { v0 } from './v0'; import { v1 } from './v1'; import { v2 } from './v2'; +export const XCM_MAPPINGS = ['AssetInstance', 'Junction', 'Junctions', 'MultiAsset', 'MultiAssetFilter', 'MultiLocation', 'Response', 'WildMultiAsset', 'Xcm', 'XcmError', 'XcmOrder']; + +const XCM_LATEST = 'V2'; + +export function mapXcm (version: 'V0' | 'V1' | 'V2'): Record { + return XCM_MAPPINGS.reduce>((all, key) => ({ + ...all, + [key]: `${key}${version}` + }), {}); +} + const xcm = { XcmOrigin: { _enum: { Xcm: 'MultiLocation' } }, - Xcm: 'XcmV1', XcmpMessageFormat: { _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals'] }, - XcmError: 'XcmErrorV1', - XcmOrder: 'XcmOrderV1', XcmAssetId: { _enum: { Concrete: 'MultiLocation', Abstract: 'Bytes' } }, - AssetInstance: 'AssetInstanceV1', Fungibility: { _enum: { Fungible: 'u128', @@ -41,13 +48,10 @@ const xcm = { OutboundStatus: { _enum: ['Ok', 'Suspended'] }, - MultiAssetFilter: 'MultiAssetFilterV1', - MultiAsset: 'MultiAssetV1', MultiAssets: 'Vec', WildFungibility: { _enum: ['Fungible', 'NonFungible'] - }, - WildMultiAsset: 'WildMultiAssetV1' + } }; const location = { @@ -81,9 +85,6 @@ const location = { } }, InteriorMultiLocation: 'Junctions', - Junction: 'JunctionV1', - Junctions: 'JunctionsV1', - MultiLocation: 'MultiLocationV1', NetworkId: { _enum: { Any: 'Null', @@ -102,13 +103,13 @@ export default { ...v0, ...v1, ...v2, + ...mapXcm(XCM_LATEST), DoubleEncodedCall: { encoded: 'Vec' }, XcmOriginKind: { _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm'] }, - Response: 'ResponseV1', Outcome: { _enum: { Complete: 'Weight', diff --git a/packages/types/src/interfaces/xcm/types.ts b/packages/types/src/interfaces/xcm/types.ts index 85bc3696c9..f3aa40717a 100644 --- a/packages/types/src/interfaces/xcm/types.ts +++ b/packages/types/src/interfaces/xcm/types.ts @@ -6,7 +6,7 @@ import type { AccountId, BlockNumber, Weight } from '@polkadot/types/interfaces/ import type { ITuple } from '@polkadot/types/types'; /** @name AssetInstance */ -export interface AssetInstance extends AssetInstanceV1 {} +export interface AssetInstance extends AssetInstanceV2 {} /** @name AssetInstanceV0 */ export interface AssetInstanceV0 extends Enum { @@ -50,6 +50,9 @@ export interface AssetInstanceV1 extends Enum { readonly asBlob: Bytes; } +/** @name AssetInstanceV2 */ +export interface AssetInstanceV2 extends AssetInstanceV1 {} + /** @name BodyId */ export interface BodyId extends Enum { readonly isUnit: boolean; @@ -221,10 +224,10 @@ export interface InstructionV2 extends Enum { export interface InteriorMultiLocation extends Junctions {} /** @name Junction */ -export interface Junction extends JunctionV1 {} +export interface Junction extends JunctionV2 {} /** @name Junctions */ -export interface Junctions extends JunctionsV1 {} +export interface Junctions extends JunctionsV2 {} /** @name JunctionsV1 */ export interface JunctionsV1 extends Enum { @@ -321,10 +324,10 @@ export interface JunctionV1 extends Enum { export interface JunctionV2 extends JunctionV1 {} /** @name MultiAsset */ -export interface MultiAsset extends MultiAssetV1 {} +export interface MultiAsset extends MultiAssetV2 {} /** @name MultiAssetFilter */ -export interface MultiAssetFilter extends MultiAssetFilterV1 {} +export interface MultiAssetFilter extends MultiAssetFilterV2 {} /** @name MultiAssetFilterV1 */ export interface MultiAssetFilterV1 extends Enum { @@ -392,7 +395,7 @@ export interface MultiAssetV1 extends Struct { export interface MultiAssetV2 extends MultiAssetV1 {} /** @name MultiLocation */ -export interface MultiLocation extends MultiLocationV1 {} +export interface MultiLocation extends MultiLocationV2 {} /** @name MultiLocationV0 */ export interface MultiLocationV0 extends Enum { @@ -491,7 +494,7 @@ export interface QueueConfigData extends Struct { } /** @name Response */ -export interface Response extends ResponseV1 {} +export interface Response extends ResponseV2 {} /** @name ResponseV0 */ export interface ResponseV0 extends Enum { @@ -598,7 +601,7 @@ export interface WildFungibility extends Enum { } /** @name WildMultiAsset */ -export interface WildMultiAsset extends WildMultiAssetV1 {} +export interface WildMultiAsset extends WildMultiAssetV2 {} /** @name WildMultiAssetV1 */ export interface WildMultiAssetV1 extends Enum { @@ -610,8 +613,11 @@ export interface WildMultiAssetV1 extends Enum { } & Struct; } +/** @name WildMultiAssetV2 */ +export interface WildMultiAssetV2 extends WildMultiAssetV1 {} + /** @name Xcm */ -export interface Xcm extends XcmV1 {} +export interface Xcm extends XcmV2 {} /** @name XcmAssetId */ export interface XcmAssetId extends Enum { @@ -622,7 +628,7 @@ export interface XcmAssetId extends Enum { } /** @name XcmError */ -export interface XcmError extends XcmErrorV1 {} +export interface XcmError extends XcmErrorV2 {} /** @name XcmErrorV0 */ export interface XcmErrorV0 extends Enum { @@ -734,7 +740,7 @@ export interface XcmErrorV2 extends Enum { } /** @name XcmOrder */ -export interface XcmOrder extends XcmOrderV1 {} +export interface XcmOrder extends XcmOrderV2 {} /** @name XcmOrderV0 */ export interface XcmOrderV0 extends Enum { @@ -833,6 +839,9 @@ export interface XcmOrderV1 extends Enum { } & Struct; } +/** @name XcmOrderV2 */ +export interface XcmOrderV2 extends XcmOrderV1 {} + /** @name XcmOrigin */ export interface XcmOrigin extends Enum { readonly isXcm: boolean; diff --git a/packages/types/src/interfaces/xcm/v2.ts b/packages/types/src/interfaces/xcm/v2.ts index e771a1f143..04d27def24 100644 --- a/packages/types/src/interfaces/xcm/v2.ts +++ b/packages/types/src/interfaces/xcm/v2.ts @@ -7,6 +7,7 @@ import type { DefinitionsTypes } from '../../types'; export const v2: DefinitionsTypes = { + AssetInstanceV2: 'AssetInstanceV1', JunctionV2: 'JunctionV1', JunctionsV2: 'JunctionsV1', MultiAssetsV2: 'MultiAssetsV1', @@ -119,6 +120,7 @@ export const v2: DefinitionsTypes = { Trap: 'u64' } }, + WildMultiAssetV2: 'WildMultiAssetV1', XcmV2: 'Vec', XcmErrorV2: { _enum: { @@ -157,5 +159,6 @@ export const v2: DefinitionsTypes = { UnknownClaim: 'Null', InvalidLocation: 'Null' } - } + }, + XcmOrderV2: 'XcmOrderV1' };