Skip to content

Commit d752027

Browse files
feat(api): cache fee estimates that hit rpc
1 parent b2917e6 commit d752027

File tree

1 file changed

+8
-2
lines changed
  • packages/bitcore-node/src/routes/api

1 file changed

+8
-2
lines changed

packages/bitcore-node/src/routes/api/fee.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
import { Request, Response } from 'express';
22
import { ChainStateProvider } from '../../providers/chain-state';
33
const router = require('express').Router({ mergeParams: true });
4+
const feeCache = {};
45

56
router.get('/:target', async (req: Request, res: Response) => {
67
let { target, chain, network } = req.params;
7-
if (network === 'regtest') {
8-
return res.json({ feerate: 0.0002 }); // default 20 sat/byte for regtest
8+
if (target < 0 || target > 100) {
9+
return res.status(400).send('invalid target specified');
10+
}
11+
const cachedFee = feeCache[`${chain}:${network}:${target}`];
12+
if (cachedFee && cachedFee.date > Date.now() - 10 * 1000) {
13+
return res.json(cachedFee.fee);
914
}
1015
try {
1116
let fee = await ChainStateProvider.getFee({ chain, network, target});
1217
if (!fee) {
1318
return res.status(404).send('not available right now');
1419
}
20+
feeCache[`${chain}:${network}:${target}`] = { fee, date: Date.now() };
1521
return res.json(fee);
1622
} catch (err) {
1723
return res.status(500).send(err);

0 commit comments

Comments
 (0)