From f75bec7280c5088b249ab5885fd45261c7435038 Mon Sep 17 00:00:00 2001 From: Rikkard29 Date: Sat, 6 Jan 2024 17:27:07 +0100 Subject: [PATCH] Refactor createHeaderPolkadotXCM function --- src/nodes/ParachainNode.ts | 18 ++++++++------- src/nodes/supported/Astar.ts | 4 ++-- src/nodes/supported/Moonbeam.ts | 2 +- src/nodes/supported/Moonriver.ts | 2 +- src/nodes/supported/Shiden.ts | 4 ++-- src/pallets/xcmPallet/utils.ts | 34 +++++++++++++++++++++++++--- src/types.ts | 7 ++++++ src/utils.ts | 39 -------------------------------- 8 files changed, 54 insertions(+), 56 deletions(-) diff --git a/src/nodes/ParachainNode.ts b/src/nodes/ParachainNode.ts index a51c6fb7..c97c7ee2 100644 --- a/src/nodes/ParachainNode.ts +++ b/src/nodes/ParachainNode.ts @@ -15,14 +15,12 @@ import { type TTransferRelayToParaOptions, Parents } from '../types' +import { generateAddressPayload, getFees, getAllNodeProviders, createApiInstance } from '../utils' import { - generateAddressPayload, - getFees, - createHeaderPolkadotXCM, - getAllNodeProviders, - createApiInstance -} from '../utils' -import { constructRelayToParaParameters, createCurrencySpec } from '../pallets/xcmPallet/utils' + constructRelayToParaParameters, + createCurrencySpec, + createPolkadotXcmHeader +} from '../pallets/xcmPallet/utils' export const supportsXTokens = (obj: any): obj is IXTokensTransfer => { return 'transferXTokens' in obj @@ -108,7 +106,7 @@ abstract class ParachainNode { } else if (supportsPolkadotXCM(this)) { return this.transferPolkadotXCM({ api, - header: createHeaderPolkadotXCM(scenario, this.version, paraId), + header: this.createPolkadotXcmHeader(scenario, paraId), addressSelection: generateAddressPayload( api, scenario, @@ -155,6 +153,10 @@ abstract class ParachainNode { scenario === 'ParaToRelay' ? Parents.ONE : Parents.ZERO ) } + + createPolkadotXcmHeader(scenario: TScenario, paraId?: number): any { + return createPolkadotXcmHeader(scenario, this.version, paraId) + } } export default ParachainNode diff --git a/src/nodes/supported/Astar.ts b/src/nodes/supported/Astar.ts index 8202943a..176436ae 100644 --- a/src/nodes/supported/Astar.ts +++ b/src/nodes/supported/Astar.ts @@ -14,7 +14,7 @@ import { type IXTokensTransfer, type XTokensTransferInput } from '../../types' -import { generateAddressPayload, getFees, createHeaderPolkadotXCM } from '../../utils' +import { generateAddressPayload, getFees } from '../../utils' import ParachainNode, { supportsPolkadotXCM, supportsXTokens } from '../ParachainNode' import PolkadotXCMTransferImpl from '../PolkadotXCMTransferImpl' import XTokensTransferImpl from '../XTokensTransferImpl' @@ -69,7 +69,7 @@ class Astar extends ParachainNode implements IPolkadotXCMTransfer, IXTokensTrans } else if (supportsPolkadotXCM(this)) { return this.transferPolkadotXCM({ api, - header: createHeaderPolkadotXCM(scenario, this.version, paraId), + header: this.createPolkadotXcmHeader(scenario, paraId), addressSelection: generateAddressPayload( api, scenario, diff --git a/src/nodes/supported/Moonbeam.ts b/src/nodes/supported/Moonbeam.ts index b9591917..069147e8 100644 --- a/src/nodes/supported/Moonbeam.ts +++ b/src/nodes/supported/Moonbeam.ts @@ -19,7 +19,7 @@ class Moonbeam extends ParachainNode implements IXTokensTransfer { transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall { const { currency, currencyID } = input - const currencySelection = currency === 'GLMR' ? 'SelfReserve ' : { ForeignAsset: currencyID } + const currencySelection = currency === 'GLMR' ? 'SelfReserve' : { ForeignAsset: currencyID } return XTokensTransferImpl.transferXTokens(input, currencySelection) } diff --git a/src/nodes/supported/Moonriver.ts b/src/nodes/supported/Moonriver.ts index aaea4a60..a33b0c08 100644 --- a/src/nodes/supported/Moonriver.ts +++ b/src/nodes/supported/Moonriver.ts @@ -19,7 +19,7 @@ class Moonriver extends ParachainNode implements IXTokensTransfer { transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall { const { currency, currencyID } = input - const currencySelection = currency === 'MOVR' ? 'SelfReserve ' : { ForeignAsset: currencyID } + const currencySelection = currency === 'MOVR' ? 'SelfReserve' : { ForeignAsset: currencyID } return XTokensTransferImpl.transferXTokens(input, currencySelection) } diff --git a/src/nodes/supported/Shiden.ts b/src/nodes/supported/Shiden.ts index a959e4a5..2389713c 100644 --- a/src/nodes/supported/Shiden.ts +++ b/src/nodes/supported/Shiden.ts @@ -12,7 +12,7 @@ import { type TNode, type TScenario } from '../../types' -import { createHeaderPolkadotXCM, generateAddressPayload, getFees } from '../../utils' +import { generateAddressPayload, getFees } from '../../utils' import ParachainNode, { supportsPolkadotXCM, supportsXTokens } from '../ParachainNode' import PolkadotXCMTransferImpl from '../PolkadotXCMTransferImpl' import XTokensTransferImpl from '../XTokensTransferImpl' @@ -70,7 +70,7 @@ class Shiden extends ParachainNode implements IPolkadotXCMTransfer, IXTokensTran } else if (supportsPolkadotXCM(this)) { return this.transferPolkadotXCM({ api, - header: createHeaderPolkadotXCM(scenario, this.version, paraId), + header: this.createPolkadotXcmHeader(scenario, paraId), addressSelection: generateAddressPayload( api, scenario, diff --git a/src/pallets/xcmPallet/utils.ts b/src/pallets/xcmPallet/utils.ts index 127e41ba..4ac60030 100644 --- a/src/pallets/xcmPallet/utils.ts +++ b/src/pallets/xcmPallet/utils.ts @@ -1,5 +1,11 @@ -import { type Version, type TTransferRelayToParaOptions, Parents } from '../../types' -import { createHeaderPolkadotXCM, generateAddressPayload } from '../../utils' +import { + Version, + type TTransferRelayToParaOptions, + Parents, + type PolkadotXCMHeader, + type TScenario +} from '../../types' +import { generateAddressPayload } from '../../utils' import { getParaId } from '../assets' export const constructRelayToParaParameters = ( @@ -9,7 +15,7 @@ export const constructRelayToParaParameters = ( ): any[] => { const paraId = paraIdTo ?? getParaId(destination) const parameters = [ - createHeaderPolkadotXCM('RelayToPara', version, paraId), + createPolkadotXcmHeader('RelayToPara', version, paraId), generateAddressPayload(api, 'RelayToPara', null, address, version, paraId), createCurrencySpec(amount, version, Parents.ZERO), 0 @@ -40,3 +46,25 @@ export const createCurrencySpec = ( } ] }) + +export const createPolkadotXcmHeader = ( + scenario: TScenario, + version: Version, + nodeId?: number +): PolkadotXCMHeader => { + const parents = scenario === 'RelayToPara' ? Parents.ZERO : Parents.ONE + const interior = + scenario === 'ParaToRelay' + ? 'Here' + : { + X1: { + Parachain: nodeId + } + } + return { + [scenario === 'RelayToPara' ? Version.V3 : version]: { + parents, + interior + } + } +} diff --git a/src/types.ts b/src/types.ts index 8128dc04..838e5f1f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -93,3 +93,10 @@ export enum Parents { ONE = 1, ZERO = 0 } + +export type PolkadotXCMHeader = { + [K in Version]?: { + parents: Parents + interior: any + } +} diff --git a/src/utils.ts b/src/utils.ts index 72401bdb..28a77a6b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -115,45 +115,6 @@ export const generateAddressPayload = ( } } -export const createHeaderPolkadotXCM = ( - scenario: TScenario, - version: Version, - nodeId?: number -): any => { - if (scenario === 'ParaToRelay') { - return { - [version]: { - parents: 1, - interior: 'Here' - } - } - } - - if (scenario === 'ParaToPara') { - return { - [version]: { - parents: 1, - interior: { - X1: { - Parachain: nodeId - } - } - } - } - } - - return { - V3: { - parents: 0, - interior: { - X1: { - Parachain: nodeId - } - } - } - } -} - export const getNode = (node: TNode): ParachainNode => { return nodes[node] }