Merge pull request #2763 from mempool/mononaut/fix-tx-unfurler

Fix broken transaction preview unfurler page
This commit is contained in:
wiz 2022-12-01 16:01:08 +09:00 committed by GitHub
commit 0b54035e80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 36 deletions

View File

@ -63,40 +63,14 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy {
this.fetchCpfpSubscription = this.fetchCpfp$ this.fetchCpfpSubscription = this.fetchCpfp$
.pipe( .pipe(
switchMap((txId) => switchMap((txId) =>
this.apiService this.apiService.getCpfpinfo$(txId).pipe(
.getCpfpinfo$(txId) catchError((err) => {
.pipe(retryWhen((errors) => errors.pipe(delay(2000)))) return of(null);
})
)
) )
) )
.subscribe((cpfpInfo) => { .subscribe((cpfpInfo) => {
if (!this.tx) {
return;
}
if (cpfpInfo.effectiveFeePerVsize) {
this.tx.effectiveFeePerVsize = cpfpInfo.effectiveFeePerVsize;
} else {
const lowerFeeParents = cpfpInfo.ancestors.filter(
(parent) => parent.fee / (parent.weight / 4) < this.tx.feePerVsize
);
let totalWeight =
this.tx.weight +
lowerFeeParents.reduce((prev, val) => prev + val.weight, 0);
let totalFees =
this.tx.fee +
lowerFeeParents.reduce((prev, val) => prev + val.fee, 0);
if (cpfpInfo?.bestDescendant) {
totalWeight += cpfpInfo?.bestDescendant.weight;
totalFees += cpfpInfo?.bestDescendant.fee;
}
this.tx.effectiveFeePerVsize = totalFees / (totalWeight / 4);
}
if (!this.tx.status.confirmed) {
this.stateService.markBlock$.next({
txFeePerVSize: this.tx.effectiveFeePerVsize,
});
}
this.cpfpInfo = cpfpInfo; this.cpfpInfo = cpfpInfo;
this.openGraphService.waitOver('cpfp-data-' + this.txId); this.openGraphService.waitOver('cpfp-data-' + this.txId);
}); });

View File

@ -7,10 +7,11 @@ import {
catchError, catchError,
retryWhen, retryWhen,
delay, delay,
map map,
mergeMap
} from 'rxjs/operators'; } from 'rxjs/operators';
import { Transaction } from '../../interfaces/electrs.interface'; import { Transaction } from '../../interfaces/electrs.interface';
import { of, merge, Subscription, Observable, Subject, timer, combineLatest, from } from 'rxjs'; import { of, merge, Subscription, Observable, Subject, timer, combineLatest, from, throwError } from 'rxjs';
import { StateService } from '../../services/state.service'; import { StateService } from '../../services/state.service';
import { WebsocketService } from '../../services/websocket.service'; import { WebsocketService } from '../../services/websocket.service';
import { AudioService } from '../../services/audio.service'; import { AudioService } from '../../services/audio.service';
@ -110,11 +111,24 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy {
switchMap((txId) => switchMap((txId) =>
this.apiService this.apiService
.getCpfpinfo$(txId) .getCpfpinfo$(txId)
.pipe(retryWhen((errors) => errors.pipe(delay(2000)))) .pipe(retryWhen((errors) => errors.pipe(
) mergeMap((error) => {
if (!this.tx?.status || this.tx.status.confirmed) {
return throwError(error);
} else {
return of(null);
}
}),
delay(2000)
)))
),
catchError(() => {
return of(null);
})
) )
.subscribe((cpfpInfo) => { .subscribe((cpfpInfo) => {
if (!this.tx) { if (!cpfpInfo || !this.tx) {
this.cpfpInfo = null;
return; return;
} }
if (cpfpInfo.effectiveFeePerVsize) { if (cpfpInfo.effectiveFeePerVsize) {