mirror of
https://github.com/fullstack-cash/bch-api.git
synced 2026-09-22 09:12:05 -07:00
feat(hydrateUtxosWL): SLPDB with whitelist filter used to hydrate UTXOs
This commit is contained in:
@@ -18,6 +18,7 @@ const LOCAL_RESTURL = process.env.LOCAL_RESTURL
|
||||
? process.env.LOCAL_RESTURL
|
||||
: 'https://api.fullstack.cash/v4/'
|
||||
const BCHJS = require('@psf/bch-js')
|
||||
// const BCHJS = require('../../../../bch-js')
|
||||
const bchjs = new BCHJS({ restURL: LOCAL_RESTURL })
|
||||
|
||||
// Used to convert error messages to strings, to safely pass to users.
|
||||
@@ -89,6 +90,7 @@ class Slp {
|
||||
)
|
||||
_this.router.post('/generateSendOpReturn', _this.generateSendOpReturn)
|
||||
_this.router.post('/hydrateUtxos', _this.hydrateUtxos)
|
||||
_this.router.post('/hydrateUtxosWL', _this.hydrateUtxosWL)
|
||||
_this.router.get('/status', _this.getStatus)
|
||||
}
|
||||
|
||||
@@ -2013,6 +2015,92 @@ class Slp {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {post} /slp/hydrateUtxosWL/ hydrateUtxosWL
|
||||
* @apiName SLP hydrateUtxosWL
|
||||
* @apiGroup SLP
|
||||
* @apiDescription Hydrate UTXO data with SLP information, using only the whitelist SLPDB.
|
||||
*
|
||||
* This call is identical to `hydrateUtxos`, except it will only use the
|
||||
* filtered SLPDB with a whitelist. This results in faster performance, more
|
||||
* reliable uptime, but more frequent `isValid: null` values. Some use-cases
|
||||
* prioritize the speed and reliability over acceptance of a wide range of
|
||||
* SLP tokens.
|
||||
*
|
||||
* @apiExample Example usage:
|
||||
* curl -X POST "https://api.fullstack.cash/v4/slp/hydrateUtxosWL" -H "accept:application/json" -H "Content-Type: application/json" -d '{"utxos":[{"utxos":[{"txid": "d56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56","vout": 3, "value": "6816", "height": 606848, "confirmations": 13, "satoshis": 6816}, {"txid": "d56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56","vout": 2, "value": "546", "height": 606848, "confirmations": 13, "satoshis": 546}]}]}'
|
||||
*
|
||||
*
|
||||
*/
|
||||
async hydrateUtxosWL (req, res, next) {
|
||||
try {
|
||||
const utxos = req.body.utxos
|
||||
|
||||
// Validate inputs
|
||||
if (!Array.isArray(utxos)) {
|
||||
res.status(422)
|
||||
return res.json({
|
||||
error: 'Input must be an array.'
|
||||
})
|
||||
}
|
||||
|
||||
if (!utxos.length) {
|
||||
res.status(422)
|
||||
return res.json({
|
||||
error: 'Array should not be empty'
|
||||
})
|
||||
}
|
||||
|
||||
if (utxos.length > 20) {
|
||||
res.status(422)
|
||||
return res.json({
|
||||
error: 'Array too long, max length is 20'
|
||||
})
|
||||
}
|
||||
|
||||
if (!utxos[0].utxos) {
|
||||
res.status(422)
|
||||
return res.json({
|
||||
error: 'Each element in array should have a utxos property'
|
||||
})
|
||||
}
|
||||
|
||||
// Loop through each address and query the UTXOs for that element.
|
||||
for (let i = 0; i < utxos.length; i++) {
|
||||
const theseUtxos = utxos[i].utxos
|
||||
// console.log(`theseUtxos: ${JSON.stringify(theseUtxos, null, 2)}`)
|
||||
|
||||
// Get SLP token details.
|
||||
const details = await _this.bchjs.SLP.Utils.tokenUtxoDetailsWL(theseUtxos)
|
||||
// console.log('details : ', details)
|
||||
|
||||
// Replace the original UTXO data with the hydrated data.
|
||||
utxos[i].utxos = details
|
||||
}
|
||||
|
||||
res.status(200)
|
||||
return res.json({ slpUtxos: utxos })
|
||||
} catch (err) {
|
||||
wlogger.error('Error in slp.js/hydrateUtxosWL().', err)
|
||||
console.error('Error in slp.js/hydrateUtxosWL().', err)
|
||||
|
||||
// Decode the error message.
|
||||
const { msg, status } = routeUtils.decodeError(err)
|
||||
console.log('msg: ', msg)
|
||||
console.log('status: ', status)
|
||||
if (msg) {
|
||||
res.status(status)
|
||||
return res.json({ error: msg, message: msg, success: false })
|
||||
}
|
||||
|
||||
res.status(500)
|
||||
return res.json({
|
||||
error: 'Error in hydrateUtxosWL()',
|
||||
message: 'Error in hydrateUtxosWL()'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} /slp/status Get the health status of SLPDB
|
||||
* @apiName Get the health status of SLPDB
|
||||
|
||||
Reference in New Issue
Block a user