diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html
index ae418ffd3..4e3425d5e 100644
--- a/frontend/src/app/components/transaction/transaction.component.html
+++ b/frontend/src/app/components/transaction/transaction.component.html
@@ -40,64 +40,39 @@
-
-
-
-
-
-
+ @if (!error) {
+
+
+ @if (isMobile) {
-
- Timestamp |
-
- {{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm' }}
-
- |
-
- 0">
-
- Confirmed |
- |
-
-
-
- Features |
-
-
- |
-
-
- Audit |
-
-
- Coinbase
- Expected in Block
- Seen in Mempool
- Not seen in Mempool
- Added
- Prioritized
- Conflict
-
- |
-
-
- |
-
-
+
+
+
+
+
+ } @else {
+
-
+ }
+
+ }
-
+
@@ -113,69 +88,6 @@
-
-
-
-
-
-
-
-
-
- |
- |
-
-
-
- First seen |
- |
-
-
-
-
- ETA |
-
-
-
-
-
- = 7" [ngIfElse]="belowBlockLimit">
-
- In several hours (or more)
- Accelerate
-
-
-
-
-
-
-
-
-
- Accelerate
-
-
-
-
- |
-
-
- Features |
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
@@ -364,42 +276,7 @@
-
-
-
-
Flow
@@ -525,65 +402,264 @@
-
-
-
-
+
+ @if (tx?.status?.confirmed) {
+
+
+ } @else {
+
+
+ }
+
+ @if (tx?.status?.confirmed) {
+
+ }
+
+
+
+
+
+
+
+ @if (tx?.status?.confirmed) {
+
+ }
+
+
+
+ @if (!isLoadingTx) {
+
+ Timestamp |
+
+ {{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm' }}
+
+ |
+
+ } @else {
+
+ }
+
+
+
+ @if (!isLoadingTx) {
+ @if (transactionTime > 0) {
- Fee |
- {{ tx.fee | number }} sat |
+ Confirmed |
+ |
+ }
+ } @else {
+
+ }
+
+
+
+ @if (!isLoadingTx && transactionTime !== -1) {
+
+ First seen |
+ |
+
+ } @else {
+
+ }
+
+
+
+ @if (network !== 'liquid' && network !== 'liquidtestnet') {
+ @if (!isLoadingTx) {
+ @if (featuresEnabled) {
+
+ Features |
+
+
+ |
+
+ }
+ } @else {
+
+ }
+ }
+
+
+
+ @if (network === '') {
+ @if (!isLoadingTx) {
+ @if (auditStatus) {
+
+ Audit |
+
+
+ @if (auditStatus.coinbase) {
+ Coinbase
+ } @else if (auditStatus.expected) {
+ Expected in Block
+ } @else if (auditStatus.seen) {
+ Seen in Mempool
+ } @else if (!auditStatus.conflict) {
+ Not seen in Mempool
+ }
+ @if (auditStatus.added) {
+ Added
+ }
+ @if (auditStatus.prioritized) {
+ Prioritized
+ }
+ @if (auditStatus.conflict) {
+ Conflict
+ }
+
+ |
+
+ }
+ } @else {
+
+ }
+ }
+
+
+
+ @if (!isLoadingTx) {
+ @if (!replaced && !isCached) {
- Fee rate |
+ ETA |
-
-
-
-
-
+ @if (this.mempoolPosition?.block == null) {
+
+ } @else if (this.mempoolPosition.block >= 7) {
+
+ In several hours (or more)
+ @if (!tx.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !tx?.acceleration) {
+ Accelerate
+ }
+
+ } @else if (network === 'liquid' || network === 'liquidtestnet') {
+
+ } @else {
+
+
+ @if (!tx.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !tx?.acceleration) {
+ Accelerate
+ }
+
+ }
|
-
- Accelerated fee rate |
- Effective fee rate |
+ }
+ } @else {
+
+ }
+
+
+
+ @if (!isLoadingTx) {
+ @if (((auditStatus && auditStatus.accelerated) || accelerationInfo || (tx && tx.acceleration)) || filters.length) {
+
+
+
+ |
+
+ @if ((auditStatus && auditStatus.accelerated) || accelerationInfo || (tx && tx.acceleration)) {
+ Accelerated
+ }
+
+ {{ filter.label }}
+
+ |
+
+ }
+ } @else {
+
+ }
+
+
+
+ @if (!isLoadingTx) {
+
+ Fee |
+ {{ tx.fee | number }} sat |
+
+ } @else {
+
+ }
+
+
+
+ @if (!isLoadingTx) {
+
+ Fee rate |
+
+
+ @if (tx?.status?.confirmed && tx.fee && !hasEffectiveFeeRate && !accelerationInfo) {
+
+
+ }
+ |
+
+ } @else {
+
+ }
+
+
+
+ @if (!isLoadingTx) {
+ @if ((cpfpInfo && hasEffectiveFeeRate) || accelerationInfo) {
+
+ @if (tx.acceleration || accelerationInfo) {
+ Accelerated fee rate |
+ } @else {
+ Effective fee rate |
+ }
-
-
+ @if (accelerationInfo) {
+
+ } @else {
+
+ }
-
-
-
+ @if (tx?.status?.confirmed && !tx.acceleration && !accelerationInfo && tx.fee && tx.effectiveFeePerVsize) {
+
+ }
-
+ @if (hasCpfp) {
+
+ }
|
-
- Miner |
-
-
- {{ pool.name }}
-
- |
-
-
- |
-
-
-
+ }
+ } @else {
+
+ }
-
-
-
-
- |
-
- Accelerated
-
- {{ filter.label }}
-
- |
-
+
+ @if (network === '') {
+ @if (!isLoadingTx) {
+
+ Miner |
+ @if (pool) {
+
+
+ {{ pool.name }}
+
+ |
+ } @else {
+
+
+ |
+ }
+
+ } @else {
+
+ }
+ }
+
+
+
+ |
+
+
\ 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 93fb97fac..ab55d706a 100644
--- a/frontend/src/app/components/transaction/transaction.component.ts
+++ b/frontend/src/app/components/transaction/transaction.component.ts
@@ -87,6 +87,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy {
rbfReplaces: string[];
rbfInfo: RbfTree;
cpfpInfo: CpfpInfo | null;
+ hasCpfp: boolean = false;
accelerationInfo: Acceleration | null = null;
sigops: number | null;
adjustedVsize: number | null;
@@ -491,10 +492,10 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy {
txFeePerVSize: tx.effectiveFeePerVsize,
mempoolPosition: this.mempoolPosition,
});
- this.cpfpInfo = {
+ this.setCpfpInfo({
ancestors: tx.ancestors,
bestDescendant: tx.bestDescendant,
- };
+ });
const hasRelatives = !!(tx.ancestors?.length || tx.bestDescendant);
this.hasEffectiveFeeRate = hasRelatives || (tx.effectiveFeePerVsize && (Math.abs(tx.effectiveFeePerVsize - tx.feePerVsize) > 0.01));
} else {
@@ -646,6 +647,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy {
setCpfpInfo(cpfpInfo: CpfpInfo): void {
if (!cpfpInfo || !this.tx) {
this.cpfpInfo = null;
+ this.hasCpfp = false;
this.hasEffectiveFeeRate = false;
return;
}
@@ -675,6 +677,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy {
this.sigops = this.cpfpInfo.sigops;
this.adjustedVsize = this.cpfpInfo.adjustedVsize;
}
+ this.hasCpfp =!!(this.cpfpInfo && (this.cpfpInfo.bestDescendant || this.cpfpInfo.descendants?.length || this.cpfpInfo.ancestors?.length));
this.hasEffectiveFeeRate = hasRelatives || (this.tx.effectiveFeePerVsize && (Math.abs(this.tx.effectiveFeePerVsize - this.tx.feePerVsize) > 0.01));
}