aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/util/coinSelection.ts
diff options
context:
space:
mode:
authorÖzgür Kesim <oec-taler@kesim.org>2023-09-14 12:13:35 +0200
committerÖzgür Kesim <oec-taler@kesim.org>2023-09-14 12:13:35 +0200
commit35611f0bf9cf67638b171c2a300fab1797d3d8f0 (patch)
treed067d5d62ac2fd0d88b25d2c759cc2caa9485c00 /packages/taler-wallet-core/src/util/coinSelection.ts
parent64c19c8cde56699ab4aaf05a1ac6fea6a4e0e4ba (diff)
parenta5960665245c4ffb625dd16923019e8c62c20159 (diff)
Merge branch 'master' into age-withdraw
Diffstat (limited to 'packages/taler-wallet-core/src/util/coinSelection.ts')
-rw-r--r--packages/taler-wallet-core/src/util/coinSelection.ts20
1 files changed, 13 insertions, 7 deletions
diff --git a/packages/taler-wallet-core/src/util/coinSelection.ts b/packages/taler-wallet-core/src/util/coinSelection.ts
index 6fd0f1b86..0885215dd 100644
--- a/packages/taler-wallet-core/src/util/coinSelection.ts
+++ b/packages/taler-wallet-core/src/util/coinSelection.ts
@@ -894,6 +894,12 @@ interface PeerCoinSelectionTally {
lastDepositFee: AmountJson;
}
+/**
+ * exporting for testing
+ */
+export function testing_greedySelectPeer(...args: Parameters<typeof greedySelectPeer>): ReturnType<typeof greedySelectPeer> {
+ return greedySelectPeer(...args)
+}
function greedySelectPeer(
candidates: AvailableDenom[],
instructedAmount: AmountLike,
@@ -912,19 +918,19 @@ function greedySelectPeer(
instructedAmount,
tally.amountAcc,
).amount;
- const coinSpend = Amounts.max(
- Amounts.min(amountPayRemaining, denom.value),
- denom.feeDeposit,
- );
+ const coinContrib = Amounts.sub(denom.value, denom.feeDeposit).amount
+
+ const coinSpend = Amounts.min(amountPayRemaining, coinContrib)
+
tally.amountAcc = Amounts.add(tally.amountAcc, coinSpend).amount;
- // Since this is a peer payment, there is no merchant to
- // potentially cover the deposit fees.
- tally.amountAcc = Amounts.sub(tally.amountAcc, denom.feeDeposit).amount;
+
tally.depositFeesAcc = Amounts.add(
tally.depositFeesAcc,
denom.feeDeposit,
).amount;
+
tally.lastDepositFee = Amounts.parseOrThrow(denom.feeDeposit);
+
contributions.push(coinSpend);
}
if (contributions.length > 0) {