chore(wallet): add opensea link to collectible overview cta (#19579)

This commit is contained in:
Jamie Caprani 2024-04-29 18:09:36 +02:00 committed by GitHub
parent 42e407fbcf
commit c00eb0d539
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 279 additions and 128 deletions

View File

@ -35,6 +35,9 @@
(def arbitrum-sepolia-chain-explorer-link "https://sepolia.arbiscan.io/address/") (def arbitrum-sepolia-chain-explorer-link "https://sepolia.arbiscan.io/address/")
(def goerli-chain-explorer-link "https://goerli.etherscan.io/address/") (def goerli-chain-explorer-link "https://goerli.etherscan.io/address/")
(def optimism-goerli-chain-explorer-link "https://goerli-optimistic.etherscan.io/address/") (def optimism-goerli-chain-explorer-link "https://goerli-optimistic.etherscan.io/address/")
(def opensea-link "https://opensea.io")
(def opensea-tesnet-link "https://testnets.opensea.io")
(def opensea-api-key OPENSEA_API_KEY) (def opensea-api-key OPENSEA_API_KEY)
(def bootnodes-settings-enabled? (enabled? (get-config :BOOTNODES_SETTINGS_ENABLED "1"))) (def bootnodes-settings-enabled? (enabled? (get-config :BOOTNODES_SETTINGS_ENABLED "1")))
(def mailserver-confirmations-enabled? (enabled? (get-config :MAILSERVER_CONFIRMATIONS_ENABLED))) (def mailserver-confirmations-enabled? (enabled? (get-config :MAILSERVER_CONFIRMATIONS_ENABLED)))

View File

@ -436,6 +436,15 @@
(def ^:const optimism-goerli-chain-id 420) (def ^:const optimism-goerli-chain-id 420)
(def ^:const optimism-sepolia-chain-id 11155420) (def ^:const optimism-sepolia-chain-id 11155420)
(def opensea-url-names
{:ethereum "ethereum"
:sepolia "sepolia"
:goerli "goerli"})
(def ^:const ethereum "ethereum")
(def ^:const sepolia "sepolia")
(def ^:const goerli "goerli")
(def ^:const mainnet-chain-ids (def ^:const mainnet-chain-ids
#{ethereum-mainnet-chain-id arbitrum-mainnet-chain-id optimism-mainnet-chain-id}) #{ethereum-mainnet-chain-id arbitrum-mainnet-chain-id optimism-mainnet-chain-id})

View File

@ -9,6 +9,7 @@
[status-im.contexts.shell.share.style :as style] [status-im.contexts.shell.share.style :as style]
[status-im.contexts.shell.share.wallet.style :as wallet-style] [status-im.contexts.shell.share.wallet.style :as wallet-style]
[status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.common.utils.networks :as network-utils]
[status-im.contexts.wallet.sheets.network-preferences.view :as network-preferences] [status-im.contexts.wallet.sheets.network-preferences.view :as network-preferences]
[utils.i18n :as i18n] [utils.i18n :as i18n]
[utils.image-server :as image-server] [utils.image-server :as image-server]
@ -46,7 +47,7 @@
:button-label (i18n/label :t/display) :button-label (i18n/label :t/display)
:on-save (fn [chain-ids] :on-save (fn [chain-ids]
(rf/dispatch [:hide-bottom-sheet]) (rf/dispatch [:hide-bottom-sheet])
(reset! selected-networks (map #(get utils/id->network %) (reset! selected-networks (map #(get network-utils/id->network %)
chain-ids)))}])}])) chain-ids)))}])}]))
(defn- wallet-qr-code-item (defn- wallet-qr-code-item

View File

@ -8,6 +8,7 @@
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.wallet.account.share-address.style :as style] [status-im.contexts.wallet.account.share-address.style :as style]
[status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.common.utils.networks :as network-utils]
[status-im.contexts.wallet.sheets.network-preferences.view :as network-preferences] [status-im.contexts.wallet.sheets.network-preferences.view :as network-preferences]
[utils.i18n :as i18n] [utils.i18n :as i18n]
[utils.image-server :as image-server] [utils.image-server :as image-server]
@ -34,7 +35,7 @@
[selected-networks] [selected-networks]
(let [on-save (fn [chain-ids] (let [on-save (fn [chain-ids]
(rf/dispatch [:hide-bottom-sheet]) (rf/dispatch [:hide-bottom-sheet])
(reset! selected-networks (map utils/id->network chain-ids))) (reset! selected-networks (map network-utils/id->network chain-ids)))
sheet-content (fn [] sheet-content (fn []
[network-preferences/view [network-preferences/view
{:blur? true {:blur? true

View File

@ -1,6 +1,6 @@
(ns status-im.contexts.wallet.add-account.add-address-to-watch.events (ns status-im.contexts.wallet.add-account.add-address-to-watch.events
(:require [clojure.string :as string] (:require [clojure.string :as string]
[status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.common.utils.networks :as network-utils]
[taoensso.timbre :as log] [taoensso.timbre :as log]
[utils.re-frame :as rf])) [utils.re-frame :as rf]))
@ -35,7 +35,7 @@
:wallet/get-address-details :wallet/get-address-details
(fn [{db :db} [address-or-ens]] (fn [{db :db} [address-or-ens]]
(let [ens? (string/includes? address-or-ens ".") (let [ens? (string/includes? address-or-ens ".")
chain-id (utils/network->chain-id db :mainnet) chain-id (network-utils/network->chain-id db :mainnet)
request-params [chain-id address-or-ens]] request-params [chain-id address-or-ens]]
{:db (-> db {:db (-> db
(assoc-in [:wallet :ui :add-address-to-watch :activity-state] :scanning) (assoc-in [:wallet :ui :add-address-to-watch :activity-state] :scanning)

View File

@ -1,5 +1,6 @@
(ns status-im.contexts.wallet.collectible.events (ns status-im.contexts.wallet.collectible.events
(:require [camel-snake-kebab.extras :as cske] (:require [camel-snake-kebab.extras :as cske]
[status-im.contexts.wallet.collectible.utils :as collectible-utils]
[taoensso.timbre :as log] [taoensso.timbre :as log]
[utils.ethereum.chain :as chain] [utils.ethereum.chain :as chain]
[utils.re-frame :as rf] [utils.re-frame :as rf]
@ -204,3 +205,16 @@
[:wallet/trigger-share-collectible [:wallet/trigger-share-collectible
{:title title {:title title
:uri uri}]]]}))) :uri uri}]]]})))
(rf/reg-event-fx
:wallet/navigate-to-opensea
(fn [{:keys [db]} [chain-id token-id contract-address]]
{:fx [[:dispatch [:hide-bottom-sheet]]
[:dispatch
[:browser.ui/open-url
(collectible-utils/get-opensea-collectible-url
{:chain-id chain-id
:token-id token-id
:contract-address contract-address
:test-networks-enabled? (get-in db [:profile/profile :test-networks-enabled?])
:is-goerli-enabled? (get-in db [:profile/profile :is-goerli-enabled?])})]]]}))

View File

@ -1,4 +1,7 @@
(ns status-im.contexts.wallet.collectible.utils) (ns status-im.contexts.wallet.collectible.utils
(:require [status-im.config :as config]
[status-im.constants :as constants]
[status-im.contexts.wallet.common.utils.networks :as network-utils]))
(defn collectible-balance (defn collectible-balance
[collectible] [collectible]
@ -37,3 +40,41 @@
(defn collectible-owned-counter (defn collectible-owned-counter
[total] [total]
(when (> total 1) (str "x" total))) (when (> total 1) (str "x" total)))
(defn- get-opensea-network-name
[chain-id test-networks-enabled? is-goerli-enabled?]
(let [network-kw (network-utils/id->network chain-id)
network-name (name network-kw)
mainnet? (= :mainnet network-kw)]
(cond (and test-networks-enabled? is-goerli-enabled? mainnet?)
(:goerli constants/opensea-url-names)
(and test-networks-enabled? is-goerli-enabled?)
(str network-name "-" (:goerli constants/opensea-url-names))
(and test-networks-enabled? mainnet?)
(:sepolia constants/opensea-url-names)
test-networks-enabled?
(str network-name "-" (:sepolia constants/opensea-url-names))
mainnet?
(:ethereum constants/opensea-url-names)
:else
network-name)))
(defn- get-opensea-base-url
[test-networks-enabled?]
(cond
test-networks-enabled? config/opensea-tesnet-link
:else config/opensea-link))
(defn get-opensea-collectible-url
[{:keys [chain-id token-id contract-address
test-networks-enabled? is-goerli-enabled?]}]
(let [base-link (get-opensea-base-url test-networks-enabled?)
opensea-network-name (get-opensea-network-name chain-id
test-networks-enabled?
is-goerli-enabled?)]
(str base-link "/assets/" opensea-network-name "/" contract-address "/" token-id)))

View File

@ -0,0 +1,70 @@
(ns status-im.contexts.wallet.collectible.utils-test
(:require
[cljs.test :refer [deftest is testing]]
[status-im.constants :as constants]
[status-im.contexts.wallet.collectible.utils :as utils]))
(def token-id "0xT")
(def contract-address "0xC")
(deftest test-network->chain-id
(testing "get-opensea-collectible-url mainnet"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/ethereum-mainnet-chain-id
:contract-address contract-address
:token-id token-id})
"https://opensea.io/assets/ethereum/0xC/0xT")))
(testing "get-opensea-collectible-url mainnet arbitrum"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/arbitrum-mainnet-chain-id
:contract-address contract-address
:token-id token-id})
"https://opensea.io/assets/arbitrum/0xC/0xT")))
(testing "get-opensea-collectible-url mainnet optimism"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/optimism-mainnet-chain-id
:contract-address contract-address
:token-id token-id})
"https://opensea.io/assets/optimism/0xC/0xT")))
(testing "get-opensea-collectible-url sepolia"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/ethereum-sepolia-chain-id
:contract-address contract-address
:token-id token-id
:test-networks-enabled? true})
"https://testnets.opensea.io/assets/sepolia/0xC/0xT")))
(testing "get-opensea-collectible-url sepolia arbitrum"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/arbitrum-sepolia-chain-id
:contract-address contract-address
:token-id token-id
:test-networks-enabled? true})
"https://testnets.opensea.io/assets/arbitrum-sepolia/0xC/0xT")))
(testing "get-opensea-collectible-url sepolia optimism"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/optimism-sepolia-chain-id
:contract-address contract-address
:token-id token-id
:test-networks-enabled? true})
"https://testnets.opensea.io/assets/optimism-sepolia/0xC/0xT")))
(testing "get-opensea-collectible-url goerli"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/ethereum-goerli-chain-id
:contract-address contract-address
:token-id token-id
:test-networks-enabled? true
:is-goerli-enabled? true})
"https://testnets.opensea.io/assets/goerli/0xC/0xT")))
(testing "get-opensea-collectible-url goerli arbitrum"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/arbitrum-goerli-chain-id
:contract-address contract-address
:token-id token-id
:test-networks-enabled? true
:is-goerli-enabled? true})
"https://testnets.opensea.io/assets/arbitrum-goerli/0xC/0xT")))
(testing "get-opensea-collectible-url goerli optimism"
(is (= (utils/get-opensea-collectible-url {:chain-id constants/optimism-goerli-chain-id
:contract-address contract-address
:token-id token-id
:test-networks-enabled? true
:is-goerli-enabled? true})
"https://testnets.opensea.io/assets/optimism-goerli/0xC/0xT"))))

