diff --git a/README.md b/README.md index 038482383..f371e2771 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ Enkrypt is a web3 wallet built from the ground up to support the multi-chain fut - Shiden EVM - Sepolia - Syscoin NEVM +- Taraxa - Telos EVM - Unique - Vara Network @@ -109,6 +110,12 @@ Enkrypt is a web3 wallet built from the ground up to support the multi-chain fut - zkSync - zkSync Goerli - 5ireChain +- Story +- Abstract +- Berachain +- Ink Onchain +- Unichain +- Gravity - More coming soon! Looking to add your project? [Contact us!](https://mewwallet.typeform.com/enkrypt-inquiry?typeform-source=www.enkrypt.com) diff --git a/packages/extension/src/libs/nft-handlers/simplehash.ts b/packages/extension/src/libs/nft-handlers/simplehash.ts index 094ac337d..38d09339e 100644 --- a/packages/extension/src/libs/nft-handlers/simplehash.ts +++ b/packages/extension/src/libs/nft-handlers/simplehash.ts @@ -39,6 +39,8 @@ export default async ( [NetworkNames.Palm]: 'palm', [NetworkNames.ProofOfPlayApex]: 'proof-of-play', [NetworkNames.Scroll]: 'scroll', + [NetworkNames.Unichain]: 'unichain', + [NetworkNames.Bera]: 'berachain' }; if (!Object.keys(supportedNetworks).includes(network.name)) throw new Error('Simplehash: network not supported'); @@ -46,9 +48,8 @@ export default async ( const fetchAll = (continuation?: string): Promise => { const query = continuation ? continuation - : `${SH_ENDPOINT}owners_v2?chains=${ - supportedNetworks[network.name as keyof typeof supportedNetworks] - }&wallet_addresses=${address}&filters=spam_score__lte=75`; + : `${SH_ENDPOINT}owners_v2?chains=${supportedNetworks[network.name as keyof typeof supportedNetworks] + }&wallet_addresses=${address}&filters=spam_score__lte=75`; return cacheFetch( { url: query, diff --git a/packages/extension/src/providers/common/libs/new-features.ts b/packages/extension/src/providers/common/libs/new-features.ts index cbaf9a139..b0508ac7f 100644 --- a/packages/extension/src/providers/common/libs/new-features.ts +++ b/packages/extension/src/providers/common/libs/new-features.ts @@ -1,10 +1,14 @@ import { NetworkNames } from '@enkryptcom/types'; const newNetworks = [ - NetworkNames.Form, - NetworkNames.Rollux, - NetworkNames.SyscoinNEVM, - NetworkNames.Fire, + NetworkNames.Story, + NetworkNames.Abstract, + NetworkNames.Gravity, + NetworkNames.Unichain, + NetworkNames.Bera, + NetworkNames.Ink, + NetworkNames.Taraxa, + NetworkNames.Coti, ]; const newSwaps: NetworkNames[] = []; diff --git a/packages/extension/src/providers/ethereum/libs/activity-handlers/providers/etherscan/configs.ts b/packages/extension/src/providers/ethereum/libs/activity-handlers/providers/etherscan/configs.ts index 9633d5dce..acbaa5a35 100644 --- a/packages/extension/src/providers/ethereum/libs/activity-handlers/providers/etherscan/configs.ts +++ b/packages/extension/src/providers/ethereum/libs/activity-handlers/providers/etherscan/configs.ts @@ -70,6 +70,8 @@ const NetworkEndpoints: Record = { [NetworkNames.ProofOfPlayApex]: 'https://explorer.apex.proofofplay.com/', [NetworkNames.Scroll]: 'https://api.scrollscan.com/', [NetworkNames.Fraxtal]: 'https://api.fraxscan.com/', + [NetworkNames.Ink]: 'https://explorer.inkonchain.com/', + [NetworkNames.Coti]: 'https://mainnet.cotiscan.io/', }; export { NetworkEndpoints }; diff --git a/packages/extension/src/providers/ethereum/libs/assets-handlers/assetinfo-mew.ts b/packages/extension/src/providers/ethereum/libs/assets-handlers/assetinfo-mew.ts index 2f7e35380..84140d31d 100644 --- a/packages/extension/src/providers/ethereum/libs/assets-handlers/assetinfo-mew.ts +++ b/packages/extension/src/providers/ethereum/libs/assets-handlers/assetinfo-mew.ts @@ -70,7 +70,6 @@ const supportedNetworks: Record = { cgPlatform: CoingeckoPlatform.Canto, }, [NetworkNames.Rootstock]: { - tbName: 'rsk', cgPlatform: CoingeckoPlatform.Rootstock, bsEndpoint: true, }, @@ -194,6 +193,30 @@ const supportedNetworks: Record = { tbName: '', cgPlatform: CoingeckoPlatform.Solana, }, + [NetworkNames.Gravity]: { + tbName: 'gravity', + cgPlatform: CoingeckoPlatform.Gravity, + }, + [NetworkNames.Abstract]: { + tbName: 'abs', + cgPlatform: CoingeckoPlatform.Abstract, + }, + [NetworkNames.Story]: { + tbName: 'story', + cgPlatform: CoingeckoPlatform.Story, + }, + [NetworkNames.Ink]: { + cgPlatform: CoingeckoPlatform.Ink, + bsEndpoint: true, + }, + [NetworkNames.Bera]: { + tbName: 'bera', + cgPlatform: CoingeckoPlatform.Berachain, + }, + [NetworkNames.Unichain]: { + tbName: 'uni', + cgPlatform: CoingeckoPlatform.Unichain, + } }; const getTokens = ( @@ -251,15 +274,15 @@ export default ( const marketInfo = supportedNetworks[networkName].cgPlatform ? await marketData.getMarketInfoByContracts( - Object.keys(balances).filter( - contract => contract !== NATIVE_TOKEN_ADDRESS, - ), - supportedNetworks[networkName].cgPlatform as CoingeckoPlatform, - ) + Object.keys(balances).filter( + contract => contract !== NATIVE_TOKEN_ADDRESS, + ), + supportedNetworks[networkName].cgPlatform as CoingeckoPlatform, + ) : tokens.reduce( - (obj, cur) => ({ ...obj, [cur.contract]: null }), - {} as Record, - ); + (obj, cur) => ({ ...obj, [cur.contract]: null }), + {} as Record, + ); if (network.coingeckoID) { const nativeMarket = await marketData.getMarketData([ network.coingeckoID, diff --git a/packages/extension/src/providers/ethereum/libs/assets-handlers/token-lists.ts b/packages/extension/src/providers/ethereum/libs/assets-handlers/token-lists.ts index b80ae8c80..fee8625c8 100644 --- a/packages/extension/src/providers/ethereum/libs/assets-handlers/token-lists.ts +++ b/packages/extension/src/providers/ethereum/libs/assets-handlers/token-lists.ts @@ -44,6 +44,12 @@ const TokenList: Record = { [NetworkNames.TomoChain]: `https://tokens.coingecko.com/${CoingeckoPlatform.TomoChain}/all.json`, [NetworkNames.XLayer]: `https://tokens.coingecko.com/${CoingeckoPlatform.XLayer}/all.json`, [NetworkNames.ZkSync]: `https://tokens.coingecko.com/${CoingeckoPlatform.Zksync}/all.json`, + [NetworkNames.Gravity]: `https://tokens.coingecko.com/${CoingeckoPlatform.Gravity}/all.json`, + [NetworkNames.Abstract]: `https://tokens.coingecko.com/${CoingeckoPlatform.Abstract}/all.json`, + [NetworkNames.Story]: `https://tokens.coingecko.com/${CoingeckoPlatform.Story}/all.json`, + [NetworkNames.Ink]: `https://tokens.coingecko.com/${CoingeckoPlatform.Ink}/all.json`, + [NetworkNames.Bera]: `https://tokens.coingecko.com/${CoingeckoPlatform.Berachain}/all.json`, + [NetworkNames.Unichain]: `https://tokens.coingecko.com/${CoingeckoPlatform.Unichain}/all.json`, }; const getKnownNetworkTokens = async ( diff --git a/packages/extension/src/providers/ethereum/libs/assets-handlers/types/tokenbalance-mew.ts b/packages/extension/src/providers/ethereum/libs/assets-handlers/types/tokenbalance-mew.ts index 29eb60b7a..524c48faf 100644 --- a/packages/extension/src/providers/ethereum/libs/assets-handlers/types/tokenbalance-mew.ts +++ b/packages/extension/src/providers/ethereum/libs/assets-handlers/types/tokenbalance-mew.ts @@ -66,5 +66,11 @@ export type SupportedNetworkNames = | NetworkNames.OpBNB | NetworkNames.Scroll | NetworkNames.Rari + | NetworkNames.Gravity + | NetworkNames.Unichain + | NetworkNames.Abstract + | NetworkNames.Bera + | NetworkNames.Ink + | NetworkNames.Story | NetworkNames.Base | NetworkNames.ImmutableZkevm; diff --git a/packages/extension/src/providers/ethereum/networks/abstract.ts b/packages/extension/src/providers/ethereum/networks/abstract.ts new file mode 100644 index 000000000..d7f92d064 --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/abstract.ts @@ -0,0 +1,26 @@ +import icon from './icons/abstract.webp'; +import { NetworkNames } from '@enkryptcom/types'; +import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; +import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; +import assetsInfoHandler from '@/providers/ethereum/libs/assets-handlers/assetinfo-mew'; + +const absOptions: EvmNetworkOptions = { + name: NetworkNames.Abstract, + name_long: 'Abstract', + homePage: 'https://www.abs.xyz/', + blockExplorerTX: 'https://abscan.org/tx/[[txHash]]', + blockExplorerAddr: 'https://abscan.org/address/[[address]]', + chainID: '0xAB5', + isTestNetwork: false, + currencyName: 'ETH', + currencyNameLong: 'ETH', + node: 'https://api.mainnet.abs.xyz', + icon, + coingeckoID: 'ethereum', + assetsInfoHandler, + activityHandler: wrapActivityHandler(() => Promise.resolve([])), +}; + +const abstract = new EvmNetwork(absOptions); + +export default abstract; diff --git a/packages/extension/src/providers/ethereum/networks/bera.ts b/packages/extension/src/providers/ethereum/networks/bera.ts new file mode 100644 index 000000000..2b862adab --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/bera.ts @@ -0,0 +1,29 @@ +import icon from './icons/bera.webp'; +import { CoingeckoPlatform, NetworkNames } from '@enkryptcom/types'; +import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; +import assetsInfoHandler from '@/providers/ethereum/libs/assets-handlers/assetinfo-mew'; +import shNFTHandler from '@/libs/nft-handlers/simplehash'; +import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; + +const beraOptions: EvmNetworkOptions = { + name: NetworkNames.Bera, + name_long: 'Berachain', + homePage: 'https://www.berachain.com/', + blockExplorerTX: 'https://berascan.com/tx/[[txHash]]', + blockExplorerAddr: 'https://berascan.com/address/[[address]]', + chainID: '0x138DE', + isTestNetwork: false, + currencyName: 'BERA', + currencyNameLong: 'BERA', + coingeckoID: 'berachain-bera', + node: 'https://rpc.berachain.com/', + icon, + coingeckoPlatform: CoingeckoPlatform.Berachain, + NFTHandler: shNFTHandler, + assetsInfoHandler, + activityHandler: wrapActivityHandler(() => Promise.resolve([])), +}; + +const bera = new EvmNetwork(beraOptions); + +export default bera; diff --git a/packages/extension/src/providers/ethereum/networks/coti.ts b/packages/extension/src/providers/ethereum/networks/coti.ts new file mode 100644 index 000000000..5f8ca4611 --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/coti.ts @@ -0,0 +1,24 @@ +import icon from './icons/coti.png'; +import { NetworkNames } from '@enkryptcom/types'; +import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; +import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; +import { EtherscanActivity } from '../libs/activity-handlers'; + +const coti: EvmNetworkOptions = { + name: NetworkNames.Coti, + name_long: 'COTI', + homePage: 'https://coti.io/', + blockExplorerTX: 'https://mainnet.cotiscan.io/tx/[[txHash]]', + blockExplorerAddr: 'https://mainnet.cotiscan.io/address/[[address]]', + chainID: '0x282B34', + isTestNetwork: false, + currencyName: 'COTI', + currencyNameLong: 'COTI', + node: 'https://mainnet.coti.io/rpc', + icon, + activityHandler: wrapActivityHandler(EtherscanActivity), +}; + +const cotiDevnet = new EvmNetwork(coti); + +export default cotiDevnet; diff --git a/packages/extension/src/providers/ethereum/networks/gravity.ts b/packages/extension/src/providers/ethereum/networks/gravity.ts new file mode 100644 index 000000000..230b5bee4 --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/gravity.ts @@ -0,0 +1,27 @@ +import icon from './icons/gravity.webp'; +import { CoingeckoPlatform, NetworkNames } from '@enkryptcom/types'; +import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; +import assetsInfoHandler from '@/providers/ethereum/libs/assets-handlers/assetinfo-mew'; +import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; + +const gravityOptions: EvmNetworkOptions = { + name: NetworkNames.Gravity, + name_long: 'Gravity', + homePage: 'https://gravity.xyz/', + blockExplorerTX: 'https://explorer.gravity.xyz/tx/[[txHash]]', + blockExplorerAddr: 'https://explorer.gravity.xyz/address/[[address]]', + chainID: '0x659', + isTestNetwork: false, + currencyName: 'G', + currencyNameLong: 'G', + coingeckoID: 'g-token', + node: 'https://rpc.gravity.xyz', + icon, + coingeckoPlatform: CoingeckoPlatform.Gravity, + assetsInfoHandler, + activityHandler: wrapActivityHandler(() => Promise.resolve([])), +}; + +const gravity = new EvmNetwork(gravityOptions); + +export default gravity; diff --git a/packages/extension/src/providers/ethereum/networks/icons/abstract.webp b/packages/extension/src/providers/ethereum/networks/icons/abstract.webp new file mode 100644 index 000000000..4b06fa565 Binary files /dev/null and b/packages/extension/src/providers/ethereum/networks/icons/abstract.webp differ diff --git a/packages/extension/src/providers/ethereum/networks/icons/bera.webp b/packages/extension/src/providers/ethereum/networks/icons/bera.webp new file mode 100644 index 000000000..36f058ef6 Binary files /dev/null and b/packages/extension/src/providers/ethereum/networks/icons/bera.webp differ diff --git a/packages/extension/src/providers/ethereum/networks/icons/gravity.webp b/packages/extension/src/providers/ethereum/networks/icons/gravity.webp new file mode 100644 index 000000000..e71086801 Binary files /dev/null and b/packages/extension/src/providers/ethereum/networks/icons/gravity.webp differ diff --git a/packages/extension/src/providers/ethereum/networks/icons/ink.webp b/packages/extension/src/providers/ethereum/networks/icons/ink.webp new file mode 100644 index 000000000..57347cc5b Binary files /dev/null and b/packages/extension/src/providers/ethereum/networks/icons/ink.webp differ diff --git a/packages/extension/src/providers/ethereum/networks/icons/story.webp b/packages/extension/src/providers/ethereum/networks/icons/story.webp new file mode 100644 index 000000000..225dae327 Binary files /dev/null and b/packages/extension/src/providers/ethereum/networks/icons/story.webp differ diff --git a/packages/extension/src/providers/ethereum/networks/icons/tara.webp b/packages/extension/src/providers/ethereum/networks/icons/tara.webp new file mode 100644 index 000000000..57011a5d5 Binary files /dev/null and b/packages/extension/src/providers/ethereum/networks/icons/tara.webp differ diff --git a/packages/extension/src/providers/ethereum/networks/icons/unichain.webp b/packages/extension/src/providers/ethereum/networks/icons/unichain.webp new file mode 100644 index 000000000..b1975b2eb Binary files /dev/null and b/packages/extension/src/providers/ethereum/networks/icons/unichain.webp differ diff --git a/packages/extension/src/providers/ethereum/networks/index.ts b/packages/extension/src/providers/ethereum/networks/index.ts index a04048b8b..20f40c9a3 100755 --- a/packages/extension/src/providers/ethereum/networks/index.ts +++ b/packages/extension/src/providers/ethereum/networks/index.ts @@ -63,6 +63,14 @@ import holeskyNode from './holesky'; import bitrockNode from './bitrock'; import fraxtalNode from './fraxtal'; import _5ireNode from './5ire'; +import beraNode from './bera'; +import storyNode from './story'; +import gravityNode from './gravity'; +import unichainNode from './unichain'; +import abstractNode from './abstract'; +import inkNode from './inkonchain'; +import taraxa from './taraxa'; +import coti from './coti'; export default { sepolia: sepoliaNode, @@ -138,5 +146,13 @@ export default { holesky: holeskyNode, bitrock: bitrockNode, frax: fraxtalNode, + taraxa: taraxa, '5ire': _5ireNode, + bera: beraNode, + story: storyNode, + gravity: gravityNode, + unichain: unichainNode, + abstract: abstractNode, + ink: inkNode, + coti: coti }; diff --git a/packages/extension/src/providers/ethereum/networks/inkonchain.ts b/packages/extension/src/providers/ethereum/networks/inkonchain.ts new file mode 100644 index 000000000..95d155872 --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/inkonchain.ts @@ -0,0 +1,27 @@ +import icon from './icons/ink.webp'; +import { NetworkNames } from '@enkryptcom/types'; +import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; +import { EtherscanActivity } from '../libs/activity-handlers'; +import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; +import assetsInfoHandler from '@/providers/ethereum/libs/assets-handlers/assetinfo-mew'; + +const inkOptions: EvmNetworkOptions = { + name: NetworkNames.Ink, + name_long: 'Ink Onchain', + homePage: 'https://inkonchain.com/', + blockExplorerTX: 'https://explorer.inkonchain.com/tx/[[txHash]]', + blockExplorerAddr: 'https://explorer.inkonchain.com/address/[[address]]', + chainID: '0xDEF1', + isTestNetwork: false, + currencyName: 'ETH', + currencyNameLong: 'ETH', + node: 'https://rpc-gel.inkonchain.com', + icon, + coingeckoID: 'ethereum', + assetsInfoHandler, + activityHandler: wrapActivityHandler(EtherscanActivity), +}; + +const ink = new EvmNetwork(inkOptions); + +export default ink; diff --git a/packages/extension/src/providers/ethereum/networks/story.ts b/packages/extension/src/providers/ethereum/networks/story.ts new file mode 100644 index 000000000..6c01dea9b --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/story.ts @@ -0,0 +1,26 @@ +import icon from './icons/story.webp'; +import { NetworkNames } from '@enkryptcom/types'; +import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; +import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; +import assetsInfoHandler from '@/providers/ethereum/libs/assets-handlers/assetinfo-mew'; + +const storyOptions: EvmNetworkOptions = { + name: NetworkNames.Story, + name_long: 'Story', + homePage: 'https://www.story.foundation/', + blockExplorerTX: 'https://www.storyscan.xyz/tx/[[txHash]]', + blockExplorerAddr: 'https://www.storyscan.xyz/address/[[address]]', + chainID: '0x5EF', + isTestNetwork: false, + currencyName: 'IP', + currencyNameLong: 'IP', + node: 'https://mainnet.storyrpc.io', + icon, + coingeckoID: 'story-2', + assetsInfoHandler, + activityHandler: wrapActivityHandler(() => Promise.resolve([])), +}; + +const story = new EvmNetwork(storyOptions); + +export default story; diff --git a/packages/extension/src/providers/ethereum/networks/taraxa.ts b/packages/extension/src/providers/ethereum/networks/taraxa.ts new file mode 100644 index 000000000..c5ebb747c --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/taraxa.ts @@ -0,0 +1,24 @@ +import icon from './icons/tara.webp'; +import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; +import { CoingeckoPlatform, NetworkNames } from '@enkryptcom/types'; +import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; +const taraxaOptions: EvmNetworkOptions = { + name: NetworkNames.Taraxa, + name_long: 'Taraxa', + homePage: 'https://taraxa.io', + blockExplorerTX: 'https://tara.to/tx/[[txHash]]', + blockExplorerAddr: 'https://tara.to/address/[[address]]', + chainID: '0x349', + isTestNetwork: false, + currencyName: 'TARA', + currencyNameLong: 'Taraxa', + node: 'https://rpc.mainnet.taraxa.io', + icon, + coingeckoID: 'taraxa', + coingeckoPlatform: CoingeckoPlatform.Taraxa, + activityHandler: wrapActivityHandler(() => Promise.resolve([])), +}; + +const taraxa = new EvmNetwork(taraxaOptions); + +export default taraxa; diff --git a/packages/extension/src/providers/ethereum/networks/unichain.ts b/packages/extension/src/providers/ethereum/networks/unichain.ts new file mode 100644 index 000000000..4a44c4cc5 --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/unichain.ts @@ -0,0 +1,28 @@ +import icon from './icons/unichain.webp'; +import { NetworkNames } from '@enkryptcom/types'; +import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; +import shNFTHandler from '@/libs/nft-handlers/simplehash'; +import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; +import assetsInfoHandler from '@/providers/ethereum/libs/assets-handlers/assetinfo-mew'; + +const unchainOptions: EvmNetworkOptions = { + name: NetworkNames.Unichain, + name_long: 'Unichain', + homePage: 'https://www.unichain.org/', + blockExplorerTX: 'https://uniscan.xyz/tx/[[txHash]]', + blockExplorerAddr: 'https://uniscan.xyz/address/[[address]]', + chainID: '0x82', + isTestNetwork: false, + currencyName: 'ETH', + currencyNameLong: 'ETH', + node: 'https://mainnet.unichain.org', + icon, + coingeckoID: 'ethereum', + NFTHandler: shNFTHandler, + assetsInfoHandler, + activityHandler: wrapActivityHandler(() => Promise.resolve([])), +}; + +const unchain = new EvmNetwork(unchainOptions); + +export default unchain; diff --git a/packages/types/src/networks.ts b/packages/types/src/networks.ts index 5710ce575..359a2745e 100755 --- a/packages/types/src/networks.ts +++ b/packages/types/src/networks.ts @@ -98,6 +98,14 @@ export enum NetworkNames { Bitrock = "bitrock", Fraxtal = "fraxtal", Fire = "5ire", + Story = "Story", + Abstract = "Abstract", + Unichain = "Unichain", + Ink = "Ink", + Gravity = "Gravity", + Bera = "Bera", + Taraxa = "Taraxa", + Coti = "Coti", } export enum CoingeckoPlatform { @@ -156,4 +164,11 @@ export enum CoingeckoPlatform { Scroll = "scroll", Bitrock = "bitrock", Fraxtal = "fraxtal", + Gravity = "gravity-alpha", + Berachain = "berachain", + Abstract = "abstract", + Unichain = "unichain", + Story = "story", + Ink = "ink", + Taraxa = "taraxa", }