mirror of
https://github.com/status-im/status-react.git
synced 2025-03-03 20:11:02 +00:00
55 lines
2.9 KiB
Clojure
55 lines
2.9 KiB
Clojure
;reference https://eips.ethereum.org/EIPS/eip-3326 EIP-3326: Wallet Switch Ethereum Chain RPC Method
|
|
;(`wallet_switchEthereumChain`)
|
|
(ns status-im.browser.eip3326
|
|
(:require [status-im2.constants :as constants]
|
|
[status-im.ethereum.core :as ethereum]
|
|
[status-im.ui.screens.browser.eip3326.sheet :as sheet]
|
|
[utils.re-frame :as rf]))
|
|
|
|
(rf/defn deny-permission
|
|
{:events [:eip3326.ui/dapp-permission-denied]}
|
|
[{:keys [db] :as cofx} message-id _]
|
|
{:browser/send-to-bridge {:type constants/web3-send-async-callback
|
|
:messageId message-id
|
|
:error {:code 4001
|
|
:message "User rejected the request."}}
|
|
:dispatch [:bottom-sheet/hide-old]})
|
|
|
|
(rf/defn handle-switch-ethereum-chain
|
|
{:events [:eip3326/handle-switch-ethereum-chain]}
|
|
[{:keys [db] :as cofx} dapp-name id message-id {:keys [chainId] :as params}]
|
|
(let [target-chain-id (js/parseInt chainId 16)
|
|
networks (vals (get-in db [:networks/networks]))
|
|
exist-chain-ids (set (map ethereum/network->chain-id networks))
|
|
current-chain-id (ethereum/chain-id db)]
|
|
(if (exist-chain-ids target-chain-id)
|
|
(if (= current-chain-id target-chain-id)
|
|
{:browser/send-to-bridge {:type constants/web3-send-async-callback
|
|
:messageId message-id
|
|
:result {:jsonrpc "2.0"
|
|
:id (int id)
|
|
:result nil}}}
|
|
(let [target-network (first (filter #(= (ethereum/network->chain-id %1) target-chain-id)
|
|
networks))
|
|
target-network-id (:id target-network)
|
|
current-network (ethereum/current-network db)
|
|
network-from (:name current-network)
|
|
network-to (:name target-network)
|
|
params (assoc params
|
|
:target-network-id target-network-id
|
|
:network-from network-from
|
|
:network-to network-to)]
|
|
{:dispatch [:bottom-sheet/show-sheet-old
|
|
{:content (fn []
|
|
[sheet/permissions-panel dapp-name message-id params])}]}))
|
|
{:browser/send-to-bridge {:type constants/web3-send-async-callback
|
|
:messageId message-id
|
|
:error
|
|
{:code 4902
|
|
:message
|
|
(str
|
|
"Unrecognized chain ID: "
|
|
target-chain-id
|
|
". Try adding the chain using wallet_addEthereumChain first.")}}})))
|
|
|