diff --git a/server/lib/api/address.js b/server/lib/api/address.js index 5a147b8..21b7ccd 100644 --- a/server/lib/api/address.js +++ b/server/lib/api/address.js @@ -7,9 +7,11 @@ const MAX_BLOCKS = 200; function getBlock(params, options, limit, cb) { const defaultOptions = { _id: 0 }; - Object.assign(defaultOptions, options); + if (!Number.isInteger(limit)) { + limit = MAX_BLOCKS; + } - console.log + Object.assign(defaultOptions, options); Block.find( params, @@ -21,11 +23,55 @@ function getBlock(params, options, limit, cb) { module.exports = function AddressAPI(router) { router.get('/addr/:addr', (req, res) => { + res.json({ + addrStr: req.params.addr, + balance: 0, + balanceSat: 0, + totalReceived: 0, + totalReceivedSat: 0, + totalSent: 0, + totalSentSat: 0, + unconfirmedBalance: 0, + unconfirmedBalanceSat: 0, + unconfirmedTxApperances: 0, + txApperances: 5, + }); + }); + + router.get('/addr/:addr/utxo', (req, res) => { + res.send('1'); + }); + + router.get('/addr/:addr/balance', (req, res) => { + res.send('2'); + }); + + router.get('/addr/:addr/totalReceived', (req, res) => { + res.send('3'); + }); + + router.get('/addr/:addr/totalSent', (req, res) => { + res.send('4'); + }); + + router.get('/addr/:addr/unconfirmedBalance', (req, res) => { + res.send('5'); + }); + + router.get('/addrs/:addrs/utxo', (req, res) => { + res.send('6'); + }); + + router.post('/addrs/utxo', (req, res) => { + res.send('7'); + }); + + router.get('/addrs/:addrs/txs', (req, res) => { getBlock( { $or: [ - { 'txs.outputs.address': req.params.addr }, + { 'txs.outputs.address': req.params.addr }, { 'txs.inputs.prevout.hash': req.params.addr }, ], }, @@ -72,38 +118,6 @@ module.exports = function AddressAPI(router) { }); }); - router.get('/addr/:addr/utxo', (req, res) => { - res.send("1"); - }); - - router.get('/addr/:addr/balance', (req, res) => { - res.send("2"); - }); - - router.get('/addr/:addr/totalReceived', (req, res) => { - res.send("3"); - }); - - router.get('/addr/:addr/totalSent', (req, res) => { - res.send("4"); - }); - - router.get('/addr/:addr/unconfirmedBalance', (req, res) => { - res.send("5"); - }); - - router.get('/addrs/:addrs/utxo', (req, res) => { - res.send("6"); - }); - - router.post('/addrs/utxo', (req, res) => { - res.send("7"); - }); - - router.get('/addrs/:addrs/txs', (req, res) => { - res.send("8"); - }); - router.post('/addrs/txs', (req, res) => { res.send('post stub'); }); diff --git a/server/lib/api/transaction.js b/server/lib/api/transaction.js index 15ac88a..e83eb93 100644 --- a/server/lib/api/transaction.js +++ b/server/lib/api/transaction.js @@ -6,9 +6,13 @@ const MAX_TXS = 20; const MAX_BLOCKS = 1; // Shoe horned in. Not dry, also in blocks. Make db api later -function getBlock(params, options, cb) { +function getBlock(params, options, limit, cb) { const defaultOptions = { _id: 0 }; + if (!Number.isInteger(limit)) { + limit = MAX_BLOCKS; + } + Object.assign(defaultOptions, options); Block.find( @@ -16,7 +20,7 @@ function getBlock(params, options, cb) { defaultOptions, cb) .sort({ height: -1 }) - .limit(MAX_BLOCKS); + .limit(limit); } @@ -85,15 +89,11 @@ module.exports = function transactionAPI(router) { }); router.get('/txs', (req, res) => { -/* - const txsBy = req.query.blocks || - req.query.address; -*/ - if (req.query.block) { getBlock( { hash: req.query.block }, { rawBlock: 0 }, + MAX_BLOCKS, (err, block) => { if (err) { res.status(501).send(); @@ -133,7 +133,54 @@ module.exports = function transactionAPI(router) { } }); } else if (req.query.address) { + getBlock( + { $or: + [ + { 'txs.outputs.address': req.query.address }, + { 'txs.inputs.prevout.hash': req.query.address }, + ], + }, + { 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({ + pagesTotal: 1, + txs: b.txs.map(tx => ({ + txid: tx.hash, + version: tx.version, + locktime: tx.locktime, + vin: tx.inputs.map(input => ({ + coinbase: input.script, + sequence: input.sequence, + n: 0, + addr: input.address, + })), + vout: tx.outputs.map(output => ({ + value: output.value / 1e8, + n: 0, + scriptPubKey: { + hex: '', + asm: '', + addresses: [output.address], + type: output.type, + }, + spentTxid: '', + spentIndex: 0, + spentHeight: 0, + })), + })), + }); + } else { + res.send(); + } + }); } else { getTransactions( {},