From 578dc2f28f50c00ee69974cce57667c69657211c Mon Sep 17 00:00:00 2001 From: Jonathan Dunne Date: Mon, 11 Mar 2024 21:48:49 +0700 Subject: [PATCH] feat: statemint/e --> asset hub (#116) --- src/adapters/acala/acala-configs.ts | 6 +- src/adapters/acala/acala.spec.ts | 14 +- src/adapters/acala/acala.ts | 19 ++- src/adapters/acala/karura-configs.ts | 6 +- src/adapters/{statemint.ts => assethub.ts} | 163 +++++++++++---------- src/adapters/astar.ts | 2 +- src/adapters/hydradx.ts | 21 +-- src/adapters/interlay.ts | 2 +- src/adapters/moonbeam.ts | 2 +- src/adapters/parallel.ts | 2 +- src/adapters/polkadot.spec.ts | 8 +- src/adapters/polkadot.ts | 8 +- src/api-provider.ts | 2 +- src/bridge.spec.ts | 2 +- src/configs/chains/kusama-chains.ts | 4 +- src/configs/chains/polkadot-chains.ts | 4 +- src/cross-chain-router.spec.ts | 4 +- 17 files changed, 143 insertions(+), 126 deletions(-) rename src/adapters/{statemint.ts => assethub.ts} (79%) diff --git a/src/adapters/acala/acala-configs.ts b/src/adapters/acala/acala-configs.ts index fb0883da..89230d36 100644 --- a/src/adapters/acala/acala-configs.ts +++ b/src/adapters/acala/acala-configs.ts @@ -150,21 +150,21 @@ export const acalaRouteConfigs = createRouteConfigs("acala", [ }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "USDT", xcm: { fee: { token: "DOT", amount: "160000000" }, }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "USDC", xcm: { fee: { token: "DOT", amount: "100000000" }, }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "PINK", xcm: { fee: { token: "DOT", amount: "100000000" }, diff --git a/src/adapters/acala/acala.spec.ts b/src/adapters/acala/acala.spec.ts index 70b0b686..1fdd54b1 100644 --- a/src/adapters/acala/acala.spec.ts +++ b/src/adapters/acala/acala.spec.ts @@ -3,7 +3,7 @@ import { Bridge } from "../../bridge"; import { KaruraAdapter } from "./acala"; import { KusamaAdapter } from "../polkadot"; import { MoonriverAdapter } from "../moonbeam"; -import { StatemineAdapter } from "../statemint"; +import { AssetHubKusamaAdapter } from "../assethub"; import { SubmittableExtrinsic } from "@polkadot/api/types"; import { ISubmittableResult } from "@polkadot/types/types"; import { ApiPromise, WsProvider } from "@polkadot/api"; @@ -35,18 +35,18 @@ describe.skip("acala-adapter", () => { const karura = new KaruraAdapter(); const kusama = new KusamaAdapter(); const moonriver = new MoonriverAdapter(); - const statemine = new StatemineAdapter(); + const assetHubKusama = new AssetHubKusamaAdapter(); const karuraApi = new ApiPromise({ provider: new WsProvider('wss://karura.api.onfinality.io/public-ws') }); const kusmaApi = new ApiPromise({ provider: new WsProvider('wss://kusama.api.onfinality.io/public-ws') }); - const statemineApi = new ApiPromise({ provider: new WsProvider('wss://statemine-rpc.dwellir.com') }); + const assetHubApi = new ApiPromise({ provider: new WsProvider('wss://statemine-rpc.dwellir.com') }); await karura.init(karuraApi); await kusama.init(kusmaApi); - await statemine.init(statemineApi); + await assetHubKusama.init(assetHubApi); bridge = new Bridge({ - adapters: [karura, kusama, moonriver, statemine], + adapters: [karura, kusama, moonriver, assetHubKusama], }); }); @@ -149,7 +149,7 @@ describe.skip("acala-adapter", () => { } }); - test('transfer from karura to statemine should be ok', (done) => { + test('transfer from karura to asset hub should be ok', (done) => { try { const adapter = bridge.findAdapter('karura'); @@ -164,7 +164,7 @@ describe.skip("acala-adapter", () => { const amount = new FixedPointNumber(1, rmrk.decimals); const tx = adapter.createTx({ - to: 'statemine', + to: 'assetHubKusama', token: 'RMRK', amount, address diff --git a/src/adapters/acala/acala.ts b/src/adapters/acala/acala.ts index b9fe9241..f69a4b35 100644 --- a/src/adapters/acala/acala.ts +++ b/src/adapters/acala/acala.ts @@ -18,7 +18,10 @@ import { ChainId, chains } from "../../configs"; import { ApiNotFound, InvalidAddress, TokenNotFound } from "../../errors"; import { BalanceData, ExtendedToken, TransferParams } from "../../types"; import { isChainEqual } from "../../utils/is-chain-equal"; -import { statemineTokensConfig, statemintTokensConfig } from "../statemint"; +import { + assetHubKusamaTokensConfig, + assetHubPolkadotTokensConfig, +} from "../assethub"; import { createXTokensAssetsParam, createXTokensDestParam, @@ -154,8 +157,8 @@ class BaseAcalaAdapter extends BaseCrossChainAdapter { throw new InvalidAddress(address); } - if (isChainEqual(toChain, "statemint")) { - const tokenData = statemintTokensConfig[token]; + if (isChainEqual(toChain, "assetHubPolkadot")) { + const tokenData = assetHubPolkadotTokensConfig[token]; if (!token) throw new TokenNotFound(token); @@ -184,11 +187,11 @@ class BaseAcalaAdapter extends BaseCrossChainAdapter { ); } - // for statemine - if (isChainEqual(toChain, "statemine")) { - const tokenData: ExtendedToken = isChainEqual(toChain, "statemine") - ? statemineTokensConfig[token] - : statemintTokensConfig[token]; + // for asset hub + if (isChainEqual(toChain, "assetHubKusama")) { + const tokenData: ExtendedToken = isChainEqual(toChain, "assetHubKusama") + ? assetHubKusamaTokensConfig[token] + : assetHubPolkadotTokensConfig[token]; if (!token) throw new TokenNotFound(token); diff --git a/src/adapters/acala/karura-configs.ts b/src/adapters/acala/karura-configs.ts index 7fbaae55..476c134a 100644 --- a/src/adapters/acala/karura-configs.ts +++ b/src/adapters/acala/karura-configs.ts @@ -10,21 +10,21 @@ export const karuraRouteConfigs = createRouteConfigs("karura", [ }, }, { - to: "statemine", + to: "assetHubKusama", token: "RMRK", xcm: { fee: { token: "RMRK", amount: "100000" }, }, }, { - to: "statemine", + to: "assetHubKusama", token: "ARIS", xcm: { fee: { token: "KSM", amount: "16000000000" }, }, }, { - to: "statemine", + to: "assetHubKusama", token: "USDT", xcm: { fee: { token: "USDT", amount: "1183" }, diff --git a/src/adapters/statemint.ts b/src/adapters/assethub.ts similarity index 79% rename from src/adapters/statemint.ts rename to src/adapters/assethub.ts index 0d6ebe91..25370661 100644 --- a/src/adapters/statemint.ts +++ b/src/adapters/assethub.ts @@ -18,82 +18,85 @@ import { getDestAccountInfo, } from "../utils"; -export const statemintRouteConfigs = createRouteConfigs("statemint", [ - { - to: "polkadot", - token: "DOT", - xcm: { - fee: { token: "DOT", amount: "421500000" }, - weightLimit: "Unlimited", +export const assetHubPolkadotRouteConfigs = createRouteConfigs( + "assetHubPolkadot", + [ + { + to: "polkadot", + token: "DOT", + xcm: { + fee: { token: "DOT", amount: "421500000" }, + weightLimit: "Unlimited", + }, }, - }, - { - to: "hydradx", - token: "USDT", - xcm: { - fee: { token: "USDT", amount: "2200" }, - weightLimit: "Unlimited", + { + to: "hydradx", + token: "USDT", + xcm: { + fee: { token: "USDT", amount: "2200" }, + weightLimit: "Unlimited", + }, }, - }, - { - to: "acala", - token: "USDT", - xcm: { - fee: { token: "USDT", amount: "808" }, - weightLimit: "Unlimited", + { + to: "acala", + token: "USDT", + xcm: { + fee: { token: "USDT", amount: "808" }, + weightLimit: "Unlimited", + }, }, - }, - { - to: "acala", - token: "USDC", - xcm: { - fee: { token: "USDC", amount: "803" }, - weightLimit: "Unlimited", + { + to: "acala", + token: "USDC", + xcm: { + fee: { token: "USDC", amount: "803" }, + weightLimit: "Unlimited", + }, }, - }, - { - to: "acala", - token: "PINK", - xcm: { - fee: { token: "PINK", amount: "80370000" }, - weightLimit: "Unlimited", + { + to: "acala", + token: "PINK", + xcm: { + fee: { token: "PINK", amount: "80370000" }, + weightLimit: "Unlimited", + }, }, - }, - { - to: "astar", - token: "USDT", - xcm: { - fee: { token: "USDT", amount: "808" }, - weightLimit: "Unlimited", + { + to: "astar", + token: "USDT", + xcm: { + fee: { token: "USDT", amount: "808" }, + weightLimit: "Unlimited", + }, }, - }, - { - to: "interlay", - token: "USDT", - xcm: { - fee: { token: "USDT", amount: "808" }, - weightLimit: "Unlimited", + { + to: "interlay", + token: "USDT", + xcm: { + fee: { token: "USDT", amount: "808" }, + weightLimit: "Unlimited", + }, }, - }, - { - to: "moonbeam", - token: "USDT", - xcm: { - fee: { token: "USDT", amount: "808" }, - weightLimit: "Unlimited", + { + to: "moonbeam", + token: "USDT", + xcm: { + fee: { token: "USDT", amount: "808" }, + weightLimit: "Unlimited", + }, }, - }, - { - to: "parallel", - token: "USDT", - xcm: { - fee: { token: "USDT", amount: "808" }, - weightLimit: "Unlimited", + { + to: "parallel", + token: "USDT", + xcm: { + fee: { token: "USDT", amount: "808" }, + weightLimit: "Unlimited", + }, }, - }, -]); + ] +); -export const statemineRouteConfigs = createRouteConfigs("statemine", [ +export const assetHubKusamaRouteConfigs = createRouteConfigs("assetHubKusama", [ { to: "kusama", token: "KSM", @@ -125,7 +128,7 @@ export const statemineRouteConfigs = createRouteConfigs("statemine", [ }, ]); -export const statemintTokensConfig: Record = { +export const assetHubPolkadotTokensConfig: Record = { DOT: { name: "DOT", symbol: "DOT", @@ -156,7 +159,7 @@ export const statemintTokensConfig: Record = { }, }; -export const statemineTokensConfig: Record = { +export const assetHubKusamaTokensConfig: Record = { KSM: { name: "KSM", symbol: "KSM", @@ -217,7 +220,7 @@ const createBalanceStorages = (api: AnyApi) => { }; }; -class StatemintBalanceAdapter extends BalanceAdapter { +class AssetHubBalanceAdapter extends BalanceAdapter { private storages: ReturnType; constructor({ api, chain, tokens }: BalanceAdapterConfigs) { @@ -275,8 +278,8 @@ class StatemintBalanceAdapter extends BalanceAdapter { } } -class BaseStatemintAdapter extends BaseCrossChainAdapter { - private balanceAdapter?: StatemintBalanceAdapter; +class BaseAssetHubAdapter extends BaseCrossChainAdapter { + private balanceAdapter?: AssetHubBalanceAdapter; public async init(api: AnyApi) { this.api = api; @@ -285,7 +288,7 @@ class BaseStatemintAdapter extends BaseCrossChainAdapter { const chain = this.chain.id as ChainId; - this.balanceAdapter = new StatemintBalanceAdapter({ + this.balanceAdapter = new AssetHubBalanceAdapter({ api, chain, tokens: this.tokens, @@ -438,14 +441,22 @@ class BaseStatemintAdapter extends BaseCrossChainAdapter { } } -export class StatemintAdapter extends BaseStatemintAdapter { +export class AssetHubPolkadotAdapter extends BaseAssetHubAdapter { constructor() { - super(chains.statemint, statemintRouteConfigs, statemintTokensConfig); + super( + chains.assetHubPolkadot, + assetHubPolkadotRouteConfigs, + assetHubPolkadotTokensConfig + ); } } -export class StatemineAdapter extends BaseStatemintAdapter { +export class AssetHubKusamaAdapter extends BaseAssetHubAdapter { constructor() { - super(chains.statemine, statemineRouteConfigs, statemineTokensConfig); + super( + chains.assetHubKusama, + assetHubKusamaRouteConfigs, + assetHubKusamaTokensConfig + ); } } diff --git a/src/adapters/astar.ts b/src/adapters/astar.ts index ceb754a6..b84e82d9 100644 --- a/src/adapters/astar.ts +++ b/src/adapters/astar.ts @@ -63,7 +63,7 @@ export const astarRouteConfigs = createRouteConfigs("astar", [ }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "USDT", xcm: { fee: { token: "USDT", amount: "44306118000000000" }, diff --git a/src/adapters/hydradx.ts b/src/adapters/hydradx.ts index 5b4c96bb..46937568 100644 --- a/src/adapters/hydradx.ts +++ b/src/adapters/hydradx.ts @@ -18,7 +18,10 @@ import { createRouteConfigs, } from "../utils"; -import { statemineTokensConfig, statemintTokensConfig } from "./statemint"; +import { + assetHubKusamaTokensConfig, + assetHubPolkadotTokensConfig, +} from "./assethub"; export const basiliskRouteConfigs = createRouteConfigs("basilisk", [ { @@ -78,7 +81,7 @@ export const basiliskRouteConfigs = createRouteConfigs("basilisk", [ }, }, { - to: "statemine", + to: "assetHubKusama", token: "USDT", xcm: { fee: { token: "USDT", amount: "1183" }, @@ -225,7 +228,7 @@ export const hydradxRoutersConfig = createRouteConfigs("hydradx", [ xcm: { fee: { token: "IBTC", amount: "62" } }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "USDT", xcm: { fee: { token: "USDT", amount: "700000" }, @@ -472,14 +475,14 @@ class BaseHydradxAdapter extends BaseCrossChainAdapter { const { amount, to, token, address } = params; const toChain = chains[to]; - // For statemine & statemint + // For Asset Hub if ( - isChainEqual(toChain, "statemine") || - isChainEqual(toChain, "statemint") + isChainEqual(toChain, "assetHubKusama") || + isChainEqual(toChain, "assetHubPolkadot") ) { - const tokenData: ExtendedToken = isChainEqual(toChain, "statemine") - ? statemineTokensConfig[token] - : statemintTokensConfig[token]; + const tokenData: ExtendedToken = isChainEqual(toChain, "assetHubKusama") + ? assetHubKusamaTokensConfig[token] + : assetHubPolkadotTokensConfig[token]; const accountId = this.api?.createType("AccountId32", address).toHex(); diff --git a/src/adapters/interlay.ts b/src/adapters/interlay.ts index 5de84515..d68c01e7 100644 --- a/src/adapters/interlay.ts +++ b/src/adapters/interlay.ts @@ -28,7 +28,7 @@ export const interlayRouteConfigs = createRouteConfigs("interlay", [ xcm: { fee: { token: "IBTC", amount: "9" } }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "USDT", xcm: { fee: { token: "USDT", amount: "9" } }, }, diff --git a/src/adapters/moonbeam.ts b/src/adapters/moonbeam.ts index b09e8c76..d1aa49c6 100644 --- a/src/adapters/moonbeam.ts +++ b/src/adapters/moonbeam.ts @@ -59,7 +59,7 @@ export const moonbeamRouteConfigs = createRouteConfigs("moonbeam", [ }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "xcUSDT", xcm: { fee: { token: "USDT", amount: "1000000000" }, diff --git a/src/adapters/parallel.ts b/src/adapters/parallel.ts index 2e8845b0..5b51ea15 100644 --- a/src/adapters/parallel.ts +++ b/src/adapters/parallel.ts @@ -49,7 +49,7 @@ export const parallelRouteConfigs = createRouteConfigs("parallel", [ }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "USDT", xcm: { fee: { token: "USDT", amount: "24037893" }, diff --git a/src/adapters/polkadot.spec.ts b/src/adapters/polkadot.spec.ts index fd2daa03..dd026e15 100644 --- a/src/adapters/polkadot.spec.ts +++ b/src/adapters/polkadot.spec.ts @@ -6,7 +6,7 @@ import { chains, ChainId } from "../configs"; import { Bridge } from "../bridge"; import { KusamaAdapter, PolkadotAdapter } from "./polkadot"; import { BasiliskAdapter, HydraDxAdapter } from "./hydradx"; -import { StatemineAdapter, StatemintAdapter } from "./statemint"; +import { AssetHubKusamaAdapter, AssetHubPolkadotAdapter } from "./assethub"; import { AcalaAdapter, KaruraAdapter } from "./acala/acala"; import { BaseCrossChainAdapter } from "../base-chain-adapter"; import { logFormatedRoute, formateRouteLogLine } from "../utils/unit-test"; @@ -19,11 +19,11 @@ describe.skip("polkadot-adapter should work", () => { kusama: new KusamaAdapter(), karura: new KaruraAdapter(), basilisk: new BasiliskAdapter(), - statemine: new StatemineAdapter(), + assetHubKusama: new AssetHubKusamaAdapter(), polkadot: new PolkadotAdapter(), acala: new AcalaAdapter(), hydradx: new HydraDxAdapter(), - statemint: new StatemintAdapter(), + assetHubPolkadot: new AssetHubPolkadotAdapter(), }; const provider = new ApiProvider(); let bridge: Bridge; @@ -111,7 +111,7 @@ describe.skip("polkadot-adapter should work", () => { expect(tx).toBeDefined(); expect(tx.method.section).toEqual("xcmPallet"); - if (e.to === "statemine" || e.to === "statemint") { + if (e.to === "assetHubKusama" || e.to === "assetHubPolkadot") { expect(tx.method.method).toEqual("limitedTeleportAssets"); } else { expect(tx.method.method).toEqual("limitedReserveTransferAssets"); diff --git a/src/adapters/polkadot.ts b/src/adapters/polkadot.ts index 31bc0b41..fbfd935e 100644 --- a/src/adapters/polkadot.ts +++ b/src/adapters/polkadot.ts @@ -36,7 +36,7 @@ export const polkadotRouteConfigs = createRouteConfigs("polkadot", [ }, }, { - to: "statemint", + to: "assetHubPolkadot", token: "DOT", xcm: { fee: { token: "DOT", amount: "15800000" }, @@ -64,7 +64,7 @@ export const kusamaRouteConfigs = createRouteConfigs("kusama", [ }, }, { - to: "statemine", + to: "assetHubKusama", token: "KSM", xcm: { fee: { token: "KSM", amount: "34368318" }, @@ -237,8 +237,8 @@ class BasePolkadotAdapter extends BaseCrossChainAdapter { const isV0V1Support = this.isV0V1; - // to statemine - if (to === "statemine" || to === "statemint") { + // to asset hub + if (to === "assetHubKusama" || to === "assetHubPolkadot") { const dst = { interior: { X1: { ParaChain: toChain.paraChainId } }, parents: 0, diff --git a/src/api-provider.ts b/src/api-provider.ts index c25a4f40..8a047d26 100644 --- a/src/api-provider.ts +++ b/src/api-provider.ts @@ -42,7 +42,7 @@ export class ApiProvider { nodes = Object.values(prodRelayPolkadot.providers).filter((e) => e.startsWith("wss://") ); - } else if (chain === "statemine") { + } else if (chain === "assetHubKusama") { nodes = Object.values( prodParasKusamaCommon.find((e) => e.info === chain)?.providers || {} diff --git a/src/bridge.spec.ts b/src/bridge.spec.ts index f34cf6d2..5d283e51 100644 --- a/src/bridge.spec.ts +++ b/src/bridge.spec.ts @@ -15,7 +15,7 @@ describe("Bridge sdk usage", () => { // kusama: new KusamaAdapter(), acala: new AcalaAdapter(), // karura: new KaruraAdapter(), - // statemine: new StatemineAdapter(), + // assetHubKusama: new AssetHubKusamaAdapter(), // altair: new AltairAdapter(), // shiden: new ShidenAdapter(), // bifrost: new BifrostAdapter(), diff --git a/src/configs/chains/kusama-chains.ts b/src/configs/chains/kusama-chains.ts index 99915cc4..6eb22452 100644 --- a/src/configs/chains/kusama-chains.ts +++ b/src/configs/chains/kusama-chains.ts @@ -6,8 +6,8 @@ export const kusamaChains = { paraChainId: -1, ss58Prefix: 2, }, - statemine: { - display: "Statemine", + assetHubKusama: { + display: "Asset Hub Kusama", type: "substrate", icon: "https://resources.acala.network/_next/image?url=%2Fnetworks%2Fstatemine.png&w=96&q=75", paraChainId: 1000, diff --git a/src/configs/chains/polkadot-chains.ts b/src/configs/chains/polkadot-chains.ts index 03bfb853..bac99114 100644 --- a/src/configs/chains/polkadot-chains.ts +++ b/src/configs/chains/polkadot-chains.ts @@ -6,8 +6,8 @@ export const polkadotChains = { paraChainId: -1, ss58Prefix: 0, }, - statemint: { - display: "Statemint", + assetHubPolkadot: { + display: "Asset Hub Polkadot", type: "substrate", icon: "https://resources.acala.network/_next/image?url=%2Fnetworks%2Fstatemine.png&w=96&q=75", paraChainId: 1000, diff --git a/src/cross-chain-router.spec.ts b/src/cross-chain-router.spec.ts index 0a32cd26..dd771087 100644 --- a/src/cross-chain-router.spec.ts +++ b/src/cross-chain-router.spec.ts @@ -25,7 +25,7 @@ describe("cross-chain-router-manager", () => { { from: chains.khala.id, to: chains.karura.id, token: "AUSD" }, { from: chains.khala.id, to: chains.karura.id, token: "LKSM" }, { from: chains.kusama.id, to: chains.karura.id, token: "KSM" }, - { from: chains.statemine.id, to: chains.karura.id, token: "RMRK" }, + { from: chains.assetHubKusama.id, to: chains.karura.id, token: "RMRK" }, ] as RouteConfigs[], false ); @@ -73,7 +73,7 @@ describe("cross-chain-router-manager", () => { expect(r2.length).toEqual(3); expect(r2[0].display).toEqual("Khala"); expect(r2[1].display).toEqual("Kusama"); - expect(r2[2].display).toEqual("Statemine"); + expect(r2[2].display).toEqual("Asset Hub Kusama"); }); test("filter by disabled routers should be ok", async () => {