Skip to content

Commit

Permalink
fix(wallet)_: token supported networks
Browse files Browse the repository at this point in the history
Signed-off-by: Mohamed Javid <[email protected]>
  • Loading branch information
smohamedjavid committed Oct 18, 2024
1 parent 7e5df76 commit f7dc535
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 49 deletions.
29 changes: 25 additions & 4 deletions src/status_im/contexts/wallet/data_store.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,32 @@
(update :testPreferredChainIds chain-ids-set->string)
(dissoc :watch-only? :default-account? :operable? :tokens :collectibles)))

(defn add-missing-balance-per-chain-values
"Adds any missing chain balance (0) to the balance-per-chain map based on token supported chains as
status-go returns balance for that chain only if the balance is positive."
[balances-per-chain supported-chains]
(let [zero-balance-per-chain (fn [chain-id]
{:chain-id chain-id
:raw-balance (money/->bignumber 0)
:balance "0"})]
(reduce
(fn [result chain-id]
(if (contains? result chain-id)
result
(assoc result chain-id (zero-balance-per-chain chain-id))))
balances-per-chain
supported-chains)))

(defn- rpc->balances-per-chain
[token]
[token supported-chains]
(-> token
(update :balances-per-chain update-vals #(update % :raw-balance money/bignumber))
(update :balances-per-chain update-keys (comp utils.number/parse-int name))))
(update :balances-per-chain update-keys (comp utils.number/parse-int name))
(update :balances-per-chain #(add-missing-balance-per-chain-values % supported-chains))))

(defn- update-balances-per-chain
[tokens supported-chains-by-token-symbol]
(mapv #(rpc->balances-per-chain % (get supported-chains-by-token-symbol (:symbol %))) tokens))

(defn- remove-tokens-with-empty-values
[tokens]
Expand All @@ -85,12 +106,12 @@
tokens))

(defn rpc->tokens
[tokens]
[tokens supported-chains-by-token-symbol]
(-> tokens
(update-keys name)
(update-vals #(cske/transform-keys transforms/->kebab-case-keyword %))
(update-vals remove-tokens-with-empty-values)
(update-vals #(mapv rpc->balances-per-chain %))))
(update-vals #(update-balances-per-chain % supported-chains-by-token-symbol))))

(defn rpc->network
[network]
Expand Down
23 changes: 13 additions & 10 deletions src/status_im/contexts/wallet/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -225,14 +225,17 @@
(rf/reg-event-fx
:wallet/store-wallet-token
(fn [{:keys [db]} [address raw-tokens-data]]
(let [tokens (data-store/rpc->tokens raw-tokens-data)
add-tokens (fn [stored-accounts tokens-per-account]
(reduce-kv (fn [accounts address tokens-data]
(if (contains? accounts address)
(update accounts address assoc :tokens tokens-data)
accounts))
stored-accounts
tokens-per-account))]
(let [supported-chains-by-token-symbol (get-in db [:wallet :tokens :supported-chains-by-symbol])
tokens (data-store/rpc->tokens raw-tokens-data
supported-chains-by-token-symbol)
add-tokens (fn [stored-accounts tokens-per-account]
(reduce-kv
(fn [accounts address tokens-data]
(if (contains? accounts address)
(update accounts address assoc :tokens tokens-data)
accounts))
stored-accounts
tokens-per-account))]
{:db (-> db
(update-in [:wallet :accounts] add-tokens tokens)
(assoc-in [:wallet :ui :tokens-loading address] false))})))
Expand Down Expand Up @@ -345,8 +348,7 @@
:Prod
data-store/rpc->network)
data)}]
{:fx [[:dispatch [:wallet.tokens/get-token-list]]]
:db (assoc-in db [:wallet :networks] network-data)})))
{:db (assoc-in db [:wallet :networks] network-data)})))

(rf/reg-event-fx
:wallet/find-ens
Expand Down Expand Up @@ -475,6 +477,7 @@
(fn []
{:fx [[:dispatch [:wallet/start-wallet]]
[:dispatch [:wallet/get-ethereum-chains]]
[:dispatch [:wallet.tokens/get-token-list]]
[:dispatch [:wallet/get-accounts]]
[:dispatch [:wallet/get-keypairs]]
[:dispatch [:wallet/get-saved-addresses]]
Expand Down
81 changes: 46 additions & 35 deletions src/status_im/contexts/wallet/tokens/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -20,38 +20,48 @@

(defn store-token-list
[{:keys [db]} [{:keys [data]}]]
(let [chain-ids (chain/chain-ids db)
tokens (reduce (fn [{:keys [by-address by-symbol] :as data}
{:keys [name source version tokens]}]
(-> data
(update :sources
conj
{:name name
:source source
:version version
:tokens-count (count tokens)})
(update :by-address
merge
(tokens-data/tokens-by-address
{:added-tokens by-address
:source-name name
:tokens tokens
:chain-ids chain-ids}))
(update :by-symbol
merge
(tokens-data/tokens-by-symbol
{:added-tokens by-symbol
:source-name name
:tokens tokens
:chain-ids chain-ids}))))
{:sources []
:by-address {}
:by-symbol {}}
data)
symbols (->> tokens
:by-symbol
keys
(remove utils.address/address?))]
(let [chain-ids (chain/chain-ids db)
tokens (reduce (fn [{:keys [by-address by-symbol] :as data}
{:keys [name source version tokens]}]
(-> data
(update :sources
conj
{:name name
:source source
:version version
:tokens-count (count tokens)})
(update :by-address
merge
(tokens-data/tokens-by-address
{:added-tokens by-address
:source-name name
:tokens tokens
:chain-ids chain-ids}))
(update :by-symbol
merge
(tokens-data/tokens-by-symbol
{:added-tokens by-symbol
:source-name name
:tokens tokens
:chain-ids chain-ids}))))
{:sources []
:by-address {}
:by-symbol {}}
data)
symbols (->> tokens
:by-symbol
keys
(remove utils.address/address?))
by-symbol-vals (-> tokens :by-symbol vals)
supported-chains-by-symbol (reduce
(fn [result
{token-symbol :symbol
:keys [chain-id]}]
(if (contains? result token-symbol)
(update result token-symbol conj chain-id)
(assoc result token-symbol #{chain-id})))
{}
by-symbol-vals)]
{:fx [[:effects.wallet.tokens/fetch-market-values
{:symbols symbols
:currency constants/profile-default-currency
Expand All @@ -68,9 +78,10 @@
:on-error [:wallet.tokens/fetch-prices-failed]}]]
:db (-> db
(assoc-in [:wallet :tokens]
{:sources (:sources tokens)
:by-address (-> tokens :by-address vals)
:by-symbol (-> tokens :by-symbol vals)})
{:sources (:sources tokens)
:supported-chains-by-symbol supported-chains-by-symbol
:by-address (-> tokens :by-address vals)
:by-symbol by-symbol-vals})
(assoc-in [:wallet :ui :loading]
{:token-list false
:market-values true
Expand Down

0 comments on commit f7dc535

Please sign in to comment.