diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index fbbe48061..e4e16af3d 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -2,6 +2,7 @@ const config = require('../../mempool-config.json'); import bitcoinApi from './bitcoin/electrs-api'; import memPool from './mempool'; import { Block, TransactionExtended } from '../interfaces'; +import { Common } from './common'; class Blocks { private blocks: Block[] = []; @@ -73,8 +74,8 @@ class Blocks { block.reward = transactions[0].vout.reduce((acc, curr) => acc + curr.value, 0); transactions.sort((a, b) => b.feePerVsize - a.feePerVsize); - block.medianFee = transactions.length > 1 ? this.median(transactions.map((tx) => tx.feePerVsize)) : 0; - block.feeRange = transactions.length > 1 ? this.getFeesInRange(transactions, 8) : [0, 0]; + block.medianFee = transactions.length > 1 ? Common.median(transactions.map((tx) => tx.feePerVsize)) : 0; + block.feeRange = transactions.length > 1 ? Common.getFeesInRange(transactions, 8) : [0, 0]; block.coinbaseTx = transactions[0]; this.blocks.push(block); @@ -89,31 +90,6 @@ class Blocks { console.log('updateBlocks error', err); } } - - private median(numbers: number[]) { - let medianNr = 0; - const numsLen = numbers.length; - if (numsLen % 2 === 0) { - medianNr = (numbers[numsLen / 2 - 1] + numbers[numsLen / 2]) / 2; - } else { - medianNr = numbers[(numsLen - 1) / 2]; - } - return medianNr; - } - - private getFeesInRange(transactions: any[], rangeLength: number) { - const arr = [transactions[transactions.length - 1].feePerVsize]; - const chunk = 1 / (rangeLength - 1); - let itemsToAdd = rangeLength - 2; - - while (itemsToAdd > 0) { - arr.push(transactions[Math.floor(transactions.length * chunk * itemsToAdd)].feePerVsize); - itemsToAdd--; - } - - arr.push(transactions[1].feePerVsize); - return arr; - } } export default new Blocks(); diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts new file mode 100644 index 000000000..2d63804f7 --- /dev/null +++ b/backend/src/api/common.ts @@ -0,0 +1,28 @@ +import { TransactionExtended } from '../interfaces'; + +export class Common { + static median(numbers: number[]) { + let medianNr = 0; + const numsLen = numbers.length; + if (numsLen % 2 === 0) { + medianNr = (numbers[numsLen / 2 - 1] + numbers[numsLen / 2]) / 2; + } else { + medianNr = numbers[(numsLen - 1) / 2]; + } + return medianNr; + } + + static getFeesInRange(transactions: TransactionExtended[], rangeLength: number) { + const arr = [transactions[transactions.length - 1].feePerVsize]; + const chunk = 1 / (rangeLength - 1); + let itemsToAdd = rangeLength - 2; + + while (itemsToAdd > 0) { + arr.push(transactions[Math.floor(transactions.length * chunk * itemsToAdd)].feePerVsize); + itemsToAdd--; + } + + arr.push(transactions[1].feePerVsize); + return arr; + } +} diff --git a/backend/src/api/mempool-blocks.ts b/backend/src/api/mempool-blocks.ts index a142d50da..a39330d5e 100644 --- a/backend/src/api/mempool-blocks.ts +++ b/backend/src/api/mempool-blocks.ts @@ -1,5 +1,6 @@ const config = require('../../mempool-config.json'); import { MempoolBlock, TransactionExtended } from '../interfaces'; +import { Common } from './common'; class MempoolBlocks { private mempoolBlocks: MempoolBlock[] = []; @@ -46,7 +47,8 @@ class MempoolBlocks { return mempoolBlocks; } - private dataToMempoolBlocks(transactions: TransactionExtended[], blockSize: number, blockVSize: number, blocksIndex: number): MempoolBlock { + private dataToMempoolBlocks(transactions: TransactionExtended[], + blockSize: number, blockVSize: number, blocksIndex: number): MempoolBlock { let rangeLength = 4; if (blocksIndex === 0) { rangeLength = 8; @@ -61,35 +63,10 @@ class MempoolBlocks { blockVSize: blockVSize, nTx: transactions.length, totalFees: transactions.reduce((acc, cur) => acc + cur.fee, 0), - medianFee: this.median(transactions.map((tx) => tx.feePerVsize)), - feeRange: this.getFeesInRange(transactions, rangeLength), + medianFee: Common.median(transactions.map((tx) => tx.feePerVsize)), + feeRange: Common.getFeesInRange(transactions, rangeLength), }; } - - private median(numbers: number[]) { - let medianNr = 0; - const numsLen = numbers.length; - if (numsLen % 2 === 0) { - medianNr = (numbers[numsLen / 2 - 1] + numbers[numsLen / 2]) / 2; - } else { - medianNr = numbers[(numsLen - 1) / 2]; - } - return medianNr; - } - - private getFeesInRange(transactions: TransactionExtended[], rangeLength: number) { - const arr = [transactions[transactions.length - 1].feePerVsize]; - const chunk = 1 / (rangeLength - 1); - let itemsToAdd = rangeLength - 2; - - while (itemsToAdd > 0) { - arr.push(transactions[Math.floor(transactions.length * chunk * itemsToAdd)].feePerVsize); - itemsToAdd--; - } - - arr.push(transactions[0].feePerVsize); - return arr; - } } export default new MempoolBlocks();