View File

@ -28,7 +28,7 @@
collection-name]]]) collection-name]]])
(defn cta-buttons (defn cta-buttons
[] [chain-id token-id contract-address]
(let [theme (quo.theme/use-theme)] (let [theme (quo.theme/use-theme)]
[rn/view {:style style/buttons-container} [rn/view {:style style/buttons-container}
[quo/button [quo/button
@ -41,6 +41,9 @@
{:container-style style/opensea-button {:container-style style/opensea-button
:type :outline :type :outline
:size 40 :size 40
:on-press (fn []
(rf/dispatch [:wallet/navigate-to-opensea chain-id token-id
contract-address]))
:icon-left :i/opensea :icon-left :i/opensea
:icon-left-color (colors/theme-colors colors/neutral-100 colors/neutral-40 theme) :icon-left-color (colors/theme-colors colors/neutral-100 colors/neutral-40 theme)
:icon-right :i/external :icon-right :i/external
@ -71,6 +74,8 @@
{svg? :svg? {svg? :svg?
preview-uri :uri} preview-url preview-uri :uri} preview-url
token-id (:token-id id) token-id (:token-id id)
chain-id (get-in id [:contract-id :chain-id])
contract-address (get-in id [:contract-id :address])
{collection-image :image-url {collection-image :image-url
collection-name :name} collection-data collection-name :name} collection-data
{collectible-name :name} collectible-data {collectible-name :name} collectible-data
@ -123,7 +128,7 @@
{:name collectible-name {:name collectible-name
:image preview-uri}])}])}])))}] :image preview-uri}])}])}])))}]
[header collectible-name collection-name collection-image] [header collectible-name collection-name collection-image]
[cta-buttons] [cta-buttons chain-id token-id contract-address]
[quo/tabs [quo/tabs
{:size 32 {:size 32
:style style/tabs :style style/tabs

View File

@ -159,15 +159,6 @@
{}) {})
vals)) vals))
(defn network-list
[{:keys [balances-per-chain]} networks]
(into #{}
(mapv (fn [chain-id]
(first (filter #(or (= (:chain-id %) chain-id)
(= (:related-chain-id %) chain-id))
networks)))
(keys balances-per-chain))))
(defn get-wallet-qr (defn get-wallet-qr
[{:keys [wallet-type selected-networks address]}] [{:keys [wallet-type selected-networks address]}]
(if (= wallet-type :multichain) (if (= wallet-type :multichain)
@ -177,61 +168,6 @@
(str $ address)) (str $ address))
address)) address))
(def id->network
{constants/ethereum-mainnet-chain-id constants/mainnet-network-name
constants/ethereum-goerli-chain-id constants/mainnet-network-name
constants/ethereum-sepolia-chain-id constants/mainnet-network-name
constants/optimism-mainnet-chain-id constants/optimism-network-name
constants/optimism-goerli-chain-id constants/optimism-network-name
constants/optimism-sepolia-chain-id constants/optimism-network-name
constants/arbitrum-mainnet-chain-id constants/arbitrum-network-name
constants/arbitrum-goerli-chain-id constants/arbitrum-network-name
constants/arbitrum-sepolia-chain-id constants/arbitrum-network-name})
(defn- get-chain-id
[{:keys [mainnet-chain-id sepolia-chain-id goerli-chain-id testnet-enabled? goerli-enabled?]}]
(cond
(and testnet-enabled? goerli-enabled?)
goerli-chain-id
testnet-enabled?
sepolia-chain-id
:else
mainnet-chain-id))
(defn network->chain-id
([db network]
(let [{:keys [test-networks-enabled? is-goerli-enabled?]} (:profile/profile db)]
(network->chain-id {:network network
:testnet-enabled? test-networks-enabled?
:goerli-enabled? is-goerli-enabled?})))
([{:keys [network testnet-enabled? goerli-enabled?]}]
(condp contains? (keyword network)
#{constants/mainnet-network-name (keyword constants/mainnet-short-name)}
(get-chain-id
{:mainnet-chain-id constants/ethereum-mainnet-chain-id
:sepolia-chain-id constants/ethereum-sepolia-chain-id
:goerli-chain-id constants/ethereum-goerli-chain-id
:testnet-enabled? testnet-enabled?
:goerli-enabled? goerli-enabled?})
#{constants/optimism-network-name (keyword constants/optimism-short-name)}
(get-chain-id
{:mainnet-chain-id constants/optimism-mainnet-chain-id
:sepolia-chain-id constants/optimism-sepolia-chain-id
:goerli-chain-id constants/optimism-goerli-chain-id
:testnet-enabled? testnet-enabled?
:goerli-enabled? goerli-enabled?})
#{constants/arbitrum-network-name (keyword constants/arbitrum-short-name)}
(get-chain-id
{:mainnet-chain-id constants/arbitrum-mainnet-chain-id
:sepolia-chain-id constants/arbitrum-sepolia-chain-id
:goerli-chain-id constants/arbitrum-goerli-chain-id
:testnet-enabled? testnet-enabled?
:goerli-enabled? goerli-enabled?}))))
(defn get-standard-fiat-format (defn get-standard-fiat-format
[crypto-value currency-symbol fiat-value] [crypto-value currency-symbol fiat-value]
(if (string/includes? crypto-value "<") (if (string/includes? crypto-value "<")
@ -310,18 +246,6 @@
(assoc :label :text (assoc :label :text
:label-props label-props))) :label-props label-props)))
(defn get-default-chain-ids-by-mode
[{:keys [test-networks-enabled? is-goerli-enabled?]}]
(cond
(and test-networks-enabled? is-goerli-enabled?)
constants/goerli-chain-ids
test-networks-enabled?
constants/sepolia-chain-ids
:else
constants/mainnet-chain-ids))
(defn filter-tokens-in-chains (defn filter-tokens-in-chains
[tokens chain-ids] [tokens chain-ids]
(map #(update % :balances-per-chain select-keys chain-ids) tokens)) (map #(update % :balances-per-chain select-keys chain-ids) tokens))

View File

@ -1,7 +1,83 @@
(ns status-im.contexts.wallet.common.utils.networks (ns status-im.contexts.wallet.common.utils.networks
(:require [clojure.string :as string] (:require [clojure.string :as string]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.wallet.common.utils :as utils])) [utils.number]))
(def id->network
{constants/ethereum-mainnet-chain-id constants/mainnet-network-name
constants/ethereum-goerli-chain-id constants/mainnet-network-name
constants/ethereum-sepolia-chain-id constants/mainnet-network-name
constants/optimism-mainnet-chain-id constants/optimism-network-name
constants/optimism-goerli-chain-id constants/optimism-network-name
constants/optimism-sepolia-chain-id constants/optimism-network-name
constants/arbitrum-mainnet-chain-id constants/arbitrum-network-name
constants/arbitrum-goerli-chain-id constants/arbitrum-network-name
constants/arbitrum-sepolia-chain-id constants/arbitrum-network-name})
(defn- get-chain-id
[{:keys [mainnet-chain-id sepolia-chain-id goerli-chain-id testnet-enabled? goerli-enabled?]}]
(cond
(and testnet-enabled? goerli-enabled?)
goerli-chain-id
testnet-enabled?
sepolia-chain-id
:else
mainnet-chain-id))
(defn network->chain-id
([db network]
(let [{:keys [test-networks-enabled? is-goerli-enabled?]} (:profile/profile db)]
(network->chain-id {:network network
:testnet-enabled? test-networks-enabled?
:goerli-enabled? is-goerli-enabled?})))
([{:keys [network testnet-enabled? goerli-enabled?]}]
(condp contains? (keyword network)
#{constants/mainnet-network-name (keyword constants/mainnet-short-name)}
(get-chain-id
{:mainnet-chain-id constants/ethereum-mainnet-chain-id
:sepolia-chain-id constants/ethereum-sepolia-chain-id
:goerli-chain-id constants/ethereum-goerli-chain-id
:testnet-enabled? testnet-enabled?
:goerli-enabled? goerli-enabled?})
#{constants/optimism-network-name (keyword constants/optimism-short-name)}
(get-chain-id
{:mainnet-chain-id constants/optimism-mainnet-chain-id
:sepolia-chain-id constants/optimism-sepolia-chain-id
:goerli-chain-id constants/optimism-goerli-chain-id
:testnet-enabled? testnet-enabled?
:goerli-enabled? goerli-enabled?})
#{constants/arbitrum-network-name (keyword constants/arbitrum-short-name)}
(get-chain-id
{:mainnet-chain-id constants/arbitrum-mainnet-chain-id
:sepolia-chain-id constants/arbitrum-sepolia-chain-id
:goerli-chain-id constants/arbitrum-goerli-chain-id
:testnet-enabled? testnet-enabled?
:goerli-enabled? goerli-enabled?}))))
(defn network-list
[{:keys [balances-per-chain]} networks]
(into #{}
(mapv (fn [chain-id]
(first (filter #(or (= (:chain-id %) chain-id)
(= (:related-chain-id %) chain-id))
networks)))
(keys balances-per-chain))))
(defn get-default-chain-ids-by-mode
[{:keys [test-networks-enabled? is-goerli-enabled?]}]
(cond
(and test-networks-enabled? is-goerli-enabled?)
constants/goerli-chain-ids
test-networks-enabled?
constants/sepolia-chain-ids
:else
constants/mainnet-chain-ids))
(defn resolve-receiver-networks (defn resolve-receiver-networks
[{:keys [prefix testnet-enabled? goerli-enabled?]}] [{:keys [prefix testnet-enabled? goerli-enabled?]}]
@ -12,7 +88,7 @@
(->> prefix-seq (->> prefix-seq
(remove string/blank?) (remove string/blank?)
(mapv (mapv
#(utils/network->chain-id #(network->chain-id
{:network % {:network %
:testnet-enabled? testnet-enabled? :testnet-enabled? testnet-enabled?
:goerli-enabled? goerli-enabled?}))))) :goerli-enabled? goerli-enabled?})))))

