taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit cc2122b50c7d8d0402c5c75228f4c1a241eaf4e0
parent 566248aec417f6653e6245b96312f187517f0cdd
Author: Florian Dold <florian@dold.me>
Date:   Wed,  2 Nov 2022 19:05:06 +0100

wallet-core: fix coin allocation when doing refresh

Diffstat:
Mpackages/taler-wallet-core/src/operations/common.ts | 2++
Mpackages/taler-wallet-core/src/operations/refresh.ts | 14++++++--------
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 @@ -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 @@ -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);