🥅 Filter connected dapps based on testnet mode, reject proposals and requests gracefully (#20799)
* 🥅 Filter connected dapps based on testnet mode - Fixes #20794 * 🥅 Remove map, just filter * 💿 Rebase * ❌ Remove greedy fetch * 🙅♀️ Properly reject proposals and requests * 🎗️ Remove newline and move `set` - `set` was applied at the wrong place here * ✏️ Address review comments * 👀 Read proposal to reject from state * ◀️ Bring back network filtering * 🧹 Cleanup * ✏️ Move comment around * 🎣 Use filter operable accounts helper * ➕ Add back events deleted during rebase * 🧰 Fix Issue 2, Testnet sessions not visible * 🖊️ Fix lint * 🔗 Make testnet filtering more explicit * 🥢 Use union instead of two subsets call * ✏️ Fix lint * 🔇 Undo changes that creeped in an unrelated ns
This commit is contained in:
parent
2e9fa22e4f
commit
a45991b6dc
|
@ -291,6 +291,7 @@
|
||||||
(def ^:const wallet-connect-session-delete-event "session_delete")
|
(def ^:const wallet-connect-session-delete-event "session_delete")
|
||||||
(def ^:const wallet-connect-user-rejected-error-key "USER_REJECTED")
|
(def ^:const wallet-connect-user-rejected-error-key "USER_REJECTED")
|
||||||
(def ^:const wallet-connect-user-disconnected-reason-key "USER_DISCONNECTED")
|
(def ^:const wallet-connect-user-disconnected-reason-key "USER_DISCONNECTED")
|
||||||
|
(def ^:const wallet-connect-user-rejected-chains-error-key "USER_REJECTED_CHAINS")
|
||||||
|
|
||||||
(def ^:const transaction-pending-type-wallet-connect-transfer "WalletConnectTransfer")
|
(def ^:const transaction-pending-type-wallet-connect-transfer "WalletConnectTransfer")
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
(not watch-only?))
|
(not watch-only?))
|
||||||
{:icon-name :i/dapps
|
{:icon-name :i/dapps
|
||||||
:on-press #(rf/dispatch [:navigate-to :screen/wallet.connected-dapps])})
|
:on-press #(rf/dispatch [:navigate-to :screen/wallet.connected-dapps])})
|
||||||
|
|
||||||
{:content-type :account-switcher
|
{:content-type :account-switcher
|
||||||
:customization-color color
|
:customization-color color
|
||||||
:on-press #(on-dapps-press switcher-type)
|
:on-press #(on-dapps-press switcher-type)
|
||||||
|
|
|
@ -84,10 +84,10 @@
|
||||||
[]
|
[]
|
||||||
(let [{:keys [bottom]} (safe-area/get-insets)
|
(let [{:keys [bottom]} (safe-area/get-insets)
|
||||||
{:keys [color] :as wallet-account} (rf/sub [:wallet/current-viewing-account])
|
{:keys [color] :as wallet-account} (rf/sub [:wallet/current-viewing-account])
|
||||||
|
customization-color (rf/sub [:profile/customization-color])
|
||||||
sessions (rf/sub
|
sessions (rf/sub
|
||||||
[:wallet-connect/sessions-for-current-account])
|
[:wallet-connect/sessions-for-current-account-and-networks])
|
||||||
theme (quo.theme/use-theme)
|
theme (quo.theme/use-theme)]
|
||||||
customization-color (rf/sub [:profile/customization-color])]
|
|
||||||
[rn/view {:flex 1}
|
[rn/view {:flex 1}
|
||||||
[header
|
[header
|
||||||
{:title (i18n/label :t/connected-dapps)
|
{:title (i18n/label :t/connected-dapps)
|
||||||
|
|
|
@ -134,6 +134,7 @@
|
||||||
:iconUrl (get-in session [:peer :metadata :icons 0])
|
:iconUrl (get-in session [:peer :metadata :icons 0])
|
||||||
:url (get-in session [:peer :metadata :url])
|
:url (get-in session [:peer :metadata :url])
|
||||||
:accounts (get-in session [:namespaces :eip155 :accounts])
|
:accounts (get-in session [:namespaces :eip155 :accounts])
|
||||||
|
:chains (get-in session [:namespaces :eip155 :chains])
|
||||||
:disconnected false})
|
:disconnected false})
|
||||||
|
|
||||||
(defn filter-operable-accounts
|
(defn filter-operable-accounts
|
||||||
|
|
|
@ -79,7 +79,6 @@
|
||||||
(if (and (not-empty session-networks) required-networks-supported?)
|
(if (and (not-empty session-networks) required-networks-supported?)
|
||||||
{:db (update db
|
{:db (update db
|
||||||
:wallet-connect/current-proposal assoc
|
:wallet-connect/current-proposal assoc
|
||||||
:response-sent? false
|
|
||||||
:request proposal
|
:request proposal
|
||||||
:session-networks session-networks
|
:session-networks session-networks
|
||||||
:address (or current-viewing-address
|
:address (or current-viewing-address
|
||||||
|
@ -89,23 +88,30 @@
|
||||||
:fx [[:dispatch
|
:fx [[:dispatch
|
||||||
[:open-modal :screen/wallet.wallet-connect-session-proposal]]]}
|
[:open-modal :screen/wallet.wallet-connect-session-proposal]]]}
|
||||||
{:fx [[:dispatch
|
{:fx [[:dispatch
|
||||||
[:wallet-connect/session-networks-unsupported proposal]]]}))))
|
[:wallet-connect/show-session-networks-unsupported-toast proposal]]
|
||||||
|
[:dispatch
|
||||||
|
[:wallet-connect/reject-session-proposal proposal]]]}))))
|
||||||
|
|
||||||
(rf/reg-event-fx
|
(rf/reg-event-fx
|
||||||
:wallet-connect/session-networks-unsupported
|
:wallet-connect/show-session-networks-unsupported-toast
|
||||||
(fn [{:keys [db]} [proposal]]
|
(fn [{:keys [db]} [proposal]]
|
||||||
(let [{:keys [name]} (wallet-connect-core/get-session-dapp-metadata proposal)]
|
(let [{:keys [name url]} (wallet-connect-core/get-session-dapp-metadata proposal)]
|
||||||
{:fx [[:dispatch
|
{:fx [[:dispatch
|
||||||
[:toasts/upsert
|
[:toasts/upsert
|
||||||
{:type :negative
|
{:type :negative
|
||||||
:theme (:theme db)
|
:theme (:theme db)
|
||||||
:text (i18n/label :t/wallet-connect-networks-not-supported {:dapp name})}]]]})))
|
:text (i18n/label :t/wallet-connect-networks-not-supported
|
||||||
|
{:dapp (wallet-connect-core/compute-dapp-name name url)})}]]]})))
|
||||||
|
|
||||||
(rf/reg-event-fx
|
(rf/reg-event-fx
|
||||||
:wallet-connect/on-session-request
|
:wallet-connect/on-session-request
|
||||||
(fn [{:keys [db]} [event]]
|
(fn [{:keys [db]} [event]]
|
||||||
(when (wallet-connect-core/event-should-be-handled? db event)
|
(if (wallet-connect-core/event-should-be-handled? db event)
|
||||||
{:fx [[:dispatch [:wallet-connect/process-session-request event]]]})))
|
{:fx [[:dispatch [:wallet-connect/process-session-request event]]]}
|
||||||
|
{:fx [[:dispatch
|
||||||
|
[:wallet-connect/send-response
|
||||||
|
{:error (wallet-connect/get-sdk-error
|
||||||
|
constants/wallet-connect-user-rejected-chains-error-key)}]]]})))
|
||||||
|
|
||||||
(rf/reg-event-fx
|
(rf/reg-event-fx
|
||||||
:wallet-connect/on-session-delete
|
:wallet-connect/on-session-delete
|
||||||
|
|
|
@ -146,10 +146,25 @@
|
||||||
[:dispatch [:wallet-connect/dismiss-request-modal]]]}))
|
[:dispatch [:wallet-connect/dismiss-request-modal]]]}))
|
||||||
|
|
||||||
(rf/reg-event-fx
|
(rf/reg-event-fx
|
||||||
:wallet-connect/reject-session-proposal
|
:wallet-connect/dismiss-request-modal
|
||||||
(fn [{:keys [db]} _]
|
(fn [{:keys [db]} _]
|
||||||
|
(let [screen (-> db
|
||||||
|
(get-in [:wallet-connect/current-request :event])
|
||||||
|
wallet-connect-core/get-request-method
|
||||||
|
wallet-connect-core/method-to-screen)]
|
||||||
|
{:fx [[:dispatch [:dismiss-modal screen]]]})))
|
||||||
|
|
||||||
|
(rf/reg-event-fx
|
||||||
|
:wallet-connect/finish-session-request
|
||||||
|
(fn [_ [result]]
|
||||||
|
{:fx [[:dispatch [:wallet-connect/send-response {:result result}]]
|
||||||
|
[:dispatch [:wallet-connect/dismiss-request-modal]]]}))
|
||||||
|
|
||||||
|
(rf/reg-event-fx
|
||||||
|
:wallet-connect/reject-session-proposal
|
||||||
|
(fn [{:keys [db]} [proposal]]
|
||||||
(let [web3-wallet (get db :wallet-connect/web3-wallet)
|
(let [web3-wallet (get db :wallet-connect/web3-wallet)
|
||||||
{:keys [request response-sent?]} (:wallet-connect/current-proposal db)]
|
{:keys [request response-sent?]} (or proposal (:wallet-connect/current-proposal db))]
|
||||||
{:fx [(when-not response-sent?
|
{:fx [(when-not response-sent?
|
||||||
[:effects.wallet-connect/reject-session-proposal
|
[:effects.wallet-connect/reject-session-proposal
|
||||||
{:web3-wallet web3-wallet
|
{:web3-wallet web3-wallet
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
(ns status-im.subs.wallet.wallet-connect
|
(ns status-im.subs.wallet.wallet-connect
|
||||||
(:require [clojure.string :as string]
|
(:require [clojure.set :as set]
|
||||||
|
[clojure.string :as string]
|
||||||
[re-frame.core :as rf]
|
[re-frame.core :as rf]
|
||||||
|
[status-im.constants :as constants]
|
||||||
[status-im.contexts.wallet.common.utils :as wallet-utils]
|
[status-im.contexts.wallet.common.utils :as wallet-utils]
|
||||||
[status-im.contexts.wallet.wallet-connect.core :as wallet-connect-core]
|
[status-im.contexts.wallet.wallet-connect.core :as wallet-connect-core]
|
||||||
[status-im.contexts.wallet.wallet-connect.transactions :as transactions]
|
[status-im.contexts.wallet.wallet-connect.transactions :as transactions]
|
||||||
|
@ -58,6 +60,24 @@
|
||||||
(some #(string/includes? % address) accounts))
|
(some #(string/includes? % address) accounts))
|
||||||
sessions)))
|
sessions)))
|
||||||
|
|
||||||
|
(rf/reg-sub
|
||||||
|
:wallet-connect/sessions-for-current-account-and-networks
|
||||||
|
:<- [:wallet-connect/sessions-for-current-account]
|
||||||
|
:<- [:profile/test-networks-enabled?]
|
||||||
|
(fn [[sessions testnet-mode?]]
|
||||||
|
(filter
|
||||||
|
(fn [{:keys [chains]}]
|
||||||
|
(let [chain-ids (set (map (fn [chain]
|
||||||
|
(-> chain
|
||||||
|
(string/split ":")
|
||||||
|
second
|
||||||
|
js/parseInt))
|
||||||
|
chains))]
|
||||||
|
(if testnet-mode?
|
||||||
|
(set/subset? chain-ids (set/union constants/sepolia-chain-ids constants/goerli-chain-ids))
|
||||||
|
(set/subset? chain-ids constants/mainnet-chain-ids))))
|
||||||
|
sessions)))
|
||||||
|
|
||||||
(rf/reg-sub
|
(rf/reg-sub
|
||||||
:wallet-connect/chain-id
|
:wallet-connect/chain-id
|
||||||
:<- [:wallet-connect/current-request]
|
:<- [:wallet-connect/current-request]
|
||||||
|
|
Loading…
Reference in New Issue