View File

@ -0,0 +1,22 @@
(ns status-im.contexts.wallet.common.utils.networks-test
(:require
[cljs.test :refer [deftest is testing]]
[status-im.constants :as constants]
[status-im.contexts.wallet.common.utils.networks :as utils]))
(deftest test-network->chain-id
(testing "network->chain-id function"
(is (= (utils/network->chain-id {:network :mainnet :testnet-enabled? false :goerli-enabled? false})
constants/ethereum-mainnet-chain-id))
(is (= (utils/network->chain-id {:network :eth :testnet-enabled? true :goerli-enabled? false})
constants/ethereum-sepolia-chain-id))
(is (= (utils/network->chain-id {:network "optimism" :testnet-enabled? true :goerli-enabled? false})
constants/optimism-sepolia-chain-id))
(is (= (utils/network->chain-id {:network "opt" :testnet-enabled? false :goerli-enabled? true})
constants/optimism-mainnet-chain-id))
(is (= (utils/network->chain-id {:network :opt :testnet-enabled? true :goerli-enabled? true})
constants/optimism-goerli-chain-id))
(is (= (utils/network->chain-id {:network :arb1 :testnet-enabled? false :goerli-enabled? false})
constants/arbitrum-mainnet-chain-id))
(is (= (utils/network->chain-id {:network :arbitrum :testnet-enabled? true :goerli-enabled? false})
constants/arbitrum-sepolia-chain-id))))

