From 7d813149eb92f0fcbb8f3dacdcd84d736de7e805 Mon Sep 17 00:00:00 2001 From: yenda Date: Fri, 23 Aug 2019 23:03:22 +0200 Subject: [PATCH] move network-id verification --- src/status_im/events.cljs | 7 --- src/status_im/multiaccounts/login/core.cljs | 30 ++++++++++--- src/status_im/protocol/core.cljs | 48 +++++---------------- 3 files changed, 36 insertions(+), 49 deletions(-) diff --git a/src/status_im/events.cljs b/src/status_im/events.cljs index 9531047525..023e1222e0 100644 --- a/src/status_im/events.cljs +++ b/src/status_im/events.cljs @@ -691,13 +691,6 @@ (log/debug :event-str event-str) (signals/process cofx event-str))) -;; protocol module - -(handlers/register-handler-fx - :protocol.ui/close-app-confirmed - (fn [cofx _] - (protocol/handle-close-app-confirmed cofx))) - ;; notifications module (handlers/register-handler-fx diff --git a/src/status_im/multiaccounts/login/core.cljs b/src/status_im/multiaccounts/login/core.cljs index 4ef745e9ed..203f9fc401 100644 --- a/src/status_im/multiaccounts/login/core.cljs +++ b/src/status_im/multiaccounts/login/core.cljs @@ -5,18 +5,15 @@ [status-im.chat.models :as chat-model] [status-im.chat.models.loading :as chat.loading] [status-im.constants :as constants] - [status-im.data-store.core :as data-store] [status-im.contact.core :as contact] - [status-im.ethereum.core :as ethereum] + [status-im.data-store.core :as data-store] [status-im.ethereum.json-rpc :as json-rpc] [status-im.ethereum.transactions.core :as transactions] [status-im.fleet.core :as fleet] [status-im.i18n :as i18n] [status-im.native-module.core :as status] - [status-im.node.core :as node] [status-im.notifications.core :as notifications] [status-im.stickers.core :as stickers] - [status-im.ui.screens.db :refer [app-db]] [status-im.ui.screens.mobile-network-settings.events :as mobile-network] [status-im.ui.screens.navigation :as navigation] [status-im.utils.config :as config] @@ -27,6 +24,7 @@ [status-im.utils.security :as security] [status-im.utils.types :as types] [status-im.utils.universal-links.core :as universal-links] + [status-im.utils.utils :as utils] [status-im.wallet.core :as wallet] [taoensso.timbre :as log])) @@ -105,6 +103,26 @@ [cofx address password] {:keychain/save-user-password [address password]}) +(fx/defn handle-close-app-confirmed + {:events [::close-app-confirmed]} + [_] + {:ui/close-application nil}) + +(fx/defn check-network-version + [cofx network-id] + {::json-rpc/call + [{:method "net_version" + :on-success + (fn [fetched-network-id] + (when (not= network-id fetched-network-id) + ;;TODO: this shouldn't happen but in case it does + ;;we probably want a better error message + (utils/show-popup (i18n/label :t/ethereum-node-started-incorrectly-title) + (i18n/label :t/ethereum-node-started-incorrectly-description + {:network-id network-id + :fetched-network-id fetched-network-id}) + #(re-frame/dispatch [::close-app-confirmed]))))}]}) + (defn deserialize-config [{:keys [multiaccount current-network networks]}] [(types/deserialize multiaccount) @@ -114,13 +132,15 @@ (fx/defn get-config-callback {:events [::get-config-callback]} [{:keys [db] :as cofx} config stored-pns] - (let [[{:keys [address] :as multiaccount} current-network networks] (deserialize-config config)] + (let [[{:keys [address] :as multiaccount} current-network networks] (deserialize-config config) + network-id (str (get-in networks [current-network :config :NetworkId]))] (fx/merge cofx {:db (assoc db :networks/current-network current-network :networks/networks networks :multiaccount multiaccount) :notifications/request-notifications-permissions nil} + (check-network-version network-id) (chat.loading/initialize-chats) (contact/initialize-contacts) (stickers/init-stickers-packs) diff --git a/src/status_im/protocol/core.cljs b/src/status_im/protocol/core.cljs index eb9a9dc78e..688ac6cd27 100644 --- a/src/status_im/protocol/core.cljs +++ b/src/status_im/protocol/core.cljs @@ -1,15 +1,10 @@ (ns status-im.protocol.core - (:require [re-frame.core :as re-frame] - [status-im.constants :as constants] - [status-im.ethereum.core :as ethereum] - [status-im.ethereum.json-rpc :as json-rpc] - [status-im.i18n :as i18n] + (:require [status-im.constants :as constants] [status-im.mailserver.core :as mailserver] [status-im.node.core :as node] [status-im.transport.core :as transport] [status-im.tribute-to-talk.core :as tribute-to-talk] - [status-im.utils.fx :as fx] - [status-im.utils.utils :as utils])) + [status-im.utils.fx :as fx])) ;;TODO move this logic to status-go (fx/defn update-sync-state @@ -40,33 +35,12 @@ (node/update-sync-state error sync))) (fx/defn initialize-protocol - [{:data-store/keys [mailserver-topics mailservers] - :keys [db] :as cofx}] - (let [{:networks/keys [networks current-network]} db - network-id (str (get-in networks [current-network :config :NetworkId]))] - (fx/merge cofx - {:db (assoc db - :rpc-url constants/ethereum-rpc-url - :mailserver/topics mailserver-topics) - ::json-rpc/call - [{:method "net_version" - :on-success - (fn [fetched-network-id] - (when (and network-id - ;; TODO fix once realm is removed - ;; protocol should be initialized after network-id is known - (not= network-id fetched-network-id)) - (utils/show-popup - (i18n/label :t/ethereum-node-started-incorrectly-title) - (i18n/label :t/ethereum-node-started-incorrectly-description - {:network-id network-id - :fetched-network-id fetched-network-id}) - #(re-frame/dispatch [:protocol.ui/close-app-confirmed]))))}]} - (tribute-to-talk/init) - (mailserver/initialize-ranges) - (mailserver/initialize-mailserver mailservers) - (transport/init-whisper)))) - -(fx/defn handle-close-app-confirmed - [_] - {:ui/close-application nil}) + [{:data-store/keys [mailserver-topics mailservers] :keys [db] :as cofx}] + (fx/merge cofx + {:db (assoc db + :rpc-url constants/ethereum-rpc-url + :mailserver/topics mailserver-topics)} + (tribute-to-talk/init) + (mailserver/initialize-ranges) + (mailserver/initialize-mailserver mailservers) + (transport/init-whisper)))