diff options
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 |
commit | 35611f0bf9cf67638b171c2a300fab1797d3d8f0 (patch) | |
tree | d067d5d62ac2fd0d88b25d2c759cc2caa9485c00 /packages/taler-wallet-core/src/util/coinSelection.ts | |
parent | 64c19c8cde56699ab4aaf05a1ac6fea6a4e0e4ba (diff) | |
parent | a5960665245c4ffb625dd16923019e8c62c20159 (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.ts | 20 |
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) { |