-
Notifications
You must be signed in to change notification settings - Fork 987
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: ensure clean-up state after send transaction confirmation #21282
Changes from all commits
0278bd4
c534ae7
581c511
d91568c
e2c98aa
fb8e202
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,11 +2,13 @@ | |
(:require | ||
[quo.theme] | ||
[status-im.contexts.wallet.send.input-amount.view :as input-amount] | ||
[status-im.setup.hot-reload :as hot-reload] | ||
[utils.i18n :as i18n] | ||
[utils.re-frame :as rf])) | ||
|
||
(defn view | ||
[] | ||
(hot-reload/use-safe-unmount #(rf/dispatch [:wallet/stop-get-suggested-routes])) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here we're configuring the wallet send screen to dispatch the |
||
[input-amount/view | ||
{:current-screen-id :screen/wallet.send-input-amount | ||
:button-one-label (i18n/label :t/review-send) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,7 @@ | |
[status-im.common.standard-authentication.core :as standard-auth] | ||
[status-im.contexts.wallet.common.utils :as utils] | ||
[status-im.contexts.wallet.send.transaction-confirmation.style :as style] | ||
[status-im.contexts.wallet.send.utils :as send-utils] | ||
[utils.i18n :as i18n] | ||
[utils.re-frame :as rf] | ||
[utils.security.core :as security])) | ||
|
@@ -142,7 +143,7 @@ | |
[quo/summary-info | ||
{:type summary-info-type | ||
:networks? true | ||
:values network-values | ||
:values (send-utils/network-values-for-ui network-values) | ||
Comment on lines
-145
to
+146
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here's one place we were using the UI strings inside network-values, because summary-info will use the string "<0.01" to determine if some UI should be shown. Not sure what the original intent of that code would be, but perhaps that code could be changed too. |
||
:account-props (cond-> account-props | ||
(and account-to? (not bridge-tx?)) | ||
(assoc | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,25 +42,36 @@ | |
[x] | ||
(instance? BigNumber x)) | ||
|
||
(defn ->bignumber | ||
[n] | ||
(if (bignumber? n) n (bignumber n))) | ||
|
||
(defn ->bignumbers | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This function is only used for 1 pair of inputs at a time. Also, for a low-level construct to build instances, I think we should skip the overhead of varargs and processing Because ;; PR implementation
(defn less-than
[n1 n2]
(when-let [[^js bn1 ^js bn2] (->bignumbers n1 n2)]
(.lessThan ^js bn1 bn2)))
;; Suggestion
(defn less-than
[n1 n2]
(when-let [[^js bn1 ^js bn2] [(->bignumber n1) (->bignumber n2)]]
(.lessThan bn1 bn2))) The suggestion is still as readable, if not more due to the elimination of the extra indirection. In terms of benchmarks, this simple change can reduce the time by almost 50% in my tests of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just to be clear @seanstrom, I wouldn't touch the normalization part in this PR. I just wanted to illustrate that creating BigNumber instances is already slow, but this is a part of the code where we should make things fast. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @ilmotta Okay sounds good, I'll try refactoring the code to not use One thing to note is that this code: (defn less-than
[n1 n2]
(when-let [[^js bn1 ^js bn2] [(->bignumber n1) (->bignumber n2)]]
(.lessThan bn1 bn2))) Might not work the same with (defn ->bignumbers
[n1 n2]
(when-let [bn1 (->bignumber n1)]
(when-let [bn2 (->bignumber n2)]
(when (and (bignumber? bn1) (bignumber? bn2))
[bn1 bn2])))) This way we still return the vector of numbers when both numbers are valid big numbers. Thoughts? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On a side note, maybe we can update that normalising code to check if the input is a string? Because if the input is not a string I don't think it will have commas present when coerced to a string. That way we may be able to avoid the extra normalising logic for numeric inputs. 💭 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice catch @seanstrom, definitely my snippet wouldn't work and I didn't test *properly the snippet I shared. Your new snippet seems correct 👍🏼 What I like about using an optimized arity-2 implementation like what we are doing now is that we can always add arity-x in a backwards compatible way, similar to how
I had the impression (no evidence now) that most values we pass to From that original old commit I shared, I think the solution wasn't the best because cleaning up user input is a distant concern for a utility such as In the few cases where a bignum has to be created from user input, then the UI code can do the clean-up/normalization explicitly. This would be the best I think, because in all other cases bignums should be instantiated from proper bignum strings sent from the backend, and those shouldn't have formatting chars like But probably safer if my suggestion or yours is applied in a separate PR? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yup yup I think it's better to tweak the normalising logic in a separate pr 👍 |
||
[n1 n2] | ||
(when-let [bn1 (->bignumber n1)] | ||
(when-let [bn2 (->bignumber n2)] | ||
(when (and (bignumber? bn1) (bignumber? bn2)) | ||
[bn1 bn2])))) | ||
|
||
(defn greater-than-or-equals | ||
[^js bn1 ^js bn2] | ||
(when (bignumber? bn1) | ||
[^js n1 ^js n2] | ||
(when-let [[^js bn1 ^js bn2] (->bignumbers n1 n2)] | ||
(.greaterThanOrEqualTo bn1 bn2))) | ||
|
||
(defn greater-than | ||
[bn1 bn2] | ||
(when (bignumber? bn1) | ||
[n1 n2] | ||
(when-let [[^js bn1 ^js bn2] (->bignumbers n1 n2)] | ||
(.greaterThan ^js bn1 bn2))) | ||
|
||
(defn less-than | ||
[bn1 bn2] | ||
(when (bignumber? bn1) | ||
[n1 n2] | ||
(when-let [[^js bn1 ^js bn2] (->bignumbers n1 n2)] | ||
(.lessThan ^js bn1 bn2))) | ||
|
||
(defn equal-to | ||
[n1 n2] | ||
(when-let [^js bn1 (bignumber n1)] | ||
(.eq ^js bn1 n2))) | ||
(when-let [[^js bn1 ^js bn2] (->bignumbers n1 n2)] | ||
(.eq ^js bn1 bn2))) | ||
|
||
(extend-type BigNumber | ||
IEquiv | ||
|
@@ -79,8 +90,9 @@ | |
:else 0))) | ||
|
||
(defn sub | ||
[bn1 bn2] | ||
(.sub ^js bn1 bn2)) | ||
[n1 n2] | ||
(when-let [[^js bn1 ^js bn2] (->bignumbers n1 n2)] | ||
(.sub ^js bn1 bn2))) | ||
|
||
(defn valid? | ||
[^js bn] | ||
|
@@ -125,7 +137,7 @@ | |
|
||
(defn to-number | ||
[^js bn] | ||
(when bn | ||
(when (bignumber? bn) | ||
(.toNumber bn))) | ||
|
||
(defn to-string | ||
|
@@ -158,7 +170,7 @@ | |
|
||
(defn ether->wei | ||
[^js bn] | ||
(when bn | ||
(when (bignumber? bn) | ||
(.times bn ^js (bignumber 1e18)))) | ||
|
||
(defn token->unit | ||
|
@@ -228,7 +240,7 @@ | |
(defn sufficient-funds? | ||
[^js amount ^js balance] | ||
(when (and amount balance) | ||
(.greaterThanOrEqualTo balance amount))) | ||
(greater-than-or-equals balance amount))) | ||
|
||
(defn fiat-amount-value | ||
[amount-str from to prices] | ||
|
@@ -275,7 +287,7 @@ | |
|
||
(defn absolute-value | ||
[bn] | ||
(when bn | ||
(when (bignumber? bn) | ||
(.absoluteValue ^js bn))) | ||
|
||
(defn format-amount | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here's where we were storing the UI strings inside the re-frame state. Now we'll store the original data and do the conversions inside the UI components.