diff --git a/frontend/src/app/components/transaction/liquid-ublinding.ts b/frontend/src/app/components/transaction/liquid-ublinding.ts index cefaa4f77..f3ace2136 100644 --- a/frontend/src/app/components/transaction/liquid-ublinding.ts +++ b/frontend/src/app/components/transaction/liquid-ublinding.ts @@ -58,7 +58,7 @@ export class LiquidUnblinding { // Lookup all transaction inputs/outputs and attach the unblinded data tryUnblindTx(tx: Transaction) { if (tx) { - if (tx._unblinded) { return tx._unblinded; } + if (tx._unblinded) { return tx; } let matched = 0; if (tx.vout !== undefined) { tx.vout.forEach(vout => matched += +this.tryUnblindOut(vout)); @@ -71,7 +71,7 @@ export class LiquidUnblinding { throw new Error(`Invalid blinding data.`) } tx._deduced = false; // invalidate cache so deduction is attempted again - return tx._unblinded; + return tx; } } } @@ -131,8 +131,9 @@ export class LiquidUnblinding { const blinders = this.parseBlinders(windowLocationHash); if (blinders) { this.commitments = await this.makeCommitmentMap(blinders); - this.tryUnblindTx(tx); + return this.tryUnblindTx(tx); } } + throw new Error('Invalid blinding data.'); } } \ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index b20241834..b9a4ebffa 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -10,7 +10,7 @@ import { map } from 'rxjs/operators'; import { Transaction, Block } from '../../interfaces/electrs.interface'; -import { of, merge, Subscription, Observable, Subject, timer, combineLatest, } from 'rxjs'; +import { of, merge, Subscription, Observable, Subject, timer, combineLatest, from } from 'rxjs'; import { StateService } from '../../services/state.service'; import { WebsocketService } from '../../services/websocket.service'; import { AudioService } from 'src/app/services/audio.service'; @@ -154,21 +154,25 @@ export class TransactionComponent implements OnInit, OnDestroy { transactionObservable$, this.stateService.mempoolTransactions$ ); + }), + switchMap((tx) => { + if (this.network === 'liquid') { + return from(this.liquidUnblinding.checkUnblindedTx(tx)) + .pipe( + catchError((error) => { + this.errorUnblinded = error; + return of(tx); + }) + ) + } + return of(tx); }) ) - .subscribe(async (tx: Transaction) => { + .subscribe((tx: Transaction) => { if (!tx) { return; } - if (this.network === 'liquid') { - try { - await this.liquidUnblinding.checkUnblindedTx(tx) - } catch (error) { - this.errorUnblinded = error; - } - } - this.tx = tx; if (tx.fee === undefined) { this.tx.fee = 0;