fix bug in withdrawal operation state machine, allow manual reserve update from CLI
This commit is contained in:
parent
1744b1a800
commit
9e2be07cfc
@ -374,6 +374,18 @@ advancedCli
|
||||
});
|
||||
});
|
||||
|
||||
advancedCli
|
||||
.subcommand("updateReserve", "update-reserve", {
|
||||
help: "Update reserve status.",
|
||||
})
|
||||
.requiredArgument("reservePub", clk.STRING)
|
||||
.action(async args => {
|
||||
await withWallet(args, async wallet => {
|
||||
const r = await wallet.updateReserve(args.updateReserve.reservePub);
|
||||
console.log("updated reserve:", JSON.stringify(r, undefined, 2));
|
||||
});
|
||||
});
|
||||
|
||||
const testCli = walletCli.subcommand("testingArgs", "testing", {
|
||||
help: "Subcommands for testing GNU Taler deployments.",
|
||||
});
|
||||
|
@ -228,7 +228,7 @@ export async function forceQueryReserve(
|
||||
await tx.put(Stores.reserves, reserve);
|
||||
|
||||
});
|
||||
await processReserve(ws, reservePub);
|
||||
await processReserve(ws, reservePub, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -490,6 +490,7 @@ async function updateReserve(
|
||||
reserveUpdateId,
|
||||
};
|
||||
await tx.put(Stores.reserveUpdatedEvents, reserveUpdate);
|
||||
r.reserveStatus = ReserveRecordStatus.WITHDRAWING;
|
||||
} else {
|
||||
const expectedBalance = Amounts.sub(
|
||||
r.amountWithdrawAllocated,
|
||||
@ -497,7 +498,8 @@ async function updateReserve(
|
||||
);
|
||||
const cmp = Amounts.cmp(balance, expectedBalance.amount);
|
||||
if (cmp == 0) {
|
||||
// Nothing changed.
|
||||
// Nothing changed, go back to sleep!
|
||||
r.reserveStatus = ReserveRecordStatus.DORMANT;
|
||||
return;
|
||||
}
|
||||
if (cmp > 0) {
|
||||
@ -506,8 +508,10 @@ async function updateReserve(
|
||||
r.amountWithdrawRemaining,
|
||||
extra,
|
||||
).amount;
|
||||
r.reserveStatus = ReserveRecordStatus.WITHDRAWING;
|
||||
} else {
|
||||
// We're missing some money.
|
||||
r.reserveStatus = ReserveRecordStatus.DORMANT;
|
||||
}
|
||||
const reserveUpdate: ReserveUpdatedEventRecord = {
|
||||
reservePub: r.reservePub,
|
||||
@ -520,12 +524,12 @@ async function updateReserve(
|
||||
await tx.put(Stores.reserveUpdatedEvents, reserveUpdate);
|
||||
}
|
||||
r.lastSuccessfulStatusQuery = getTimestampNow();
|
||||
r.reserveStatus = ReserveRecordStatus.WITHDRAWING;
|
||||
r.retryInfo = initRetryInfo();
|
||||
r.reserveTransactions = reserveInfo.history;
|
||||
await tx.put(Stores.reserves, r);
|
||||
},
|
||||
);
|
||||
console.log("updated reserve");
|
||||
ws.notify({ type: NotificationType.ReserveUpdated });
|
||||
}
|
||||
|
||||
|
@ -85,6 +85,7 @@ import {
|
||||
import {
|
||||
processReserve,
|
||||
createTalerWithdrawReserve,
|
||||
forceQueryReserve,
|
||||
} from "./operations/reserves";
|
||||
|
||||
import { InternalWalletState } from "./operations/state";
|
||||
@ -714,6 +715,11 @@ export class Wallet {
|
||||
}
|
||||
}
|
||||
|
||||
async updateReserve(reservePub: string): Promise<ReserveRecord | undefined> {
|
||||
await forceQueryReserve(this.ws, reservePub);
|
||||
return await this.ws.db.get(Stores.reserves, reservePub);
|
||||
}
|
||||
|
||||
async refuseProposal(proposalId: string): Promise<void> {
|
||||
return refuseProposal(this.ws, proposalId);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user