From a165afa6824980c409d7c2e22e24171e536800e0 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 19 Apr 2022 17:12:43 +0200 Subject: wallet-core: implement age restriction support --- packages/taler-wallet-core/src/operations/pay.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'packages/taler-wallet-core/src/operations/pay.ts') diff --git a/packages/taler-wallet-core/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts index fa36c724f..a1773547a 100644 --- a/packages/taler-wallet-core/src/operations/pay.ts +++ b/packages/taler-wallet-core/src/operations/pay.ts @@ -26,6 +26,7 @@ */ import { AbsoluteTime, + AgeRestriction, AmountJson, Amounts, codecForContractTerms, @@ -197,6 +198,14 @@ export interface CoinSelectionRequest { maxWireFee: AmountJson; maxDepositFee: AmountJson; + + /** + * Minimum age requirement for the coin selection. + * + * When present, only select coins with either no age restriction + * or coins with an age commitment that matches the minimum age. + */ + minimumAge?: number; } /** @@ -651,6 +660,7 @@ export function extractContractData( merchant: parsedContractTerms.merchant, products: parsedContractTerms.products, summaryI18n: parsedContractTerms.summary_i18n, + minimumAge: parsedContractTerms.minimum_age, }; } @@ -825,6 +835,8 @@ async function processDownloadProposalImpl( proposalResp.sig, ); + logger.trace(`extracted contract data: ${j2s(contractData)}`); + await ws.db .mktx((x) => ({ proposals: x.proposals, purchases: x.purchases })) .runReadWrite(async (tx) => { @@ -1379,6 +1391,11 @@ export async function generateDepositPermissions( const { coin, denom } = coinWithDenom[i]; let wireInfoHash: string; wireInfoHash = contractData.wireInfoHash; + logger.trace( + `signing deposit permission for coin with acp=${j2s( + coin.ageCommitmentProof, + )}`, + ); const dp = await ws.cryptoApi.signDepositPermission({ coinPriv: coin.coinPriv, coinPub: coin.coinPub, @@ -1393,6 +1410,8 @@ export async function generateDepositPermissions( spendAmount: payCoinSel.coinContributions[i], timestamp: contractData.timestamp, wireInfoHash, + ageCommitmentProof: coin.ageCommitmentProof, + requiredMinimumAge: contractData.minimumAge, }); depositPermissions.push(dp); } -- cgit v1.2.3