diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-07-16 17:21:12 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-07-16 17:21:12 +0530 |
commit | 18f7406d46878e746f41595520426e7b885498f1 (patch) | |
tree | fba5cc8ede8cfd9a7f8b77b08a7df7b7176207d5 /src/util/amounts.ts | |
parent | bcd9e2e5ff7f14308c5298a257388afc398dc674 (diff) | |
download | wallet-core-18f7406d46878e746f41595520426e7b885498f1.tar.xz |
fix broken amount multiplication
Diffstat (limited to 'src/util/amounts.ts')
-rw-r--r-- | src/util/amounts.ts | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/util/amounts.ts b/src/util/amounts.ts index c0bb03619..94aefb3cd 100644 --- a/src/util/amounts.ts +++ b/src/util/amounts.ts @@ -342,22 +342,26 @@ function mult(a: AmountJson, n: number): Result { if (n == 0) { return { amount: getZero(a.currency), saturated: false }; } - let acc = { ...a }; + let x = a; + let acc = getZero(a.currency); while (n > 1) { - let r: Result; if (n % 2 == 0) { n = n / 2; - r = add(acc, acc); } else { - n = n - 1; - r = add(acc, a); + n = (n - 1) / 2; + const r2 = add(acc, x) + if (r2.saturated) { + return r2; + } + acc = r2.amount; } - if (r.saturated) { - return r; + const r2 = add(x, x); + if (r2.saturated) { + return r2; } - acc = r.amount; + x = r2.amount; } - return { amount: acc, saturated: false }; + return add(acc, x); } // Export all amount-related functions here for better IDE experience. |