Skip to content

Commit

Permalink
Refactor createHeaderPolkadotXCM function
Browse files Browse the repository at this point in the history
  • Loading branch information
michaeldev5 authored and dudo50 committed Jan 6, 2024
1 parent 43902c7 commit f75bec7
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 56 deletions.
18 changes: 10 additions & 8 deletions src/nodes/ParachainNode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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
4 changes: 2 additions & 2 deletions src/nodes/supported/Astar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion src/nodes/supported/Moonbeam.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
2 changes: 1 addition & 1 deletion src/nodes/supported/Moonriver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
4 changes: 2 additions & 2 deletions src/nodes/supported/Shiden.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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,
Expand Down
34 changes: 31 additions & 3 deletions src/pallets/xcmPallet/utils.ts
Original file line number Diff line number Diff line change
@@ -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 = (
Expand All @@ -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
Expand Down Expand Up @@ -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
}
}
}
7 changes: 7 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,10 @@ export enum Parents {
ONE = 1,
ZERO = 0
}

export type PolkadotXCMHeader = {
[K in Version]?: {
parents: Parents
interior: any
}
}
39 changes: 0 additions & 39 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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]
}
Expand Down

0 comments on commit f75bec7

Please sign in to comment.