From bd56e3055dbb72d30054c77c40c0f09247f4a21e Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:41:32 +0200 Subject: [PATCH 01/21] mantle in libs/static/src/chains.ts --- libs/static/src/chains.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libs/static/src/chains.ts b/libs/static/src/chains.ts index 13a87aee69..1671c6729e 100644 --- a/libs/static/src/chains.ts +++ b/libs/static/src/chains.ts @@ -32,7 +32,8 @@ export const CHAINS: Config = { dot: toChainProperty(0, 10, 'DOT', 'https://polkadot.subscan.io/', 'SUB'), ahp: toChainProperty(0, 10, 'DOT', 'https://statemint.subscan.io/', 'SUB'), imx: toChainProperty(42, 18, 'IMX', 'https://explorer.immutable.com/', 'EVM'), // ss58Format is not available - base: toChainProperty(42, 18, 'ETH', 'https://basescan.org', 'EVM'), // ss58Format is not available + base: toChainProperty(42, 18, 'ETH', 'https://basescan.org', 'EVM'), + mnt: toChainProperty(42, 18, 'MNT', 'https://mantlescan.xyz', 'EVM'), // ss58Format is not available // ahr: toChainProperty(42, 12, 'ROC', 'https://rockmine.subscan.io/'), // movr: toChainProperty(1285, 18, 'MOVR', 'https://moonriver.subscan.io/'), // glmr: toChainProperty(1284, 18, 'GLMR', 'https://moonbeam.subscan.io/'), @@ -53,6 +54,7 @@ export const chainPrefixes: Prefix[] = [ 'dot', 'imx', 'base', + 'mnt', // 'ahr', // 'movr', // 'glmr', @@ -73,6 +75,7 @@ export const chainInfo: Record = { ahp: 'statemint', imx: 'immutable', base: 'base', + mnt: 'mantle', // ahr: 'rockmine', // movr: 'moonriver', // glmr: 'moonbeam', @@ -86,6 +89,7 @@ export const chainNames: Record = { ahp: 'Polkadot AssetHub', imx: 'Immutable zkEVM', base: 'Base', + mnt: 'Mantle', // ahr: 'Rococo AssetHub', // movr: 'Moonriver', // glmr: 'Moonbeam', @@ -113,6 +117,7 @@ export const teleportExistentialDeposit: Record = { ahp: 5000000000, imx: 0, base: 0, + mnt: 0, } export const existentialDeposit: Record = { @@ -123,4 +128,5 @@ export const existentialDeposit: Record = { ahp: 1e8, imx: 1e15, // nothing like ED in EVM :) base: 1e15, + mnt: 1e15, } From 77f572c06faca99794e2d6d8dcd14fa7d6ad6ad7 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:41:32 +0200 Subject: [PATCH 02/21] mantle in libs/static/src/endpoints.ts --- libs/static/src/endpoints.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libs/static/src/endpoints.ts b/libs/static/src/endpoints.ts index e66b5a28ac..6db8dc38a5 100644 --- a/libs/static/src/endpoints.ts +++ b/libs/static/src/endpoints.ts @@ -43,6 +43,7 @@ export const ALTERNATIVE_ENDPOINT_MAP: Config = { ahp: AHP_ENDPOINTS, imx: ['https://rpc.immutable.com'], base: ['https://mainnet.base.org'], + mnt: ['https://rpc.mantle.xyz'], // ahr: ['wss://rococo-asset-hub-rpc.polkadot.io'], // glmr: ['wss://public-rpc.pinknode.io/moonbeam'], // movr: ['wss://wss.api.moonriver.moonbeam.network'], @@ -56,6 +57,7 @@ export const ENDPOINT_MAP: Config = { ahp: AHP_ENDPOINTS[0], imx: 'https://rpc.immutable.com', base: 'https://mainnet.base.org', + mnt: 'https://rpc.mantle.xyz', // ahr: 'wss://rococo-asset-hub-rpc.polkadot.io', // glmr: 'wss://public-rpc.pinknode.io/moonbeam', // movr: 'wss://wss.api.moonriver.moonbeam.network', From df16fcde813b96ae4c6244e4986343b7ec952753 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:41:32 +0200 Subject: [PATCH 03/21] mantle in libs/static/src/indexers.ts --- libs/static/src/indexers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/static/src/indexers.ts b/libs/static/src/indexers.ts index dec3e57b67..954a68d3aa 100644 --- a/libs/static/src/indexers.ts +++ b/libs/static/src/indexers.ts @@ -15,6 +15,7 @@ export const INDEXERS: Config = { dot: 'https://squid.subsquid.io/rubick/graphql', // TODO: change to dot indexer when available imx: 'https://squid.subsquid.io/flick/graphql', base: 'https://kodadot.squids.live/basick/graphql', + mnt: 'https://squid.subsquid.io/flock/graphql', // ahr: 'https://squid.subsquid.io/snack/graphql', // movr: 'https://squid.subsquid.io/antick/v/001-rc0/graphql', // glmr: 'https://squid.subsquid.io/click/v/002/graphql', From 6f5d1b8897056f923c72d68bc3c59d61f5f410b6 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:41:32 +0200 Subject: [PATCH 04/21] mantle in libs/static/src/names.ts --- libs/static/src/names.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/static/src/names.ts b/libs/static/src/names.ts index ad03bcd7f1..07da60ca8a 100644 --- a/libs/static/src/names.ts +++ b/libs/static/src/names.ts @@ -8,6 +8,7 @@ export const NAMES: Record = { ahp: 'PolkadotHub', imx: 'Immutable zkEVM', base: 'Base', + mnt: 'Mantle', // ahr: 'RococoHub', // glmr: 'Moonbeam [Beta]', // movr: 'Moonriver [Beta]', From 0c3495214870d74f2fc1f4a5485b53e1961b3cb8 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:41:32 +0200 Subject: [PATCH 05/21] mantle in libs/static/src/services.ts --- libs/static/src/services.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/static/src/services.ts b/libs/static/src/services.ts index 624f3eb220..36eaadfb72 100644 --- a/libs/static/src/services.ts +++ b/libs/static/src/services.ts @@ -17,6 +17,7 @@ export const EXPLORERS: Record = { ahp: 'https://assethub-polkadot.subscan.io/account/', imx: 'https://explorer.immutable.com/address/', base: 'https://basescan.org/address/', + mnt: 'https://mantlescan.xyz/address/', // ahr: 'https://assethub-rococo.subscan.io/account/', // movr: 'https://moonriver.subscan.io/account/', // glmr: 'https://moonbeam.subscan.io/account/', From a5052902819e6e7d98a4d56181405b96334d601f Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:41:32 +0200 Subject: [PATCH 06/21] mantle in libs/static/src/types.ts --- libs/static/src/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/static/src/types.ts b/libs/static/src/types.ts index 7ef81fb0f9..ec1f4f65c3 100644 --- a/libs/static/src/types.ts +++ b/libs/static/src/types.ts @@ -1,9 +1,9 @@ -export type Prefix = 'rmrk' | 'ksm' | 'ahk' | 'dot' | 'ahp' | 'imx' | 'base' +export type Prefix = 'rmrk' | 'ksm' | 'ahk' | 'dot' | 'ahp' | 'imx' | 'base' | 'mnt' // | 'ahr' // | 'glmr' // | 'movr' -export type Squid = 'rubick' | 'marck' | 'stick' | 'speck' | 'flick' | 'basick' +export type Squid = 'rubick' | 'marck' | 'stick' | 'speck' | 'flick' | 'basick' | 'flock' // | 'snack' // | 'click' // | 'antick' From d715f50bb18a9dce2c14a1e8ed3c49556d156a11 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:49:20 +0200 Subject: [PATCH 07/21] mantle in composables/useMultipleBalance.ts --- composables/useMultipleBalance.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/composables/useMultipleBalance.ts b/composables/useMultipleBalance.ts index 7dbeac112d..c344c04ee4 100644 --- a/composables/useMultipleBalance.ts +++ b/composables/useMultipleBalance.ts @@ -87,6 +87,8 @@ export default function (refetchPeriodically: boolean = false) { multiBalances.value.chains.base?.eth?.nativeBalance, [Chain.IMMUTABLEX]: multiBalances.value.chains.immutablex?.eth?.nativeBalance, + [Chain.MANTLE]: + multiBalances.value.chains.mantle?.eth?.nativeBalance, })) const currentChain = computed(() => prefixToChainMap[urlPrefix.value]) From 2c2c4b87e52fa0179b52327f4b9698904704fa38 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:49:20 +0200 Subject: [PATCH 08/21] mantle in composables/useWagmi.ts --- composables/useWagmi.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composables/useWagmi.ts b/composables/useWagmi.ts index 42e045fe20..4129dd6ba0 100644 --- a/composables/useWagmi.ts +++ b/composables/useWagmi.ts @@ -1,5 +1,5 @@ import { defaultWagmiConfig } from '@web3modal/wagmi/vue' -import { base, immutableZkEvm } from 'viem/chains' +import { base, immutableZkEvm, mantle } from 'viem/chains' import { reconnect as reconnectWagmi } from '@wagmi/core' import { useAccount, useDisconnect } from 'use-wagmi' import type { DisconnectMutateAsync } from 'use-wagmi/query' @@ -12,7 +12,7 @@ const buildWagmiConfig = () => { icons: ['https://avatars.githubusercontent.com/u/37784886'], } - const chains = [base, immutableZkEvm] + const chains = [base, immutableZkEvm, mantle] return defaultWagmiConfig({ chains, From a2b147fa57341e99de6fbac2f7c27f7203b10616 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:49:20 +0200 Subject: [PATCH 09/21] mantle in stores/identity.ts --- stores/identity.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/stores/identity.ts b/stores/identity.ts index 25c3076ca8..14614f4287 100644 --- a/stores/identity.ts +++ b/stores/identity.ts @@ -11,6 +11,7 @@ const DEFAULT_BALANCE_STATE = { dot: '0', ahp: '0', eth: '0', + mnt: '0', // ahr: '0', // glmr: '0', // movr: '0', @@ -34,6 +35,7 @@ export type ChainType = | 'polkadotHub' | 'base' | 'immutablex' + | 'mantle' // | 'rococoHub' type ChainDetail = { @@ -105,6 +107,7 @@ export const useIdentityStore = defineStore('identity', { { chain: 'polkadotHub', token: 'DOT' }, { chain: 'base', token: 'ETH' }, { chain: 'immutablex', token: 'ETH' }, + { chain: 'mantle', token: 'MNT' }, ], multiBalanceAssetsTestnet: [ // { chain: 'rococoHub', token: 'ROC' }, From f383d68e7d33148a166f35467a73dbf3d874fb39 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:49:20 +0200 Subject: [PATCH 10/21] mantle in utils/teleport.ts --- utils/teleport.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/teleport.ts b/utils/teleport.ts index 608d2babd9..d0fbe75762 100644 --- a/utils/teleport.ts +++ b/utils/teleport.ts @@ -16,6 +16,7 @@ export enum Chain { POLKADOT = 'Polkadot', BASE = 'Base', IMMUTABLEX = 'Immutable', + MANTLE = 'Mantle', } export type TeleportChain = { From a75ba7945d82494bde2cf8ce39d641ff60523578 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 7 Aug 2024 13:49:20 +0200 Subject: [PATCH 11/21] mantle in utils/wagmi.ts --- utils/wagmi.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils/wagmi.ts b/utils/wagmi.ts index ebedc07bbc..ac3949f1b2 100644 --- a/utils/wagmi.ts +++ b/utils/wagmi.ts @@ -1,15 +1,17 @@ import type { Prefix } from '@kodadot1/static' -import { base, immutableZkEvm } from 'viem/chains' +import { base, immutableZkEvm, mantle } from 'viem/chains' import { type Chain, createPublicClient, http } from 'viem' export const CHAIN_ID_TO_PREFIX: Record = { 8453: 'base', 13371: 'imx', + 5000: 'mnt', } export const PREFIX_TO_CHAIN: Partial> = { base: base, imx: immutableZkEvm, + mnt: mantle, } export const viemClient = (prefix: Prefix) => From a0571773e539b4aa39964ab17330c55f443c08d2 Mon Sep 17 00:00:00 2001 From: hassnian Date: Thu, 8 Aug 2024 10:22:16 +0500 Subject: [PATCH 12/21] mantle in /drops --- components/Navbar.vue | 2 +- utils/config/permission.config.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/components/Navbar.vue b/components/Navbar.vue index dba9cf05e8..2d7ca39e0f 100644 --- a/components/Navbar.vue +++ b/components/Navbar.vue @@ -290,7 +290,7 @@ const logoSrc = computed(() => { const dropsPath = computed(() => { const prefix = pickByVm({ SUB: 'ahp', - EVM: 'base', + EVM: urlPrefix.value, }) return `/${prefix}/drops` }) diff --git a/utils/config/permission.config.ts b/utils/config/permission.config.ts index da8efef4b5..a5f25d862f 100644 --- a/utils/config/permission.config.ts +++ b/utils/config/permission.config.ts @@ -1,3 +1,4 @@ +import { chainPropListOf } from './chain.config' import type { PartialConfig, Prefix } from './types' const hasCreate: PartialConfig = { @@ -54,7 +55,7 @@ export const salesVisible = (prefix: Prefix | string) => { } export const dropsVisible = (prefix: Prefix | string) => { - return prefix === 'ahk' || prefix === 'ahp' || prefix === 'base' + return prefix === 'ahk' || prefix === 'ahp' || chainPropListOf(prefix as Prefix).vm === 'EVM' } export const explorerVisible = (prefix: Prefix | string): boolean => { From c6abfe861b9211a6b1c0b349053729a6dac7f01b Mon Sep 17 00:00:00 2001 From: hassnian Date: Thu, 8 Aug 2024 10:34:29 +0500 Subject: [PATCH 13/21] mantle in composables/useMultipleBalance.ts --- composables/useMultipleBalance.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/composables/useMultipleBalance.ts b/composables/useMultipleBalance.ts index c344c04ee4..bacb299865 100644 --- a/composables/useMultipleBalance.ts +++ b/composables/useMultipleBalance.ts @@ -23,6 +23,7 @@ export const networkToPrefix: Partial> = { polkadotHub: 'ahp', base: 'base', immutablex: 'imx', + mantle: 'mnt', // rococoHub: 'ahr', } @@ -34,6 +35,7 @@ export const prefixToNetwork: Partial> = { ahp: 'polkadotHub', base: 'base', imx: 'immutablex', + mnt: 'mantle', // ahr: 'rococoHub', } From 265340fc1c12277f66ebdf08af11c5f9d0c86bb1 Mon Sep 17 00:00:00 2001 From: hassnian Date: Thu, 8 Aug 2024 11:01:31 +0500 Subject: [PATCH 14/21] mantle in utils/coinprice.ts --- utils/coinprice.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/utils/coinprice.ts b/utils/coinprice.ts index 6906cb24ee..8b4440aadd 100644 --- a/utils/coinprice.ts +++ b/utils/coinprice.ts @@ -60,12 +60,14 @@ export const getPrice = async (id: string): Promise => { return emptyPrice } -export type TokenName = 'kusama' | 'polkadot' | 'ethereum' +export type Token = 'KSM' | 'DOT' | 'ETH' | 'MNT' +export type TokenName = 'kusama' | 'polkadot' | 'ethereum' | 'mantle' // tokenMap but reversed -const tokenMap: Record = { +const tokenMap: Record = { KSM: 'kusama', DOT: 'polkadot', ETH: 'ethereum', + MNT: 'mantle', } export const getApproximatePriceOf = async (id: string): Promise => { From 87e1adf37ee1d3afb0413350e66baf171a601549 Mon Sep 17 00:00:00 2001 From: hassnian Date: Thu, 8 Aug 2024 11:01:55 +0500 Subject: [PATCH 15/21] mantle in stores/fiat.ts --- stores/fiat.ts | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/stores/fiat.ts b/stores/fiat.ts index b6405ce510..3d058416f7 100644 --- a/stores/fiat.ts +++ b/stores/fiat.ts @@ -4,17 +4,9 @@ import type { TokenName } from '~/utils/coinprice' type FiatPrice = string | number | null interface State { - fiatPrice: { - kusama: { - usd: FiatPrice - } - polkadot: { - usd: FiatPrice - } - ethereum: { - usd: FiatPrice - } - } + fiatPrice: Record } export const useFiatStore = defineStore('fiat', { @@ -29,6 +21,9 @@ export const useFiatStore = defineStore('fiat', { ethereum: { usd: null, }, + mantle: { + usd: null, + }, }, }), getters: { @@ -42,7 +37,7 @@ export const useFiatStore = defineStore('fiat', { getCurrentROCValue: (_state): FiatPrice => 0, getCurrentTokenValue: state => - (token: string): FiatPrice => { + (token: Token): FiatPrice => { switch (token) { case 'KSM': return state.fiatPrice.kusama.usd @@ -50,6 +45,8 @@ export const useFiatStore = defineStore('fiat', { return state.fiatPrice.polkadot.usd case 'ETH': return state.fiatPrice.ethereum.usd + case 'MNT': + return state.fiatPrice.mantle.usd default: return 0 } @@ -58,7 +55,7 @@ export const useFiatStore = defineStore('fiat', { actions: { async fetchFiatPrice() { const prices = await Promise.all( - (['kusama', 'polkadot', 'ethereum'] as TokenName[]).map(getPrice), + (['kusama', 'polkadot', 'ethereum', 'mantle'] as TokenName[]).map(getPrice), ) prices.forEach((price) => { this.fiatPrice = Object.assign({}, this.fiatPrice, price) From 27993428d1026a5100a19a6b8a19c04f8c35be26 Mon Sep 17 00:00:00 2001 From: hassnian Date: Thu, 8 Aug 2024 11:06:41 +0500 Subject: [PATCH 16/21] fix: mantle in useMultipleBalance.ts --- composables/useMultipleBalance.ts | 2 +- stores/identity.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composables/useMultipleBalance.ts b/composables/useMultipleBalance.ts index bacb299865..60f09110d8 100644 --- a/composables/useMultipleBalance.ts +++ b/composables/useMultipleBalance.ts @@ -90,7 +90,7 @@ export default function (refetchPeriodically: boolean = false) { [Chain.IMMUTABLEX]: multiBalances.value.chains.immutablex?.eth?.nativeBalance, [Chain.MANTLE]: - multiBalances.value.chains.mantle?.eth?.nativeBalance, + multiBalances.value.chains.mantle?.mnt?.nativeBalance, })) const currentChain = computed(() => prefixToChainMap[urlPrefix.value]) diff --git a/stores/identity.ts b/stores/identity.ts index 14614f4287..9bc898944c 100644 --- a/stores/identity.ts +++ b/stores/identity.ts @@ -45,7 +45,7 @@ type ChainDetail = { selected: boolean address: string } -export type ChainToken = Partial> +export type ChainToken = Partial> interface MultiBalances { address: string From 2142f0d24c1b7c2ba30958d1da4fe48d67fecca2 Mon Sep 17 00:00:00 2001 From: hassnian Date: Thu, 8 Aug 2024 11:45:45 +0500 Subject: [PATCH 17/21] mantle in utils/teleport.ts --- utils/teleport.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/utils/teleport.ts b/utils/teleport.ts index d0fbe75762..f56982845d 100644 --- a/utils/teleport.ts +++ b/utils/teleport.ts @@ -49,6 +49,7 @@ export const chainToPrefixMap: Record = { [Chain.POLKADOT]: 'dot', [Chain.BASE]: 'base', [Chain.IMMUTABLEX]: 'imx', + [Chain.MANTLE]: 'mnt', } export const prefixToChainMap: Partial> = { @@ -59,6 +60,7 @@ export const prefixToChainMap: Partial> = { dot: Chain.POLKADOT, imx: Chain.IMMUTABLEX, base: Chain.BASE, + mnt: Chain.MANTLE, } export enum TeleprtType { @@ -175,7 +177,7 @@ export const getTransactionFee = async ({ return info.partialFee.toString() } -export type Currency = 'KSM' | 'DOT' | 'ETH' +export type Currency = 'KSM' | 'DOT' | 'ETH' | 'MNT' export const getChainCurrency = (chain: Chain): Currency => { switch (chain) { @@ -188,6 +190,8 @@ export const getChainCurrency = (chain: Chain): Currency => { case Chain.BASE: case Chain.IMMUTABLEX: return 'ETH' + case Chain.MANTLE: + return 'MNT' } } @@ -196,6 +200,7 @@ export const chainToPrecisionMap: Record = { [Chain.ASSETHUBKUSAMA]: 6, [Chain.ASSETHUBPOLKADOT]: 5, [Chain.BASE]: 5, + [Chain.MANTLE]: 5, [Chain.IMMUTABLEX]: 5, [Chain.POLKADOT]: 4, } From ee9efe911829d4ed93bc49567af557be37840d3f Mon Sep 17 00:00:00 2001 From: hassnian Date: Thu, 8 Aug 2024 12:05:54 +0500 Subject: [PATCH 18/21] mantle in composables/transaction/transactionMintDrop.ts --- components/carousel/CarouselTypeDrops.vue | 3 ++- composables/transaction/transactionMintDrop.ts | 2 +- composables/useChain.ts | 3 --- composables/useIsChain.ts | 12 ++++++------ utils/config/chain.config.ts | 6 +++++- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/components/carousel/CarouselTypeDrops.vue b/components/carousel/CarouselTypeDrops.vue index d684ad2925..7a753832be 100644 --- a/components/carousel/CarouselTypeDrops.vue +++ b/components/carousel/CarouselTypeDrops.vue @@ -28,6 +28,7 @@