diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-05-15 16:03:52 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-05-15 16:03:52 +0530 |
commit | 3eb88574bcf327672c34120becfb511eac4e06cd (patch) | |
tree | 9d54748adef52dc9a21c8ea97c7d034cd773277a /src/operations/reserves.ts | |
parent | 35c83414f9e0af11012c1a2e00672d2a7c1856ae (diff) | |
download | wallet-core-3eb88574bcf327672c34120becfb511eac4e06cd.tar.xz |
address first batch of transaction list issues
Diffstat (limited to 'src/operations/reserves.ts')
-rw-r--r-- | src/operations/reserves.ts | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/operations/reserves.ts b/src/operations/reserves.ts index 347f6e894..3d45d8d5a 100644 --- a/src/operations/reserves.ts +++ b/src/operations/reserves.ts @@ -35,6 +35,7 @@ import { WalletReserveHistoryItemType, WithdrawalSourceType, ReserveHistoryRecord, + ReserveBankInfo, } from "../types/dbTypes"; import { Logger } from "../util/logging"; import { Amounts } from "../util/amounts"; @@ -48,9 +49,11 @@ import { assertUnreachable } from "../util/assertUnreachable"; import { encodeCrock, getRandomBytes } from "../crypto/talerCrypto"; import { randomBytes } from "../crypto/primitives/nacl-fast"; import { - getVerifiedWithdrawDenomList, + selectWithdrawalDenoms, processWithdrawGroup, getBankWithdrawalInfo, + denomSelectionInfoToState, + getWithdrawDenomList, } from "./withdraw"; import { guardOperationException, @@ -100,6 +103,20 @@ export async function createReserve( reserveStatus = ReserveRecordStatus.UNCONFIRMED; } + let bankInfo: ReserveBankInfo | undefined; + + if (req.bankWithdrawStatusUrl) { + const denomSelInfo = await selectWithdrawalDenoms(ws, canonExchange, req.amount); + const denomSel = denomSelectionInfoToState(denomSelInfo); + bankInfo = { + statusUrl: req.bankWithdrawStatusUrl, + amount: req.amount, + bankWithdrawalGroupId: encodeCrock(getRandomBytes(32)), + withdrawalStarted: false, + denomSel, + }; + } + const reserveRecord: ReserveRecord = { timestampCreated: now, exchangeBaseUrl: canonExchange, @@ -108,14 +125,7 @@ export async function createReserve( senderWire: req.senderWire, timestampConfirmed: undefined, timestampReserveInfoPosted: undefined, - bankInfo: req.bankWithdrawStatusUrl - ? { - statusUrl: req.bankWithdrawStatusUrl, - amount: req.amount, - bankWithdrawalGroupId: encodeCrock(getRandomBytes(32)), - withdrawalStarted: false, - } - : undefined, + bankInfo, exchangeWire: req.exchangeWire, reserveStatus, lastSuccessfulStatusQuery: undefined, @@ -286,10 +296,11 @@ async function registerReserveWithBank( default: return; } - const bankStatusUrl = reserve.bankInfo?.statusUrl; - if (!bankStatusUrl) { + const bankInfo = reserve.bankInfo; + if (!bankInfo) { return; } + const bankStatusUrl = bankInfo.statusUrl; console.log("making selection"); if (reserve.timestampReserveInfoPosted) { throw Error("bank claims that reserve info selection is not done"); @@ -309,6 +320,9 @@ async function registerReserveWithBank( } r.timestampReserveInfoPosted = getTimestampNow(); r.reserveStatus = ReserveRecordStatus.WAIT_CONFIRM_BANK; + if (!r.bankInfo) { + throw Error("invariant failed"); + } r.retryInfo = initRetryInfo(); return r; }); @@ -657,7 +671,7 @@ async function depleteReserve( logger.trace(`getting denom list`); - const denomsForWithdraw = await getVerifiedWithdrawDenomList( + const denomsForWithdraw = await selectWithdrawalDenoms( ws, reserve.exchangeBaseUrl, withdrawAmount, @@ -752,17 +766,8 @@ async function depleteReserve( retryInfo: initRetryInfo(), lastErrorPerCoin: {}, lastError: undefined, - denomsSel: { - totalCoinValue: denomsForWithdraw.totalCoinValue, - totalWithdrawCost: denomsForWithdraw.totalWithdrawCost, - selectedDenoms: denomsForWithdraw.selectedDenoms.map((x) => { - return { - count: x.count, - denomPubHash: x.denom.denomPubHash, - }; - }), - }, - }; + denomsSel: denomSelectionInfoToState(denomsForWithdraw), + }; await tx.put(Stores.reserves, newReserve); await tx.put(Stores.reserveHistory, newHist); |