Merge pull request #4481 from mempool/mononaut/improve-acceleration-tracking
Improve acceleration tracking
This commit is contained in:
commit
08e9142d57
@ -9,7 +9,7 @@ import loadingIndicators from './loading-indicators';
|
|||||||
import bitcoinClient from './bitcoin/bitcoin-client';
|
import bitcoinClient from './bitcoin/bitcoin-client';
|
||||||
import bitcoinSecondClient from './bitcoin/bitcoin-second-client';
|
import bitcoinSecondClient from './bitcoin/bitcoin-second-client';
|
||||||
import rbfCache from './rbf-cache';
|
import rbfCache from './rbf-cache';
|
||||||
import accelerationApi, { Acceleration } from './services/acceleration';
|
import { Acceleration } from './services/acceleration';
|
||||||
import redisCache from './redis-cache';
|
import redisCache from './redis-cache';
|
||||||
|
|
||||||
class Mempool {
|
class Mempool {
|
||||||
@ -185,7 +185,7 @@ class Mempool {
|
|||||||
return txTimes;
|
return txTimes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async $updateMempool(transactions: string[], pollRate: number): Promise<void> {
|
public async $updateMempool(transactions: string[], accelerations: Acceleration[] | null, pollRate: number): Promise<void> {
|
||||||
logger.debug(`Updating mempool...`);
|
logger.debug(`Updating mempool...`);
|
||||||
|
|
||||||
// warn if this run stalls the main loop for more than 2 minutes
|
// warn if this run stalls the main loop for more than 2 minutes
|
||||||
@ -330,7 +330,7 @@ class Mempool {
|
|||||||
const newTransactionsStripped = newTransactions.map((tx) => Common.stripTransaction(tx));
|
const newTransactionsStripped = newTransactions.map((tx) => Common.stripTransaction(tx));
|
||||||
this.latestTransactions = newTransactionsStripped.concat(this.latestTransactions).slice(0, 6);
|
this.latestTransactions = newTransactionsStripped.concat(this.latestTransactions).slice(0, 6);
|
||||||
|
|
||||||
const accelerationDelta = await this.$updateAccelerations();
|
const accelerationDelta = accelerations != null ? await this.$updateAccelerations(accelerations) : [];
|
||||||
if (accelerationDelta.length) {
|
if (accelerationDelta.length) {
|
||||||
hasChange = true;
|
hasChange = true;
|
||||||
}
|
}
|
||||||
@ -370,14 +370,12 @@ class Mempool {
|
|||||||
return this.accelerations;
|
return this.accelerations;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async $updateAccelerations(): Promise<string[]> {
|
public $updateAccelerations(newAccelerations: Acceleration[]): string[] {
|
||||||
if (!config.MEMPOOL_SERVICES.ACCELERATIONS) {
|
if (!config.MEMPOOL_SERVICES.ACCELERATIONS) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const newAccelerations = await accelerationApi.$fetchAccelerations();
|
|
||||||
|
|
||||||
const changed: string[] = [];
|
const changed: string[] = [];
|
||||||
|
|
||||||
const newAccelerationMap: { [txid: string]: Acceleration } = {};
|
const newAccelerationMap: { [txid: string]: Acceleration } = {};
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { query } from '../../utils/axios-query';
|
|
||||||
import config from '../../config';
|
import config from '../../config';
|
||||||
|
import logger from '../../logger';
|
||||||
import { BlockExtended, PoolTag } from '../../mempool.interfaces';
|
import { BlockExtended, PoolTag } from '../../mempool.interfaces';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
export interface Acceleration {
|
export interface Acceleration {
|
||||||
txid: string,
|
txid: string,
|
||||||
@ -9,10 +10,15 @@ export interface Acceleration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class AccelerationApi {
|
class AccelerationApi {
|
||||||
public async $fetchAccelerations(): Promise<Acceleration[]> {
|
public async $fetchAccelerations(): Promise<Acceleration[] | null> {
|
||||||
if (config.MEMPOOL_SERVICES.ACCELERATIONS) {
|
if (config.MEMPOOL_SERVICES.ACCELERATIONS) {
|
||||||
const response = await query(`${config.MEMPOOL_SERVICES.API}/accelerator/accelerations`);
|
try {
|
||||||
return (response as Acceleration[]) || [];
|
const response = await axios.get(`${config.MEMPOOL_SERVICES.API}/accelerator/accelerations`, { responseType: 'json', timeout: 10000 });
|
||||||
|
return response.data as Acceleration[];
|
||||||
|
} catch (e) {
|
||||||
|
logger.warn('Failed to fetch current accelerations from the mempool services backend: ' + (e instanceof Error ? e.message : e));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ import { AxiosError } from 'axios';
|
|||||||
import v8 from 'v8';
|
import v8 from 'v8';
|
||||||
import { formatBytes, getBytesUnit } from './utils/format';
|
import { formatBytes, getBytesUnit } from './utils/format';
|
||||||
import redisCache from './api/redis-cache';
|
import redisCache from './api/redis-cache';
|
||||||
|
import accelerationApi from './api/services/acceleration';
|
||||||
|
|
||||||
class Server {
|
class Server {
|
||||||
private wss: WebSocket.Server | undefined;
|
private wss: WebSocket.Server | undefined;
|
||||||
@ -205,10 +206,11 @@ class Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const newMempool = await bitcoinApi.$getRawMempool();
|
const newMempool = await bitcoinApi.$getRawMempool();
|
||||||
|
const newAccelerations = await accelerationApi.$fetchAccelerations();
|
||||||
const numHandledBlocks = await blocks.$updateBlocks();
|
const numHandledBlocks = await blocks.$updateBlocks();
|
||||||
const pollRate = config.MEMPOOL.POLL_RATE_MS * (indexer.indexerIsRunning() ? 10 : 1);
|
const pollRate = config.MEMPOOL.POLL_RATE_MS * (indexer.indexerIsRunning() ? 10 : 1);
|
||||||
if (numHandledBlocks === 0) {
|
if (numHandledBlocks === 0) {
|
||||||
await memPool.$updateMempool(newMempool, pollRate);
|
await memPool.$updateMempool(newMempool, newAccelerations, pollRate);
|
||||||
}
|
}
|
||||||
indexer.$run();
|
indexer.$run();
|
||||||
priceUpdater.$run();
|
priceUpdater.$run();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user