diff options
author | Florian Dold <florian@dold.me> | 2022-06-10 13:03:47 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2022-06-10 13:03:47 +0200 |
commit | f57dc7bf7a1e3a14c67512ba67d92fa350c95c0e (patch) | |
tree | c4f94cd64373e787d8b43645e9fdca469e713a98 /packages/taler-wallet-core/src/operations/pay.ts | |
parent | 3ebb1d18154375471e329f2bad40534d858cbe1e (diff) | |
download | wallet-core-f57dc7bf7a1e3a14c67512ba67d92fa350c95c0e.tar.xz |
wallet-core: implement and test forced coin/denom selection
Diffstat (limited to 'packages/taler-wallet-core/src/operations/pay.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/pay.ts | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts index f22d51a9d..b6bae7518 100644 --- a/packages/taler-wallet-core/src/operations/pay.ts +++ b/packages/taler-wallet-core/src/operations/pay.ts @@ -40,12 +40,14 @@ import { durationMin, durationMul, encodeCrock, + ForcedCoinSel, getRandomBytes, HttpStatusCode, j2s, Logger, NotificationType, parsePayUri, + PayCoinSelection, PreparePayResult, PreparePayResultType, RefreshReason, @@ -81,8 +83,8 @@ import { import { AvailableCoinInfo, CoinCandidateSelection, - PayCoinSelection, PreviousPayCoins, + selectForcedPayCoins, selectPayCoins, } from "../util/coinSelection.js"; import { ContractTermsUtil } from "../util/contractTerms.js"; @@ -305,6 +307,7 @@ export async function getCandidatePayCoins( } candidateCoins.push({ availableAmount: coin.currentAmount, + value: denom.value, coinPub: coin.coinPub, denomPub: denom.denomPub, feeDeposit: denom.feeDeposit, @@ -1423,6 +1426,7 @@ export async function confirmPay( ws: InternalWalletState, proposalId: string, sessionIdOverride?: string, + forcedCoinSel?: ForcedCoinSel, ): Promise<ConfirmPayResult> { logger.trace( `executing confirmPay with proposalId ${proposalId} and sessionIdOverride ${sessionIdOverride}`, @@ -1479,15 +1483,28 @@ export async function confirmPay( wireMethod: contractData.wireMethod, }); - const res = selectPayCoins({ - candidates, - contractTermsAmount: contractData.amount, - depositFeeLimit: contractData.maxDepositFee, - wireFeeAmortization: contractData.wireFeeAmortization ?? 1, - wireFeeLimit: contractData.maxWireFee, - prevPayCoins: [], - requiredMinimumAge: contractData.minimumAge, - }); + let res: PayCoinSelection | undefined = undefined; + + if (forcedCoinSel) { + res = selectForcedPayCoins(forcedCoinSel, { + candidates, + contractTermsAmount: contractData.amount, + depositFeeLimit: contractData.maxDepositFee, + wireFeeAmortization: contractData.wireFeeAmortization ?? 1, + wireFeeLimit: contractData.maxWireFee, + requiredMinimumAge: contractData.minimumAge, + }); + } else { + res = selectPayCoins({ + candidates, + contractTermsAmount: contractData.amount, + depositFeeLimit: contractData.maxDepositFee, + wireFeeAmortization: contractData.wireFeeAmortization ?? 1, + wireFeeLimit: contractData.maxWireFee, + prevPayCoins: [], + requiredMinimumAge: contractData.minimumAge, + }); + } logger.trace("coin selection result", res); |