View File

@ -1,7 +1,6 @@
(ns status-im.contexts.wallet.common.utils-test (ns status-im.contexts.wallet.common.utils-test
(:require (:require
[cljs.test :refer [deftest is testing]] [cljs.test :refer [deftest is testing]]
[status-im.constants :as constants]
[status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.common.utils :as utils]
[utils.money :as money])) [utils.money :as money]))
@ -116,20 +115,3 @@
(is (= (utils/prettify-percentage-change 1.113454) "1.11")) (is (= (utils/prettify-percentage-change 1.113454) "1.11"))
(is (= (utils/prettify-percentage-change -0.35) "0.35")) (is (= (utils/prettify-percentage-change -0.35) "0.35"))
(is (= (utils/prettify-percentage-change -0.78234) "0.78")))) (is (= (utils/prettify-percentage-change -0.78234) "0.78"))))
(deftest test-network->chain-id
(testing "network->chain-id function"
(is (= (utils/network->chain-id {:network :mainnet :testnet-enabled? false :goerli-enabled? false})
constants/ethereum-mainnet-chain-id))
(is (= (utils/network->chain-id {:network :eth :testnet-enabled? true :goerli-enabled? false})
constants/ethereum-sepolia-chain-id))
(is (= (utils/network->chain-id {:network "optimism" :testnet-enabled? true :goerli-enabled? false})
constants/optimism-sepolia-chain-id))
(is (= (utils/network->chain-id {:network "opt" :testnet-enabled? false :goerli-enabled? true})
constants/optimism-mainnet-chain-id))
(is (= (utils/network->chain-id {:network :opt :testnet-enabled? true :goerli-enabled? true})
constants/optimism-goerli-chain-id))
(is (= (utils/network->chain-id {:network :arb1 :testnet-enabled? false :goerli-enabled? false})
constants/arbitrum-mainnet-chain-id))
(is (= (utils/network->chain-id {:network :arbitrum :testnet-enabled? true :goerli-enabled? false})
constants/arbitrum-sepolia-chain-id))))

