gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: do not apply the same refresh


From: gnunet
Subject: [taler-wallet-core] branch master updated: do not apply the same refresh twice
Date: Sun, 19 Jan 2020 20:41:55 +0100

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new e124e05d do not apply the same refresh twice
e124e05d is described below

commit e124e05d531af11815e403f3547e167afb80cae6
Author: Florian Dold <address@hidden>
AuthorDate: Sun Jan 19 20:41:51 2020 +0100

    do not apply the same refresh twice
---
 src/operations/refresh.ts |  2 +-
 src/operations/refund.ts  | 30 +++++++++++++++++++++++++-----
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/operations/refresh.ts b/src/operations/refresh.ts
index 418ec046..b53baf39 100644
--- a/src/operations/refresh.ts
+++ b/src/operations/refresh.ts
@@ -238,7 +238,7 @@ async function refreshMelt(
     rc: refreshSession.hash,
     value_with_fee: Amounts.toString(refreshSession.amountRefreshInput),
   };
-  logger.trace("melt request:", meltReq);
+  logger.trace(`melt request for coin:`, meltReq);
   const resp = await ws.http.postJson(reqUrl.href, meltReq);
   if (resp.status !== 200) {
     console.log(`got status ${resp.status} for refresh/melt`);
diff --git a/src/operations/refund.ts b/src/operations/refund.ts
index 92e9204d..2fb3a239 100644
--- a/src/operations/refund.ts
+++ b/src/operations/refund.ts
@@ -54,6 +54,9 @@ import { randomBytes } from "../crypto/primitives/nacl-fast";
 import { encodeCrock } from "../crypto/talerCrypto";
 import { HttpResponseStatus } from "../util/http";
 import { getTimestampNow } from "../util/time";
+import { Logger } from "../util/logging";
+
+const logger = new Logger("refund.ts");
 
 async function incrementPurchaseQueryRefundRetry(
   ws: InternalWalletState,
@@ -468,15 +471,24 @@ async function processPurchaseApplyRefundImpl(
           return;
         }
         refreshCoinsMap[c.coinPub] = { coinPub: c.coinPub };
+        logger.trace(`commiting refund ${perm.merchant_sig} to coin 
${c.coinPub}`);
+        logger.trace(`coin amount before is 
${Amounts.toString(c.currentAmount)}`)
+        logger.trace(`refund amount (via merchant) is ${perm.refund_amount}`);
+        logger.trace(`refund fee (via merchant) is ${perm.refund_fee}`);
         const refundAmount = Amounts.parseOrThrow(perm.refund_amount);
         const refundFee = Amounts.parseOrThrow(perm.refund_fee);
         c.status = CoinStatus.Dormant;
         c.currentAmount = Amounts.add(c.currentAmount, refundAmount).amount;
         c.currentAmount = Amounts.sub(c.currentAmount, refundFee).amount;
+        logger.trace(`coin amount after is 
${Amounts.toString(c.currentAmount)}`)
         await tx.put(Stores.coins, c);
       };
 
       for (const pk of Object.keys(newRefundsFailed)) {
+        if (p.refundState.refundsDone[pk]) {
+          // We already processed this one.
+          break;
+        }
         const r = newRefundsFailed[pk];
         groups[r.refundGroupId] = true;
         delete p.refundState.refundsPending[pk];
@@ -484,6 +496,10 @@ async function processPurchaseApplyRefundImpl(
       }
 
       for (const pk of Object.keys(newRefundsDone)) {
+        if (p.refundState.refundsDone[pk]) {
+          // We already processed this one.
+          break;
+        }
         const r = newRefundsDone[pk];
         groups[r.refundGroupId] = true;
         delete p.refundState.refundsPending[pk];
@@ -516,11 +532,15 @@ async function processPurchaseApplyRefundImpl(
         allRefundsProcessed = true;
       }
       await tx.put(Stores.purchases, p);
-      await createRefreshGroup(
-        tx,
-        Object.values(refreshCoinsMap),
-        RefreshReason.Refund,
-      );
+      const coinsPubsToBeRefreshed = Object.values(refreshCoinsMap);
+      if (coinsPubsToBeRefreshed.length > 0)
+      {
+        await createRefreshGroup(
+          tx,
+          coinsPubsToBeRefreshed,
+          RefreshReason.Refund,
+        );
+      }
     },
   );
   if (allRefundsProcessed) {

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]