fix logic bug in recoup (refresh variant)

This commit is contained in:
Florian Dold 2020-03-26 22:34:14 +05:30
parent 86c8a8fcf3
commit 5d1b0df8a4
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
3 changed files with 15 additions and 6 deletions

View File

@ -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);
}

View File

@ -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) {

View File

@ -1397,6 +1397,8 @@ export interface RecoupGroupRecord {
*/
recoupFinishedPerCoin: boolean[];
oldAmountPerCoin: AmountJson[];
/**
* Retry info.
*/