129 lines
2.8 KiB
JavaScript
129 lines
2.8 KiB
JavaScript
const Block = require('../../models/block.js');
|
|
const logger = require('../logger');
|
|
|
|
const MAX_BLOCKS = 100;
|
|
|
|
function getBlock(params, options, limit, cb) {
|
|
const defaultOptions = { _id: 0 };
|
|
|
|
if (!Number.isInteger(limit)) {
|
|
limit = MAX_BLOCKS;
|
|
}
|
|
|
|
Object.assign(defaultOptions, options);
|
|
|
|
Block.find(
|
|
params,
|
|
defaultOptions,
|
|
cb)
|
|
.sort({ height: -1 })
|
|
.limit(limit);
|
|
}
|
|
|
|
module.exports = function BlockAPI(router) {
|
|
router.get('/block/:blockHash', (req, res) => {
|
|
getBlock(
|
|
{ hash: req.params.blockHash },
|
|
{ rawBlock: 0 },
|
|
MAX_BLOCKS,
|
|
(err, block) => {
|
|
if (err) {
|
|
res.status(501).send();
|
|
logger.log('err', err);
|
|
}
|
|
if (block[0]) {
|
|
const b = block[0];
|
|
res.json({
|
|
hash: b.hash,
|
|
size: b.size,
|
|
height: b.height,
|
|
version: b.version,
|
|
merkleroot: b.merkleRoot,
|
|
tx: b.txs,
|
|
time: b.ts,
|
|
nonce: b.nonce,
|
|
bits: b.bits.toString(16),
|
|
difficulty: 1,
|
|
chainwork: b.chainwork.toString(16),
|
|
confirmations: 0,
|
|
previousblockhash: b.prevBlock,
|
|
nextblockhash: 0,
|
|
reward: b.reward / 1e8,
|
|
isMainChain: true,
|
|
poolInfo: {},
|
|
});
|
|
} else {
|
|
res.send();
|
|
}
|
|
});
|
|
});
|
|
|
|
router.get('/blocks', (req, res) => {
|
|
const limit = parseInt(req.query.limit) || MAX_BLOCKS;
|
|
getBlock(
|
|
{},
|
|
{ height: 1,
|
|
size: 1,
|
|
hash: 1,
|
|
ts: 1,
|
|
txs: 1,
|
|
poolInfo: 1,
|
|
},
|
|
limit,
|
|
(err, blocks) => {
|
|
if (err) {
|
|
res.status(501).send();
|
|
logger.log('err', err);
|
|
return;
|
|
}
|
|
|
|
res.json({
|
|
blocks: blocks.map(block => ({
|
|
hash: block.hash,
|
|
height: block.height,
|
|
size: block.size,
|
|
time: block.ts,
|
|
txlength: block.txs.length,
|
|
poolInfo: {},
|
|
})),
|
|
length: blocks.length,
|
|
pagination: {},
|
|
});
|
|
});
|
|
});
|
|
|
|
router.get('/rawblock/:blockHash', (req, res) => {
|
|
getBlock(
|
|
{ hash: req.params.blockHash },
|
|
{ rawBlock: 1 },
|
|
MAX_BLOCKS,
|
|
(err, block) => {
|
|
if (err) {
|
|
res.status(501).send();
|
|
logger.log('err', err);
|
|
}
|
|
res.json(block[0]);
|
|
});
|
|
});
|
|
|
|
router.get('/block-index/:height', (req, res) => {
|
|
getBlock(
|
|
{ height: req.params.height },
|
|
{ hash: 1 },
|
|
MAX_BLOCKS,
|
|
(err, block) => {
|
|
if (err) {
|
|
res.status(501).send();
|
|
logger.log('err', err);
|
|
}
|
|
if (block[0]) {
|
|
res.json({
|
|
blockHash: block[0].hash,
|
|
});
|
|
} else {
|
|
res.send();
|
|
}
|
|
});
|
|
});
|
|
};
|