Adding getBlocks support.
This commit is contained in:
parent
ae87694bc3
commit
62c78f5b08
@ -214,6 +214,7 @@ class Server {
|
|||||||
.get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId', routes.getTransaction)
|
.get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId', routes.getTransaction)
|
||||||
.get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/outspends', routes.getTransactionOutspends)
|
.get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/outspends', routes.getTransactionOutspends)
|
||||||
.get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash', routes.getBlock)
|
.get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash', routes.getBlock)
|
||||||
|
.get(config.MEMPOOL.API_URL_PREFIX + 'blocks/:height', routes.getBlocks)
|
||||||
.get(config.MEMPOOL.API_URL_PREFIX + 'blocks', routes.getBlocks)
|
.get(config.MEMPOOL.API_URL_PREFIX + 'blocks', routes.getBlocks)
|
||||||
.get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/txs/:index', routes.getBlockTransactions)
|
.get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/txs/:index', routes.getBlockTransactions)
|
||||||
.get(config.MEMPOOL.API_URL_PREFIX + 'block-height/:height', routes.getBlockHeight)
|
.get(config.MEMPOOL.API_URL_PREFIX + 'block-height/:height', routes.getBlockHeight)
|
||||||
|
@ -10,10 +10,12 @@ import websocketHandler from './api/websocket-handler';
|
|||||||
import bisqMarket from './api/bisq/markets-api';
|
import bisqMarket from './api/bisq/markets-api';
|
||||||
import { OptimizedStatistic, RequiredSpec, TransactionExtended } from './mempool.interfaces';
|
import { OptimizedStatistic, RequiredSpec, TransactionExtended } from './mempool.interfaces';
|
||||||
import { MarketsApiError } from './api/bisq/interfaces';
|
import { MarketsApiError } from './api/bisq/interfaces';
|
||||||
|
import { IEsploraApi } from './api/bitcoin/esplora-api.interface';
|
||||||
import donations from './api/donations';
|
import donations from './api/donations';
|
||||||
import logger from './logger';
|
import logger from './logger';
|
||||||
import bitcoinApi from './api/bitcoin/bitcoin-api-factory';
|
import bitcoinApi from './api/bitcoin/bitcoin-api-factory';
|
||||||
import transactionUtils from './api/transaction-utils';
|
import transactionUtils from './api/transaction-utils';
|
||||||
|
import blocks from './api/blocks';
|
||||||
|
|
||||||
class Routes {
|
class Routes {
|
||||||
private cache: { [date: string]: OptimizedStatistic[] } = {
|
private cache: { [date: string]: OptimizedStatistic[] } = {
|
||||||
@ -550,7 +552,38 @@ class Routes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async getBlocks(req: Request, res: Response) {
|
public async getBlocks(req: Request, res: Response) {
|
||||||
res.status(404).send('Not implemented');
|
try {
|
||||||
|
const returnBlocks: IEsploraApi.Block[] = [];
|
||||||
|
const latestBlockHeight = blocks.getCurrentBlockHeight();
|
||||||
|
const fromHeight = parseInt(req.params.height, 10) || latestBlockHeight;
|
||||||
|
const localBlocks = blocks.getBlocks();
|
||||||
|
|
||||||
|
// See if block hight exist in local cache to skip the hash lookup
|
||||||
|
const blockByHeight = localBlocks.find((b) => b.height === fromHeight);
|
||||||
|
let startFromHash: string | null = null;
|
||||||
|
if (blockByHeight) {
|
||||||
|
startFromHash = blockByHeight.id;
|
||||||
|
} else {
|
||||||
|
startFromHash = await bitcoinApi.$getBlockHash(fromHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
let nextHash = startFromHash;
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
const localBlock = localBlocks.find((b) => b.id === nextHash);
|
||||||
|
if (localBlock) {
|
||||||
|
returnBlocks.push(localBlock);
|
||||||
|
nextHash = localBlock.previousblockhash;
|
||||||
|
} else {
|
||||||
|
const block = await bitcoinApi.$getBlock(nextHash);
|
||||||
|
returnBlocks.push(block);
|
||||||
|
nextHash = block.previousblockhash;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json(returnBlocks);
|
||||||
|
} catch (e) {
|
||||||
|
res.status(500).send(e.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getBlockTransactions(req: Request, res: Response) {
|
public async getBlockTransactions(req: Request, res: Response) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user