View File

@ -4,7 +4,7 @@
[react-native.background-timer :as background-timer] [react-native.background-timer :as background-timer]
[react-native.platform :as platform] [react-native.platform :as platform]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.common.utils.networks :as network-utils]
[status-im.contexts.wallet.data-store :as data-store] [status-im.contexts.wallet.data-store :as data-store]
[status-im.contexts.wallet.db :as db] [status-im.contexts.wallet.db :as db]
[status-im.contexts.wallet.item-types :as item-types] [status-im.contexts.wallet.item-types :as item-types]
@ -301,7 +301,7 @@
(let [ens (if (string/includes? input ".") (let [ens (if (string/includes? input ".")
input input
(str input domain)) (str input domain))
chain-id (utils/network->chain-id db :mainnet)] chain-id (network-utils/network->chain-id db :mainnet)]
{:fx [[:json-rpc/call {:fx [[:json-rpc/call
[{:method "ens_addressOf" [{:method "ens_addressOf"
:params [chain-id ens] :params [chain-id ens]
@ -425,13 +425,13 @@
keys) keys)
test-networks-enabled? (get-in db [:profile/profile :test-networks-enabled?]) test-networks-enabled? (get-in db [:profile/profile :test-networks-enabled?])
is-goerli-enabled? (get-in db [:profile/profile :is-goerli-enabled?]) is-goerli-enabled? (get-in db [:profile/profile :is-goerli-enabled?])
chain-ids-by-mode (utils/get-default-chain-ids-by-mode chain-ids-by-mode (network-utils/get-default-chain-ids-by-mode
{:test-networks-enabled? test-networks-enabled? {:test-networks-enabled? test-networks-enabled?
:is-goerli-enabled? is-goerli-enabled?}) :is-goerli-enabled? is-goerli-enabled?})
chains-filtered-by-mode (remove #(not (contains? chain-ids-by-mode %)) down-chain-ids) chains-filtered-by-mode (remove #(not (contains? chain-ids-by-mode %)) down-chain-ids)
chains-down? (seq chains-filtered-by-mode) chains-down? (seq chains-filtered-by-mode)
chain-names (when chains-down? chain-names (when chains-down?
(->> (map #(-> (utils/id->network %) (->> (map #(-> (network-utils/id->network %)
name name
string/capitalize) string/capitalize)
chains-filtered-by-mode) chains-filtered-by-mode)

View File

@ -7,7 +7,7 @@
[react-native.core :as rn] [react-native.core :as rn]
[reagent.core :as reagent] [reagent.core :as reagent]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.common.utils.networks :as networks-utils]
[status-im.contexts.wallet.common.utils.send :as send-utils] [status-im.contexts.wallet.common.utils.send :as send-utils]
[status-im.contexts.wallet.send.routes.style :as style] [status-im.contexts.wallet.send.routes.style :as style]
[utils.debounce :as debounce] [utils.debounce :as debounce]
@ -35,14 +35,15 @@
(defn- find-network-link-insertion-index (defn- find-network-link-insertion-index
[network-links chain-id loading-suggested-routes?] [network-links chain-id loading-suggested-routes?]
(let [network (utils/id->network chain-id) (let [network (networks-utils/id->network chain-id)
inserted-network-link-priority-score (network-priority-score network)] inserted-network-link-priority-score (network-priority-score network)]
(or (->> network-links (or (->> network-links
(keep-indexed (fn [idx network-link] (keep-indexed (fn [idx network-link]
(let [network-link (utils/id->network (if loading-suggested-routes? (let [network-link (networks-utils/id->network (if loading-suggested-routes?
network-link network-link
(get-in network-link (get-in network-link
[:from :chain-id])))] [:from
:chain-id])))]
(when (> (network-priority-score network-link) (when (> (network-priority-score network-link)
inserted-network-link-priority-score) inserted-network-link-priority-score)
idx)))) idx))))
@ -51,14 +52,15 @@
(defn- add-disabled-networks (defn- add-disabled-networks
[network-links disabled-from-networks loading-suggested-routes?] [network-links disabled-from-networks loading-suggested-routes?]
(let [sorted-networks (sort-by (comp network-priority-score utils/id->network) disabled-from-networks)] (let [sorted-networks (sort-by (comp network-priority-score networks-utils/id->network)
disabled-from-networks)]
(reduce (fn [acc-network-links chain-id] (reduce (fn [acc-network-links chain-id]
(let [index (find-network-link-insertion-index acc-network-links (let [index (find-network-link-insertion-index acc-network-links
chain-id chain-id
loading-suggested-routes?) loading-suggested-routes?)
disabled-network-link {:status :disabled disabled-network-link {:status :disabled
:chain-id chain-id :chain-id chain-id
:network (utils/id->network chain-id)}] :network (networks-utils/id->network chain-id)}]
(vector-utils/insert-element-at acc-network-links disabled-network-link index))) (vector-utils/insert-element-at acc-network-links disabled-network-link index)))
network-links network-links
sorted-networks))) sorted-networks)))
@ -186,20 +188,20 @@
:to-chain-id (or to-chain-id (:chain-id item)) :to-chain-id (or to-chain-id (:chain-id item))
:from-network (cond (and loading-suggested-routes? :from-network (cond (and loading-suggested-routes?
(not disabled-network?)) (not disabled-network?))
(utils/id->network item) (networks-utils/id->network item)
disabled-network? disabled-network?
(utils/id->network (:chain-id (networks-utils/id->network (:chain-id
item)) item))
:else :else
(utils/id->network from-chain-id)) (networks-utils/id->network from-chain-id))
:to-network (cond (and loading-suggested-routes? :to-network (cond (and loading-suggested-routes?
(not disabled-network?)) (not disabled-network?))
(utils/id->network item) (networks-utils/id->network item)
disabled-network? disabled-network?
(utils/id->network (:chain-id (networks-utils/id->network (:chain-id
item)) item))
:else :else
(utils/id->network to-chain-id)) (networks-utils/id->network to-chain-id))
:on-press-from-network on-press-from-network :on-press-from-network on-press-from-network
:on-press-to-network on-press-to-network}])) :on-press-to-network on-press-to-network}]))

View File

@ -8,7 +8,7 @@
[react-native.safe-area :as safe-area] [react-native.safe-area :as safe-area]
[status-im.common.floating-button-page.view :as floating-button-page] [status-im.common.floating-button-page.view :as floating-button-page]
[status-im.common.standard-authentication.core :as standard-auth] [status-im.common.standard-authentication.core :as standard-auth]
[status-im.contexts.wallet.common.utils :as wallet-utils] [status-im.contexts.wallet.common.utils.networks :as network-utils]
[status-im.contexts.wallet.send.transaction-confirmation.style :as style] [status-im.contexts.wallet.send.transaction-confirmation.style :as style]
[utils.i18n :as i18n] [utils.i18n :as i18n]
[utils.re-frame :as rf] [utils.re-frame :as rf]
@ -129,7 +129,7 @@
(let [network-values (let [network-values
(reduce-kv (reduce-kv
(fn [acc chain-id amount] (fn [acc chain-id amount]
(let [network-name (wallet-utils/id->network chain-id)] (let [network-name (network-utils/id->network chain-id)]
(assoc acc (assoc acc
(if (= network-name :mainnet) :ethereum network-name) (if (= network-name :mainnet) :ethereum network-name)
{:amount amount :token-symbol token-display-name}))) {:amount amount :token-symbol token-display-name})))

View File

@ -2,6 +2,7 @@
(:require [clojure.string :as string] (:require [clojure.string :as string]
[re-frame.core :as rf] [re-frame.core :as rf]
[status-im.contexts.wallet.common.utils :as utils] [status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.common.utils.networks :as network-utils]
[status-im.subs.wallet.add-account.address-to-watch] [status-im.subs.wallet.add-account.address-to-watch]
[utils.number])) [utils.number]))
@ -136,7 +137,7 @@
:<- [:profile/test-networks-enabled?] :<- [:profile/test-networks-enabled?]
:<- [:profile/is-goerli-enabled?] :<- [:profile/is-goerli-enabled?]
(fn [[selected-networks testnet-enabled? goerli-enabled?]] (fn [[selected-networks testnet-enabled? goerli-enabled?]]
(set (map #(utils/network->chain-id (set (map #(network-utils/network->chain-id
{:network % {:network %
:testnet-enabled? testnet-enabled? :testnet-enabled? testnet-enabled?
:goerli-enabled? goerli-enabled?}) :goerli-enabled? goerli-enabled?})
@ -236,7 +237,7 @@
(fn [[account networks] [_ query]] (fn [[account networks] [_ query]]
(let [tokens (map (fn [token] (let [tokens (map (fn [token]
(assoc token (assoc token
:networks (utils/network-list token networks) :networks (network-utils/network-list token networks)
:total-balance (utils/calculate-total-token-balance token))) :total-balance (utils/calculate-total-token-balance token)))
(:tokens account)) (:tokens account))
sorted-tokens (sort-by :name compare tokens)] sorted-tokens (sort-by :name compare tokens)]
@ -254,7 +255,7 @@
(fn [[account networks] [_ token-symbol]] (fn [[account networks] [_ token-symbol]]
(let [tokens (map (fn [token] (let [tokens (map (fn [token]
(assoc token (assoc token
:networks (utils/network-list token networks) :networks (network-utils/network-list token networks)
:total-balance (utils/calculate-total-token-balance token))) :total-balance (utils/calculate-total-token-balance token)))
(:tokens account)) (:tokens account))
token (first (filter #(= (string/lower-case (:symbol %)) token (first (filter #(= (string/lower-case (:symbol %))