Disable Etherscan and Cryptocompare requests in chaos mode
This commit is contained in:
parent
3c5502075a
commit
298f000fcb
|
@ -62,6 +62,13 @@
|
|||
(accounts.update/account-update {:dev-mode? dev-mode?}
|
||||
{})))
|
||||
|
||||
(fx/defn switch-chaos-mode [{:keys [db] :as cofx} chaos-mode?]
|
||||
(let [settings (get-in db [:account/account :settings])]
|
||||
(accounts.update/update-settings
|
||||
cofx
|
||||
(assoc settings :chaos-mode? chaos-mode?)
|
||||
{})))
|
||||
|
||||
(fx/defn enable-notifications [cofx desktop-notifications?]
|
||||
(accounts.update/account-update cofx
|
||||
{:desktop-notifications? desktop-notifications?}
|
||||
|
|
|
@ -238,4 +238,3 @@
|
|||
(def v21 (update v20 :properties merge
|
||||
{:syncing-on-mobile-network? {:type :bool :default false}
|
||||
:remember-syncing-choice? {:type :bool :default false}}))
|
||||
|
||||
|
|
|
@ -170,6 +170,11 @@
|
|||
(fn [cofx [_ dev-mode?]]
|
||||
(accounts/switch-dev-mode cofx dev-mode?)))
|
||||
|
||||
(handlers/register-handler-fx
|
||||
:accounts.ui/chaos-mode-switched
|
||||
(fn [cofx [_ dev-mode?]]
|
||||
(accounts/switch-chaos-mode cofx dev-mode?)))
|
||||
|
||||
(handlers/register-handler-fx
|
||||
:accounts.ui/notifications-enabled
|
||||
(fn [cofx [_ desktop-notifications?]]
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
[taoensso.timbre :as log]
|
||||
[status-im.utils.fx :as fx]
|
||||
[re-frame.core :as re-frame]
|
||||
[re-frame.db])
|
||||
[re-frame.db]
|
||||
[status-im.utils.config :as config])
|
||||
(:require-macros
|
||||
[cljs.core.async.macros :refer [go-loop go]]))
|
||||
|
||||
|
@ -167,7 +168,7 @@
|
|||
(when (etherscan-supported? chain)
|
||||
(let [network-subdomain (when-let [subdomain (network->subdomain chain)]
|
||||
(str subdomain "."))]
|
||||
(str "https://" network-subdomain "etherscan.io/tx/" hash)))))
|
||||
(str "https://" network-subdomain "etherscan.io/tx/" hash)))))
|
||||
|
||||
(def etherscan-api-key "DMSI4UAAKUBVGCDMVP3H2STAMSAUV7BYFI")
|
||||
|
||||
|
@ -177,12 +178,17 @@
|
|||
(:mainnet) "api"
|
||||
(:rinkeby) "api-rinkeby"))
|
||||
|
||||
(defn- get-transaction-url [chain account]
|
||||
{:pre [(keyword? chain) (string? account)]
|
||||
:post [(string? %)]}
|
||||
(let [network-subdomain (get-api-network-subdomain chain)]
|
||||
(str "https://" network-subdomain ".etherscan.io/api?module=account&action=txlist&address=0x"
|
||||
account "&startblock=0&endblock=99999999&sort=desc&apikey=" etherscan-api-key "&q=json")))
|
||||
(defn- get-transaction-url
|
||||
([chain account] (get-transaction-url chain account false))
|
||||
([chain account chaos-mode?]
|
||||
{:pre [(keyword? chain) (string? account)]
|
||||
:post [(string? %)]}
|
||||
(let [network-subdomain (get-api-network-subdomain chain)]
|
||||
(if chaos-mode?
|
||||
"http://httpstat.us/500"
|
||||
(str "https://" network-subdomain
|
||||
".etherscan.io/api?module=account&action=txlist&address=0x"
|
||||
account "&startblock=0&endblock=99999999&sort=desc&apikey=" etherscan-api-key "&q=json")))))
|
||||
|
||||
(defn- format-transaction [account
|
||||
{:keys [value timeStamp blockNumber hash from to
|
||||
|
@ -217,21 +223,26 @@
|
|||
(map (juxt :hash identity)))
|
||||
result))))
|
||||
|
||||
(defn- etherscan-transactions [chain account on-success on-error]
|
||||
(if (etherscan-supported? chain)
|
||||
(let [url (get-transaction-url chain account)]
|
||||
(log/debug "HTTP GET" url)
|
||||
(http/get url
|
||||
#(on-success (format-transactions-response % account))
|
||||
on-error))
|
||||
(log/info "Etherscan not supported for " chain)))
|
||||
(defn- etherscan-transactions
|
||||
([chain account on-success on-error]
|
||||
(etherscan-transactions chain account on-success on-error false))
|
||||
([chain account on-success on-error chaos-mode?]
|
||||
(if (etherscan-supported? chain)
|
||||
(let [url (get-transaction-url chain account chaos-mode?)]
|
||||
(log/debug "HTTP GET" url)
|
||||
(http/get url
|
||||
#(on-success (format-transactions-response % account))
|
||||
on-error))
|
||||
(log/info "Etherscan not supported for " chain))))
|
||||
|
||||
(defn- get-transactions [{:keys [web3 chain chain-tokens account-address success-fn error-fn]}]
|
||||
(defn- get-transactions [{:keys [web3 chain chain-tokens account-address
|
||||
success-fn error-fn chaos-mode?]}]
|
||||
(log/debug "Syncing transactions data..")
|
||||
(etherscan-transactions chain
|
||||
account-address
|
||||
success-fn
|
||||
error-fn)
|
||||
error-fn
|
||||
chaos-mode?)
|
||||
(doseq [direction [:inbound :outbound]]
|
||||
(get-token-transactions web3
|
||||
chain-tokens
|
||||
|
@ -319,7 +330,7 @@
|
|||
|
||||
(defonce polling-executor (atom nil))
|
||||
|
||||
(defn transactions-query-helper [web3 all-tokens account-address chain done-fn]
|
||||
(defn transactions-query-helper [web3 all-tokens account-address chain done-fn chaos-mode?]
|
||||
(get-transactions
|
||||
{:account-address account-address
|
||||
:chain chain
|
||||
|
@ -337,18 +348,20 @@
|
|||
(done-fn))
|
||||
:error-fn (fn [http-error]
|
||||
(log/debug "Unable to get transactions: " http-error)
|
||||
(done-fn))}))
|
||||
(done-fn))
|
||||
:chaos-mode? chaos-mode?}))
|
||||
|
||||
(defn- sync-now! [{:keys [network-status :account/account :wallet/all-tokens app-state network web3] :as opts}]
|
||||
(when @polling-executor
|
||||
(let [chain (ethereum/network->chain-keyword (get-in account [:networks network]))
|
||||
account-address (:address account)]
|
||||
account-address (:address account)
|
||||
chaos-mode? (get-in account [:settings :chaos-mode?])]
|
||||
(when (and (not= network-status :offline)
|
||||
(= app-state "active")
|
||||
(not= :custom chain))
|
||||
(async-util/async-periodic-run!
|
||||
@polling-executor
|
||||
(partial transactions-query-helper web3 all-tokens account-address chain))))))
|
||||
#(transactions-query-helper web3 all-tokens account-address chain % chaos-mode?))))))
|
||||
|
||||
;; this function handles background syncing of transactions
|
||||
(defn- background-sync [web3 account-address done-fn]
|
||||
|
@ -362,11 +375,12 @@
|
|||
(done-fn)
|
||||
(let [chat-transaction-ids (chat-map->transaction-ids network chats)
|
||||
transaction-map (:transactions wallet)
|
||||
transaction-ids (set (keys transaction-map))]
|
||||
transaction-ids (set (keys transaction-map))
|
||||
chaos-mode? (get-in account [:settings :chaos-mode?])]
|
||||
(if-not (or (have-unconfirmed-transactions? (vals transaction-map))
|
||||
(not-empty (set/difference chat-transaction-ids transaction-ids)))
|
||||
(done-fn)
|
||||
(transactions-query-helper web3 all-tokens account-address chain done-fn))))))
|
||||
(transactions-query-helper web3 all-tokens account-address chain done-fn chaos-mode?))))))
|
||||
|
||||
(defn- start-sync! [{:keys [:account/account network web3] :as options}]
|
||||
(let [account-address (:address account)]
|
||||
|
|
|
@ -197,7 +197,8 @@
|
|||
:tokens (get tokens/all-default-tokens chain)}}))))
|
||||
|
||||
(fx/defn update-wallet
|
||||
[{{:keys [web3 network network-status] {:keys [address settings]} :account/account :as db} :db}]
|
||||
[{{:keys [web3 network network-status]
|
||||
{:keys [address settings]} :account/account :as db} :db}]
|
||||
(let [all-tokens (:wallet/all-tokens db)
|
||||
network (get-in db [:account/account :networks network])
|
||||
chain (ethereum/network->chain-keyword network)
|
||||
|
@ -225,7 +226,8 @@
|
|||
:to [(:code currency)]
|
||||
:mainnet? mainnet?
|
||||
:success-event :update-prices-success
|
||||
:error-event :update-prices-fail}
|
||||
:error-event :update-prices-fail
|
||||
:chaos-mode? (:chaos-mode? settings)}
|
||||
:db (-> db
|
||||
(clear-error-message :prices-update)
|
||||
(clear-error-message :balance-update)
|
||||
|
|
|
@ -224,7 +224,12 @@
|
|||
[profile.components/settings-switch-item
|
||||
{:label-kw :t/dev-mode
|
||||
:value dev-mode?
|
||||
:action-fn #(re-frame/dispatch [:accounts.ui/dev-mode-switched %])}]])
|
||||
:action-fn #(re-frame/dispatch [:accounts.ui/dev-mode-switched %])}]
|
||||
[profile.components/settings-item-separator]
|
||||
[profile.components/settings-switch-item
|
||||
{:label-kw :t/chaos-mode
|
||||
:value (:chaos-mode? settings)
|
||||
:action-fn #(re-frame/dispatch [:accounts.ui/chaos-mode-switched %])}]])
|
||||
|
||||
(defview advanced [params on-show]
|
||||
(letsubs [advanced? [:get :my-profile/advanced?]]
|
||||
|
|
|
@ -65,12 +65,13 @@
|
|||
;; TODO(oskarth): At some point we want to get list of relevant assets to get prices for
|
||||
(re-frame/reg-fx
|
||||
:get-prices
|
||||
(fn [{:keys [from to mainnet? success-event error-event]}]
|
||||
(fn [{:keys [from to mainnet? success-event error-event chaos-mode?]}]
|
||||
(prices/get-prices from
|
||||
to
|
||||
mainnet?
|
||||
#(re-frame/dispatch [success-event %])
|
||||
#(re-frame/dispatch [error-event %]))))
|
||||
#(re-frame/dispatch [error-event %])
|
||||
chaos-mode?)))
|
||||
|
||||
(re-frame/reg-fx
|
||||
:update-gas-price
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
(ns status-im.utils.prices
|
||||
(:require [status-im.utils.http :as http]
|
||||
[status-im.utils.types :as types]))
|
||||
[status-im.utils.types :as types]
|
||||
[status-im.utils.config :as config]))
|
||||
|
||||
;; Responsible for interacting with Cryptocompare API to get current prices for
|
||||
;; currencies and tokens.
|
||||
|
@ -16,8 +17,10 @@
|
|||
(defn- ->url-param-syms [syms]
|
||||
((comp (partial clojure.string/join ",") (partial map name)) syms))
|
||||
|
||||
(defn- gen-price-url [fsyms tsyms]
|
||||
(str api-url "/pricemultifull?fsyms=" (->url-param-syms fsyms) "&tsyms=" (->url-param-syms tsyms) "&" status-identifier))
|
||||
(defn- gen-price-url [fsyms tsyms chaos-mode?]
|
||||
(if chaos-mode?
|
||||
"http://httpstat.us/500"
|
||||
(str api-url "/pricemultifull?fsyms=" (->url-param-syms fsyms) "&tsyms=" (->url-param-syms tsyms) "&" status-identifier)))
|
||||
|
||||
(defn- format-price-resp [resp mainnet?]
|
||||
;;NOTE(this check is to allow value conversion for sidechains with native currencies listed on cryptocompare
|
||||
|
@ -36,8 +39,8 @@
|
|||
:price (:PRICE entry)
|
||||
:last-day (:OPEN24HOUR entry)}}))}))))
|
||||
|
||||
(defn get-prices [from to mainnet? on-success on-error]
|
||||
(defn get-prices [from to mainnet? on-success on-error chaos-mode?]
|
||||
(http/get
|
||||
(gen-price-url from to)
|
||||
(gen-price-url from to chaos-mode?)
|
||||
(fn [resp] (on-success (format-price-resp resp mainnet?)))
|
||||
on-error))
|
||||
|
|
|
@ -595,6 +595,7 @@
|
|||
"at": "at",
|
||||
"off": "Off",
|
||||
"dev-mode": "Development mode",
|
||||
"chaos-mode": "Chaos mode",
|
||||
"intro-text-description": "A community-powered platform to securely chat and transact on the Ethereum blockchain",
|
||||
"currency-display-name-kwd": "Kuwaiti Dinar",
|
||||
"invalid-number": "Invalid number",
|
||||
|
|
Loading…
Reference in New Issue