diff --git a/modules/bitgo/test/v2/unit/keychains.ts b/modules/bitgo/test/v2/unit/keychains.ts index 23aebba7dc..1b0cf0bbec 100644 --- a/modules/bitgo/test/v2/unit/keychains.ts +++ b/modules/bitgo/test/v2/unit/keychains.ts @@ -100,6 +100,7 @@ describe('V2 Keychains', function () { n.asset !== UnderlyingAsset.SOMI && n.asset !== UnderlyingAsset.FLRP && n.asset !== UnderlyingAsset.FLUENTETH && + n.asset !== UnderlyingAsset.MANTLE && coinFamilyValues.includes(n.name) ); diff --git a/modules/sdk-core/src/bitgo/environments.ts b/modules/sdk-core/src/bitgo/environments.ts index b87f2e025d..6220a1deef 100644 --- a/modules/sdk-core/src/bitgo/environments.ts +++ b/modules/sdk-core/src/bitgo/environments.ts @@ -275,6 +275,9 @@ const mainnetBase: EnvironmentTemplate = { fluenteth: { baseUrl: 'https://testnet.fluentscan.xyz/api/', //TODO: COIN-6478: add mainnet url when available }, + mantle: { + baseUrl: 'https://api.mantlescan.xyz/api', + }, }, icpNodeUrl: 'https://ic0.app', worldExplorerBaseUrl: 'https://worldscan.org/', @@ -418,6 +421,9 @@ const testnetBase: EnvironmentTemplate = { fluenteth: { baseUrl: 'https://testnet.fluentscan.xyz/api/', }, + mantle: { + baseUrl: 'https://api-sepolia.mantlescan.xyz/api', + }, }, stxNodeUrl: 'https://api.testnet.hiro.so', vetNodeUrl: 'https://sync-testnet.vechain.org', diff --git a/modules/statics/src/allCoinsAndTokens.ts b/modules/statics/src/allCoinsAndTokens.ts index 15d0777036..c888402596 100644 --- a/modules/statics/src/allCoinsAndTokens.ts +++ b/modules/statics/src/allCoinsAndTokens.ts @@ -2201,6 +2201,38 @@ export const allCoinsAndTokens = [ '', 'FluentETH' ), + account( + 'bc7e8d57-696a-4ead-a0a3-1aa479ed0665', + 'mantle', + 'Mantle Native', + Networks.main.mantle, + 18, + UnderlyingAsset.MANTLE, + BaseUnit.ETH, + [ + ...EVM_FEATURES, + CoinFeature.SHARED_EVM_SIGNING, + CoinFeature.SHARED_EVM_SDK, + CoinFeature.EVM_COMPATIBLE_IMS, + CoinFeature.EVM_COMPATIBLE_UI, + ] + ), + account( + '53cd61e4-1fdd-4c95-a8da-cb39bf383c2e', + 'tmantle', + 'Testnet Mantle Native', + Networks.test.mantle, + 18, + UnderlyingAsset.MANTLE, + BaseUnit.ETH, + [ + ...EVM_FEATURES, + CoinFeature.SHARED_EVM_SIGNING, + CoinFeature.SHARED_EVM_SDK, + CoinFeature.EVM_COMPATIBLE_IMS, + CoinFeature.EVM_COMPATIBLE_UI, + ] + ), canton( '07385320-5a4f-48e9-97a5-86d4be9f24b0', 'canton', diff --git a/modules/statics/src/base.ts b/modules/statics/src/base.ts index 38075b5bc1..29ec9bc26f 100644 --- a/modules/statics/src/base.ts +++ b/modules/statics/src/base.ts @@ -72,6 +72,7 @@ export enum CoinFamily { KAVAEVM = 'kavaevm', LNBTC = 'lnbtc', LTC = 'ltc', + MANTLE = 'mantle', MANTRA = 'mantra', MEGAETH = 'megaeth', MON = 'mon', @@ -563,6 +564,7 @@ export enum UnderlyingAsset { LNBTC = 'lnbtc', LTC = 'ltc', LINEAETH = 'lineaeth', + MANTLE = 'mantle', MANTRA = 'mantra', MEGAETH = 'megaeth', MON = 'mon', diff --git a/modules/statics/src/networks.ts b/modules/statics/src/networks.ts index 2bf1c36493..e045bbc460 100644 --- a/modules/statics/src/networks.ts +++ b/modules/statics/src/networks.ts @@ -1509,6 +1509,24 @@ class FluentETHTestnet extends Testnet implements EthereumNetwork { nativeCoinOperationHashPrefix = '20994'; } +class Mantle extends Mainnet implements EthereumNetwork { + name = 'Mantle Native'; + family = CoinFamily.MANTLE; + explorerUrl = 'https://mantlescan.xyz/tx/'; + accountExplorerUrl = 'https://mantlescan.xyz/address/'; + chainId = 5000; + nativeCoinOperationHashPrefix = '5000'; +} + +class MantleTestnet extends Testnet implements EthereumNetwork { + name = 'Testnet Mantle Native'; + family = CoinFamily.MANTLE; + explorerUrl = 'https://sepolia.mantlescan.xyz/tx/'; + accountExplorerUrl = 'https://sepolia.mantlescan.xyz/address/'; + chainId = 5003; + nativeCoinOperationHashPrefix = '5003'; +} + class CreditcoinTestnet extends Testnet implements EthereumNetwork { name = 'CreditcoinTestnet'; family = CoinFamily.CTC; @@ -2111,6 +2129,7 @@ export const Networks = { litecoin: Object.freeze(new Litecoin()), megaeth: Object.freeze(new MegaETH()), mon: Object.freeze(new Monad()), + mantle: Object.freeze(new Mantle()), mantra: Object.freeze(new Mantra()), plume: Object.freeze(new Plume()), polygon: Object.freeze(new Polygon()), @@ -2214,6 +2233,7 @@ export const Networks = { hoodi: Object.freeze(new Hoodi()), lnbtc: Object.freeze(new LightningBitcoinTestnet()), litecoin: Object.freeze(new LitecoinTestnet()), + mantle: Object.freeze(new MantleTestnet()), mantra: Object.freeze(new MantraTestnet()), polygon: Object.freeze(new PolygonTestnet()), polyx: Object.freeze(new PolymeshTestnet()), diff --git a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts index 2d9d176393..e9ca99d824 100644 --- a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts +++ b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts @@ -99,6 +99,7 @@ export const expectedColdFeatures = { 'kaia', 'kava', 'megaeth', + 'mantle', 'mantra', 'mon', 'near', @@ -166,6 +167,7 @@ export const expectedColdFeatures = { 'tiota', 'tkaia', 'tkava', + 'tmantle', 'tmantra', 'tnear', 'tosmo',