UNPKG

bitcore-node

Version:

A blockchain indexing node with extended capabilities using bitcore

36 lines (31 loc) 1.21 kB
import request from 'request'; import util from 'util'; import logger from '../../logger'; import { NetworkType } from '../../types/ChainNetwork'; import { IFeeProvider } from '../../types/FeeProvider'; export class BitgoClass implements IFeeProvider { private feeUrls = { mainnet: 'https://www.bitgo.com/api/v2/btc/tx/fee', testnet3: 'https://www.bitgo-test.com/api/v2/tbtc/tx/fee', testnet4: 'https://www.bitgo-test.com/api/v2/tbtc4/tx/fee' }; public async getFee(network: NetworkType, nblocks: number): Promise<number> { try { network = network === 'regtest' ? 'testnet4' : network; nblocks = Math.min(Math.max(nblocks, 2), 1000); // min 2, max 1000 const res = await util.promisify(request.get).call(request, { uri: `${this.feeUrls[network]}?numBlocks=${nblocks}`, json: true }); if (res.statusCode !== 200) { throw new Error(`Status code: ${res.statusCode}`); } const fee = res.body; return fee.feePerKb / 1000; // convert to sats/B } catch (err: any) { logger.warn('Error getting fee from bitgo: %o', err.message || err); throw err; } }; }; export const Bitgo = new BitgoClass();