aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-11-02 19:05:06 +0100
committerFlorian Dold <florian@dold.me>2022-11-02 19:05:06 +0100
commitcc2122b50c7d8d0402c5c75228f4c1a241eaf4e0 (patch)
treebca8c94e7574f6fc140e5935cbba9e473f81f3f3
parent566248aec417f6653e6245b96312f187517f0cdd (diff)
wallet-core: fix coin allocation when doing refresh
-rw-r--r--packages/taler-wallet-core/src/operations/common.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/refresh.ts14
2 files changed, 8 insertions, 8 deletions
diff --git a/packages/taler-wallet-core/src/operations/common.ts b/packages/taler-wallet-core/src/operations/common.ts
index 73d1ee4b0..2323cb82c 100644
--- a/packages/taler-wallet-core/src/operations/common.ts
+++ b/packages/taler-wallet-core/src/operations/common.ts
@@ -142,6 +142,8 @@ export async function spendCoins(
}
if (alloc.id !== csi.allocationId) {
// FIXME: assign error code
+ logger.info("conflicting coin allocation ID");
+ logger.info(`old ID: ${alloc.id}, new ID: ${csi.allocationId}`);
throw Error("conflicting coin allocation (id)");
}
if (0 !== Amounts.cmp(alloc.amount, contrib)) {
diff --git a/packages/taler-wallet-core/src/operations/refresh.ts b/packages/taler-wallet-core/src/operations/refresh.ts
index c2f0f0360..806e4a246 100644
--- a/packages/taler-wallet-core/src/operations/refresh.ts
+++ b/packages/taler-wallet-core/src/operations/refresh.ts
@@ -890,10 +890,6 @@ export async function createRefreshGroup(
);
switch (coin.status) {
case CoinStatus.Dormant:
- coin.spendAllocation = {
- amount: Amounts.stringify(ocp.amount),
- id: `txn:refresh:${refreshGroupId}`,
- };
break;
case CoinStatus.Fresh: {
coin.status = CoinStatus.Dormant;
@@ -912,15 +908,17 @@ export async function createRefreshGroup(
// For suspended coins, we don't have to adjust coin
// availability, as they are not counted as available.
coin.status = CoinStatus.Dormant;
- coin.spendAllocation = {
- amount: Amounts.stringify(ocp.amount),
- id: `txn:refresh:${refreshGroupId}`,
- };
break;
}
default:
assertUnreachable(coin.status);
}
+ if (!coin.spendAllocation) {
+ coin.spendAllocation = {
+ amount: Amounts.stringify(ocp.amount),
+ id: `txn:refresh:${refreshGroupId}`,
+ };
+ }
const refreshAmount = ocp.amount;
inputPerCoin.push(Amounts.parseOrThrow(refreshAmount));
await tx.coins.put(coin);