diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-03-26 22:34:14 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-03-26 22:34:14 +0530 |
commit | 5d1b0df8a44c79cac46d40ff157f0150a668d6f4 (patch) | |
tree | 2ca627c21a12c4de93b24f92c1d34b377314c65b | |
parent | 86c8a8fcf3115fd4957de113a03204ed22afe7e0 (diff) |
fix logic bug in recoup (refresh variant)
-rw-r--r-- | src/operations/recoup.ts | 18 | ||||
-rw-r--r-- | src/operations/refresh.ts | 1 | ||||
-rw-r--r-- | src/types/dbTypes.ts | 2 |
3 files changed, 15 insertions, 6 deletions
diff --git a/src/operations/recoup.ts b/src/operations/recoup.ts index 107b90446..de2e6c9a8 100644 --- a/src/operations/recoup.ts +++ b/src/operations/recoup.ts @@ -238,19 +238,24 @@ async function recoupRefreshCoin( return; } const oldCoin = await tx.get(Stores.coins, cs.oldCoinPub); - const updatedCoin = await tx.get(Stores.coins, coin.coinPub); - if (!updatedCoin) { + const revokedCoin = await tx.get(Stores.coins, coin.coinPub); + if (!revokedCoin) { return; } if (!oldCoin) { return; } - updatedCoin.status = CoinStatus.Dormant; + revokedCoin.status = CoinStatus.Dormant; oldCoin.currentAmount = Amounts.add( oldCoin.currentAmount, - updatedCoin.currentAmount, + recoupGroup.oldAmountPerCoin[coinIdx], ).amount; - await tx.put(Stores.coins, updatedCoin); + console.log( + "recoup: setting old coin amount to", + Amounts.toString(oldCoin.currentAmount), + ); + await tx.put(Stores.coins, revokedCoin); + await tx.put(Stores.coins, oldCoin); await putGroupAsFinished(tx, recoupGroup, coinIdx); return await createRefreshGroup( tx, @@ -333,6 +338,8 @@ export async function createRecoupGroup( timestampStarted: getTimestampNow(), retryInfo: initRetryInfo(), recoupFinishedPerCoin: coinPubs.map(() => false), + // Will be populated later + oldAmountPerCoin: [], }; for (let coinIdx = 0; coinIdx < coinPubs.length; coinIdx++) { @@ -346,6 +353,7 @@ export async function createRecoupGroup( await putGroupAsFinished(tx, recoupGroup, coinIdx); continue; } + recoupGroup.oldAmountPerCoin[coinIdx] = coin.currentAmount; coin.currentAmount = Amounts.getZero(coin.currentAmount.currency); await tx.put(Stores.coins, coin); } diff --git a/src/operations/refresh.ts b/src/operations/refresh.ts index c04b79278..f196fc5e1 100644 --- a/src/operations/refresh.ts +++ b/src/operations/refresh.ts @@ -145,7 +145,6 @@ async function refreshCreateSession( return; } rg.finishedPerCoin[coinIndex] = true; - rg.finishedPerCoin[coinIndex] = true; let allDone = true; for (const f of rg.finishedPerCoin) { if (!f) { diff --git a/src/types/dbTypes.ts b/src/types/dbTypes.ts index 5a5ac7c3d..c8c4ed617 100644 --- a/src/types/dbTypes.ts +++ b/src/types/dbTypes.ts @@ -1397,6 +1397,8 @@ export interface RecoupGroupRecord { */ recoupFinishedPerCoin: boolean[]; + oldAmountPerCoin: AmountJson[]; + /** * Retry info. */ |