From c3ac95d8b83006424cfb01a0c3acda81a00b272f Mon Sep 17 00:00:00 2001 From: ArunBala-Bitgo Date: Wed, 3 Jun 2026 14:26:06 +0530 Subject: [PATCH] feat(statics): add MIDL Bitcoin EVM chain Add MIDL Bitcoin (midlBTC) EVM chain integration with mainnet and testnet support. Mainnet chain ID 1500, testnet chain ID 15001. Includes statics entries, network classes, OFC entries, environment explorer URLs, and expected cold features. Ticket: CECHO-1231 Co-Authored-By: Claude Opus 4.6 --- modules/sdk-core/src/bitgo/environments.ts | 6 +++ modules/statics/src/allCoinsAndTokens.ts | 40 +++++++++++++++++++ modules/statics/src/base.ts | 3 ++ modules/statics/src/coins/ofcCoins.ts | 16 ++++++++ modules/statics/src/networks.ts | 20 ++++++++++ .../unit/fixtures/expectedColdFeatures.ts | 2 + 6 files changed, 87 insertions(+) diff --git a/modules/sdk-core/src/bitgo/environments.ts b/modules/sdk-core/src/bitgo/environments.ts index 4054ca010f..f09e49fa40 100644 --- a/modules/sdk-core/src/bitgo/environments.ts +++ b/modules/sdk-core/src/bitgo/environments.ts @@ -313,6 +313,9 @@ const mainnetBase: EnvironmentTemplate = { hemieth: { baseUrl: 'https://explorer.hemi.xyz/api', }, + midlbtc: { + baseUrl: 'https://blockscout.mainnet.midl.xyz/api', + }, katanaeth: { baseUrl: 'https://katanascan.com/api', }, @@ -546,6 +549,9 @@ const testnetBase: EnvironmentTemplate = { hemieth: { baseUrl: 'https://testnet.explorer.hemi.xyz/api', }, + midlbtc: { + baseUrl: 'https://blockscout.staging.midl.xyz/api', + }, tkatanaeth: { baseUrl: 'https://explorer-bokuto.katanarpc.com/api', }, diff --git a/modules/statics/src/allCoinsAndTokens.ts b/modules/statics/src/allCoinsAndTokens.ts index 6debeb5ab1..a8fb02778d 100644 --- a/modules/statics/src/allCoinsAndTokens.ts +++ b/modules/statics/src/allCoinsAndTokens.ts @@ -2664,6 +2664,46 @@ export const allCoinsAndTokens = [ UnderlyingAsset['hemieth:hemibtc'], Networks.main.hemieth ), + account( + '1d547ad4-3165-4a51-922a-b29f8a427f88', + 'midlbtc', + 'MIDL Bitcoin', + Networks.main.midlbtc, + 18, + UnderlyingAsset.MIDLBTC, + BaseUnit.MIDLBTC, + [ + ...EVM_NON_EIP1559_FEATURES, + CoinFeature.SHARED_EVM_SIGNING, + CoinFeature.SHARED_EVM_SDK, + CoinFeature.EVM_COMPATIBLE_IMS, + CoinFeature.EVM_COMPATIBLE_UI, + CoinFeature.EVM_COMPATIBLE_WP, + ], + KeyCurve.Secp256k1, + '', + 'midlBTC' + ), + account( + '1b2bdc62-c990-4194-b05e-fb4d840abc1d', + 'tmidlbtc', + 'Testnet MIDL Bitcoin', + Networks.test.midlbtc, + 18, + UnderlyingAsset.MIDLBTC, + BaseUnit.MIDLBTC, + [ + ...EVM_NON_EIP1559_FEATURES, + CoinFeature.SHARED_EVM_SIGNING, + CoinFeature.SHARED_EVM_SDK, + CoinFeature.EVM_COMPATIBLE_IMS, + CoinFeature.EVM_COMPATIBLE_UI, + CoinFeature.EVM_COMPATIBLE_WP, + ], + KeyCurve.Secp256k1, + '', + 'midlBTC' + ), account( 'd055d442-03f1-4d24-b61c-5312e480e378', 'bobaeth', diff --git a/modules/statics/src/base.ts b/modules/statics/src/base.ts index 86cc9ebfb8..2ed449964b 100644 --- a/modules/statics/src/base.ts +++ b/modules/statics/src/base.ts @@ -90,6 +90,7 @@ export enum CoinFamily { MANTLE = 'mantle', MANTRA = 'mantra', MEGAETH = 'megaeth', + MIDLBTC = 'midlbtc', // MIDL Bitcoin EVM L2 MON = 'mon', XPL = 'xpl', // Plasma Network POLYGON = 'polygon', @@ -673,6 +674,7 @@ export enum UnderlyingAsset { MANTLE = 'mantle', MANTRA = 'mantra', MEGAETH = 'megaeth', + MIDLBTC = 'midlbtc', MON = 'mon', MORPH = 'morph', MORPHETH = 'morpheth', @@ -4047,6 +4049,7 @@ export enum BaseUnit { INITIA = 'uinit', ASI = 'afet', VET = 'wei', + MIDLBTC = 'wei', TCRONOS = 'basetcro', TASI = 'atestfet', CANTON = 'canton', diff --git a/modules/statics/src/coins/ofcCoins.ts b/modules/statics/src/coins/ofcCoins.ts index 0d784af793..a78d860afb 100644 --- a/modules/statics/src/coins/ofcCoins.ts +++ b/modules/statics/src/coins/ofcCoins.ts @@ -425,6 +425,22 @@ export const ofcCoins = [ UnderlyingAsset.HEMIETH, CoinKind.CRYPTO ), + ofc( + 'c2698de6-27a0-41fc-96fc-8a2bf2777359', + 'ofcmidlbtc', + 'MIDL Bitcoin', + 18, + UnderlyingAsset.MIDLBTC, + CoinKind.CRYPTO + ), + tofc( + 'f67dee61-409b-40e2-a7b0-bda680d889eb', + 'ofctmidlbtc', + 'MIDL Bitcoin Testnet', + 18, + UnderlyingAsset.MIDLBTC, + CoinKind.CRYPTO + ), tofc( '7d18cdc5-a7da-4c76-8ce0-f80c391f80b3', 'ofctprividiumeth', diff --git a/modules/statics/src/networks.ts b/modules/statics/src/networks.ts index f0c0832196..9270f13291 100644 --- a/modules/statics/src/networks.ts +++ b/modules/statics/src/networks.ts @@ -2580,6 +2580,24 @@ class HemiEthTestnet extends Testnet implements EthereumNetwork { chainId = 743111; nativeCoinOperationHashPrefix = '743111'; } +class MidlBtc extends Mainnet implements EthereumNetwork { + name = 'MIDL Bitcoin'; + family = CoinFamily.MIDLBTC; + explorerUrl = 'https://blockscout.mainnet.midl.xyz/tx/'; + accountExplorerUrl = 'https://blockscout.mainnet.midl.xyz/address/'; + chainId = 1500; + nativeCoinOperationHashPrefix = '1500'; +} + +class MidlBtcTestnet extends Testnet implements EthereumNetwork { + name = 'Testnet MIDL Bitcoin'; + family = CoinFamily.MIDLBTC; + explorerUrl = 'https://blockscout.staging.midl.xyz/tx/'; + accountExplorerUrl = 'https://blockscout.staging.midl.xyz/address/'; + chainId = 15001; + nativeCoinOperationHashPrefix = '15001'; +} + class KatanaEth extends Mainnet implements EthereumNetwork { name = 'Katana'; family = CoinFamily.KATANAETH; @@ -2892,6 +2910,7 @@ export const Networks = { lnbtc: Object.freeze(new LightningBitcoin()), litecoin: Object.freeze(new Litecoin()), megaeth: Object.freeze(new MegaETH()), + midlbtc: Object.freeze(new MidlBtc()), mon: Object.freeze(new Monad()), mantle: Object.freeze(new Mantle()), mantra: Object.freeze(new Mantra()), @@ -3008,6 +3027,7 @@ export const Networks = { hederaEVM: Object.freeze(new HederaEVMTestnet()), hemieth: Object.freeze(new HemiEthTestnet()), inketh: Object.freeze(new InkEthTestnet()), + midlbtc: Object.freeze(new MidlBtcTestnet()), icp: Object.freeze(new IcpTestnet()), ip: Object.freeze(new IPTestnet()), initia: Object.freeze(new InitiaTestnet()), diff --git a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts index c4b6b9d763..bd76bdcf8d 100644 --- a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts +++ b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts @@ -120,6 +120,7 @@ export const expectedColdFeatures = { 'megaeth', 'mantle', 'mantra', + 'midlbtc', 'mon', 'morph', 'morpheth', @@ -193,6 +194,7 @@ export const expectedColdFeatures = { 'tmorph', 'tmorpheth', 'tmegaeth', + 'tmidlbtc', 'tmon', 'tworld', 'tphrs',