diff --git a/modules/bitgo/test/v2/unit/keychains.ts b/modules/bitgo/test/v2/unit/keychains.ts index 65e6416212..23aebba7dc 100644 --- a/modules/bitgo/test/v2/unit/keychains.ts +++ b/modules/bitgo/test/v2/unit/keychains.ts @@ -99,6 +99,7 @@ describe('V2 Keychains', function () { n.asset !== UnderlyingAsset.BASEETH && n.asset !== UnderlyingAsset.SOMI && n.asset !== UnderlyingAsset.FLRP && + n.asset !== UnderlyingAsset.FLUENTETH && coinFamilyValues.includes(n.name) ); diff --git a/modules/sdk-core/src/bitgo/environments.ts b/modules/sdk-core/src/bitgo/environments.ts index 806d778b5e..b87f2e025d 100644 --- a/modules/sdk-core/src/bitgo/environments.ts +++ b/modules/sdk-core/src/bitgo/environments.ts @@ -272,6 +272,9 @@ const mainnetBase: EnvironmentTemplate = { hedera: { baseUrl: 'https://server-verify.hashscan.io/verify', }, + fluenteth: { + baseUrl: 'https://testnet.fluentscan.xyz/api/', //TODO: COIN-6478: add mainnet url when available + }, }, icpNodeUrl: 'https://ic0.app', worldExplorerBaseUrl: 'https://worldscan.org/', @@ -412,6 +415,9 @@ const testnetBase: EnvironmentTemplate = { hedera: { baseUrl: 'https://server-verify.hashscan.io/verify', }, + fluenteth: { + baseUrl: 'https://testnet.fluentscan.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 6bfc75e3ac..349b6710d8 100644 --- a/modules/statics/src/allCoinsAndTokens.ts +++ b/modules/statics/src/allCoinsAndTokens.ts @@ -2163,6 +2163,44 @@ export const allCoinsAndTokens = [ CoinFeature.EVM_UNSIGNED_SWEEP_RECOVERY, ] ), + account( + '8f6ed7e4-cce2-4686-bdab-ae8f54e2c05e', + 'tfluenteth', + 'Testnet Fluent Ethereum', + Networks.test.fluenteth, + 18, + UnderlyingAsset.FLUENTETH, + BaseUnit.ETH, + [ + ...EVM_FEATURES, + CoinFeature.SHARED_EVM_SDK, + CoinFeature.SHARED_EVM_SIGNING, + CoinFeature.EVM_COMPATIBLE_IMS, + CoinFeature.EVM_COMPATIBLE_UI, + ], + KeyCurve.Secp256k1, + '', + 'TFluentETH' + ), + account( + 'a7c813b4-1cd2-4a36-a807-78150d64fba4', + 'fluenteth', + 'Fluent Ethereum', + Networks.main.fluenteth, + 18, + UnderlyingAsset.FLUENTETH, + BaseUnit.ETH, + [ + ...EVM_FEATURES, + CoinFeature.SHARED_EVM_SDK, + CoinFeature.SHARED_EVM_SIGNING, + CoinFeature.EVM_COMPATIBLE_IMS, + CoinFeature.EVM_COMPATIBLE_UI, + ], + KeyCurve.Secp256k1, + '', + 'FluentETH' + ), canton( '07385320-5a4f-48e9-97a5-86d4be9f24b0', 'canton', diff --git a/modules/statics/src/base.ts b/modules/statics/src/base.ts index d478353f46..38075b5bc1 100644 --- a/modules/statics/src/base.ts +++ b/modules/statics/src/base.ts @@ -117,6 +117,7 @@ export enum CoinFamily { LINEAETH = 'lineaeth', IP = 'ip', // Story Chain SOMI = 'somi', // Somnia Chain + FLUENTETH = 'fluenteth', } /** @@ -544,6 +545,7 @@ export enum UnderlyingAsset { FLOW = 'flow', FLR = 'flr', FLRP = 'flrp', + FLUENTETH = 'fluenteth', GTC = 'gtc', HASH = 'hash', // Provenance HBAR = 'hbar', // Hedera main coin diff --git a/modules/statics/src/networks.ts b/modules/statics/src/networks.ts index b87879d436..2bf1c36493 100644 --- a/modules/statics/src/networks.ts +++ b/modules/statics/src/networks.ts @@ -1491,6 +1491,24 @@ class LineaETHTestnet extends Testnet implements EthereumNetwork { nativeCoinOperationHashPrefix = '59141'; } +class FluentETH extends Mainnet implements EthereumNetwork { + name = 'Fluent Ethereum'; + family = CoinFamily.FLUENTETH; + explorerUrl = 'https://devnet.fluentscan.xyz/tx/'; + accountExplorerUrl = 'https://devnet.fluentscan.xyz/address/'; + chainId = 20993; + nativeCoinOperationHashPrefix = '20993'; +} + +class FluentETHTestnet extends Testnet implements EthereumNetwork { + name = 'Testnet Fluent Ethereum'; + family = CoinFamily.FLUENTETH; + explorerUrl = 'https://testnet.fluentscan.xyz/tx/'; + accountExplorerUrl = 'https://testnet.fluentscan.xyz/address/'; + chainId = 20994; + nativeCoinOperationHashPrefix = '20994'; +} + class CreditcoinTestnet extends Testnet implements EthereumNetwork { name = 'CreditcoinTestnet'; family = CoinFamily.CTC; @@ -2075,6 +2093,7 @@ export const Networks = { flow: Object.freeze(new Flow()), flr: Object.freeze(new Flare()), flrP: Object.freeze(new FlareP()), + fluenteth: Object.freeze(new FluentETH()), hash: Object.freeze(new Hash()), hedera: Object.freeze(new Hedera()), hederaEVM: Object.freeze(new HederaEVM()), @@ -2171,6 +2190,7 @@ export const Networks = { flow: Object.freeze(new FlowTestnet()), flr: Object.freeze(new FlareTestnet()), flrP: Object.freeze(new FlarePTestnet()), + fluenteth: Object.freeze(new FluentETHTestnet()), mon: Object.freeze(new MonadTestnet()), megaeth: Object.freeze(new MegaETHTestnet()), pyrmont: Object.freeze(new Pyrmont()), diff --git a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts index 9c98058205..2d9d176393 100644 --- a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts +++ b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts @@ -86,6 +86,7 @@ export const expectedColdFeatures = { 'dot', 'fetchai', 'flow', + 'fluenteth', 'hash', 'hbarevm', 'icp', @@ -142,6 +143,7 @@ export const expectedColdFeatures = { 'tdot', 'tfetchai', 'tflow', + 'tfluenteth', 'thbarevm', 'tog', 'tmegaeth',