diff --git a/modules/sdk-core/src/bitgo/environments.ts b/modules/sdk-core/src/bitgo/environments.ts index d23446451c..3791e50b32 100644 --- a/modules/sdk-core/src/bitgo/environments.ts +++ b/modules/sdk-core/src/bitgo/environments.ts @@ -283,6 +283,9 @@ const mainnetBase: EnvironmentTemplate = { baseUrl: 'https://explorer.fantom.network', rpcUrl: 'https://rpcapi.fantom.network/', }, + xtzevm: { + baseUrl: 'https://explorer.etherlink.com/api', + }, flow: { baseUrl: 'https://evm.flowscan.io', }, @@ -470,6 +473,9 @@ const testnetBase: EnvironmentTemplate = { baseUrl: 'https://api.etherscan.io/v2', apiToken: process.env.ETHERSCAN_API_TOKEN, }, + xtzevm: { + baseUrl: 'https://shadownet.explorer.etherlink.com/api', + }, flow: { baseUrl: 'https://evm-testnet.flowscan.io', }, diff --git a/modules/statics/src/allCoinsAndTokens.ts b/modules/statics/src/allCoinsAndTokens.ts index 2f2b3cfb8c..5f780cc9f8 100644 --- a/modules/statics/src/allCoinsAndTokens.ts +++ b/modules/statics/src/allCoinsAndTokens.ts @@ -393,6 +393,42 @@ export const allCoinsAndTokens = [ BaseUnit.ETH, [...AccountCoin.DEFAULT_FEATURES] ), + account( + '260a8571-1f89-40ad-af8d-c58a391581b5', + 'xtzevm', + 'XTZ EVM', + Networks.main.xtzevm, + 18, + UnderlyingAsset.XTZEVM, + 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( + 'e7fdbd6f-93ff-4dda-8a57-81580827188e', + 'txtzevm', + 'Testnet XTZ EVM', + Networks.test.xtzevm, + 18, + UnderlyingAsset.XTZEVM, + 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( '2660f6f6-1980-4584-a0b3-487d4a832b9f', 'tbaseeth', diff --git a/modules/statics/src/base.ts b/modules/statics/src/base.ts index 707973bcbe..fd87b187fb 100644 --- a/modules/statics/src/base.ts +++ b/modules/statics/src/base.ts @@ -52,11 +52,11 @@ export enum CoinFamily { DOGEOS = 'dogeos', DOT = 'dot', DYDX = 'dydx', + EOS = 'eos', + ETC = 'etc', ETH = 'eth', ETH2 = 'eth2', ETHW = 'ethw', - ETC = 'etc', - EOS = 'eos', FETCHAI = 'fetchai', FIAT = 'fiat', FLOW = 'flow', @@ -121,6 +121,7 @@ export enum CoinFamily { XLM = 'xlm', XRP = 'xrp', XTZ = 'xtz', + XTZEVM = 'xtzevm', // Etherlink (XTZ EVM L2) ZEC = 'zec', ZETA = 'zeta', ZKETH = 'zketh', @@ -577,12 +578,12 @@ export enum UnderlyingAsset { COREUM = 'coreum', CRONOS = 'cronos', CSPR = 'cspr', + EOS = 'eos', + ERD = 'erd', + ETC = 'etc', ETH = 'eth', ETH2 = 'eth2', ETHW = 'ethw', - ETC = 'etc', - EOS = 'eos', - ERD = 'erd', EURCVV0 = 'eurcvv0', EURCV = 'eurcv', EUROC = 'euroc', @@ -648,10 +649,11 @@ export enum UnderlyingAsset { VET = 'vet', WEMIX = 'wemix', WORLD = 'world', - XLM = 'xlm', XDC = 'xdc', + XLM = 'xlm', XRP = 'xrp', XTZ = 'xtz', + XTZEVM = 'xtzevm', // Etherlink (XTZ EVM L2) ZEC = 'zec', ZETA = 'zeta', ZKETH = 'zketh', diff --git a/modules/statics/src/coins/ofcCoins.ts b/modules/statics/src/coins/ofcCoins.ts index 4ddb4cac74..822e5f7369 100644 --- a/modules/statics/src/coins/ofcCoins.ts +++ b/modules/statics/src/coins/ofcCoins.ts @@ -211,6 +211,15 @@ export const ofcCoins = [ UnderlyingAsset.HYPEEVM, CoinKind.CRYPTO ), + ofc('dc825481-0a15-44ab-84e6-6f182b13eb87', 'ofcxtzevm', 'XTZ EVM', 18, UnderlyingAsset.XTZEVM, CoinKind.CRYPTO), + tofc( + '0e42884b-c01e-461b-b108-1ed0d0fbbd7b', + 'ofctxtzevm', + 'XTZ EVM Testnet', + 18, + UnderlyingAsset.XTZEVM, + CoinKind.CRYPTO + ), tofc( '3eb80dc2-98bc-40ee-a27c-b4572e0d7270', 'ofcthypeevm', diff --git a/modules/statics/src/networks.ts b/modules/statics/src/networks.ts index d02d178258..aea4f0297f 100644 --- a/modules/statics/src/networks.ts +++ b/modules/statics/src/networks.ts @@ -713,6 +713,24 @@ class EthereumW extends Mainnet implements EthereumNetwork { tokenOperationHashPrefix = 'ERC20'; } +class XtzEvm extends Mainnet implements EthereumNetwork { + name = 'XTZ EVM'; + family = CoinFamily.XTZEVM; + explorerUrl = 'https://explorer.etherlink.com/tx/'; + accountExplorerUrl = 'https://explorer.etherlink.com/address/'; + chainId = 42793; + nativeCoinOperationHashPrefix = '42793'; +} + +class XtzEvmTestnet extends Testnet implements EthereumNetwork { + name = 'Testnet XTZ EVM'; + family = CoinFamily.XTZEVM; + explorerUrl = 'https://shadownet.explorer.etherlink.com/tx/'; + accountExplorerUrl = 'https://shadownet.explorer.etherlink.com/address/'; + chainId = 128123; + nativeCoinOperationHashPrefix = '128123'; +} + class Pyrmont extends Testnet implements AccountNetwork { name = 'Pyrmont'; family = CoinFamily.ETH2; @@ -2539,6 +2557,7 @@ export const Networks = { xpl: Object.freeze(new Plasma()), xrp: Object.freeze(new Xrp()), xtz: Object.freeze(new Xtz()), + xtzevm: Object.freeze(new XtzEvm()), zCash: Object.freeze(new ZCash()), zeta: Object.freeze(new Zeta()), zkSync: Object.freeze(new ZkSync()), @@ -2658,6 +2677,7 @@ export const Networks = { xpl: Object.freeze(new PlasmaTestnet()), xrp: Object.freeze(new XrpTestnet()), xtz: Object.freeze(new XtzTestnet()), + xtzevm: Object.freeze(new XtzEvmTestnet()), zCash: Object.freeze(new ZCashTestnet()), zeta: Object.freeze(new ZetaTestnet()), zkSync: Object.freeze(new ZkSyncTestnet()), diff --git a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts index c64178f902..b74dea24a3 100644 --- a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts +++ b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts @@ -91,6 +91,7 @@ export const expectedColdFeatures = { 'dogeos', 'dot', 'dydxcosmos', + 'xtzevm', 'fetchai', 'flow', 'fluenteth', @@ -160,6 +161,7 @@ export const expectedColdFeatures = { 'tdogeos', 'tdot', 'tdydxcosmos', + 'txtzevm', 'tfetchai', 'tflow', 'tfluenteth',