Duplicate code fix.

This commit is contained in:
softsimon 2020-05-24 16:29:30 +07:00
parent f4117df63d
commit 4d2fcf96c6
No known key found for this signature in database
GPG Key ID: 488D7DCFB5A430D7
3 changed files with 36 additions and 55 deletions

View File

@ -2,6 +2,7 @@ const config = require('../../mempool-config.json');
import bitcoinApi from './bitcoin/electrs-api'; import bitcoinApi from './bitcoin/electrs-api';
import memPool from './mempool'; import memPool from './mempool';
import { Block, TransactionExtended } from '../interfaces'; import { Block, TransactionExtended } from '../interfaces';
import { Common } from './common';
class Blocks { class Blocks {
private blocks: Block[] = []; private blocks: Block[] = [];
@ -73,8 +74,8 @@ class Blocks {
block.reward = transactions[0].vout.reduce((acc, curr) => acc + curr.value, 0); block.reward = transactions[0].vout.reduce((acc, curr) => acc + curr.value, 0);
transactions.sort((a, b) => b.feePerVsize - a.feePerVsize); transactions.sort((a, b) => b.feePerVsize - a.feePerVsize);
block.medianFee = transactions.length > 1 ? this.median(transactions.map((tx) => tx.feePerVsize)) : 0; block.medianFee = transactions.length > 1 ? Common.median(transactions.map((tx) => tx.feePerVsize)) : 0;
block.feeRange = transactions.length > 1 ? this.getFeesInRange(transactions, 8) : [0, 0]; block.feeRange = transactions.length > 1 ? Common.getFeesInRange(transactions, 8) : [0, 0];
block.coinbaseTx = transactions[0]; block.coinbaseTx = transactions[0];
this.blocks.push(block); this.blocks.push(block);
@ -89,31 +90,6 @@ class Blocks {
console.log('updateBlocks error', err); 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(); export default new Blocks();

28
backend/src/api/common.ts Normal file
View File

@ -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;
}
}

View File

@ -1,5 +1,6 @@
const config = require('../../mempool-config.json'); const config = require('../../mempool-config.json');
import { MempoolBlock, TransactionExtended } from '../interfaces'; import { MempoolBlock, TransactionExtended } from '../interfaces';
import { Common } from './common';
class MempoolBlocks { class MempoolBlocks {
private mempoolBlocks: MempoolBlock[] = []; private mempoolBlocks: MempoolBlock[] = [];
@ -46,7 +47,8 @@ class MempoolBlocks {
return 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; let rangeLength = 4;
if (blocksIndex === 0) { if (blocksIndex === 0) {
rangeLength = 8; rangeLength = 8;
@ -61,35 +63,10 @@ class MempoolBlocks {
blockVSize: blockVSize, blockVSize: blockVSize,
nTx: transactions.length, nTx: transactions.length,
totalFees: transactions.reduce((acc, cur) => acc + cur.fee, 0), totalFees: transactions.reduce((acc, cur) => acc + cur.fee, 0),
medianFee: this.median(transactions.map((tx) => tx.feePerVsize)), medianFee: Common.median(transactions.map((tx) => tx.feePerVsize)),
feeRange: this.getFeesInRange(transactions, rangeLength), 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(); export default new MempoolBlocks();