diff --git a/modules/bitgo/test/v2/unit/keychains.ts b/modules/bitgo/test/v2/unit/keychains.ts index ec34757c5a..f513c968d6 100644 --- a/modules/bitgo/test/v2/unit/keychains.ts +++ b/modules/bitgo/test/v2/unit/keychains.ts @@ -84,6 +84,7 @@ describe('V2 Keychains', function () { n.asset !== UnderlyingAsset.PHRS && n.asset !== UnderlyingAsset.CTC && n.asset !== UnderlyingAsset.HYPEEVM && + n.asset !== UnderlyingAsset.HEMI && n.asset !== UnderlyingAsset.XPL && n.asset !== UnderlyingAsset.SONEIUM && n.asset !== UnderlyingAsset.VET && diff --git a/modules/sdk-core/src/bitgo/environments.ts b/modules/sdk-core/src/bitgo/environments.ts index afe57f8404..e48e563f2d 100644 --- a/modules/sdk-core/src/bitgo/environments.ts +++ b/modules/sdk-core/src/bitgo/environments.ts @@ -290,6 +290,9 @@ const mainnetBase: EnvironmentTemplate = { baseUrl: 'https://mainnet.mirrornode.hedera.com/api/v1', rpcUrl: 'https://mainnet.hashio.io/api', }, + hemi: { + baseUrl: 'https://explorer.hemi.xyz/api', + }, fluenteth: { baseUrl: 'https://testnet.fluentscan.xyz/api/', //TODO: COIN-6478: add mainnet url when available }, @@ -471,6 +474,9 @@ const testnetBase: EnvironmentTemplate = { baseUrl: 'https://testnet.mirrornode.hedera.com/api/v1', rpcUrl: 'https://testnet.hashio.io/api', }, + hemi: { + 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 99bb4505c3..8e44fe0fcf 100644 --- a/modules/statics/src/allCoinsAndTokens.ts +++ b/modules/statics/src/allCoinsAndTokens.ts @@ -1757,6 +1757,52 @@ export const allCoinsAndTokens = [ CoinFeature.STAKING, ] ), + account( + '6f15e172-0b85-4f4b-be78-13f108d0f2bb', + 'hemi', + 'Hemi', + Networks.main.hemi, + 18, + UnderlyingAsset.HEMI, + 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.EVM_NON_BITGO_RECOVERY, + CoinFeature.EVM_UNSIGNED_SWEEP_RECOVERY, + CoinFeature.SUPPORTS_ERC20, + ], + KeyCurve.Secp256k1, + '', + 'Hemi' + ), + account( + '209f235f-ce48-44ac-8804-3af1eab50136', + 'themi', + 'Testnet Hemi', + Networks.test.hemi, + 18, + UnderlyingAsset.HEMI, + 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.EVM_NON_BITGO_RECOVERY, + CoinFeature.EVM_UNSIGNED_SWEEP_RECOVERY, + CoinFeature.SUPPORTS_ERC20, + ], + KeyCurve.Secp256k1, + '', + 'THemi' + ), account( '23e7eca6-e862-4bc5-bf4f-65eeb8174171', 'sonic', diff --git a/modules/statics/src/base.ts b/modules/statics/src/base.ts index 44419e5dba..1b10c30ee3 100644 --- a/modules/statics/src/base.ts +++ b/modules/statics/src/base.ts @@ -65,6 +65,7 @@ export enum CoinFamily { HASH = 'hash', // Provenance HBAR = 'hbar', HBAREVM = 'hbarevm', // Hedera EVM coin + HEMI = 'hemi', ICP = 'icp', INITIA = 'initia', INJECTIVE = 'injective', @@ -594,6 +595,7 @@ export enum UnderlyingAsset { HASH = 'hash', // Provenance HBAR = 'hbar', // Hedera main coin HBAREVM = 'hbarevm', // Hedera EVM coin + HEMI = 'hemi', ICP = 'icp', IP = 'ip', // Story Chain INITIA = 'initia', diff --git a/modules/statics/src/networks.ts b/modules/statics/src/networks.ts index 228bc66044..30024a2097 100644 --- a/modules/statics/src/networks.ts +++ b/modules/statics/src/networks.ts @@ -2312,6 +2312,24 @@ class HederaEVM extends Mainnet implements EthereumNetwork { nativeCoinOperationHashPrefix = '295'; } +class Hemi extends Mainnet implements EthereumNetwork { + name = 'Hemi'; + family = CoinFamily.HEMI; + explorerUrl = 'https://explorer.hemi.xyz/tx/'; + accountExplorerUrl = 'https://explorer.hemi.xyz/address/'; + chainId = 43111; + nativeCoinOperationHashPrefix = '43111'; +} + +class HemiTestnet extends Testnet implements EthereumNetwork { + name = 'Testnet Hemi'; + family = CoinFamily.HEMI; + 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; @@ -2437,6 +2455,7 @@ export const Networks = { hash: Object.freeze(new Hash()), hedera: Object.freeze(new Hedera()), hederaEVM: Object.freeze(new HederaEVM()), + hemi: Object.freeze(new Hemi()), icp: Object.freeze(new Icp()), ip: Object.freeze(new IP()), initia: Object.freeze(new Initia()), @@ -2552,6 +2571,7 @@ export const Networks = { hash: Object.freeze(new HashTestnet()), hedera: Object.freeze(new HederaTestnet()), hederaEVM: Object.freeze(new HederaEVMTestnet()), + hemi: Object.freeze(new HemiTestnet()), 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 c73226e3b3..e459da9c84 100644 --- a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts +++ b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts @@ -95,6 +95,7 @@ export const expectedColdFeatures = { 'fluenteth', 'hash', 'hbarevm', + 'hemi', 'icp', 'ip', // Story chain 'initia', @@ -161,6 +162,7 @@ export const expectedColdFeatures = { 'tflow', 'tfluenteth', 'thbarevm', + 'themi', 'tjovayeth', 'tog', 'tokbxlayer',