From 1498db3b33fa325892018eba8eea034c03f11964 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 26 May 2024 20:40:50 +0000 Subject: [PATCH] Backend support for multi-pool acceleration details --- backend/src/api/bitcoin/bitcoin.routes.ts | 3 ++- backend/src/api/mempool-blocks.ts | 11 +++++++---- backend/src/api/websocket-handler.ts | 4 ++++ backend/src/mempool.interfaces.ts | 4 +++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index ec63f4ff8..fd04707b5 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -160,7 +160,8 @@ class BitcoinRoutes { effectiveFeePerVsize: tx.effectiveFeePerVsize || null, sigops: tx.sigops, adjustedVsize: tx.adjustedVsize, - acceleration: tx.acceleration + acceleration: tx.acceleration, + acceleratedBy: tx.acceleratedBy || undefined, }); return; } diff --git a/backend/src/api/mempool-blocks.ts b/backend/src/api/mempool-blocks.ts index bded93846..670ad1933 100644 --- a/backend/src/api/mempool-blocks.ts +++ b/backend/src/api/mempool-blocks.ts @@ -6,6 +6,7 @@ import config from '../config'; import { Worker } from 'worker_threads'; import path from 'path'; import mempool from './mempool'; +import { Acceleration } from './services/acceleration'; const MAX_UINT32 = Math.pow(2, 32) - 1; @@ -333,7 +334,7 @@ class MempoolBlocks { } } - private processBlockTemplates(mempool: { [txid: string]: MempoolTransactionExtended }, blocks: string[][], blockWeights: number[] | null, rates: [string, number][], clusters: string[][], candidates: GbtCandidates | undefined, accelerations, accelerationPool, saveResults): MempoolBlockWithTransactions[] { + private processBlockTemplates(mempool: { [txid: string]: MempoolTransactionExtended }, blocks: string[][], blockWeights: number[] | null, rates: [string, number][], clusters: string[][], candidates: GbtCandidates | undefined, accelerations: { [txid: string]: Acceleration }, accelerationPool, saveResults): MempoolBlockWithTransactions[] { for (const txid of Object.keys(candidates?.txs ?? mempool)) { if (txid in mempool) { mempool[txid].cpfpDirty = false; @@ -396,7 +397,7 @@ class MempoolBlocks { } } - const isAccelerated : { [txid: string]: boolean } = {}; + const isAcceleratedBy : { [txid: string]: number[] | false } = {}; const sizeLimit = (config.MEMPOOL.BLOCK_WEIGHT_UNITS / 4) * 1.2; // update this thread's mempool with the results @@ -427,17 +428,19 @@ class MempoolBlocks { }; const acceleration = accelerations[txid]; - if (isAccelerated[txid] || (acceleration && (!accelerationPool || acceleration.pools.includes(accelerationPool)))) { + if (isAcceleratedBy[txid] || (acceleration && (!accelerationPool || acceleration.pools.includes(accelerationPool)))) { if (!mempoolTx.acceleration) { mempoolTx.cpfpDirty = true; } mempoolTx.acceleration = true; + mempoolTx.acceleratedBy = isAcceleratedBy[txid] || acceleration?.pools; for (const ancestor of mempoolTx.ancestors || []) { if (!mempool[ancestor.txid].acceleration) { mempool[ancestor.txid].cpfpDirty = true; } mempool[ancestor.txid].acceleration = true; - isAccelerated[ancestor.txid] = true; + mempool[ancestor.txid].acceleratedBy = mempoolTx.acceleratedBy; + isAcceleratedBy[ancestor.txid] = mempoolTx.acceleratedBy; } } else { if (mempoolTx.acceleration) { diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index f92e6cdfe..57c5401fd 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -820,6 +820,7 @@ class WebsocketHandler { position: { ...mempoolTx.position, accelerated: mempoolTx.acceleration || undefined, + acceleratedBy: mempoolTx.acceleratedBy || undefined, } }; if (!mempoolTx.cpfpChecked && !mempoolTx.acceleration) { @@ -858,6 +859,7 @@ class WebsocketHandler { txInfo.position = { ...mempoolTx.position, accelerated: mempoolTx.acceleration || undefined, + acceleratedBy: mempoolTx.acceleratedBy || undefined, }; if (!mempoolTx.cpfpChecked) { calculateCpfp(mempoolTx, newMempool); @@ -1134,6 +1136,7 @@ class WebsocketHandler { position: { ...mempoolTx.position, accelerated: mempoolTx.acceleration || undefined, + acceleratedBy: mempoolTx.acceleratedBy || undefined, } }); } @@ -1153,6 +1156,7 @@ class WebsocketHandler { ...mempoolTx.position, }, accelerated: mempoolTx.acceleration || undefined, + acceleratedBy: mempoolTx.acceleratedBy || undefined, }; } } diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index 884ae5c1b..a2951b4d6 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -111,6 +111,7 @@ export interface TransactionExtended extends IEsploraApi.Transaction { vsize: number, }; acceleration?: boolean; + acceleratedBy?: number[]; replacement?: boolean; uid?: number; flags?: number; @@ -432,7 +433,7 @@ export interface OptimizedStatistic { export interface TxTrackingInfo { replacedBy?: string, - position?: { block: number, vsize: number, accelerated?: boolean }, + position?: { block: number, vsize: number, accelerated?: boolean, acceleratedBy?: number[] }, cpfp?: { ancestors?: Ancestor[], bestDescendant?: Ancestor | null, @@ -443,6 +444,7 @@ export interface TxTrackingInfo { }, utxoSpent?: { [vout: number]: { vin: number, txid: string } }, accelerated?: boolean, + acceleratedBy?: number[], confirmed?: boolean }