From f370ca396fe33716dd43431b9b8a95317c9cbdf9 Mon Sep 17 00:00:00 2001 From: Fernando Paredes Garcia Date: Fri, 17 Jan 2025 17:13:38 -0500 Subject: [PATCH 1/5] Update Syscoin and Rollux integration. --- README.md | 2 +- .../providers/etherscan/configs.ts | 4 +- .../libs/assets-handlers/assetinfo-mew.ts | 9 ++- .../libs/assets-handlers/blockscout.ts | 80 +++++++++++++++++++ .../libs/assets-handlers/token-lists.ts | 2 + .../assets-handlers/types/tokenbalance-mew.ts | 5 +- .../src/providers/ethereum/networks/index.ts | 12 +-- .../src/providers/ethereum/networks/sys.ts | 26 ------ .../ethereum/networks/syscoin/nevm-testnet.ts | 24 ++++++ .../ethereum/networks/syscoin/nevm.ts | 28 +++++++ .../{trlx.ts => syscoin/rollux-testnet.ts} | 6 +- .../networks/{rlx.ts => syscoin/rollux.ts} | 7 +- .../src/providers/ethereum/networks/tsys.ts | 24 ------ packages/types/src/networks.ts | 4 +- 14 files changed, 164 insertions(+), 69 deletions(-) create mode 100644 packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts delete mode 100644 packages/extension/src/providers/ethereum/networks/sys.ts create mode 100644 packages/extension/src/providers/ethereum/networks/syscoin/nevm-testnet.ts create mode 100644 packages/extension/src/providers/ethereum/networks/syscoin/nevm.ts rename packages/extension/src/providers/ethereum/networks/{trlx.ts => syscoin/rollux-testnet.ts} (79%) rename packages/extension/src/providers/ethereum/networks/{rlx.ts => syscoin/rollux.ts} (76%) delete mode 100644 packages/extension/src/providers/ethereum/networks/tsys.ts diff --git a/README.md b/README.md index 43c3415c9..bd39c7fec 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ Enkrypt is a web3 wallet built from the ground up to support the multi-chain fut - Shiden - Shiden EVM - Sepolia -- Syscoin +- Syscoin NEVM - Telos EVM - Unique - Vara Network 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 aca1303eb..5f2513a98 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 @@ -51,8 +51,8 @@ const NetworkEndpoints: Record = { [NetworkNames.FormTestnet]: 'https://testnet-explorer.form.network/', [NetworkNames.ArtheraTest]: 'https://explorer-test.arthera.net/', [NetworkNames.Arthera]: 'https://explorer.arthera.net/', - [NetworkNames.SyscoinTest]: 'https://tanenbaum.io/', - [NetworkNames.Syscoin]: 'https://explorer.syscoin.org/', + [NetworkNames.SyscoinNEVMTest]: 'https://explorer.tanenbaum.io/', + [NetworkNames.SyscoinNEVM]: 'https://explorer.syscoin.org/', [NetworkNames.RolluxTest]: 'https://rollux.tanenbaum.io/', [NetworkNames.Rollux]: 'https://explorer.rollux.com/', [NetworkNames.Blast]: 'https://api.blastscan.io/', 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 5ff6cc7e1..666437094 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 @@ -20,6 +20,7 @@ import { EvmNetwork } from '../../types/evm-network'; import { getKnownNetworkTokens } from './token-lists'; import { CoingeckoPlatform, NetworkNames } from '@enkryptcom/types'; import { NATIVE_TOKEN_ADDRESS } from '../common'; +import getBlockscoutBalances from "./blockscout"; import getTomoBalances from './tomochain'; import getSolBalances from './solanachain'; import { CoinGeckoTokenMarket } from '@/libs/market-data/types'; @@ -120,9 +121,13 @@ const supportedNetworks: Record = { tbName: 'shib', cgPlatform: CoingeckoPlatform.Shibarium, }, + [NetworkNames.SyscoinNEVM]: { + cgPlatform: CoingeckoPlatform.Syscoin, + bsEndpoint: true, + }, [NetworkNames.Rollux]: { - tbName: 'rollux', cgPlatform: CoingeckoPlatform.Rollux, + bsEndpoint: true, }, [NetworkNames.Telos]: { tbName: 'tlos', @@ -191,6 +196,8 @@ const getTokens = ( return getTomoBalances(chain, address); } else if (chain === NetworkNames.Solana) { return getSolBalances(network, address); + } else if (supportedNetworks[chain].bsEndpoint) { + return getBlockscoutBalances(chain, address); } let url = ''; if (chain === NetworkNames.Ethereum || chain === NetworkNames.Binance) diff --git a/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts b/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts new file mode 100644 index 000000000..9259a1996 --- /dev/null +++ b/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts @@ -0,0 +1,80 @@ +import { SupportedNetworkNames, TokenBalance } from "./types/tokenbalance-mew"; +import { NetworkEndpoints } from "@/providers/ethereum/libs/activity-handlers/providers/etherscan/configs"; +import { NATIVE_TOKEN_ADDRESS } from "../common"; +import { numberToHex } from "web3-utils"; + +interface TokenBalanceType { + token: string; + quantity: string; + error?: unknown; +} + +interface TokenResponseItem { + token: { + address: string; + decimals: string; + name: string; + symbol: string; + }; + value: string; +} + +interface TokenResponse { + items: TokenResponseItem[]; +} + +const getBlockscoutBalances = ( + chain: SupportedNetworkNames, + address: string +): Promise => { + const nativeTokenUrl = `${NetworkEndpoints[chain]}api/v2/addresses/${address}`; + const tokenBalancesUrl = `${NetworkEndpoints[chain]}api/v2/addresses/${address}/tokens?type=ERC-20`; + + return Promise.all([ + fetch(nativeTokenUrl).then((res) => res.json()), + fetch(tokenBalancesUrl).then((res) => res.json()), + ]) + .then(([nativeResponse, tokenResponse]: [any, TokenResponse]) => { + if (!nativeResponse || !tokenResponse) { + return Promise.reject("Error fetching balance data"); + } + + // Map native token balance + const nativeBalance: TokenBalanceType = { + token: NATIVE_TOKEN_ADDRESS, + quantity: nativeResponse.coin_balance, + }; + + // Map token balances + const tokenBalances: TokenBalanceType[] = Array.isArray( + tokenResponse?.items + ) + ? tokenResponse.items + .filter( + (item) => + item?.token?.address && + typeof item.token.address === "string" && + item.value !== undefined + ) + .map((item) => ({ + token: item.token.address.toLowerCase(), + quantity: item.value, + })) + : []; + + // Merge native token and token balances + const allBalances = [nativeBalance, ...tokenBalances]; + + // Convert to TokenBalance format + return allBalances.map((tb) => ({ + contract: tb.token, + balance: numberToHex(tb.quantity), // Convert to hex format + })); + }) + .catch((error) => { + console.error("Error fetching balances:", error); + throw error; + }); +}; + +export default getBlockscoutBalances; 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 82e3abfd0..2ccd4527a 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 @@ -3,6 +3,8 @@ import { CoingeckoPlatform, NetworkNames } from '@enkryptcom/types'; import { CGToken, SupportedNetworkNames } from './types/tokenbalance-mew'; const TOKEN_FETCH_TTL = 1000 * 60 * 60; const TokenList: Record = { + [NetworkNames.SyscoinNEVM]: `https://tokens.coingecko.com/${CoingeckoPlatform.Syscoin}/all.json`, + [NetworkNames.Rollux]: `https://tokens.coingecko.com/${CoingeckoPlatform.Rollux}/all.json`, [NetworkNames.Binance]: `https://tokens.coingecko.com/${CoingeckoPlatform.Binance}/all.json`, [NetworkNames.Ethereum]: `https://tokens.coingecko.com/${CoingeckoPlatform.Ethereum}/all.json`, [NetworkNames.Matic]: `https://tokens.coingecko.com/${CoingeckoPlatform.Matic}/all.json`, 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 557141bec..4eef5eb16 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 @@ -5,8 +5,9 @@ export interface TokenBalance { balance: string; } export interface SupportedNetwork { - tbName: string; + tbName?: string; cgPlatform?: string; + bsEndpoint?: boolean; } export interface CGToken { chainId: `0x${string}`; @@ -26,6 +27,8 @@ export interface ZkSyncBalanceType { } export type SupportedNetworkNames = + | NetworkNames.SyscoinNEVM + | NetworkNames.Rollux | NetworkNames.Binance | NetworkNames.Ethereum | NetworkNames.Matic diff --git a/packages/extension/src/providers/ethereum/networks/index.ts b/packages/extension/src/providers/ethereum/networks/index.ts index 8a5a6f8d1..261bec0a3 100755 --- a/packages/extension/src/providers/ethereum/networks/index.ts +++ b/packages/extension/src/providers/ethereum/networks/index.ts @@ -34,10 +34,10 @@ import shibNode from './shib'; import artheraNode from './aa'; import formTestnet from './form-testnet'; import artheraTestNode from './aat'; -import syscoinTestNode from './tsys'; -import syscoinNode from './sys'; -import rolluxTestNode from './trlx'; -import rolluxNode from './rlx'; +import syscoinNEVMTestNode from './syscoin/nevm-testnet'; +import syscoinNEVMNode from './syscoin/nevm'; +import rolluxTestNode from './syscoin/rollux-testnet'; +import rolluxNode from './syscoin/rollux'; import cagaAnkara from './cagaAnkara'; import telosNode from './tlos'; import blastNode from './blast'; @@ -108,8 +108,8 @@ export default { arthera: artheraNode, formTestnet: formTestnet, artheraTest: artheraTestNode, - syscoinTest: syscoinTestNode, - syscoin: syscoinNode, + syscoinNEVMTest: syscoinNEVMTestNode, + syscoinNEVM: syscoinNEVMNode, rolluxTest: rolluxTestNode, rollux: rolluxNode, cagaAnkara: cagaAnkara, diff --git a/packages/extension/src/providers/ethereum/networks/sys.ts b/packages/extension/src/providers/ethereum/networks/sys.ts deleted file mode 100644 index 40a60de35..000000000 --- a/packages/extension/src/providers/ethereum/networks/sys.ts +++ /dev/null @@ -1,26 +0,0 @@ -import icon from './icons/sys_nevm.svg'; -import { NetworkNames, CoingeckoPlatform } 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'; - -const syscoinOptions: EvmNetworkOptions = { - name: NetworkNames.Syscoin, - name_long: 'Syscoin NEVM', - homePage: 'https://www.syscoin.org/', - blockExplorerTX: 'https://explorer.syscoin.org/tx/[[txHash]]', - blockExplorerAddr: 'https://explorer.syscoin.org/address/[[address]]', - chainID: '0x39', - isTestNetwork: false, - currencyName: 'SYS', - currencyNameLong: 'Syscoin', - node: 'wss://rpc.syscoin.org/wss', - icon, - coingeckoID: 'syscoin', - coingeckoPlatform: CoingeckoPlatform.Syscoin, - activityHandler: wrapActivityHandler(EtherscanActivity), -}; - -const syscoin = new EvmNetwork(syscoinOptions); - -export default syscoin; diff --git a/packages/extension/src/providers/ethereum/networks/syscoin/nevm-testnet.ts b/packages/extension/src/providers/ethereum/networks/syscoin/nevm-testnet.ts new file mode 100644 index 000000000..cd7338261 --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/syscoin/nevm-testnet.ts @@ -0,0 +1,24 @@ +import icon from '../icons/tsys_nevm.svg'; +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'; + +const syscoinNEVMTestOptions: EvmNetworkOptions = { + name: NetworkNames.SyscoinNEVMTest, + name_long: 'Syscoin NEVM Testnet', + homePage: 'https://www.syscoin.org/', + blockExplorerTX: 'https://explorer.tanenbaum.io/tx/[[txHash]]', + blockExplorerAddr: 'https://explorer.tanenbaum.io/address/[[address]]', + chainID: '0x1644', + isTestNetwork: true, + currencyName: 'TSYS', + currencyNameLong: 'Test Syscoin', + node: 'wss://rpc.tanenbaum.io/wss', + icon, + activityHandler: wrapActivityHandler(EtherscanActivity), +}; + +const syscoinNEVMTest = new EvmNetwork(syscoinNEVMTestOptions); + +export default syscoinNEVMTest; diff --git a/packages/extension/src/providers/ethereum/networks/syscoin/nevm.ts b/packages/extension/src/providers/ethereum/networks/syscoin/nevm.ts new file mode 100644 index 000000000..3f41f4e63 --- /dev/null +++ b/packages/extension/src/providers/ethereum/networks/syscoin/nevm.ts @@ -0,0 +1,28 @@ +import icon from '../icons/sys_nevm.svg'; +import { CoingeckoPlatform, NetworkNames } from "@enkryptcom/types"; +import { EvmNetwork, EvmNetworkOptions } from "../../types/evm-network"; +import assetsInfoHandler from "@/providers/ethereum/libs/assets-handlers/assetinfo-mew"; +import { EtherscanActivity } from "../../libs/activity-handlers"; +import wrapActivityHandler from "@/libs/activity-state/wrap-activity-handler"; + +const syscoinNEVMOptions: EvmNetworkOptions = { + name: NetworkNames.SyscoinNEVM, + name_long: "Syscoin NEVM", + homePage: "https://www.syscoin.org/", + blockExplorerTX: "https://explorer.syscoin.org/tx/[[txHash]]", + blockExplorerAddr: "https://explorer.syscoin.org/address/[[address]]", + chainID: "0x39", + isTestNetwork: false, + currencyName: "SYS", + currencyNameLong: "Syscoin", + node: "wss://rpc.syscoin.org/wss", + coingeckoID: "syscoin", + coingeckoPlatform: CoingeckoPlatform.Syscoin, + icon, + assetsInfoHandler, + activityHandler: wrapActivityHandler(EtherscanActivity), +}; + +const syscoinNEVM = new EvmNetwork(syscoinNEVMOptions); + +export default syscoinNEVM; diff --git a/packages/extension/src/providers/ethereum/networks/trlx.ts b/packages/extension/src/providers/ethereum/networks/syscoin/rollux-testnet.ts similarity index 79% rename from packages/extension/src/providers/ethereum/networks/trlx.ts rename to packages/extension/src/providers/ethereum/networks/syscoin/rollux-testnet.ts index 4ba7d93d6..0f557b2b5 100644 --- a/packages/extension/src/providers/ethereum/networks/trlx.ts +++ b/packages/extension/src/providers/ethereum/networks/syscoin/rollux-testnet.ts @@ -1,7 +1,7 @@ -import icon from './icons/tsys_rollux.svg'; +import icon from '../icons/tsys_rollux.svg'; import { NetworkNames } from '@enkryptcom/types'; -import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; -import { EtherscanActivity } from '../libs/activity-handlers'; +import { EvmNetwork, EvmNetworkOptions } from '../../types/evm-network'; +import { EtherscanActivity } from '../../libs/activity-handlers'; import wrapActivityHandler from '@/libs/activity-state/wrap-activity-handler'; const rolluxTestOptions: EvmNetworkOptions = { diff --git a/packages/extension/src/providers/ethereum/networks/rlx.ts b/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts similarity index 76% rename from packages/extension/src/providers/ethereum/networks/rlx.ts rename to packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts index 234d4953d..612b7c4e9 100644 --- a/packages/extension/src/providers/ethereum/networks/rlx.ts +++ b/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts @@ -1,7 +1,8 @@ -import icon from './icons/sys_rollux.svg'; +import icon from '../icons/sys_rollux.svg'; import { NetworkNames, CoingeckoPlatform } from '@enkryptcom/types'; -import { EvmNetwork, EvmNetworkOptions } from '../types/evm-network'; -import { EtherscanActivity } from '../libs/activity-handlers'; +import { EvmNetwork, EvmNetworkOptions } from '../../types/evm-network'; +import assetsInfoHandler from "@/providers/ethereum/libs/assets-handlers/assetinfo-mew"; +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'; diff --git a/packages/extension/src/providers/ethereum/networks/tsys.ts b/packages/extension/src/providers/ethereum/networks/tsys.ts deleted file mode 100644 index 85c7beab6..000000000 --- a/packages/extension/src/providers/ethereum/networks/tsys.ts +++ /dev/null @@ -1,24 +0,0 @@ -import icon from './icons/tsys_nevm.svg'; -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'; - -const syscoinTestOptions: EvmNetworkOptions = { - name: NetworkNames.SyscoinTest, - name_long: 'Syscoin NEVM Testnet', - homePage: 'https://www.syscoin.org/', - blockExplorerTX: 'https://tanenbaum.io/tx/[[txHash]]', - blockExplorerAddr: 'https://tanenbaum.io/address/[[address]]', - chainID: '0x1644', - isTestNetwork: true, - currencyName: 'TSYS', - currencyNameLong: 'Test Syscoin', - node: 'wss://rpc.tanenbaum.io/wss', - icon, - activityHandler: wrapActivityHandler(EtherscanActivity), -}; - -const syscoinTest = new EvmNetwork(syscoinTestOptions); - -export default syscoinTest; diff --git a/packages/types/src/networks.ts b/packages/types/src/networks.ts index a93524fa2..99065f34f 100755 --- a/packages/types/src/networks.ts +++ b/packages/types/src/networks.ts @@ -68,8 +68,8 @@ export enum NetworkNames { FormTestnet = "FormTestnet", AssetHubDOT = "AssetHubDOT", AssetHubKSM = "AssetHubKSM", - SyscoinTest = "TSYS", - Syscoin = "SYS", + SyscoinNEVMTest = "TSYS", + SyscoinNEVM = "SYS", RolluxTest = "TRLX", Rollux = "RLX", CagaAnkara = "CagaAnkara", From 0b8b607343b61e1c69a272f570d4ef9e078d4184 Mon Sep 17 00:00:00 2001 From: Fernando Paredes Garcia Date: Mon, 20 Jan 2025 15:11:00 -0500 Subject: [PATCH 2/5] Remove duplicates and improve error handling of blockscout client. --- .../providers/ethereum/libs/assets-handlers/blockscout.ts | 6 +++++- .../ethereum/libs/assets-handlers/types/tokenbalance-mew.ts | 3 +-- .../src/providers/ethereum/networks/syscoin/rollux.ts | 1 - 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts b/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts index 9259a1996..1eff55094 100644 --- a/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts +++ b/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts @@ -35,10 +35,14 @@ const getBlockscoutBalances = ( fetch(tokenBalancesUrl).then((res) => res.json()), ]) .then(([nativeResponse, tokenResponse]: [any, TokenResponse]) => { - if (!nativeResponse || !tokenResponse) { + if (!nativeResponse?.coin_balance || !tokenResponse?.items) { return Promise.reject("Error fetching balance data"); } + if (isNaN(Number(nativeResponse.coin_balance))) { + return Promise.reject("Invalid native token balance"); + } + // Map native token balance const nativeBalance: TokenBalanceType = { token: NATIVE_TOKEN_ADDRESS, 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 4eef5eb16..6e24ff7a2 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 @@ -27,8 +27,6 @@ export interface ZkSyncBalanceType { } export type SupportedNetworkNames = - | NetworkNames.SyscoinNEVM - | NetworkNames.Rollux | NetworkNames.Binance | NetworkNames.Ethereum | NetworkNames.Matic @@ -53,6 +51,7 @@ export type SupportedNetworkNames = | NetworkNames.Celo | NetworkNames.ZkSync | NetworkNames.Telos + | NetworkNames.SyscoinNEVM | NetworkNames.Rollux | NetworkNames.Sanko | NetworkNames.Degen diff --git a/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts b/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts index 612b7c4e9..213b1aadd 100644 --- a/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts +++ b/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts @@ -4,7 +4,6 @@ import { EvmNetwork, EvmNetworkOptions } from '../../types/evm-network'; import assetsInfoHandler from "@/providers/ethereum/libs/assets-handlers/assetinfo-mew"; 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 rolluxOptions: EvmNetworkOptions = { name: NetworkNames.Rollux, From 6c6360e1fd342ce2c840817be9937177a57a9a30 Mon Sep 17 00:00:00 2001 From: Fernando Paredes Garcia Date: Mon, 20 Jan 2025 15:18:12 -0500 Subject: [PATCH 3/5] Refactor blockscout client's address handler. --- .../providers/ethereum/libs/assets-handlers/blockscout.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts b/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts index 1eff55094..8dd95047b 100644 --- a/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts +++ b/packages/extension/src/providers/ethereum/libs/assets-handlers/blockscout.ts @@ -27,8 +27,9 @@ const getBlockscoutBalances = ( chain: SupportedNetworkNames, address: string ): Promise => { - const nativeTokenUrl = `${NetworkEndpoints[chain]}api/v2/addresses/${address}`; - const tokenBalancesUrl = `${NetworkEndpoints[chain]}api/v2/addresses/${address}/tokens?type=ERC-20`; + const encodedAddress = encodeURIComponent(address); + const nativeTokenUrl = `${NetworkEndpoints[chain]}api/v2/addresses/${encodedAddress}`; + const tokenBalancesUrl = `${NetworkEndpoints[chain]}api/v2/addresses/${encodedAddress}/tokens?type=ERC-20`; return Promise.all([ fetch(nativeTokenUrl).then((res) => res.json()), @@ -39,7 +40,7 @@ const getBlockscoutBalances = ( return Promise.reject("Error fetching balance data"); } - if (isNaN(Number(nativeResponse.coin_balance))) { + if (Number.isNaN(Number(nativeResponse.coin_balance))) { return Promise.reject("Invalid native token balance"); } From de523f0381c67364b74272724f35fccb7b127489 Mon Sep 17 00:00:00 2001 From: Fernando Paredes Garcia Date: Tue, 21 Jan 2025 12:10:13 -0500 Subject: [PATCH 4/5] Add links to faucet and on-ramp. --- .../ethereum/networks/syscoin/nevm-testnet.ts | 1 + .../ethereum/networks/syscoin/nevm.ts | 1 + .../networks/syscoin/rollux-testnet.ts | 1 + .../ethereum/networks/syscoin/rollux.ts | 1 + .../providers/ethereum/types/evm-network.ts | 2 ++ packages/extension/src/ui/action/App.vue | 21 +++++++++++++++---- 6 files changed, 23 insertions(+), 4 deletions(-) diff --git a/packages/extension/src/providers/ethereum/networks/syscoin/nevm-testnet.ts b/packages/extension/src/providers/ethereum/networks/syscoin/nevm-testnet.ts index cd7338261..254a541d5 100644 --- a/packages/extension/src/providers/ethereum/networks/syscoin/nevm-testnet.ts +++ b/packages/extension/src/providers/ethereum/networks/syscoin/nevm-testnet.ts @@ -16,6 +16,7 @@ const syscoinNEVMTestOptions: EvmNetworkOptions = { currencyNameLong: 'Test Syscoin', node: 'wss://rpc.tanenbaum.io/wss', icon, + buyLink: 'https://faucet.syscoin.org', activityHandler: wrapActivityHandler(EtherscanActivity), }; diff --git a/packages/extension/src/providers/ethereum/networks/syscoin/nevm.ts b/packages/extension/src/providers/ethereum/networks/syscoin/nevm.ts index 3f41f4e63..72901f021 100644 --- a/packages/extension/src/providers/ethereum/networks/syscoin/nevm.ts +++ b/packages/extension/src/providers/ethereum/networks/syscoin/nevm.ts @@ -20,6 +20,7 @@ const syscoinNEVMOptions: EvmNetworkOptions = { coingeckoPlatform: CoingeckoPlatform.Syscoin, icon, assetsInfoHandler, + buyLink: 'https://trade.coinify.com/syscoin?defaultCryptoCurrency=SYSEVM&cryptoCurrencies=SYSROLLUX,SYSEVM,SYS&targetPage=buy', activityHandler: wrapActivityHandler(EtherscanActivity), }; diff --git a/packages/extension/src/providers/ethereum/networks/syscoin/rollux-testnet.ts b/packages/extension/src/providers/ethereum/networks/syscoin/rollux-testnet.ts index 0f557b2b5..933f65ace 100644 --- a/packages/extension/src/providers/ethereum/networks/syscoin/rollux-testnet.ts +++ b/packages/extension/src/providers/ethereum/networks/syscoin/rollux-testnet.ts @@ -16,6 +16,7 @@ const rolluxTestOptions: EvmNetworkOptions = { currencyNameLong: 'Test Syscoin', node: 'wss://rpc-tanenbaum.rollux.com/wss', icon, + buyLink: 'https://faucet.rollux.com', activityHandler: wrapActivityHandler(EtherscanActivity), }; diff --git a/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts b/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts index 213b1aadd..bf3e2e3b9 100644 --- a/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts +++ b/packages/extension/src/providers/ethereum/networks/syscoin/rollux.ts @@ -20,6 +20,7 @@ const rolluxOptions: EvmNetworkOptions = { coingeckoPlatform: CoingeckoPlatform.Rollux, icon, assetsInfoHandler, + buyLink: 'https://trade.coinify.com/syscoin?defaultCryptoCurrency=SYSROLLUX&cryptoCurrencies=SYSROLLUX,SYSEVM,SYS&targetPage=buy', activityHandler: wrapActivityHandler(EtherscanActivity), }; diff --git a/packages/extension/src/providers/ethereum/types/evm-network.ts b/packages/extension/src/providers/ethereum/types/evm-network.ts index 10a4158f2..a584cb701 100644 --- a/packages/extension/src/providers/ethereum/types/evm-network.ts +++ b/packages/extension/src/providers/ethereum/types/evm-network.ts @@ -34,6 +34,7 @@ export interface EvmNetworkOptions { currencyNameLong: string; node: string; icon: string; + buyLink?: string | undefined; coingeckoID?: string; coingeckoPlatform?: CoingeckoPlatform; basePath?: string; @@ -98,6 +99,7 @@ export class EvmNetwork extends BaseNetwork { baseOptions.customTokens = baseOptions.customTokens ?? true; super(baseOptions); + this.options = options; this.chainID = options.chainID; this.assetsInfoHandler = options.assetsInfoHandler; diff --git a/packages/extension/src/ui/action/App.vue b/packages/extension/src/ui/action/App.vue index fabe95aeb..f49dcd81e 100644 --- a/packages/extension/src/ui/action/App.vue +++ b/packages/extension/src/ui/action/App.vue @@ -362,14 +362,27 @@ const toggleDepositWindow = () => { showDepositWindow.value = !showDepositWindow.value; }; const openBuyPage = () => { - const buyLink = - currentNetwork.value.name === NetworkNames.KadenaTestnet - ? (currentNetwork.value as KadenaNetwork).options.buyLink - : `https://ccswap.myetherwallet.com/?to=${currentNetwork.value.displayAddress( + const buyLink = (() => { + console.log([currentNetwork.value, (currentNetwork.value as EvmNetwork).options]); + switch (currentNetwork.value.name) { + case NetworkNames.KadenaTestnet: + return (currentNetwork.value as KadenaNetwork).options.buyLink; + case NetworkNames.SyscoinNEVM: + case NetworkNames.Rollux: + return `${(currentNetwork.value as EvmNetwork).options.buyLink}&address=${currentNetwork.value.displayAddress( + accountHeaderData.value.selectedAccount!.address + )}`; + case NetworkNames.SyscoinNEVMTest: + case NetworkNames.RolluxTest: + return (currentNetwork.value as EvmNetwork).options.buyLink; + default: + return `https://ccswap.myetherwallet.com/?to=${currentNetwork.value.displayAddress( accountHeaderData.value.selectedAccount!.address, )}&network=${currentNetwork.value.name}&crypto=${ currentNetwork.value.currencyName }&platform=enkrypt`; + } + })(); Browser.tabs.create({ url: buyLink, }); From ffdf96058dec0d79f022f3a07454bc63dfc87e6c Mon Sep 17 00:00:00 2001 From: Fernando Paredes Garcia Date: Tue, 21 Jan 2025 12:18:47 -0500 Subject: [PATCH 5/5] Remove debug console.log statement. --- packages/extension/src/ui/action/App.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/extension/src/ui/action/App.vue b/packages/extension/src/ui/action/App.vue index f49dcd81e..0ade5518e 100644 --- a/packages/extension/src/ui/action/App.vue +++ b/packages/extension/src/ui/action/App.vue @@ -363,7 +363,6 @@ const toggleDepositWindow = () => { }; const openBuyPage = () => { const buyLink = (() => { - console.log([currentNetwork.value, (currentNetwork.value as EvmNetwork).options]); switch (currentNetwork.value.name) { case NetworkNames.KadenaTestnet: return (currentNetwork.value as KadenaNetwork).options.buyLink;