diff --git a/src/status_im/ethereum/core.cljs b/src/status_im/ethereum/core.cljs index c40e15ec23..32b2a46252 100644 --- a/src/status_im/ethereum/core.cljs +++ b/src/status_im/ethereum/core.cljs @@ -93,6 +93,16 @@ (defn network->chain-keyword [network] (chain-id->chain-keyword (network->chain-id network))) +(defn current-network [db] + (let [networks (get db :networks/networks) + network-id (get db :networks/current-network)] + (get networks network-id))) + +(def custom-rpc-node-id-len 45) + +(defn custom-rpc-node? [{:keys [id]}] + (= custom-rpc-node-id-len (count id))) + (defn network->network-name [network] (chain-id->chain-name (network->chain-id network))) diff --git a/src/status_im/ethereum/subscriptions.cljs b/src/status_im/ethereum/subscriptions.cljs index 772f0b9ed0..1b2c40996d 100644 --- a/src/status_im/ethereum/subscriptions.cljs +++ b/src/status_im/ethereum/subscriptions.cljs @@ -101,6 +101,10 @@ {:db (assoc db :wallet/fetching-error message)} (wallet.core/stop-wallet))) +(fx/defn non-archival-node-detected + [{:keys [db] :as cofx} _] + {:db (assoc db :wallet/non-archival-node true)}) + (fx/defn new-wallet-event [cofx {:keys [type blockNumber accounts newTransactions] :as event}] (log/debug "[wallet-subs] new-wallet-event" @@ -113,4 +117,5 @@ "recent-history-fetching" (recent-history-fetching-started cofx accounts) "recent-history-ready" (recent-history-fetching-ended cofx event) "fetching-history-error" (fetching-error cofx event) + "non-archival-node-detected" (non-archival-node-detected cofx event) (log/warn ::unknown-wallet-event :type type :event event))) diff --git a/src/status_im/subs.cljs b/src/status_im/subs.cljs index cd4811034c..84a181c08b 100644 --- a/src/status_im/subs.cljs +++ b/src/status_im/subs.cljs @@ -174,6 +174,7 @@ (reg-root-key-sub :wallet/refreshing-history? :wallet/refreshing-history?) (reg-root-key-sub :wallet/buy-crypto-hidden :wallet/buy-crypto-hidden) (reg-root-key-sub :wallet/fetching-error :wallet/fetching-error) +(reg-root-key-sub :wallet/non-archival-node :wallet/non-archival-node) ;;commands (reg-root-key-sub :commands/select-account :commands/select-account) @@ -362,6 +363,12 @@ (assoc network :rpc-network? (get-in network [:config :UpstreamConfig :Enabled]))))) +(re-frame/reg-sub + :custom-rpc-node + :<- [:current-network] + (fn [network] + (ethereum/custom-rpc-node? network))) + (re-frame/reg-sub :chain-keyword :<- [:current-network] @@ -913,8 +920,8 @@ :<- [:multiaccount] (fn [[contacts multiaccount] [_ id identicon]] (let [contact (or (get contacts id) - (when (= id (:public-key multiaccount) - multiaccount)) + (when (= id (:public-key multiaccount)) + multiaccount) (if identicon {:identicon identicon} (contact.db/public-key->new-contact id)))] diff --git a/src/status_im/ui/screens/wallet/transactions/views.cljs b/src/status_im/ui/screens/wallet/transactions/views.cljs index f295ae27b4..cd1dca5bc2 100644 --- a/src/status_im/ui/screens/wallet/transactions/views.cljs +++ b/src/status_im/ui/screens/wallet/transactions/views.cljs @@ -106,15 +106,44 @@ {:style {:color colors/blue}} (i18n/label :t/check-on-etherscan)]]])) +(defn custom-node [] + [react/view + {:style {:flex 1 + :padding-horizontal 14 + :flex-direction :row + :align-items :center + :background-color (quo/get-color :warning-02) + :height 52}} + [react/text + {:style {:color (quo/get-color :warning-01)}} + (i18n/label :t/custom-node)]]) + +(defn non-archival-node [] + [react/view + {:style {:flex 1 + :padding-horizontal 14 + :flex-direction :row + :align-items :center + :background-color (quo/get-color :negative-02) + :height 52}} + [react/text + {:style {:color (quo/get-color :negative-01)}} + (i18n/label :t/non-archival-node)]]) + (defn history-list [transactions-history-sections address] (let [fetching-recent-history? @(re-frame/subscribe [:wallet/fetching-recent-tx-history? address]) fetching-more-history? @(re-frame/subscribe [:wallet/fetching-tx-history? address]) keycard-account? @(re-frame/subscribe [:multiaccounts/keycard-account?]) - + custom-rpc-node? @(re-frame/subscribe [:custom-rpc-node]) + non-archival-rpc-node? @(re-frame/subscribe [:wallet/non-archival-node]) all-fetched? @(re-frame/subscribe [:wallet/tx-history-fetched? address])] [react/view components.styles/flex [etherscan-link address] + (cond non-archival-rpc-node? + [non-archival-node] + custom-rpc-node? + [custom-node]) (when fetching-recent-history? [react/view {:style {:flex 1 diff --git a/src/status_im/wallet/core.cljs b/src/status_im/wallet/core.cljs index 94e0f4bfb7..d973b5a2af 100644 --- a/src/status_im/wallet/core.cljs +++ b/src/status_im/wallet/core.cljs @@ -547,6 +547,21 @@ (def ms-10-min (datetime/minutes 10)) (def ms-20-min (datetime/minutes 20)) +(def ms-2-min (datetime/minutes 2)) +(def ms-4-min (datetime/minutes 4)) + +(defn get-restart-interval [db] + (if (ethereum/custom-rpc-node? + (ethereum/current-network db)) + ms-4-min + ms-20-min)) + +(defn get-watching-interval [db] + (if (ethereum/custom-rpc-node? + (ethereum/current-network db)) + ms-2-min + ms-10-min)) + (fx/defn stop-wallet [{:keys [db] :as cofx}] (let [state (get db :wallet-service/state) @@ -555,7 +570,7 @@ old-timeout (utils.utils/set-timeout #(re-frame.core/dispatch [::restart]) - ms-20-min))] + (get-restart-interval db)))] {:db (-> db (update :wallet dissoc :fetching) (assoc :wallet-service/state :stopped) @@ -571,7 +586,7 @@ state (get db :wallet-service/state) timeout (utils.utils/set-timeout #(re-frame.core/dispatch [::restart]) - ms-20-min)] + (get-restart-interval db))] {:db (-> db (assoc :wallet-service/state :started) (assoc :wallet-service/restart-timeout timeout)) @@ -647,7 +662,7 @@ timeout (utils.utils/set-timeout (fn [] (re-frame.core/dispatch [::stop-watching-txs])) - ms-10-min)] + (get-watching-interval db))] (fx/merge {:db (-> db (update :wallet/watch-txs (fnil conj #{}) tx-id) diff --git a/status-go-version.json b/status-go-version.json index 3aa5cc56c3..73b74a8fdb 100644 --- a/status-go-version.json +++ b/status-go-version.json @@ -2,7 +2,7 @@ "_comment": "DO NOT EDIT THIS FILE BY HAND. USE 'scripts/update-status-go.sh ' instead", "owner": "status-im", "repo": "status-go", - "version": "v0.68.5", - "commit-sha1": "b5b1e19c2454ae1174915e6cb2fabaaa0955084c", - "src-sha256": "0gm2mlcrh1al197yzl2b57p0xvwjbz2jb5cbiq7a3cn43gvvcqy0" + "version": "v0.68.8", + "commit-sha1": "d8bccaff1838b674be5fb362c601c8e122f01962", + "src-sha256": "1487b2y849k535mskd81hzfhz622h588mbcmws0p2djhbcdnpvr4" } diff --git a/translations/en.json b/translations/en.json index 8619e62022..df1fc3361d 100644 --- a/translations/en.json +++ b/translations/en.json @@ -1401,5 +1401,7 @@ "transfer-ma-unknown-error-desc-1": "It looks like your multiaccount was not deleted. Database may have been reset", "transfer-ma-unknown-error-desc-2": "Please check your account list and try again. If the account is not listed go to Access existing keys to recover with seed phrase", "everyone": "Everyone", - "show-profile-pictures": "Show profile pictures of" + "show-profile-pictures": "Show profile pictures of", + "non-archival-node": "RPC endpoint doesn't support archival requests. Your local transfers history might be incomplete.", + "custom-node": "You are using custom RPC endpoint. Your local transfers history might be incomplete." }