From 5754ab6db05c8807f2d833e2039e16b1c3591f8f Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Mon, 21 Nov 2022 11:33:09 +0100 Subject: [PATCH 01/19] Add feature flag for Binance Smart Chain --- .env.defaults | 1 + background/features.ts | 2 ++ ui/_locales/en/messages.json | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.env.defaults b/.env.defaults index 7f8065a975..67af6fac40 100644 --- a/.env.defaults +++ b/.env.defaults @@ -23,6 +23,7 @@ SUPPORT_TABBED_ONBOARDING=false SUPPORT_KEYRING_LOCKING=true SUPPORT_FORGOT_PASSWORD=false SUPPORT_AVALANCHE=false +SUPPORT_BINANCE_SMART_CHAIN=false ENABLE_ACHIEVEMENTS_TAB=true SUPPORT_ACHIEVEMENTS_BANNER=false SWITCH_RUNTIME_FLAGS=false diff --git a/background/features.ts b/background/features.ts index 6ac183bb69..7e00c7076d 100644 --- a/background/features.ts +++ b/background/features.ts @@ -28,6 +28,8 @@ export const RuntimeFlag = { HIDE_TOKEN_FEATURES: process.env.HIDE_TOKEN_FEATURES === "true", SUPPORT_RSK: process.env.SUPPORT_RSK === "true", SUPPORT_AVALANCHE: process.env.SUPPORT_AVALANCHE === "true", + SUPPORT_BINANCE_SMART_CHAIN: + process.env.SUPPORT_BINANCE_SMART_CHAIN === "true", SUPPORT_ACHIEVEMENTS_BANNER: process.env.SUPPORT_ACHIEVEMENTS_BANNER === "true", SUPPORT_NFT_TAB: process.env.SUPPORT_NFT_TAB === "true", diff --git a/ui/_locales/en/messages.json b/ui/_locales/en/messages.json index b1ba9311f8..2d02a4e944 100644 --- a/ui/_locales/en/messages.json +++ b/ui/_locales/en/messages.json @@ -598,7 +598,8 @@ "HIDE_TOKEN_FEATURES": "Hide token features", "SUPPORT_ACHIEVEMENTS_BANNER": "Enable achievements banner", "SUPPORT_AVALANCHE": "Enable Avalanche network", - "SUPPORT_NFT_TAB": "Enable to open NFTs page from tab" + "SUPPORT_NFT_TAB": "Enable to open NFTs page from tab", + "SUPPORT_BINANCE_SMART_CHAIN": "Enable Binance Smart Chain network" } } } From 05f96a007f06b657744651a7a44d9cffa9208ecd Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Mon, 21 Nov 2022 11:39:39 +0100 Subject: [PATCH 02/19] Add Binance Smart Chain constants --- background/constants/coin-types.ts | 1 + background/constants/currencies.ts | 14 +++++++++++++- background/constants/networks.ts | 22 +++++++++++++++++++--- ui/utils/constants.ts | 5 +++++ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/background/constants/coin-types.ts b/background/constants/coin-types.ts index b7addc052c..391ede483d 100644 --- a/background/constants/coin-types.ts +++ b/background/constants/coin-types.ts @@ -11,6 +11,7 @@ export const coinTypesByAssetSymbol = { RBTC: 137, MATIC: 966, AVAX: 9000, + BSC: 9006, } as const /** diff --git a/background/constants/currencies.ts b/background/constants/currencies.ts index 11c99d0203..6494162b6c 100644 --- a/background/constants/currencies.ts +++ b/background/constants/currencies.ts @@ -75,6 +75,18 @@ export const AVAX: NetworkBaseAsset = { }, } +export const BNB: NetworkBaseAsset = { + name: "Binance Coin", + symbol: "BNB", + decimals: 18, + coinType: coinTypesByAssetSymbol.BSC, + metadata: { + coinGeckoID: "binancecoin", + tokenLists: [], + websiteURL: "https://bnbchain.org", + }, +} + export const BTC: NetworkBaseAsset = { name: "Bitcoin", symbol: "BTC", @@ -87,7 +99,7 @@ export const BTC: NetworkBaseAsset = { }, } -export const BASE_ASSETS = [ETH, BTC, MATIC, RBTC, OPTIMISTIC_ETH, AVAX] +export const BASE_ASSETS = [ETH, BTC, MATIC, RBTC, OPTIMISTIC_ETH, AVAX, BNB] export const BASE_ASSETS_BY_SYMBOL = BASE_ASSETS.reduce<{ [assetSymbol: string]: NetworkBaseAsset diff --git a/background/constants/networks.ts b/background/constants/networks.ts index bea28d08f4..f8e518fa12 100644 --- a/background/constants/networks.ts +++ b/background/constants/networks.ts @@ -1,5 +1,5 @@ import { EVMNetwork, Network } from "../networks" -import { AVAX, BTC, ETH, MATIC, OPTIMISTIC_ETH, RBTC } from "./currencies" +import { AVAX, BNB, BTC, ETH, MATIC, OPTIMISTIC_ETH, RBTC } from "./currencies" export const ETHEREUM: EVMNetwork = { name: "Ethereum", @@ -41,6 +41,14 @@ export const AVALANCHE: EVMNetwork = { coingeckoPlatformID: "avalanche", } +export const BINANCE_SMART_CHAIN: EVMNetwork = { + name: "BNB Smart Chain", + baseAsset: BNB, + chainID: "56", + family: "EVM", + coingeckoPlatformID: "binance-smart-chain", +} + export const OPTIMISM: EVMNetwork = { name: "Optimism", baseAsset: OPTIMISTIC_ETH, @@ -73,11 +81,15 @@ export const FORK: EVMNetwork = { } export const EIP_1559_COMPLIANT_CHAIN_IDS = new Set( - [ETHEREUM, POLYGON, GOERLI, AVALANCHE].map((network) => network.chainID) + [ETHEREUM, POLYGON, GOERLI, AVALANCHE, BINANCE_SMART_CHAIN].map( + (network) => network.chainID + ) ) export const CHAINS_WITH_MEMPOOL = new Set( - [ETHEREUM, POLYGON, AVALANCHE, GOERLI].map((network) => network.chainID) + [ETHEREUM, POLYGON, AVALANCHE, GOERLI, BINANCE_SMART_CHAIN].map( + (network) => network.chainID + ) ) export const NETWORK_BY_CHAIN_ID = { @@ -87,6 +99,7 @@ export const NETWORK_BY_CHAIN_ID = { [ARBITRUM_ONE.chainID]: ARBITRUM_ONE, [AVALANCHE.chainID]: AVALANCHE, [OPTIMISM.chainID]: OPTIMISM, + [BINANCE_SMART_CHAIN.chainID]: BINANCE_SMART_CHAIN, [GOERLI.chainID]: GOERLI, [FORK.chainID]: FORK, } @@ -106,6 +119,7 @@ export const CHAIN_ID_TO_NFT_METADATA_PROVIDER: { [OPTIMISM.chainID]: ["simplehash"], [ARBITRUM_ONE.chainID]: ["simplehash"], [AVALANCHE.chainID]: ["simplehash"], + [BINANCE_SMART_CHAIN.chainID]: ["simplehash"], } export const NETWORKS_SUPPORTING_NFTS = new Set( @@ -123,6 +137,7 @@ export const CHAIN_ID_TO_0X_API_BASE: { [GOERLI.chainID]: "goerli.api.0x.org", [ARBITRUM_ONE.chainID]: "arbitrum.api.0x.org", [AVALANCHE.chainID]: "avalanche.api.0x.org", + [BINANCE_SMART_CHAIN.chainID]: "bsc.api.0x.org", } export const NETWORKS_SUPPORTING_SWAPS = new Set( @@ -148,4 +163,5 @@ export const CHAIN_ID_TO_RPC_URLS: { [ARBITRUM_ONE.chainID]: ["https://rpc.ankr.com/arbitrum"], [GOERLI.chainID]: ["https://ethereum-goerli-rpc.allthatnode.com"], [AVALANCHE.chainID]: ["https://api.avax.network/ext/bc/C/rpc"], + [BINANCE_SMART_CHAIN.chainID]: ["https://rpc.ankr.com/bsc"], } diff --git a/ui/utils/constants.ts b/ui/utils/constants.ts index 548df3f617..ff3f369c4f 100644 --- a/ui/utils/constants.ts +++ b/ui/utils/constants.ts @@ -1,6 +1,7 @@ import { ARBITRUM_ONE, AVALANCHE, + BINANCE_SMART_CHAIN, ETHEREUM, GOERLI, OPTIMISM, @@ -23,6 +24,10 @@ export const scanWebsite = { [GOERLI.chainID]: { title: "Etherscan", url: "https://goerli.etherscan.io/" }, [ARBITRUM_ONE.chainID]: { title: "Arbiscan", url: "https://arbiscan.io/" }, [AVALANCHE.chainID]: { title: "Snowtrace", url: "https://snowtrace.io/" }, + [BINANCE_SMART_CHAIN.chainID]: { + title: "BNB Smart Chain", + url: "https://bscscan.com", + }, } export const ESTIMATED_SPEED_IN_READABLE_FORMAT_RELATIVE_TO_CONFIDENCE_LEVEL: { From 2aa692056f06beddb43bd3c6166ceb16e4957dab Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Mon, 21 Nov 2022 11:57:23 +0100 Subject: [PATCH 03/19] Add Binance Smart Chain to the list of protocols in the top menu --- ui/components/TopMenu/TopMenuProtocolList.tsx | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/ui/components/TopMenu/TopMenuProtocolList.tsx b/ui/components/TopMenu/TopMenuProtocolList.tsx index ccf5ab61fd..99bf4a4da9 100644 --- a/ui/components/TopMenu/TopMenuProtocolList.tsx +++ b/ui/components/TopMenu/TopMenuProtocolList.tsx @@ -2,6 +2,7 @@ import React, { ReactElement } from "react" import { ARBITRUM_ONE, AVALANCHE, + BINANCE_SMART_CHAIN, ETHEREUM, GOERLI, OPTIMISM, @@ -57,13 +58,20 @@ const productionNetworks = [ isDisabled: true, }, ]), - - // { - // name: "Binance Smart Chain", - // info: i18n.t("protocol.compatibleChain"), - // width: 24, - // height: 24, - // }, + ...(isEnabled(FeatureFlags.SUPPORT_BINANCE_SMART_CHAIN) + ? [ + { + network: BINANCE_SMART_CHAIN, + info: i18n.t("protocol.compatibleChain"), + }, + ] + : [ + { + network: BINANCE_SMART_CHAIN, + info: i18n.t("comingSoon"), + isDisabled: true, + }, + ]), // { // name: "Celo", // info: "Global payments infrastructure", From 57a4b747c788e66a95268708e2be98bef53490f5 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Mon, 21 Nov 2022 12:11:16 +0100 Subject: [PATCH 04/19] Rename icons for Binance Smart Chain --- ...in-square@2x.png => bnbsmartchain-square@2x.png} | Bin ...inancesmartchain@2x.png => bnbsmartchain@2x.png} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename ui/public/images/networks/{binancesmartchain-square@2x.png => bnbsmartchain-square@2x.png} (100%) rename ui/public/images/networks/{binancesmartchain@2x.png => bnbsmartchain@2x.png} (100%) diff --git a/ui/public/images/networks/binancesmartchain-square@2x.png b/ui/public/images/networks/bnbsmartchain-square@2x.png similarity index 100% rename from ui/public/images/networks/binancesmartchain-square@2x.png rename to ui/public/images/networks/bnbsmartchain-square@2x.png diff --git a/ui/public/images/networks/binancesmartchain@2x.png b/ui/public/images/networks/bnbsmartchain@2x.png similarity index 100% rename from ui/public/images/networks/binancesmartchain@2x.png rename to ui/public/images/networks/bnbsmartchain@2x.png From 8ac10df8f974c56b77b2bcc7c50c5e652e924ab2 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Mon, 21 Nov 2022 12:39:45 +0100 Subject: [PATCH 05/19] Add icon for BNB coin --- ui/components/Shared/SharedAssetIcon.tsx | 2 +- ui/public/images/assets/bnb.png | Bin 0 -> 104712 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 ui/public/images/assets/bnb.png diff --git a/ui/components/Shared/SharedAssetIcon.tsx b/ui/components/Shared/SharedAssetIcon.tsx index 45a65e9009..307b5e2421 100644 --- a/ui/components/Shared/SharedAssetIcon.tsx +++ b/ui/components/Shared/SharedAssetIcon.tsx @@ -8,7 +8,7 @@ interface Props { symbol: string } -const hardcodedIcons = new Set(["ETH", "MATIC", "DOGGO", "RBTC", "AVAX"]) +const hardcodedIcons = new Set(["ETH", "MATIC", "DOGGO", "RBTC", "AVAX", "BNB"]) export default function SharedAssetIcon(props: Props): ReactElement { const { size, logoURL, symbol } = props diff --git a/ui/public/images/assets/bnb.png b/ui/public/images/assets/bnb.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc1061f089e9793cf642cad26323010c75b6939 GIT binary patch literal 104712 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 literal 0 HcmV?d00001 From 797869e25be6fb26d8fc1713d40be2843b15db22 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Tue, 22 Nov 2022 08:33:49 +0100 Subject: [PATCH 06/19] Add Binance Smart Chain to supported networks --- background/redux-slices/dapp.ts | 2 ++ background/services/chain/index.ts | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/background/redux-slices/dapp.ts b/background/redux-slices/dapp.ts index 8f9b7595f4..8ba39f4782 100644 --- a/background/redux-slices/dapp.ts +++ b/background/redux-slices/dapp.ts @@ -5,6 +5,7 @@ import { createBackgroundAsyncThunk } from "./utils" import { keyPermissionsByChainIdAddressOrigin } from "../services/provider-bridge/utils" import { AVALANCHE, + BINANCE_SMART_CHAIN, ETHEREUM, GOERLI, OPTIMISM, @@ -131,6 +132,7 @@ const dappSlice = createSlice({ POLYGON, OPTIMISM, AVALANCHE, + BINANCE_SMART_CHAIN, GOERLI, ].map((network) => ({ ...permission, diff --git a/background/services/chain/index.ts b/background/services/chain/index.ts index b4759206f6..51b4df74e0 100644 --- a/background/services/chain/index.ts +++ b/background/services/chain/index.ts @@ -31,6 +31,7 @@ import { CHAINS_WITH_MEMPOOL, EIP_1559_COMPLIANT_CHAIN_IDS, AVALANCHE, + BINANCE_SMART_CHAIN, } from "../../constants" import { FeatureFlags, isEnabled } from "../../features" import PreferenceService from "../preferences" @@ -271,6 +272,9 @@ export default class ChainService extends BaseService { ARBITRUM_ONE, ...(isEnabled(FeatureFlags.SUPPORT_RSK) ? [ROOTSTOCK] : []), ...(isEnabled(FeatureFlags.SUPPORT_AVALANCHE) ? [AVALANCHE] : []), + ...(isEnabled(FeatureFlags.SUPPORT_BINANCE_SMART_CHAIN) + ? [BINANCE_SMART_CHAIN] + : []), ] this.trackedNetworks = [] From 2f9191df8a617e9efe8219553d9a770ee97d0650 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Tue, 22 Nov 2022 10:33:38 +0100 Subject: [PATCH 07/19] Rename title for Binance Smart Chain scan website --- ui/utils/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/utils/constants.ts b/ui/utils/constants.ts index ff3f369c4f..807640e7b8 100644 --- a/ui/utils/constants.ts +++ b/ui/utils/constants.ts @@ -25,7 +25,7 @@ export const scanWebsite = { [ARBITRUM_ONE.chainID]: { title: "Arbiscan", url: "https://arbiscan.io/" }, [AVALANCHE.chainID]: { title: "Snowtrace", url: "https://snowtrace.io/" }, [BINANCE_SMART_CHAIN.chainID]: { - title: "BNB Smart Chain", + title: "Bscscan", url: "https://bscscan.com", }, } From fdfb95fd0f2945068dd24f11b1dca554b67f356e Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Tue, 22 Nov 2022 11:23:08 +0100 Subject: [PATCH 08/19] Fix the issue for getting gas prices for Binance Smart Chain --- background/constants/networks.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/background/constants/networks.ts b/background/constants/networks.ts index 0effbc6b4b..7b7092974a 100644 --- a/background/constants/networks.ts +++ b/background/constants/networks.ts @@ -81,9 +81,7 @@ export const FORK: EVMNetwork = { } export const EIP_1559_COMPLIANT_CHAIN_IDS = new Set( - [ETHEREUM, POLYGON, GOERLI, AVALANCHE, BINANCE_SMART_CHAIN].map( - (network) => network.chainID - ) + [ETHEREUM, POLYGON, GOERLI, AVALANCHE].map((network) => network.chainID) ) export const CHAINS_WITH_MEMPOOL = new Set( From 7a7c9f2d846a2fe0d42d3315637c8a4bd1921856 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Tue, 22 Nov 2022 16:04:33 +0100 Subject: [PATCH 09/19] Add a token token list for BSC --- background/services/preferences/db.ts | 11 +++++++++++ background/services/preferences/defaults.ts | 1 + 2 files changed, 12 insertions(+) diff --git a/background/services/preferences/db.ts b/background/services/preferences/db.ts index 46482ced1f..c65b1127bb 100644 --- a/background/services/preferences/db.ts +++ b/background/services/preferences/db.ts @@ -257,6 +257,17 @@ export class PreferenceDatabase extends Dexie { }) }) + this.version(13).upgrade((tx) => { + return tx + .table("preferences") + .toCollection() + .modify((storedPreferences: Preferences) => { + storedPreferences.tokenLists.urls.push( + "https://tokens.pancakeswap.finance/pancakeswap-default.json" + ) + }) + }) + // This is the old version for populate // https://dexie.org/docs/Dexie/Dexie.on.populate-(old-version) // The this does not behave according the new docs, but works diff --git a/background/services/preferences/defaults.ts b/background/services/preferences/defaults.ts index cfee7d433b..473a084d75 100644 --- a/background/services/preferences/defaults.ts +++ b/background/services/preferences/defaults.ts @@ -21,6 +21,7 @@ const defaultPreferences: Preferences = { "https://static.optimism.io/optimism.tokenlist.json", // Optimism Default Tokens "https://bridge.arbitrum.io/token-list-42161.json", // Arbitrum Default tokens "https://raw.githubusercontent.com/traderjoe-xyz/joe-tokenlists/main/src/joe.tokenlist-v2.json", // Trader Joe tokens + "https://tokens.pancakeswap.finance/pancakeswap-default.json", // PancakeSwap Default List ], }, currency: USD, From 379717c0edd27d33d31a489a0743c4486e93938f Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Thu, 24 Nov 2022 08:52:57 +0100 Subject: [PATCH 10/19] Update coin type for BNB --- background/constants/coin-types.ts | 2 +- background/constants/currencies.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/background/constants/coin-types.ts b/background/constants/coin-types.ts index 391ede483d..52e9c455bc 100644 --- a/background/constants/coin-types.ts +++ b/background/constants/coin-types.ts @@ -11,7 +11,7 @@ export const coinTypesByAssetSymbol = { RBTC: 137, MATIC: 966, AVAX: 9000, - BSC: 9006, + BNB: 714, } as const /** diff --git a/background/constants/currencies.ts b/background/constants/currencies.ts index 6494162b6c..9d7ea3e6bc 100644 --- a/background/constants/currencies.ts +++ b/background/constants/currencies.ts @@ -79,7 +79,7 @@ export const BNB: NetworkBaseAsset = { name: "Binance Coin", symbol: "BNB", decimals: 18, - coinType: coinTypesByAssetSymbol.BSC, + coinType: coinTypesByAssetSymbol.BNB, metadata: { coinGeckoID: "binancecoin", tokenLists: [], From 16da743a9c9c3d8f1a6462d7275e222cf9cae4f1 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Thu, 24 Nov 2022 14:05:52 +0100 Subject: [PATCH 11/19] Add network chart color for Binance Smart Chain --- ui/components/Overview/NetworksChart.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/components/Overview/NetworksChart.tsx b/ui/components/Overview/NetworksChart.tsx index ac2e07924c..adc54ea3fa 100644 --- a/ui/components/Overview/NetworksChart.tsx +++ b/ui/components/Overview/NetworksChart.tsx @@ -4,6 +4,7 @@ import { OPTIMISM, NETWORK_BY_CHAIN_ID, POLYGON, + BINANCE_SMART_CHAIN, } from "@tallyho/tally-background/constants" import { AccountTotalList } from "@tallyho/tally-background/redux-slices/selectors" import React, { ReactElement } from "react" @@ -14,6 +15,7 @@ const NETWORKS_CHART_COLORS = { [POLYGON.chainID]: "#8347E5", [ARBITRUM_ONE.chainID]: "#2083C5", [OPTIMISM.chainID]: "#CD041C", + [BINANCE_SMART_CHAIN.chainID]: "#F3BA2F", } const getNetworksPercents = ( From 07fe5baba144ff28fd049c05188bb8f8e893f4ce Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Thu, 24 Nov 2022 15:40:36 +0100 Subject: [PATCH 12/19] Fix the issue with displaying the asset amount for BSC Asset Price Point should be taken for the correct network. The issue is still on the Overview page. --- background/redux-slices/assets.ts | 25 ++++++++++++++++--- .../selectors/accountsSelectors.ts | 19 ++++++++++---- .../redux-slices/utils/0x-swap-utils.ts | 3 ++- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/background/redux-slices/assets.ts b/background/redux-slices/assets.ts index caf706097f..f49e0073d0 100644 --- a/background/redux-slices/assets.ts +++ b/background/redux-slices/assets.ts @@ -110,6 +110,13 @@ const selectPairedAssetSymbol = ( pairedAssetSymbol: string ) => pairedAssetSymbol +const selectChainID = ( + _: AssetsState, + _2: string, + _3: string, + chainID: string +) => chainID + /** * Executes an asset transfer between two addresses, for a set amount. Supports * an optional fixed gas limit. @@ -187,9 +194,21 @@ export const transferAsset = createBackgroundAsyncThunk( * the selector will return them in the order [ETH, USD]. */ export const selectAssetPricePoint = createSelector( - [selectAssetsState, selectAssetSymbol, selectPairedAssetSymbol], - (assets, assetSymbol, pairedAssetSymbol) => { - const pricedAsset = assets.find( + [ + selectAssetsState, + selectAssetSymbol, + selectPairedAssetSymbol, + selectChainID, + ], + (assets, assetSymbol, pairedAssetSymbol, chainID) => { + const pricedAsset = ( + chainID + ? assets.filter( + (asset) => + "homeNetwork" in asset && asset.homeNetwork.chainID === chainID + ) + : assets + ).find( (asset) => asset.symbol === assetSymbol && pairedAssetSymbol in asset.recentPrices && diff --git a/background/redux-slices/selectors/accountsSelectors.ts b/background/redux-slices/selectors/accountsSelectors.ts index e46d1c0821..7da7ebff52 100644 --- a/background/redux-slices/selectors/accountsSelectors.ts +++ b/background/redux-slices/selectors/accountsSelectors.ts @@ -98,7 +98,8 @@ const computeCombinedAssetAmountsData = ( const assetPricePoint = selectAssetPricePoint( assets, assetAmount.asset.symbol, - mainCurrencySymbol + mainCurrencySymbol, + currentNetwork.chainID ) const mainCurrencyEnrichedAssetAmount = @@ -319,14 +320,16 @@ const getAccountType = ( const getTotalBalance = ( accountBalances: { [assetSymbol: string]: AccountBalance }, assets: AssetsState, - mainCurrencySymbol: string + mainCurrencySymbol: string, + chainID: string ) => { return Object.values(accountBalances) .map(({ assetAmount }) => { const assetPricePoint = selectAssetPricePoint( assets, assetAmount.asset.symbol, - mainCurrencySymbol + mainCurrencySymbol, + chainID ) if (typeof assetPricePoint === "undefined") { @@ -397,7 +400,12 @@ function getNetworkAccountTotalsByCategory( avatarURL: accountData.ens.avatarURL ?? accountData.defaultAvatar, localizedTotalMainCurrencyAmount: formatCurrencyAmount( mainCurrencySymbol, - getTotalBalance(accountData.balances, assets, mainCurrencySymbol), + getTotalBalance( + accountData.balances, + assets, + mainCurrencySymbol, + network.chainID + ), desiredDecimals.default ), } @@ -469,7 +477,8 @@ export const selectAccountTotalsForOverview = createSelector( accountsTotal[normalizedAddress].totals[chainID] = getTotalBalance( accountData.balances, assetsState, - mainCurrencySymbol + mainCurrencySymbol, + chainID ) }) ) diff --git a/background/redux-slices/utils/0x-swap-utils.ts b/background/redux-slices/utils/0x-swap-utils.ts index ee53ea2c4a..0579915e90 100644 --- a/background/redux-slices/utils/0x-swap-utils.ts +++ b/background/redux-slices/utils/0x-swap-utils.ts @@ -97,7 +97,8 @@ export async function getAssetAmount( const assetPricePoint = selectAssetPricePoint( assets, asset?.symbol, - hardcodedMainCurrencySymbol + hardcodedMainCurrencySymbol, + network.chainID ) return enrichAssetAmountWithMainCurrencyValues( From fe6c8c52ce78b0779db597c2b4871c7384543fee Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Fri, 25 Nov 2022 12:26:22 +0100 Subject: [PATCH 13/19] Fix the issue with displaying the asset amount for BSC for overview page --- background/redux-slices/accounts.ts | 22 +++++++++++++++++-- .../selectors/accountsSelectors.ts | 9 +++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/background/redux-slices/accounts.ts b/background/redux-slices/accounts.ts index eaede75d25..068064afc7 100644 --- a/background/redux-slices/accounts.ts +++ b/background/redux-slices/accounts.ts @@ -2,7 +2,12 @@ import { createSlice } from "@reduxjs/toolkit" import { createBackgroundAsyncThunk } from "./utils" import { AccountBalance, AddressOnNetwork, NameOnNetwork } from "../accounts" import { EVMNetwork, Network } from "../networks" -import { AnyAsset, AnyAssetAmount, SmartContractFungibleAsset } from "../assets" +import { + AnyAsset, + AnyAssetAmount, + FungibleAsset, + SmartContractFungibleAsset, +} from "../assets" import { AssetMainCurrencyAmount, AssetDecimalAmount, @@ -172,9 +177,22 @@ function updateCombinedData(immerState: AccountState) { [symbol: string]: AnyAssetAmount }>((acc, combinedAssetAmount) => { const assetSymbol = combinedAssetAmount.asset.symbol + let { amount } = combinedAssetAmount + + if (acc[assetSymbol]?.asset) { + const { decimals } = acc[assetSymbol].asset as FungibleAsset + const assetDecimals = + "decimals" in combinedAssetAmount.asset + ? combinedAssetAmount.asset.decimals + : 0 + if (assetDecimals > decimals) { + amount /= BigInt(`1${"0".repeat(assetDecimals - decimals)}`) + } + } + acc[assetSymbol] = { ...combinedAssetAmount, - amount: (acc[assetSymbol]?.amount || 0n) + combinedAssetAmount.amount, + amount: (acc[assetSymbol]?.amount || 0n) + amount, } return acc }, {}) diff --git a/background/redux-slices/selectors/accountsSelectors.ts b/background/redux-slices/selectors/accountsSelectors.ts index 7da7ebff52..aea9a45d24 100644 --- a/background/redux-slices/selectors/accountsSelectors.ts +++ b/background/redux-slices/selectors/accountsSelectors.ts @@ -82,7 +82,8 @@ const computeCombinedAssetAmountsData = ( assets: AssetsState, mainCurrencySymbol: string, currentNetwork: EVMNetwork, - hideDust: boolean + hideDust: boolean, + useCurrentNetwork = false ): { combinedAssetAmounts: CompleteAssetAmount[] totalMainCurrencyAmount: number | undefined @@ -95,11 +96,12 @@ const computeCombinedAssetAmountsData = ( // data from the assets slice const combinedAssetAmounts = assetAmounts .map((assetAmount) => { + // i tutaj ten chainid juz nie dziala const assetPricePoint = selectAssetPricePoint( assets, assetAmount.asset.symbol, mainCurrencySymbol, - currentNetwork.chainID + useCurrentNetwork ? currentNetwork.chainID : undefined ) const mainCurrencyEnrichedAssetAmount = @@ -261,7 +263,8 @@ export const selectCurrentAccountBalances = createSelector( assets, mainCurrencySymbol, currentNetwork, - hideDust + hideDust, + true ) return { From a508ad8fd19de52e7e4e97b9fbe61ba3465014b0 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Mon, 28 Nov 2022 12:52:27 +0100 Subject: [PATCH 14/19] Delete unnecessary comment --- background/redux-slices/selectors/accountsSelectors.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/background/redux-slices/selectors/accountsSelectors.ts b/background/redux-slices/selectors/accountsSelectors.ts index aea9a45d24..6f9e696001 100644 --- a/background/redux-slices/selectors/accountsSelectors.ts +++ b/background/redux-slices/selectors/accountsSelectors.ts @@ -96,7 +96,6 @@ const computeCombinedAssetAmountsData = ( // data from the assets slice const combinedAssetAmounts = assetAmounts .map((assetAmount) => { - // i tutaj ten chainid juz nie dziala const assetPricePoint = selectAssetPricePoint( assets, assetAmount.asset.symbol, From 5f1bb26b8cbfe8d9b7143cc8a7518cfea07d9ed5 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Tue, 29 Nov 2022 12:06:30 +0100 Subject: [PATCH 15/19] Refactor for updating combined data function --- background/redux-slices/accounts.ts | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/background/redux-slices/accounts.ts b/background/redux-slices/accounts.ts index 068064afc7..0e44885ebf 100644 --- a/background/redux-slices/accounts.ts +++ b/background/redux-slices/accounts.ts @@ -5,7 +5,7 @@ import { EVMNetwork, Network } from "../networks" import { AnyAsset, AnyAssetAmount, - FungibleAsset, + isFungibleAsset, SmartContractFungibleAsset, } from "../assets" import { @@ -16,6 +16,7 @@ import { DomainName, HexString, URI } from "../types" import { normalizeEVMAddress } from "../lib/utils" import { AccountSigner } from "../services/signing" import { TEST_NETWORK_BY_CHAIN_ID } from "../constants" +import { convertFixedPoint } from "../lib/fixed-point" /** * The set of available UI account types. These may or may not map 1-to-1 to @@ -180,13 +181,18 @@ function updateCombinedData(immerState: AccountState) { let { amount } = combinedAssetAmount if (acc[assetSymbol]?.asset) { - const { decimals } = acc[assetSymbol].asset as FungibleAsset - const assetDecimals = - "decimals" in combinedAssetAmount.asset - ? combinedAssetAmount.asset.decimals - : 0 - if (assetDecimals > decimals) { - amount /= BigInt(`1${"0".repeat(assetDecimals - decimals)}`) + const accAsset = acc[assetSymbol].asset + const decimals = isFungibleAsset(accAsset) ? accAsset.decimals : 0 + const targetDecimals = isFungibleAsset(combinedAssetAmount.asset) + ? combinedAssetAmount.asset.decimals + : 0 + + if (targetDecimals > decimals) { + amount = convertFixedPoint( + combinedAssetAmount?.amount, + decimals, + targetDecimals + ) } } From 695715aca86da12e826afea3312d7687a824e209 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Wed, 30 Nov 2022 15:29:01 +0100 Subject: [PATCH 16/19] Rename title for BSC scan website --- ui/utils/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/utils/constants.ts b/ui/utils/constants.ts index 807640e7b8..fd8271c730 100644 --- a/ui/utils/constants.ts +++ b/ui/utils/constants.ts @@ -25,7 +25,7 @@ export const scanWebsite = { [ARBITRUM_ONE.chainID]: { title: "Arbiscan", url: "https://arbiscan.io/" }, [AVALANCHE.chainID]: { title: "Snowtrace", url: "https://snowtrace.io/" }, [BINANCE_SMART_CHAIN.chainID]: { - title: "Bscscan", + title: "BscScan", url: "https://bscscan.com", }, } From 017c09e0413134956a56d40cf1234eea496d9c0d Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Fri, 2 Dec 2022 09:33:45 +0100 Subject: [PATCH 17/19] Refactor for update combined data function --- background/redux-slices/accounts.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/background/redux-slices/accounts.ts b/background/redux-slices/accounts.ts index 0e44885ebf..e3a7935844 100644 --- a/background/redux-slices/accounts.ts +++ b/background/redux-slices/accounts.ts @@ -182,23 +182,24 @@ function updateCombinedData(immerState: AccountState) { if (acc[assetSymbol]?.asset) { const accAsset = acc[assetSymbol].asset - const decimals = isFungibleAsset(accAsset) ? accAsset.decimals : 0 - const targetDecimals = isFungibleAsset(combinedAssetAmount.asset) + const existingDecimals = isFungibleAsset(accAsset) + ? accAsset.decimals + : 0 + const newDecimals = isFungibleAsset(combinedAssetAmount.asset) ? combinedAssetAmount.asset.decimals : 0 - if (targetDecimals > decimals) { - amount = convertFixedPoint( - combinedAssetAmount?.amount, - decimals, - targetDecimals - ) + if (newDecimals !== existingDecimals) { + amount = convertFixedPoint(amount, newDecimals, existingDecimals) } } - acc[assetSymbol] = { - ...combinedAssetAmount, - amount: (acc[assetSymbol]?.amount || 0n) + amount, + if (acc[assetSymbol]) { + acc[assetSymbol].amount += amount + } else { + acc[assetSymbol] = { + ...combinedAssetAmount, + } } return acc }, {}) From 45a2a1fbd30e16e3025068e3ed532334a30a3f7c Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Fri, 2 Dec 2022 09:35:12 +0100 Subject: [PATCH 18/19] Add a new RPC url for BSC --- background/constants/networks.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/background/constants/networks.ts b/background/constants/networks.ts index c30895ed4a..95ee29ee76 100644 --- a/background/constants/networks.ts +++ b/background/constants/networks.ts @@ -157,7 +157,10 @@ export const CHAIN_ID_TO_RPC_URLS: { "https://api.avax.network/ext/bc/C/rpc", "https://rpc.ankr.com/avalanche", ], - [BINANCE_SMART_CHAIN.chainID]: ["https://rpc.ankr.com/bsc"], + [BINANCE_SMART_CHAIN.chainID]: [ + "https://rpc.ankr.com/bsc", + "https://bsc-dataseed.binance.org", + ], } /** From 6cd98f5924b686e4b573f0e4b585f8805a5698b8 Mon Sep 17 00:00:00 2001 From: Karolina Kosiorowska Date: Mon, 5 Dec 2022 10:39:42 +0100 Subject: [PATCH 19/19] Rename BNB Smart Chain to BNB Chain --- background/constants/networks.ts | 2 +- ui/components/TopMenu/TopMenuProtocolSwitcher.tsx | 1 + ...rtchain-square@2x.png => bnbchain-square@2x.png} | Bin .../{bnbsmartchain@2x.png => bnbchain@2x.png} | Bin 4 files changed, 2 insertions(+), 1 deletion(-) rename ui/public/images/networks/{bnbsmartchain-square@2x.png => bnbchain-square@2x.png} (100%) rename ui/public/images/networks/{bnbsmartchain@2x.png => bnbchain@2x.png} (100%) diff --git a/background/constants/networks.ts b/background/constants/networks.ts index 95ee29ee76..f119029d64 100644 --- a/background/constants/networks.ts +++ b/background/constants/networks.ts @@ -42,7 +42,7 @@ export const AVALANCHE: EVMNetwork = { } export const BINANCE_SMART_CHAIN: EVMNetwork = { - name: "BNB Smart Chain", + name: "BNB Chain", baseAsset: BNB, chainID: "56", family: "EVM", diff --git a/ui/components/TopMenu/TopMenuProtocolSwitcher.tsx b/ui/components/TopMenu/TopMenuProtocolSwitcher.tsx index 5ea711f5ac..45860711d1 100644 --- a/ui/components/TopMenu/TopMenuProtocolSwitcher.tsx +++ b/ui/components/TopMenu/TopMenuProtocolSwitcher.tsx @@ -24,6 +24,7 @@ export default function TopMenuProtocolSwitcher({ display: flex; align-items: center; user-select: none; + white-space: nowrap; } button:hover { color: #fff; diff --git a/ui/public/images/networks/bnbsmartchain-square@2x.png b/ui/public/images/networks/bnbchain-square@2x.png similarity index 100% rename from ui/public/images/networks/bnbsmartchain-square@2x.png rename to ui/public/images/networks/bnbchain-square@2x.png diff --git a/ui/public/images/networks/bnbsmartchain@2x.png b/ui/public/images/networks/bnbchain@2x.png similarity index 100% rename from ui/public/images/networks/bnbsmartchain@2x.png rename to ui/public/images/networks/bnbchain@2x.png