Liquid unblinding: Replacing async/await with observable.

This commit is contained in:
softsimon 2021-08-18 14:05:40 +03:00
parent 7fe9993f91
commit f5bc9ced0a
No known key found for this signature in database
GPG Key ID: 488D7DCFB5A430D7
2 changed files with 18 additions and 13 deletions

View File

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

View File

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