From f4afcd85d2ef7a39e0989cda17706125023b5463 Mon Sep 17 00:00:00 2001 From: Manoj Kumar Date: Mon, 16 Feb 2026 18:41:05 +0530 Subject: [PATCH] feat(statics): add Hemi Ethereum (hemieth) L2 chain support Add Hemi Ethereum L2 chain with ETH gas token: - Add hemieth/themieth coin entries in allCoinsAndTokens - Add HEMIETH to CoinFamily and UnderlyingAsset enums - Add HemiEth network classes with chain IDs 43111/743111 - Add OFC entries for ofchemieth/ofcthemieth - Add explorer API configuration in environments - Update test fixtures Ticket: WIN-8747 CECHO-115 --- modules/sdk-core/src/bitgo/environments.ts | 6 ++++ modules/statics/src/allCoinsAndTokens.ts | 36 +++++++++++++++++++ modules/statics/src/base.ts | 2 ++ modules/statics/src/coins/ofcCoins.ts | 16 +++++++++ modules/statics/src/networks.ts | 20 +++++++++++ .../unit/fixtures/expectedColdFeatures.ts | 2 ++ 6 files changed, 82 insertions(+) diff --git a/modules/sdk-core/src/bitgo/environments.ts b/modules/sdk-core/src/bitgo/environments.ts index d23446451c..37a435d388 100644 --- a/modules/sdk-core/src/bitgo/environments.ts +++ b/modules/sdk-core/src/bitgo/environments.ts @@ -296,6 +296,9 @@ const mainnetBase: EnvironmentTemplate = { baseUrl: 'https://mainnet.mirrornode.hedera.com/api/v1', rpcUrl: 'https://mainnet.hashio.io/api', }, + hemieth: { + baseUrl: 'https://explorer.hemi.xyz/api', + }, fluenteth: { baseUrl: 'https://testnet.fluentscan.xyz/api/', //TODO: COIN-6478: add mainnet url when available }, @@ -483,6 +486,9 @@ const testnetBase: EnvironmentTemplate = { baseUrl: 'https://testnet.mirrornode.hedera.com/api/v1', rpcUrl: 'https://testnet.hashio.io/api', }, + hemieth: { + baseUrl: 'https://testnet.explorer.hemi.xyz/api', + }, fluenteth: { baseUrl: 'https://testnet.fluentscan.xyz/api/', }, diff --git a/modules/statics/src/allCoinsAndTokens.ts b/modules/statics/src/allCoinsAndTokens.ts index 2f2b3cfb8c..5a8f915627 100644 --- a/modules/statics/src/allCoinsAndTokens.ts +++ b/modules/statics/src/allCoinsAndTokens.ts @@ -2285,6 +2285,42 @@ export const allCoinsAndTokens = [ CoinFeature.EVM_UNSIGNED_SWEEP_RECOVERY, ] ), + account( + '68d22683-a8f2-47b3-8446-92e02a1963ae', + 'hemieth', + 'Hemi Ethereum', + Networks.main.hemieth, + 18, + UnderlyingAsset.HEMIETH, + BaseUnit.ETH, + [ + ...EVM_FEATURES, + CoinFeature.SHARED_EVM_SIGNING, + CoinFeature.SHARED_EVM_SDK, + CoinFeature.EVM_COMPATIBLE_IMS, + CoinFeature.EVM_COMPATIBLE_UI, + CoinFeature.EVM_COMPATIBLE_WP, + CoinFeature.SUPPORTS_ERC20, + ] + ), + account( + 'df0007d9-974b-4099-bf37-9dc59399c058', + 'themieth', + 'Testnet Hemi Ethereum', + Networks.test.hemieth, + 18, + UnderlyingAsset.HEMIETH, + BaseUnit.ETH, + [ + ...EVM_FEATURES, + CoinFeature.SHARED_EVM_SIGNING, + CoinFeature.SHARED_EVM_SDK, + CoinFeature.EVM_COMPATIBLE_IMS, + CoinFeature.EVM_COMPATIBLE_UI, + CoinFeature.EVM_COMPATIBLE_WP, + CoinFeature.SUPPORTS_ERC20, + ] + ), erc721Token( 'a7604e03-7f40-41f0-8efa-2e7673ac2a9f', diff --git a/modules/statics/src/base.ts b/modules/statics/src/base.ts index 707973bcbe..d88a6e0a38 100644 --- a/modules/statics/src/base.ts +++ b/modules/statics/src/base.ts @@ -66,6 +66,7 @@ export enum CoinFamily { HASH = 'hash', // Provenance HBAR = 'hbar', HBAREVM = 'hbarevm', // Hedera EVM coin + HEMIETH = 'hemieth', // Hemi Ethereum L2 ICP = 'icp', INITIA = 'initia', INJECTIVE = 'injective', @@ -597,6 +598,7 @@ export enum UnderlyingAsset { HASH = 'hash', // Provenance HBAR = 'hbar', // Hedera main coin HBAREVM = 'hbarevm', // Hedera EVM coin + HEMIETH = 'hemieth', // Hemi Ethereum L2 ICP = 'icp', IP = 'ip', // Story Chain INITIA = 'initia', diff --git a/modules/statics/src/coins/ofcCoins.ts b/modules/statics/src/coins/ofcCoins.ts index 4ddb4cac74..b8ed5a677a 100644 --- a/modules/statics/src/coins/ofcCoins.ts +++ b/modules/statics/src/coins/ofcCoins.ts @@ -293,6 +293,22 @@ export const ofcCoins = [ UnderlyingAsset.LINEAETH, CoinKind.CRYPTO ), + ofc( + 'bdab1ab0-215d-4d59-b698-7cc624e5027a', + 'ofchemieth', + 'Hemi Ethereum', + 18, + UnderlyingAsset.HEMIETH, + CoinKind.CRYPTO + ), + tofc( + 'bc005b8a-dfb5-42db-92ad-92db5cb5b7d2', + 'ofcthemieth', + 'Hemi Ethereum Testnet', + 18, + UnderlyingAsset.HEMIETH, + CoinKind.CRYPTO + ), ofc( 'f43afacc-0db3-4a8a-a987-ff9d93e08cb4', 'ofcjovayeth', diff --git a/modules/statics/src/networks.ts b/modules/statics/src/networks.ts index d02d178258..19cc5e5361 100644 --- a/modules/statics/src/networks.ts +++ b/modules/statics/src/networks.ts @@ -2352,6 +2352,24 @@ class HederaEVM extends Mainnet implements EthereumNetwork { nativeCoinOperationHashPrefix = '295'; } +class HemiEth extends Mainnet implements EthereumNetwork { + name = 'Hemi Ethereum'; + family = CoinFamily.HEMIETH; + explorerUrl = 'https://explorer.hemi.xyz/tx/'; + accountExplorerUrl = 'https://explorer.hemi.xyz/address/'; + chainId = 43111; + nativeCoinOperationHashPrefix = '43111'; +} + +class HemiEthTestnet extends Testnet implements EthereumNetwork { + name = 'Testnet Hemi Ethereum'; + family = CoinFamily.HEMIETH; + explorerUrl = 'https://testnet.explorer.hemi.xyz/tx/'; + accountExplorerUrl = 'https://testnet.explorer.hemi.xyz/address/'; + chainId = 743111; + nativeCoinOperationHashPrefix = '743111'; +} + class PlumeTestnet extends Testnet implements EthereumNetwork { name = 'PlumeTestnet'; family = CoinFamily.PLUME; @@ -2478,6 +2496,7 @@ export const Networks = { hash: Object.freeze(new Hash()), hedera: Object.freeze(new Hedera()), hederaEVM: Object.freeze(new HederaEVM()), + hemieth: Object.freeze(new HemiEth()), icp: Object.freeze(new Icp()), ip: Object.freeze(new IP()), initia: Object.freeze(new Initia()), @@ -2595,6 +2614,7 @@ export const Networks = { hash: Object.freeze(new HashTestnet()), hedera: Object.freeze(new HederaTestnet()), hederaEVM: Object.freeze(new HederaEVMTestnet()), + hemieth: Object.freeze(new HemiEthTestnet()), 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 c64178f902..c99f1be9b9 100644 --- a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts +++ b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts @@ -96,6 +96,7 @@ export const expectedColdFeatures = { 'fluenteth', 'hash', 'hbarevm', + 'hemieth', 'icp', 'ip', // Story chain 'initia', @@ -164,6 +165,7 @@ export const expectedColdFeatures = { 'tflow', 'tfluenteth', 'thbarevm', + 'themieth', 'tjovayeth', 'tog', 'tokbxlayer',