From 7948a638751d43f776dfe4d3090a2617700a6e68 Mon Sep 17 00:00:00 2001 From: tenthirtyone Date: Sat, 5 Aug 2017 15:03:48 -0400 Subject: [PATCH] curren api finished. parser json var names normalized. Switched to express 4 router --- config/config-template.js | 3 +++ config/index.js | 5 ++++- lib/api/address.js | 22 +++++++++++----------- lib/api/block.js | 14 +++++++------- lib/api/currency.js | 38 +++++++++++++++++++++++++++++++++++++- lib/api/index.js | 14 +++++++++----- lib/api/message.js | 8 ++++---- lib/api/status.js | 10 +++++----- lib/api/transaction.js | 10 +++++----- lib/node/index.js | 5 +++++ lib/parser/block.js | 16 ++++++++-------- lib/parser/transaction.js | 4 +--- package.json | 1 + 13 files changed, 100 insertions(+), 50 deletions(-) diff --git a/config/config-template.js b/config/config-template.js index 93c6841..b31b15d 100644 --- a/config/config-template.js +++ b/config/config-template.js @@ -1,4 +1,5 @@ const config = { + full_node: true, logging: 'debug', bcoin: { network: 'main', @@ -7,6 +8,7 @@ const config = { workers: true, logLevel: 'info', 'max-inbound': 100, + 'max-outbound': 100, }, mongodb: { uri: 'mongodb://localhost/bitcore', @@ -16,6 +18,7 @@ const config = { }, api: { port: 3000, + json_spaces: 2, }, }; diff --git a/config/index.js b/config/index.js index 2bbee98..cbbcfab 100644 --- a/config/index.js +++ b/config/index.js @@ -1,5 +1,5 @@ const config = { - full_node: true, + full_node: false, logging: 'debug', bcoin: { network: 'main', @@ -8,6 +8,7 @@ const config = { workers: true, logLevel: 'info', 'max-inbound': 100, + 'max-outbound': 100, }, mongodb: { uri: 'mongodb://localhost/bitcore', @@ -18,6 +19,8 @@ const config = { api: { port: 3000, json_spaces: 2, + currency_refresh: 60, + ticker_url: 'https://www.bitstamp.net/api/ticker/', }, }; diff --git a/lib/api/address.js b/lib/api/address.js index 3fe3e65..6ed7087 100644 --- a/lib/api/address.js +++ b/lib/api/address.js @@ -1,41 +1,41 @@ -module.exports = function addressAPI(app) { - app.get('/addr/:addr', (req, res) => { +module.exports = function addressrouter(router) { + router.get('/addr/:addr', (req, res) => { res.send(req.params.addr); }); - app.get('/addr/:addr/utxo', (req, res) => { + router.get('/addr/:addr/utxo', (req, res) => { res.send(req.params.addr); }); - app.get('/addr/:addr/balance', (req, res) => { + router.get('/addr/:addr/balance', (req, res) => { res.send(req.params.addr); }); - app.get('/addr/:addr/totalReceived', (req, res) => { + router.get('/addr/:addr/totalReceived', (req, res) => { res.send(req.params.addr); }); - app.get('/addr/:addr/totalSent', (req, res) => { + router.get('/addr/:addr/totalSent', (req, res) => { res.send(req.params.addr); }); - app.get('/addr/:addr/unconfirmedBalance', (req, res) => { + router.get('/addr/:addr/unconfirmedBalance', (req, res) => { res.send(req.params.addr); }); - app.get('/addrs/:addrs/utxo', (req, res) => { + router.get('/addrs/:addrs/utxo', (req, res) => { res.send(req.params.addrs); }); - app.post('/addrs/utxo', (req, res) => { + router.post('/addrs/utxo', (req, res) => { res.send('post stub'); }); - app.get('/addrs/:addrs/txs', (req, res) => { + router.get('/addrs/:addrs/txs', (req, res) => { res.send(req.params.addrs); }); - app.post('/addrs/txs', (req, res) => { + router.post('/addrs/txs', (req, res) => { res.send('post stub'); }); }; diff --git a/lib/api/block.js b/lib/api/block.js index c86d9c8..20b5b53 100644 --- a/lib/api/block.js +++ b/lib/api/block.js @@ -16,8 +16,8 @@ function getBlock(params, options, cb) { .limit(MAX_BLOCKS); } -module.exports = function BlockAPI(app) { - app.get('/block/:blockHash', (req, res) => { +module.exports = function BlockAPI(router) { + router.get('/block/:blockHash', (req, res) => { getBlock( { hash: req.params.blockHash }, { rawBlock: 0 }, @@ -30,7 +30,7 @@ module.exports = function BlockAPI(app) { }); }); - app.get('/blocks', (req, res) => { + router.get('/blocks', (req, res) => { getBlock( {}, { height: 1, @@ -59,7 +59,7 @@ module.exports = function BlockAPI(app) { }); }); - app.get('/rawblock/:blockHash', (req, res) => { + router.get('/rawblock/:blockHash', (req, res) => { getBlock( { hash: req.params.blockHash }, { rawBlock: 1 }, @@ -68,11 +68,11 @@ module.exports = function BlockAPI(app) { res.status(501).send(); logger.log('err', err); } - res.json(block); + res.json(block[0]); }); }); - app.get('/block-index/:height', (req, res) => { + router.get('/block-index/:height', (req, res) => { getBlock( { height: req.params.height }, {}, @@ -81,7 +81,7 @@ module.exports = function BlockAPI(app) { res.status(501).send(); logger.log('err', err); } - res.json(block); + res.json(block[0]); }); }); }; diff --git a/lib/api/currency.js b/lib/api/currency.js index fdab193..ab06f80 100644 --- a/lib/api/currency.js +++ b/lib/api/currency.js @@ -1,5 +1,41 @@ +const config = require('../../config'); +const logger = require('../logger'); +const request = require('request'); + +const refreshInterval = config.api.currency_refresh >= 1 ? + config.api.currency_refresh * 1000 : + 60 * 1000; +let lastRate = 0; + +getRate(); + +setInterval(() => { + getRate(); +}, refreshInterval); + +function getRate() { + request(config.api.ticker_url, (err, res, body) => { + if (err) { + logger.log('error', + `${err}`); + } + try { + const ticker = JSON.parse(body); + lastRate = ticker.last; + logger.log('debug', + `getRate: ${lastRate}`); + } catch (err) { + logger.log('error', + `getRate: ${err}`); + } + }); +} + module.exports = function currencyAPI(app) { app.get('/currency', (req, res) => { - res.send('currency'); + res.json({ + bitstamp: lastRate, + }); + }); }; diff --git a/lib/api/index.js b/lib/api/index.js index ebf33c7..0ebde03 100644 --- a/lib/api/index.js +++ b/lib/api/index.js @@ -2,15 +2,19 @@ const express = require('express'); const config = require('../../config'); const app = express(); +const api = express.Router(); app.set('json spaces', config.api.json_spaces); // Pass express to register the routes -const AddressAPI = require('./address')(app); -const BlockAPI = require('./block')(app); -const StatusAPI = require('./status')(app); -const TransactionAPI = require('./transaction')(app); -const MessageAPI = require('./message')(app); +const AddressAPI = require('./address')(api); +const BlockAPI = require('./block')(api); +const CurrencyAPI = require('./currency')(api); +const StatusAPI = require('./status')(api); +const TransactionAPI = require('./transaction')(api); +const MessageAPI = require('./message')(api); + +app.use('/api', api); // 404 app.use((req, res) => { diff --git a/lib/api/message.js b/lib/api/message.js index 531a330..cc71ed6 100644 --- a/lib/api/message.js +++ b/lib/api/message.js @@ -1,13 +1,13 @@ -module.exports = function messageAPI(app) { - app.get('/messages/verify', (req, res) => { +module.exports = function messageAPI(router) { + router.get('/messages/verify', (req, res) => { res.send('messages verify'); }); - app.post('/messages/verify', (req, res) => { + router.post('/messages/verify', (req, res) => { res.send('post messages verify'); }); - app.get('/utils/estimatefee', (req, res) => { + router.get('/utils/estimatefee', (req, res) => { res.send('estimate fees'); }); }; diff --git a/lib/api/status.js b/lib/api/status.js index 8125f88..5348e13 100644 --- a/lib/api/status.js +++ b/lib/api/status.js @@ -1,17 +1,17 @@ -module.exports = function statusAPI(app) { - app.get('/status', (req, res) => { +module.exports = function statusAPI(router) { + router.get('/status', (req, res) => { res.send('status'); }); - app.get('/sync', (req, res) => { + router.get('/sync', (req, res) => { res.send('sync'); }); - app.get('/peer', (req, res) => { + router.get('/peer', (req, res) => { res.send('peer'); }); - app.get('/version', (req, res) => { + router.get('/version', (req, res) => { res.send('version'); }); }; diff --git a/lib/api/transaction.js b/lib/api/transaction.js index e65c3fd..41aa451 100644 --- a/lib/api/transaction.js +++ b/lib/api/transaction.js @@ -15,8 +15,8 @@ function getTransaction(params, options, cb) { .limit(MAX_TXS); } -module.exports = function transactionAPI(app) { - app.get('/tx/:txid', (req, res) => { +module.exports = function transactionAPI(router) { + router.get('/tx/:txid', (req, res) => { Transaction.find({ txid: req.params.txid }, (err, tx) => { if (err) { res.status(501).send(); @@ -25,7 +25,7 @@ module.exports = function transactionAPI(app) { }); }); - app.get('/txs', (req, res) => { + router.get('/txs', (req, res) => { getTransaction( {}, {}, @@ -38,11 +38,11 @@ module.exports = function transactionAPI(app) { ); }); - app.get('/rawtx/:txid', (req, res) => { + router.get('/rawtx/:txid', (req, res) => { res.send(req.params.txid); }); - app.post('/tx/send', (req, res) => { + router.post('/tx/send', (req, res) => { res.send('tx send stub'); }); }; diff --git a/lib/node/index.js b/lib/node/index.js index 6c1b6d2..a5da6aa 100644 --- a/lib/node/index.js +++ b/lib/node/index.js @@ -19,6 +19,11 @@ function start() { BlockParser.parse(entry, block); }); + node.on('error', (err) => { + logger.log('error', + `${err}`); + }); + // node.mempool.on('tx' ...) } diff --git a/lib/parser/block.js b/lib/parser/block.js index a66931e..b90908d 100644 --- a/lib/parser/block.js +++ b/lib/parser/block.js @@ -6,19 +6,19 @@ const logger = require('../logger'); function parse(entry, block) { const rawBlock = block.toRaw().toString('hex'); - const json = block.toJSON(); + const blockJSON = block.toJSON(); const reward = util.calcBlockReward(entry.height); const newBlock = new BlockModel({ - hash: json.hash, + hash: blockJSON.hash, height: entry.height, - version: json.version, + version: blockJSON.version, size: block.size, - prevBlock: json.prevBlock, - merkleRoot: json.merkleRoot, - ts: json.ts, - bits: json.bits, - nonce: json.nonce, + prevBlock: blockJSON.prevBlock, + merkleRoot: blockJSON.merkleRoot, + ts: blockJSON.ts, + bits: blockJSON.bits, + nonce: blockJSON.nonce, txs: block.txs.map(tx => util.revHex(tx.hash().toString('hex'))), chainwork: entry.chainwork, reward: reward, diff --git a/lib/parser/transaction.js b/lib/parser/transaction.js index 2850b07..82088e9 100644 --- a/lib/parser/transaction.js +++ b/lib/parser/transaction.js @@ -7,9 +7,7 @@ const logger = require('../logger'); function parse(entry, txs) { txs.forEach((tx) => { - const txHash = util.revHex(tx.hash().toString('hex')); - const blockHash = util.revHex(entry.hash); - const txJSON = tx.totxJSON(); + const txJSON = tx.toJSON(); const t = new TxModel({ hash: txJSON.hash, diff --git a/package.json b/package.json index 6c8c287..e329d35 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "bcoin": "^1.0.0-beta.14", "express": "^4.15.3", "mongoose": "^4.11.5", + "request": "^2.81.0", "winston": "^2.3.1" }, "devDependencies": {