diff options
-rw-r--r-- | src/crypto/workers/cryptoImplementation.ts | 6 | ||||
-rw-r--r-- | src/operations/balance.ts | 8 | ||||
-rw-r--r-- | src/operations/exchanges.ts | 1 | ||||
-rw-r--r-- | src/operations/history.ts | 15 | ||||
-rw-r--r-- | src/operations/pay.ts | 12 | ||||
-rw-r--r-- | src/operations/pending.ts | 8 | ||||
-rw-r--r-- | src/operations/refresh.ts | 10 | ||||
-rw-r--r-- | src/operations/refund.ts | 4 | ||||
-rw-r--r-- | src/operations/reserves.ts | 34 | ||||
-rw-r--r-- | src/operations/tip.ts | 4 | ||||
-rw-r--r-- | src/operations/withdraw.ts | 8 | ||||
-rw-r--r-- | src/types/dbTypes.ts | 42 | ||||
-rw-r--r-- | src/types/history.ts | 64 | ||||
-rw-r--r-- | src/wallet.ts | 2 | ||||
-rw-r--r-- | src/webex/pages/payback.tsx | 2 |
15 files changed, 91 insertions, 129 deletions
diff --git a/src/crypto/workers/cryptoImplementation.ts b/src/crypto/workers/cryptoImplementation.ts index 0049a1222..d745f497c 100644 --- a/src/crypto/workers/cryptoImplementation.ts +++ b/src/crypto/workers/cryptoImplementation.ts @@ -519,9 +519,9 @@ export class CryptoImplementation { planchetsForGammas: planchetsForGammas, transferPrivs, transferPubs, - valueOutput, - valueWithFee, - created: getTimestampNow(), + amountRefreshOutput: valueOutput, + amountRefreshInput: valueWithFee, + timestampCreated: getTimestampNow(), finishedTimestamp: undefined, lastError: undefined, }; diff --git a/src/operations/balance.ts b/src/operations/balance.ts index 15d8e52fa..d12fbaf7c 100644 --- a/src/operations/balance.ts +++ b/src/operations/balance.ts @@ -87,7 +87,7 @@ export async function getBalances( await tx.iter(Stores.refreshGroups).forEach(r => { // Don't count finished refreshes, since the refresh already resulted // in coins being added to the wallet. - if (r.finishedTimestamp) { + if (r.timestampFinished) { return; } for (let i = 0; i < r.oldCoinPubs.length; i++) { @@ -96,13 +96,13 @@ export async function getBalances( addTo( balanceStore, "pendingIncoming", - session.valueOutput, + session.amountRefreshOutput, session.exchangeBaseUrl, ); addTo( balanceStore, "pendingIncomingRefresh", - session.valueOutput, + session.amountRefreshOutput, session.exchangeBaseUrl, ); } @@ -128,7 +128,7 @@ export async function getBalances( }); await tx.iter(Stores.purchases).forEach(t => { - if (t.firstSuccessfulPayTimestamp) { + if (t.timestampFirstSuccessfulPay) { return; } for (const c of t.payReq.coins) { diff --git a/src/operations/exchanges.ts b/src/operations/exchanges.ts index fc1a50f00..871ee1138 100644 --- a/src/operations/exchanges.ts +++ b/src/operations/exchanges.ts @@ -431,6 +431,7 @@ async function updateExchangeFromUrlImpl( termsOfServiceAcceptedTimestamp: undefined, termsOfServiceLastEtag: undefined, termsOfServiceText: undefined, + updateDiff: undefined, }; await ws.db.put(Stores.exchanges, newExchangeRecord); } else { diff --git a/src/operations/history.ts b/src/operations/history.ts index 7e985d218..eec398f37 100644 --- a/src/operations/history.ts +++ b/src/operations/history.ts @@ -201,7 +201,7 @@ export async function getHistory( }); tx.iter(Stores.withdrawalSession).forEach(wsr => { - if (wsr.finishTimestamp) { + if (wsr.timestampFinish) { history.push({ type: HistoryEventType.Withdrawn, withdrawSessionId: wsr.withdrawSessionId, @@ -212,7 +212,8 @@ export async function getHistory( amountWithdrawnEffective: Amounts.toString(wsr.totalCoinValue), amountWithdrawnRaw: Amounts.toString(wsr.rawWithdrawalAmount), exchangeBaseUrl: wsr.exchangeBaseUrl, - timestamp: wsr.finishTimestamp, + timestamp: wsr.timestampFinish, + withdrawalSource: wsr.source, }); } }); @@ -239,7 +240,7 @@ export async function getHistory( }); await tx.iter(Stores.refreshGroups).forEachAsync(async (rg) => { - if (!rg.finishedTimestamp) { + if (!rg.timestampFinished) { return; } let numInputCoins = 0; @@ -252,8 +253,8 @@ export async function getHistory( numInputCoins++; if (session) { numRefreshedInputCoins++; - amountsRaw.push(session.valueWithFee); - amountsEffective.push(session.valueOutput); + amountsRaw.push(session.amountRefreshInput); + amountsEffective.push(session.amountRefreshOutput); numOutputCoins += session.newDenoms.length; } else { const c = await tx.get(Stores.coins, rg.oldCoinPubs[i]); @@ -274,7 +275,7 @@ export async function getHistory( type: HistoryEventType.Refreshed, refreshGroupId: rg.refreshGroupId, eventId: makeEventId(HistoryEventType.Refreshed, rg.refreshGroupId), - timestamp: rg.finishedTimestamp, + timestamp: rg.timestampFinished, refreshReason: rg.reason, amountRefreshedEffective: Amounts.toString(amountRefreshedEffective), amountRefreshedRaw: Amounts.toString(amountRefreshedRaw), @@ -305,7 +306,7 @@ export async function getHistory( eventId: makeEventId(HistoryEventType.ReserveBalanceUpdated, ru.reserveUpdateId), amountExpected: ru.amountExpected, amountReserveBalance: ru.amountReserveBalance, - timestamp: reserve.created, + timestamp: reserve.timestampCreated, newHistoryTransactions: ru.newHistoryTransactions, reserveShortInfo: { exchangeBaseUrl: reserve.exchangeBaseUrl, diff --git a/src/operations/pay.ts b/src/operations/pay.ts index 664524695..b0f1d4b62 100644 --- a/src/operations/pay.ts +++ b/src/operations/pay.ts @@ -345,8 +345,8 @@ async function recordConfirmPay( lastSessionId: sessionId, merchantSig: d.merchantSig, payReq, - acceptTimestamp: getTimestampNow(), - lastRefundStatusTimestamp: undefined, + timestampAccept: getTimestampNow(), + timestampLastRefundStatus: undefined, proposalId: proposal.proposalId, lastPayError: undefined, lastRefundStatusError: undefined, @@ -355,7 +355,7 @@ async function recordConfirmPay( refundStatusRequested: false, lastRefundApplyError: undefined, refundApplyRetryInfo: initRetryInfo(), - firstSuccessfulPayTimestamp: undefined, + timestampFirstSuccessfulPay: undefined, autoRefundDeadline: undefined, paymentSubmitPending: true, refundState: { @@ -421,7 +421,7 @@ export async function abortFailedPayment( if (!purchase) { throw Error("Purchase not found, unable to abort with refund"); } - if (purchase.firstSuccessfulPayTimestamp) { + if (purchase.timestampFirstSuccessfulPay) { throw Error("Purchase already finished, not aborting"); } if (purchase.abortDone) { @@ -725,8 +725,8 @@ export async function submitPay( // FIXME: properly display error throw Error("merchant payment signature invalid"); } - const isFirst = purchase.firstSuccessfulPayTimestamp === undefined; - purchase.firstSuccessfulPayTimestamp = now; + const isFirst = purchase.timestampFirstSuccessfulPay === undefined; + purchase.timestampFirstSuccessfulPay = now; purchase.paymentSubmitPending = false; purchase.lastPayError = undefined; purchase.payRetryInfo = initRetryInfo(false); diff --git a/src/operations/pending.ts b/src/operations/pending.ts index 252c9e98a..ffa23f101 100644 --- a/src/operations/pending.ts +++ b/src/operations/pending.ts @@ -158,7 +158,7 @@ async function gatherReservePending( type: PendingOperationType.Reserve, givesLifeness: false, stage: reserve.reserveStatus, - timestampCreated: reserve.created, + timestampCreated: reserve.timestampCreated, reserveType, reservePub: reserve.reservePub, retryInfo: reserve.retryInfo, @@ -180,7 +180,7 @@ async function gatherReservePending( type: PendingOperationType.Reserve, givesLifeness: true, stage: reserve.reserveStatus, - timestampCreated: reserve.created, + timestampCreated: reserve.timestampCreated, reserveType, reservePub: reserve.reservePub, retryInfo: reserve.retryInfo, @@ -208,7 +208,7 @@ async function gatherRefreshPending( onlyDue: boolean = false, ): Promise<void> { await tx.iter(Stores.refreshGroups).forEach(r => { - if (r.finishedTimestamp) { + if (r.timestampFinished) { return; } resp.nextRetryDelay = updateRetryDelay( @@ -235,7 +235,7 @@ async function gatherWithdrawalPending( onlyDue: boolean = false, ): Promise<void> { await tx.iter(Stores.withdrawalSession).forEach(wsr => { - if (wsr.finishTimestamp) { + if (wsr.timestampFinish) { return; } resp.nextRetryDelay = updateRetryDelay( diff --git a/src/operations/refresh.ts b/src/operations/refresh.ts index d9a080bd8..f602221af 100644 --- a/src/operations/refresh.ts +++ b/src/operations/refresh.ts @@ -168,7 +168,7 @@ async function refreshCreateSession( if (!c) { throw Error("coin not found, but marked for refresh"); } - const r = Amounts.sub(c.currentAmount, refreshSession.valueWithFee); + const r = Amounts.sub(c.currentAmount, refreshSession.amountRefreshInput); if (r.saturated) { console.log("can't refresh coin, no amount left"); return; @@ -224,7 +224,7 @@ async function refreshMelt( denom_pub_hash: coin.denomPubHash, denom_sig: coin.denomSig, rc: refreshSession.hash, - value_with_fee: refreshSession.valueWithFee, + value_with_fee: refreshSession.amountRefreshInput, }; logger.trace("melt request:", meltReq); const resp = await ws.http.postJson(reqUrl.href, meltReq); @@ -414,7 +414,7 @@ async function refreshReveal( } } if (allDone) { - rg.finishedTimestamp = getTimestampNow(); + rg.timestampFinished = getTimestampNow(); rg.retryInfo = initRetryInfo(false); } for (let coin of coins) { @@ -489,7 +489,7 @@ async function processRefreshGroupImpl( if (!refreshGroup) { return; } - if (refreshGroup.finishedTimestamp) { + if (refreshGroup.timestampFinished) { return; } const ps = refreshGroup.oldCoinPubs.map((x, i) => @@ -545,7 +545,7 @@ export async function createRefreshGroup( const refreshGroupId = encodeCrock(getRandomBytes(32)); const refreshGroup: RefreshGroupRecord = { - finishedTimestamp: undefined, + timestampFinished: undefined, finishedPerCoin: oldCoinPubs.map(x => false), lastError: undefined, lastErrorPerCoin: {}, diff --git a/src/operations/refund.ts b/src/operations/refund.ts index 589418571..b4139c991 100644 --- a/src/operations/refund.ts +++ b/src/operations/refund.ts @@ -194,14 +194,14 @@ export async function acceptRefundResponse( } if (queryDone) { - p.lastRefundStatusTimestamp = getTimestampNow(); + p.timestampLastRefundStatus = getTimestampNow(); p.lastRefundStatusError = undefined; p.refundStatusRetryInfo = initRetryInfo(); p.refundStatusRequested = false; console.log("refund query done"); } else { // No error, but we need to try again! - p.lastRefundStatusTimestamp = getTimestampNow(); + p.timestampLastRefundStatus = getTimestampNow(); p.refundStatusRetryInfo.retryCounter++; updateRetryInfoTimeout(p.refundStatusRetryInfo); p.lastRefundStatusError = undefined; diff --git a/src/operations/reserves.ts b/src/operations/reserves.ts index 56e9c25d6..7b0a6886e 100644 --- a/src/operations/reserves.ts +++ b/src/operations/reserves.ts @@ -77,13 +77,13 @@ export async function createReserve( const currency = req.amount.currency; const reserveRecord: ReserveRecord = { - created: now, - withdrawAllocatedAmount: Amounts.getZero(currency), - withdrawCompletedAmount: Amounts.getZero(currency), - withdrawRemainingAmount: Amounts.getZero(currency), + timestampCreated: now, + amountWithdrawAllocated: Amounts.getZero(currency), + amountWithdrawCompleted: Amounts.getZero(currency), + amountWithdrawRemaining: Amounts.getZero(currency), exchangeBaseUrl: canonExchange, hasPayback: false, - initiallyRequestedAmount: req.amount, + amountInitiallyRequested: req.amount, reservePriv: keypair.priv, reservePub: keypair.pub, senderWire: req.senderWire, @@ -414,20 +414,20 @@ async function updateReserve( // FIXME: check / compare history! if (!r.lastSuccessfulStatusQuery) { // FIXME: check if this matches initial expectations - r.withdrawRemainingAmount = balance; + r.amountWithdrawRemaining = balance; const reserveUpdate: ReserveUpdatedEventRecord = { reservePub: r.reservePub, timestamp: getTimestampNow(), amountReserveBalance: Amounts.toString(balance), - amountExpected: Amounts.toString(reserve.initiallyRequestedAmount), + amountExpected: Amounts.toString(reserve.amountInitiallyRequested), newHistoryTransactions, reserveUpdateId, }; await tx.put(Stores.reserveUpdatedEvents, reserveUpdate); } else { const expectedBalance = Amounts.sub( - r.withdrawAllocatedAmount, - r.withdrawCompletedAmount, + r.amountWithdrawAllocated, + r.amountWithdrawCompleted, ); const cmp = Amounts.cmp(balance, expectedBalance.amount); if (cmp == 0) { @@ -436,8 +436,8 @@ async function updateReserve( } if (cmp > 0) { const extra = Amounts.sub(balance, expectedBalance.amount).amount; - r.withdrawRemainingAmount = Amounts.add( - r.withdrawRemainingAmount, + r.amountWithdrawRemaining = Amounts.add( + r.amountWithdrawRemaining, extra, ).amount; } else { @@ -549,7 +549,7 @@ async function depleteReserve( } logger.trace(`depleting reserve ${reservePub}`); - const withdrawAmount = reserve.withdrawRemainingAmount; + const withdrawAmount = reserve.amountWithdrawRemaining; logger.trace(`getting denom list`); @@ -585,7 +585,7 @@ async function depleteReserve( reservePub: reserve.reservePub, }, rawWithdrawalAmount: withdrawAmount, - startTimestamp: getTimestampNow(), + timestampStart: getTimestampNow(), denoms: denomsForWithdraw.map(x => x.denomPub), withdrawn: denomsForWithdraw.map(x => false), planchets: denomsForWithdraw.map(x => undefined), @@ -603,7 +603,7 @@ async function depleteReserve( function mutateReserve(r: ReserveRecord): ReserveRecord { const remaining = Amounts.sub( - r.withdrawRemainingAmount, + r.amountWithdrawRemaining, totalWithdrawAmount, ); if (remaining.saturated) { @@ -611,15 +611,15 @@ async function depleteReserve( throw TransactionAbort; } const allocated = Amounts.add( - r.withdrawAllocatedAmount, + r.amountWithdrawAllocated, totalWithdrawAmount, ); if (allocated.saturated) { console.error("can't create planchets, saturated"); throw TransactionAbort; } - r.withdrawRemainingAmount = remaining.amount; - r.withdrawAllocatedAmount = allocated.amount; + r.amountWithdrawRemaining = remaining.amount; + r.amountWithdrawAllocated = allocated.amount; r.reserveStatus = ReserveRecordStatus.DORMANT; r.retryInfo = initRetryInfo(false); return r; diff --git a/src/operations/tip.ts b/src/operations/tip.ts index ba4b80974..df4b7990e 100644 --- a/src/operations/tip.ts +++ b/src/operations/tip.ts @@ -255,14 +255,14 @@ async function processTipImpl( type: "tip", tipId: tipRecord.tipId, }, - startTimestamp: getTimestampNow(), + timestampStart: getTimestampNow(), withdrawSessionId: withdrawalSessionId, rawWithdrawalAmount: tipRecord.amount, withdrawn: planchets.map((x) => false), totalCoinValue: Amounts.sum(planchets.map((p) => p.coinValue)).amount, lastErrorPerCoin: {}, retryInfo: initRetryInfo(), - finishTimestamp: undefined, + timestampFinish: undefined, lastError: undefined, }; diff --git a/src/operations/withdraw.ts b/src/operations/withdraw.ts index c7c91494c..6e7cdf512 100644 --- a/src/operations/withdraw.ts +++ b/src/operations/withdraw.ts @@ -280,7 +280,7 @@ async function processPlanchet( } } if (numDone === ws.denoms.length) { - ws.finishTimestamp = getTimestampNow(); + ws.timestampFinish = getTimestampNow(); ws.lastError = undefined; ws.retryInfo = initRetryInfo(false); withdrawSessionFinished = true; @@ -289,11 +289,11 @@ async function processPlanchet( if (!planchet.isFromTip) { const r = await tx.get(Stores.reserves, planchet.reservePub); if (r) { - r.withdrawCompletedAmount = Amounts.add( - r.withdrawCompletedAmount, + r.amountWithdrawCompleted = Amounts.add( + r.amountWithdrawCompleted, Amounts.add(denom.value, denom.feeWithdraw).amount, ).amount; - if (Amounts.cmp(r.withdrawCompletedAmount, r.withdrawAllocatedAmount) == 0) { + if (Amounts.cmp(r.amountWithdrawCompleted, r.amountWithdrawAllocated) == 0) { reserveDepleted = true; } await tx.put(Stores.reserves, r); diff --git a/src/types/dbTypes.ts b/src/types/dbTypes.ts index 897c35038..a289eeb44 100644 --- a/src/types/dbTypes.ts +++ b/src/types/dbTypes.ts @@ -154,7 +154,7 @@ export interface ReserveRecord { /** * Time when the reserve was created. */ - created: Timestamp; + timestampCreated: Timestamp; /** * Time when the information about this reserve was posted to the bank. @@ -176,23 +176,23 @@ export interface ReserveRecord { * Amount that's still available for withdrawing * from this reserve. */ - withdrawRemainingAmount: AmountJson; + amountWithdrawRemaining: AmountJson; /** * Amount allocated for withdrawing. * The corresponding withdraw operation may or may not * have been completed yet. */ - withdrawAllocatedAmount: AmountJson; + amountWithdrawAllocated: AmountJson; - withdrawCompletedAmount: AmountJson; + amountWithdrawCompleted: AmountJson; /** * Amount requested when the reserve was created. * When a reserve is re-used (rare!) the current_amount can * be higher than the requested_amount */ - initiallyRequestedAmount: AmountJson; + amountInitiallyRequested: AmountJson; /** * We got some payback to this reserve. We'll cease to automatically @@ -469,6 +469,13 @@ export interface ExchangeWireInfo { accounts: ExchangeBankAccount[]; } +/** + * Summary of updates to the exchange. + */ +export interface ExchangeUpdateDiff { + // FIXME: implement! +} + export const enum ExchangeUpdateReason { Initial = "initial", Forced = "forced", @@ -529,9 +536,16 @@ export interface ExchangeRecord { * undefined if no update is in progress. */ updateStarted: Timestamp | undefined; + updateStatus: ExchangeUpdateStatus; + updateReason?: ExchangeUpdateReason; + /** + * Update diff, will be incorporated when the update is finalized. + */ + updateDiff: ExchangeUpdateDiff | undefined; + lastError?: OperationError; } @@ -898,7 +912,7 @@ export interface RefreshGroupRecord { /** * Timestamp when the refresh session finished. */ - finishedTimestamp: Timestamp | undefined; + timestampFinished: Timestamp | undefined; } /** @@ -916,13 +930,13 @@ export interface RefreshSessionRecord { * How much of the coin's value is melted away * with this refresh session? */ - valueWithFee: AmountJson; + amountRefreshInput: AmountJson; /** * Sum of the value of denominations we want * to withdraw in this session, without fees. */ - valueOutput: AmountJson; + amountRefreshOutput: AmountJson; /** * Signature to confirm the melting. @@ -972,7 +986,7 @@ export interface RefreshSessionRecord { /** * When has this refresh session been created? */ - created: Timestamp; + timestampCreated: Timestamp; /** * Base URL for the exchange we're doing the refresh with. @@ -1142,13 +1156,13 @@ export interface PurchaseRecord { * Timestamp of the first time that sending a payment to the merchant * for this purchase was successful. */ - firstSuccessfulPayTimestamp: Timestamp | undefined; + timestampFirstSuccessfulPay: Timestamp | undefined; /** * When was the purchase made? * Refers to the time that the user accepted. */ - acceptTimestamp: Timestamp; + timestampAccept: Timestamp; /** * State of refunds for this proposal. @@ -1159,7 +1173,7 @@ export interface PurchaseRecord { * When was the last refund made? * Set to 0 if no refund was made on the purchase. */ - lastRefundStatusTimestamp: Timestamp | undefined; + timestampLastRefundStatus: Timestamp | undefined; /** * Last session signature that we submitted to /pay (if any). @@ -1302,12 +1316,12 @@ export interface WithdrawalSessionRecord { * When was the withdrawal operation started started? * Timestamp in milliseconds. */ - startTimestamp: Timestamp; + timestampStart: Timestamp; /** * When was the withdrawal operation completed? */ - finishTimestamp?: Timestamp; + timestampFinish?: Timestamp; totalCoinValue: AmountJson; diff --git a/src/types/history.ts b/src/types/history.ts index 210006312..8b46276be 100644 --- a/src/types/history.ts +++ b/src/types/history.ts @@ -1,5 +1,6 @@ import { Timestamp, RefreshReason } from "./walletTypes"; import { ReserveTransaction } from "./ReserveTransaction"; +import { WithdrawalSource } from "./dbTypes"; /* This file is part of GNU Taler @@ -45,8 +46,6 @@ export const enum HistoryEventType { Refreshed = "refreshed", Refund = "refund", ReserveBalanceUpdated = "reserve-balance-updated", - ReserveWithdrawAllocated = "reserve-withdraw-allocated", - ReserveConfirmed = "reserve-confirmed", ReserveCreated = "reserve-created", TipAccepted = "tip-accepted", TipDeclined = "tip-declined", @@ -105,31 +104,6 @@ export interface HistoryReserveCreatedEvent { } /** - * The user (or some application / test case) or the bank has confirmed that the - * reserve will indeed become available after a while, because the - * funds are in the process of being transfered to the exchange. - */ -export interface HistoryReserveConfirmeEvent { - type: HistoryEventType.ReserveConfirmed; - - /** - * Point in time when the reserve was confirmed. - */ - timestamp: Timestamp; - - /** - * Amount that the should appear in the reserve once its status - * is requested from the exchange. - */ - expectedAmount: string; - - /** - * Condensed information about the reserve. - */ - reserveShortInfo: ReserveShortInfo; -} - -/** * This event is emitted every time we ask the exchange for the status * of the reserve, and the status has changed. */ @@ -161,35 +135,6 @@ export interface HistoryReserveBalanceUpdatedEvent { } /** - * This event is emitted every time we ask the exchange for the status - * of the reserve, and the status has changed. - */ -export interface HistoryReserveWithdrawAllocatedEvent { - type: HistoryEventType.ReserveWithdrawAllocated; - - /** - * Point in time when the reserve was confirmed. - */ - timestamp: Timestamp; - - /** - * Unique identifier to query more information about the withdrawal. - */ - withdrawalSessionId: string; - - /** - * Condensed information about the reserve. - */ - reserveShortInfo: ReserveShortInfo; - - /** - * Amount that has been allocated for withdrawal from - * this reserve. - */ - amountWithdrawAllocated: string; -} - -/** * History event to indicate that the user has accepted a tip. */ export interface HistoryTipAcceptedEvent { @@ -549,7 +494,7 @@ export interface HistoryPaymentSent { /** * A refund has been applied. */ -export interface HistoryRefund { +export interface HistoryRefunded { /** * Type tag. */ @@ -635,6 +580,8 @@ export interface HistoryWithdrawnEvent { */ withdrawSessionId: string; + withdrawalSource: WithdrawalSource; + /** * Amount that has been subtracted from the reserve's balance * for this withdrawal. @@ -689,9 +636,8 @@ export type HistoryEvent = HistoryEventBase & | HistoryPaymentAbortedEvent | HistoryPaymentSent | HistoryRefreshedEvent - | HistoryRefund + | HistoryRefunded | HistoryReserveBalanceUpdatedEvent - | HistoryReserveConfirmeEvent | HistoryReserveCreatedEvent | HistoryTipAcceptedEvent | HistoryTipDeclinedEvent diff --git a/src/wallet.ts b/src/wallet.ts index 3d28d089f..8decbc00a 100644 --- a/src/wallet.ts +++ b/src/wallet.ts @@ -724,7 +724,7 @@ export class Wallet { const totalFees = totalRefundFees; return { contractTerms: purchase.contractTerms, - hasRefund: purchase.lastRefundStatusTimestamp !== undefined, + hasRefund: purchase.timestampLastRefundStatus !== undefined, totalRefundAmount: totalRefundAmount, totalRefundAndRefreshFees: totalFees, }; diff --git a/src/webex/pages/payback.tsx b/src/webex/pages/payback.tsx index a25b5c6b2..2601887b0 100644 --- a/src/webex/pages/payback.tsx +++ b/src/webex/pages/payback.tsx @@ -57,7 +57,7 @@ function Payback() { <div> {reserves.map(r => ( <div> - <h2>Reserve for ${renderAmount(r.withdrawRemainingAmount)}</h2> + <h2>Reserve for ${renderAmount(r.amountWithdrawRemaining)}</h2> <ul> <li>Exchange: ${r.exchangeBaseUrl}</li> </ul> |