Skip to content

Commit

Permalink
refactor(sdk): Add types and remove 'any' from TTransfer.ts file 🧩
Browse files Browse the repository at this point in the history
  • Loading branch information
michaeldev5 authored and dudo50 committed Aug 9, 2024
1 parent 850483f commit 3c50ba7
Show file tree
Hide file tree
Showing 43 changed files with 213 additions and 121 deletions.
5 changes: 2 additions & 3 deletions packages/sdk/src/maps/consts.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// Contains supported Parachains and exports supported XCM Pallets

import Acala from '../nodes/supported/Acala'
import type ParachainNode from '../nodes/ParachainNode'
import Unique from '../nodes/supported/Unique'
import { type TNode } from '../types'
import Crust from '../nodes/supported/Crust'
Expand Down Expand Up @@ -129,7 +128,7 @@ export const NODES_WITH_RELAY_CHAINS_DOT_KSM = [
'Kusama'
] as const

export const nodes: Record<TNode, ParachainNode> = {
export const nodes = {
AssetHubPolkadot: new AssetHubPolkadot(),
Acala: new Acala(),
Astar: new Astar(),
Expand Down Expand Up @@ -187,7 +186,7 @@ export const nodes: Record<TNode, ParachainNode> = {
Ethereum: new Ethereum(),
Mythos: new Mythos(),
Peaq: new Peaq()
}
} satisfies Record<TNode, unknown>

export const SUPPORTED_PALLETS = [
'XTokens',
Expand Down
6 changes: 5 additions & 1 deletion packages/sdk/src/nodes/ParachainNode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import { type ApiPromise } from '@polkadot/api'
import { NoXCMSupportImplementedError } from '../errors/NoXCMSupportImplementedError'
import { getParaId } from '../pallets/assets'
import { getNativeAssetSymbol, getParaId } from '../pallets/assets'
import {
type TNode,
type TRelayChainType,
Expand Down Expand Up @@ -219,6 +219,10 @@ abstract class ParachainNode {
): TMultiLocationHeader {
return createPolkadotXcmHeader(scenario, version, destination, paraId)
}

getNativeAssetSymbol(): string {
return getNativeAssetSymbol(this.node)
}
}

export default ParachainNode
18 changes: 9 additions & 9 deletions packages/sdk/src/nodes/XTokensTransferImpl.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-explicit-any */
// Contains basic structure of xToken call

import {
Expand All @@ -11,7 +8,9 @@ import {
type XTokensTransferInput,
Parents,
type TCurrencySelectionHeader,
type TCurrency
type TCurrency,
TMultiLocationHeader,
TXTokensCurrencySelection
} from '../types'
import { getNode, lowercaseFirstLetter } from '../utils'

Expand Down Expand Up @@ -41,8 +40,8 @@ const getModifiedCurrencySelection = (
const getCurrencySelection = (
{ origin, amount, currencyID, paraIdTo, overridedCurrencyMultiLocation }: XTokensTransferInput,
isAssetHub: boolean,
currencySelection: any
): any => {
currencySelection: TXTokensCurrencySelection
): TXTokensCurrencySelection => {
const { version } = getNode(origin)

if (overridedCurrencyMultiLocation !== undefined)
Expand All @@ -57,11 +56,12 @@ const getCurrencySelection = (

const getParameters = (
isAssetHub: boolean,
currencySelection: any,
addressSelection: any,
currencySelection: TXTokensCurrencySelection,
addressSelection: TMultiLocationHeader,
amount: string,
fees: string | number,
feeAsset?: TCurrency
// eslint-disable-next-line @typescript-eslint/no-explicit-any
): any[] => {
if (isAssetHub) {
return feeAsset !== undefined
Expand All @@ -74,7 +74,7 @@ const getParameters = (
class XTokensTransferImpl {
static transferXTokens(
input: XTokensTransferInput,
currencySelection: any,
currencySelection: TXTokensCurrencySelection,
fees: string | number = 'Unlimited',
pallet: TPallet = 'XTokens'
): Extrinsic | TSerializedApiCall {
Expand Down
5 changes: 3 additions & 2 deletions packages/sdk/src/nodes/supported/Acala.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import {
type Extrinsic,
type IXTokensTransfer,
TNodePolkadotKusama,
type TForeignOrTokenAsset,
type TNodePolkadotKusama,
type TSerializedApiCall,
Version,
type XTokensTransferInput
Expand All @@ -19,7 +20,7 @@ class Acala extends ParachainNode implements IXTokensTransfer {

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
const { currency, currencyID } = input
const currencySelection =
const currencySelection: TForeignOrTokenAsset =
currencyID !== undefined ? { ForeignAsset: currencyID } : { Token: currency }
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}
Expand Down
9 changes: 3 additions & 6 deletions packages/sdk/src/nodes/supported/Altair.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,10 @@ class Altair extends ParachainNode implements IXTokensTransfer {
super('Altair', 'altair', 'kusama', Version.V3)
}

private static getCurrencySelection({ currency, currencyID }: XTokensTransferInput) {
if (currency === 'AIR') return 'Native'
return { ForeignAsset: currencyID }
}

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
const currencySelection = Altair.getCurrencySelection(input)
const { currency, currencyID } = input
const currencySelection =
currency === this.getNativeAssetSymbol() ? 'Native' : { ForeignAsset: currencyID }
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}
}
Expand Down
7 changes: 5 additions & 2 deletions packages/sdk/src/nodes/supported/Amplitude.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import {
Version,
type XTokensTransferInput,
type Extrinsic,
type TSerializedApiCall
type TSerializedApiCall,
type TXcmAsset
} from '../../types'
import ParachainNode from '../ParachainNode'
import XTokensTransferImpl from '../XTokensTransferImpl'
Expand All @@ -16,7 +17,9 @@ class Amplitude extends ParachainNode implements IXTokensTransfer {
}

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
return XTokensTransferImpl.transferXTokens(input, { XCM: input.currencyID })
const { currencyID } = input
const currencySelection: TXcmAsset = { XCM: currencyID }
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}
}

Expand Down
6 changes: 1 addition & 5 deletions packages/sdk/src/nodes/supported/AssetHubKusama.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import {
import { getNode } from '../../utils'
import ParachainNode from '../ParachainNode'
import PolkadotXCMTransferImpl from '../PolkadotXCMTransferImpl'
import type AssetHubPolkadot from './AssetHubPolkadot'

class AssetHubKusama extends ParachainNode implements IPolkadotXCMTransfer {
constructor() {
Expand All @@ -27,10 +26,7 @@ class AssetHubKusama extends ParachainNode implements IPolkadotXCMTransfer {
// TESTED https://kusama.subscan.io/xcm_message/kusama-8e423130a4d8b61679af95dbea18a55124f99672

if (input.destination === 'AssetHubPolkadot') {
return (getNode('AssetHubPolkadot') as AssetHubPolkadot).handleBridgeTransfer(
input,
'Polkadot'
)
return getNode('AssetHubPolkadot').handleBridgeTransfer(input, 'Polkadot')
}

const { scenario } = input
Expand Down
2 changes: 1 addition & 1 deletion packages/sdk/src/nodes/supported/AssetHubPolkadot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
type TRelayToParaInternalOptions,
type TMultiAsset,
type TMultiLocation,
TJunction
type TJunction
} from '../../types'
import { generateAddressMultiLocationV4, generateAddressPayload } from '../../utils'
import ParachainNode from '../ParachainNode'
Expand Down
5 changes: 3 additions & 2 deletions packages/sdk/src/nodes/supported/Astar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@ class Astar extends ParachainNode implements IPolkadotXCMTransfer, IXTokensTrans
}

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
return XTokensTransferImpl.transferXTokens(input, input.currencyID)
const { currencyID } = input
return XTokensTransferImpl.transferXTokens(input, currencyID)
}

protected canUseXTokens({ currencySymbol, currencyId }: TSendInternalOptions): boolean {
return currencySymbol !== 'ASTR' && !!currencyId
return currencySymbol !== this.getNativeAssetSymbol() || !!currencyId
}
}

Expand Down
11 changes: 5 additions & 6 deletions packages/sdk/src/nodes/supported/Bajun.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@ import {
NodeNotSupportedError,
InvalidCurrencyError
} from '../../errors'
import { getNativeAssetSymbol } from '../../pallets/assets'
import {
Extrinsic,
IXTokensTransfer,
TSerializedApiCall,
type Extrinsic,
type IXTokensTransfer,
type TSerializedApiCall,
Version,
XTokensTransferInput
type XTokensTransferInput
} from '../../types'
import ParachainNode from '../ParachainNode'
import XTokensTransferImpl from '../XTokensTransferImpl'
Expand All @@ -27,7 +26,7 @@ class Bajun extends ParachainNode implements IXTokensTransfer {
throw new ScenarioNotSupportedError(this.node, scenario)
}

const nativeSymbol = getNativeAssetSymbol(this.node)
const nativeSymbol = this.getNativeAssetSymbol()
if (currency !== nativeSymbol) {
throw new InvalidCurrencyError(`Node ${this.node} does not support currency ${currency}`)
}
Expand Down
4 changes: 3 additions & 1 deletion packages/sdk/src/nodes/supported/BifrostKusama.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ class BifrostKusama extends ParachainNode implements IXTokensTransfer {
}

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
const currencySelection = { [input.currency === 'BNC' ? 'Native' : 'Token']: input.currency }
const currencySelection = {
[input.currency === this.getNativeAssetSymbol() ? 'Native' : 'Token']: input.currency
}
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}
}
Expand Down
4 changes: 3 additions & 1 deletion packages/sdk/src/nodes/supported/BifrostPolkadot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ export class BifrostPolkadot extends ParachainNode implements IXTokensTransfer {
}

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
const currencySelection = { [input.currency === 'BNC' ? 'Native' : 'Token']: input.currency }
const currencySelection = {
[input.currency === this.getNativeAssetSymbol() ? 'Native' : 'Token']: input.currency
}
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}
}
6 changes: 4 additions & 2 deletions packages/sdk/src/nodes/supported/Calamari.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import {
Version,
type XTokensTransferInput,
type Extrinsic,
type TSerializedApiCall
type TSerializedApiCall,
type TMantaAsset
} from '../../types'
import ParachainNode from '../ParachainNode'
import XTokensTransferImpl from '../XTokensTransferImpl'
Expand All @@ -18,7 +19,8 @@ class Calamari extends ParachainNode implements IXTokensTransfer {
transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
// Currently only option for XCM transfer
const { currencyID } = input
return XTokensTransferImpl.transferXTokens(input, { MantaCurrency: currencyID })
const currencySelection: TMantaAsset = { MantaCurrency: currencyID }
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}
}

Expand Down
3 changes: 2 additions & 1 deletion packages/sdk/src/nodes/supported/Centrifuge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ export class Centrifuge extends ParachainNode implements IXTokensTransfer {

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
const { currency, currencyID } = input
const currencySelection = currency === 'CFG' ? 'Native' : { ForeignAsset: currencyID }
const currencySelection =
currency === this.getNativeAssetSymbol() ? 'Native' : { ForeignAsset: currencyID }
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}
}
7 changes: 4 additions & 3 deletions packages/sdk/src/nodes/supported/Crust.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import {
Version,
type XTokensTransferInput,
type Extrinsic,
type TSerializedApiCall
type TSerializedApiCall,
type TReserveAsset
} from '../../types'
import ParachainNode from '../ParachainNode'
import XTokensTransferImpl from '../XTokensTransferImpl'
Expand All @@ -16,8 +17,8 @@ class Crust extends ParachainNode implements IXTokensTransfer {
super('Crust', 'crustParachain', 'polkadot', Version.V3)
}

getCurrencySelection({ currency, currencyID }: XTokensTransferInput) {
if (currency === 'CRU') {
getCurrencySelection({ currency, currencyID }: XTokensTransferInput): TReserveAsset {
if (currency === this.getNativeAssetSymbol()) {
return 'SelfReserve'
}

Expand Down
7 changes: 4 additions & 3 deletions packages/sdk/src/nodes/supported/CrustShadow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import {
Version,
type XTokensTransferInput,
type Extrinsic,
type TSerializedApiCall
type TSerializedApiCall,
type TReserveAsset
} from '../../types'
import ParachainNode from '../ParachainNode'
import XTokensTransferImpl from '../XTokensTransferImpl'
Expand All @@ -16,8 +17,8 @@ class CrustShadow extends ParachainNode implements IXTokensTransfer {
super('CrustShadow', 'shadow', 'kusama', Version.V3)
}

getCurrencySelection({ currency, currencyID }: XTokensTransferInput) {
if (currency === 'CSM') {
getCurrencySelection({ currency, currencyID }: XTokensTransferInput): TReserveAsset {
if (currency === this.getNativeAssetSymbol()) {
return 'SelfReserve'
}

Expand Down
6 changes: 5 additions & 1 deletion packages/sdk/src/nodes/supported/Curio.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Contains detailed structure of XCM call construction for Curio Parachain

import {
TForeignOrTokenAsset,
Version,
type Extrinsic,
type IXTokensTransfer,
Expand All @@ -15,7 +16,10 @@ class Curio extends ParachainNode implements IXTokensTransfer {
super('Curio', 'curio', 'kusama', Version.V3)
}

private getCurrencySelection({ currency, currencyID }: XTokensTransferInput) {
private getCurrencySelection({
currency,
currencyID
}: XTokensTransferInput): TForeignOrTokenAsset {
if (currencyID) {
return { ForeignAsset: currencyID }
}
Expand Down
12 changes: 7 additions & 5 deletions packages/sdk/src/nodes/supported/Darwinia.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import {
type IXTokensTransfer,
type XTokensTransferInput,
type TScenario,
Parents
Parents,
type TSelfReserveAsset,
type TForeignAsset
} from '../../types'
import ParachainNode from '../ParachainNode'
import { NodeNotSupportedError } from '../../errors'
Expand All @@ -21,10 +23,10 @@ class Darwinia extends ParachainNode implements IXTokensTransfer {
}

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
return XTokensTransferImpl.transferXTokens(
input,
input.currency === 'RING' ? 'SelfReserve' : { ForeignAsset: input.currencyID }
)
const { currencyID } = input
const currencySelection: TSelfReserveAsset | TForeignAsset =
input.currency === this.getNativeAssetSymbol() ? 'SelfReserve' : { ForeignAsset: currencyID }
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}

transferRelayToPara(): TSerializedApiCall {
Expand Down
5 changes: 3 additions & 2 deletions packages/sdk/src/nodes/supported/Interlay.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import {
Version,
type XTokensTransferInput,
type Extrinsic,
type TSerializedApiCall
type TSerializedApiCall,
type TForeignOrTokenAsset
} from '../../types'
import ParachainNode from '../ParachainNode'
import XTokensTransferImpl from '../XTokensTransferImpl'
Expand All @@ -17,7 +18,7 @@ class Interlay extends ParachainNode implements IXTokensTransfer {

transferXTokens(input: XTokensTransferInput): Extrinsic | TSerializedApiCall {
const { currency, currencyID } = input
const currencySelection =
const currencySelection: TForeignOrTokenAsset =
currencyID !== undefined ? { ForeignAsset: currencyID } : { Token: currency }
return XTokensTransferImpl.transferXTokens(input, currencySelection)
}
Expand Down
Loading

0 comments on commit 3c50ba7

Please sign in to comment.