aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/util/coinSelection.ts
diff options
context:
space:
mode:
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) {