summaryrefslogtreecommitdiff
path: root/src/util/amounts.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-07-16 17:21:12 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-07-16 17:21:12 +0530
commit18f7406d46878e746f41595520426e7b885498f1 (patch)
treefba5cc8ede8cfd9a7f8b77b08a7df7b7176207d5 /src/util/amounts.ts
parentbcd9e2e5ff7f14308c5298a257388afc398dc674 (diff)
downloadwallet-core-18f7406d46878e746f41595520426e7b885498f1.tar.gz
wallet-core-18f7406d46878e746f41595520426e7b885498f1.tar.bz2
wallet-core-18f7406d46878e746f41595520426e7b885498f1.zip
fix broken amount multiplication
Diffstat (limited to 'src/util/amounts.ts')
-rw-r--r--src/util/amounts.ts22
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.