To get your transaction confirmed quicker, you will need to increase its effective feerate.
If your transaction was created with RBF enabled, your stuck transaction can simply be replaced with a new one that has a higher fee.
Otherwise, if you control any of the stuck transaction's outputs, you can use CPFP to increase your stuck transaction's effective feerate.
If you are not sure how to do RBF or CPFP, work with the tool you used to make the transaction (wallet software, exchange company, etc). This website only provides data about the Bitcoin network, so there is nothing it can do to help you get your transaction confirmed quicker.
+To get your transaction confirmed quicker, you will need to increase its effective feerate.
If your transaction was created with RBF enabled, your stuck transaction can simply be replaced with a new one that has a higher fee. Otherwise, if you control any of the stuck transaction's outputs, you can use CPFP to increase your stuck transaction's effective feerate.
If you are not sure how to do RBF or CPFP, work with the tool you used to make the transaction (wallet software, exchange company, etc).
Another option to get your transaction confirmed more quickly is Mempool Accelerator™. This service is still in development, but you can sign up for the waitlist to be notified when it's ready.
To get your transaction confirmed quicker, you will need to increase its effective feerate.
If your transaction was created with RBF enabled, your stuck transaction can simply be replaced with a new one that has a higher fee. Otherwise, if you control any of the stuck transaction's outputs, you can use CPFP to increase your stuck transaction's effective feerate.
If you are not sure how to do RBF or CPFP, work with the tool you used to make the transaction (wallet software, exchange company, etc).
Another option to get your transaction confirmed more quickly is Mempool Accelerator™. This service is still in development, but you can sign up for the waitlist to be notified when it's ready.
+To get your transaction confirmed quicker, you will need to increase its effective feerate.
If your transaction was created with RBF enabled, your stuck transaction can simply be replaced with a new one that has a higher fee. Otherwise, if you control any of the stuck transaction's outputs, you can use CPFP to increase your stuck transaction's effective feerate.
If you are not sure how to do RBF or CPFP, work with the tool you used to make the transaction (wallet software, exchange company, etc).
Another option to get your transaction confirmed more quickly is Mempool Accelerator™. This service is still in development, but you can sign up for the waitlist to be notified when it's ready.
Next block market rate | -- {{ estimate.targetFeeRate | number : '1.0-0' }} - | -sat/vB | -|
- Estimated extra fee required - | -- {{ math.max(0, estimate.nextBlockFee - estimate.txSummary.effectiveFee) | number }} - | -
- sats
- |
- |
Boost rate | ++ {{ maxRateOptions[selectFeeRateIndex].rate | number : '1.0-0' }} + | +sat/vB | +|
+ Boost fee + | ++ {{ maxRateOptions[selectFeeRateIndex].fee | number }} + | +
+ sats
+ |
+ |
Next block market rate | ++ {{ estimate.targetFeeRate | number : '1.0-0' }} + | +sat/vB | +|
+ Estimated extra fee required + | ++ {{ math.max(0, estimate.nextBlockFee - estimate.txSummary.effectiveFee) | number }} + | +
+ sats
+ |
+ |
- Estimated acceleration cost - | -- - {{ estimate.cost + estimate.mempoolBaseFee + estimate.vsizeFee | number }} - - | -
- sats
- |
- |
- |
- |||
+ Total cost + | ++ + {{ maxCost | number }} + + | +
+ sats
+
+ |
+ |
+ Estimated acceleration cost + | ++ + {{ estimate.cost + estimate.mempoolBaseFee + estimate.vsizeFee | number }} + + | +
+ sats
+ |
+ |
+ |
+ |||
- Maximum acceleration cost - | -- - {{ maxCost | number }} - - | -
- sats
-
- |
- |
- |
- |||
+ Maximum acceleration cost + | ++ + {{ maxCost | number }} + + | +
+ sats
+
+ |
+ |
+ |
+ |||
+ Accelerate + | +|||
- Accelerate - | -+ | {{ (acceleration.boost) | number }} sat | -+ | ~ |
diff --git a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts
index 1a0aacbb6..56a4a3d59 100644
--- a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts
+++ b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts
@@ -58,7 +58,7 @@ export class AccelerationsListComponent implements OnInit {
}
}
for (const acc of accelerations) {
- acc.boost = acc.feePaid - acc.baseFee - acc.vsizeFee;
+ acc.boost = acc.boostCost || (acc.feePaid - acc.baseFee - acc.vsizeFee);
}
if (this.widget) {
return of(accelerations.slice(0, 6));
diff --git a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts
index 58bc43c42..4ba401c37 100644
--- a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts
+++ b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts
@@ -116,15 +116,15 @@ export class AcceleratorDashboardComponent implements OnInit {
switchMap(([accelerations, blocks]) => {
const blockMap = {};
for (const block of blocks) {
- blockMap[block.id] = block;
+ blockMap[block.height] = block;
}
- const accelerationsByBlock: { [ hash: string ]: Acceleration[] } = {};
+ const accelerationsByBlock: { [ height: number ]: Acceleration[] } = {};
for (const acceleration of accelerations) {
- if (['completed_provisional', 'failed_provisional', 'completed'].includes(acceleration.status) && acceleration.pools.includes(blockMap[acceleration.blockHash]?.extras.pool.id)) {
- if (!accelerationsByBlock[acceleration.blockHash]) {
- accelerationsByBlock[acceleration.blockHash] = [];
+ if (['completed_provisional', 'failed_provisional', 'completed'].includes(acceleration.status) && acceleration.pools.includes(blockMap[acceleration.blockHeight]?.extras.pool.id)) {
+ if (!accelerationsByBlock[acceleration.blockHeight]) {
+ accelerationsByBlock[acceleration.blockHeight] = [];
}
- accelerationsByBlock[acceleration.blockHash].push(acceleration);
+ accelerationsByBlock[acceleration.blockHeight].push(acceleration);
}
}
return of(blocks.slice(0, 6).map(block => {
diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts
index 2040f7bb3..0d36bff11 100644
--- a/frontend/src/app/components/transaction/transaction.component.ts
+++ b/frontend/src/app/components/transaction/transaction.component.ts
@@ -297,7 +297,9 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy {
).subscribe((accelerationHistory) => {
for (const acceleration of accelerationHistory) {
if (acceleration.txid === this.txId && (acceleration.status === 'completed' || acceleration.status === 'completed_provisional')) {
- acceleration.acceleratedFeeRate = Math.max(acceleration.effectiveFee, acceleration.effectiveFee + acceleration.feePaid - acceleration.baseFee - acceleration.vsizeFee) / acceleration.effectiveVsize;
+ const boostCost = acceleration.boostCost || (acceleration.feePaid - acceleration.baseFee - acceleration.vsizeFee);
+ acceleration.acceleratedFeeRate = Math.max(acceleration.effectiveFee, acceleration.effectiveFee + boostCost) / acceleration.effectiveVsize;
+
this.accelerationInfo = acceleration;
}
}
diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts
index 6a2af5626..dfc594e49 100644
--- a/frontend/src/app/interfaces/node-api.interface.ts
+++ b/frontend/src/app/interfaces/node-api.interface.ts
@@ -396,6 +396,9 @@ export interface Acceleration {
acceleratedFeeRate?: number;
boost?: number;
+
+ boostCost?: number;
+ boostRate?: number;
}
export interface AccelerationHistoryParams {
From c8e7cc773ab858c87b885784764ff0ebeea0a516 Mon Sep 17 00:00:00 2001
From: Mononaut
- {{ (acceleration.boost) | number }} sat
+ {{ acceleration.boost | number }} sat
|
~
diff --git a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts
index 56a4a3d59..5acd77d5d 100644
--- a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts
+++ b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts
@@ -58,7 +58,7 @@ export class AccelerationsListComponent implements OnInit {
}
}
for (const acc of accelerations) {
- acc.boost = acc.boostCost || (acc.feePaid - acc.baseFee - acc.vsizeFee);
+ acc.boost = acc.boostCost != null ? acc.boostCost : (acc.feePaid - acc.baseFee - acc.vsizeFee);
}
if (this.widget) {
return of(accelerations.slice(0, 6));
From 7959188c063235f78cfe4251d487c750b6095760 Mon Sep 17 00:00:00 2001
From: Mononaut |
|
- @if (accelerationInfo && (accelerationInfo.acceleratedFeeRate >= tx.effectiveFeePerVsize)) {
+ @if (accelerationInfo?.acceleratedFeeRate && (!tx.effectiveFeePerVsize || accelerationInfo.acceleratedFeeRate >= tx.effectiveFeePerVsize)) {
First seen |
+
+ | First seen |
Accelerated fee rate |
} @else {
Effective fee rate |
diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts
index dcb0fa2a0..9ea0e89e5 100644
--- a/frontend/src/app/components/transaction/transaction.component.ts
+++ b/frontend/src/app/components/transaction/transaction.component.ts
@@ -93,6 +93,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy {
adjustedVsize: number | null;
pool: Pool | null;
auditStatus: AuditStatus | null;
+ isAcceleration: boolean = false;
filters: Filter[] = [];
showCpfpDetails = false;
fetchCpfp$ = new Subject
|
- @if ((auditStatus && auditStatus.accelerated) || accelerationInfo || (tx && tx.acceleration)) {
+ @if (isAcceleration) {
Accelerated
}
| |