From cc2122b50c7d8d0402c5c75228f4c1a241eaf4e0 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 2 Nov 2022 19:05:06 +0100 Subject: wallet-core: fix coin allocation when doing refresh --- packages/taler-wallet-core/src/operations/common.ts | 2 ++ packages/taler-wallet-core/src/operations/refresh.ts | 14 ++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'packages') 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); -- cgit v1.2.3