Compare commits

...
4 Commits
Author SHA1 Message Date
Chris Troutner 77ba06d68c Merge pull request #30 from Permissionless-Software-Foundation/ct-unstable
fix(internal calls): Applying paid rate limits to internal calls
2020-09-28 08:48:00 -07:00
Chris Troutner 40f6b17d3b fix(internal calls): Applying paid rate limits to internal calls 2020-09-28 08:37:34 -07:00
Chris Troutner 4d40a7cb01 Merge pull request #29 from Permissionless-Software-Foundation/ct-unstable
fix(hydrateUtxos): Adjusting input to match output of Electrumx.utxo()
2020-09-27 17:30:20 -07:00
Chris Troutner 0a14ca08a4 fix(hydrateUtxos): Adjusting input to match output of Electrumx.utxo() 2020-09-27 17:26:34 -07:00
4 changed files with 132 additions and 88 deletions
+1
View File
@@ -129,6 +129,7 @@ class RateLimits {
origin && origin &&
(origin.toString().indexOf('wallet.fullstack.cash') > -1 || (origin.toString().indexOf('wallet.fullstack.cash') > -1 ||
origin.toString().indexOf('sandbox.fullstack.cash') > -1 || origin.toString().indexOf('sandbox.fullstack.cash') > -1 ||
origin.toString().indexOf('172.17.') > -1 ||
origin === 'slp-api') origin === 'slp-api')
) { ) {
pointsToConsume = 1 pointsToConsume = 1
+12 -4
View File
@@ -1567,12 +1567,20 @@ class Slp {
}) })
} }
// Get Token Utxo Details // Loop through each address and query the UTXOs for that element.
const details = await _this.bchjs.SLP.Utils.tokenUtxoDetails(utxos) for (let i = 0; i < utxos.length; i++) {
// console.log('details : ', details) const theseUtxos = utxos[i].utxos
// Get SLP token details.
const details = await _this.bchjs.SLP.Utils.tokenUtxoDetails(theseUtxos)
// console.log('details : ', details)
// Replace the original UTXO data with the hydrated data.
utxos[i].utxos = details
}
res.status(200) res.status(200)
return res.json({ slpUtxos: details }) return res.json({ slpUtxos: utxos })
} catch (err) { } catch (err) {
wlogger.error('Error in slp.js/hydrateUtxos().', err) wlogger.error('Error in slp.js/hydrateUtxos().', err)
+72 -42
View File
@@ -22,6 +22,9 @@ if (!process.env.SLPDB_URL) {
const SLP = require('../../../src/routes/v3/slp') const SLP = require('../../../src/routes/v3/slp')
const slp = new SLP() const slp = new SLP()
const BCHJS = require('@psf/bch-js')
const bchjs = new BCHJS()
const { mockReq, mockRes } = require('../mocks/express-mocks') const { mockReq, mockRes } = require('../mocks/express-mocks')
describe('#slp', () => { describe('#slp', () => {
@@ -126,22 +129,26 @@ describe('#slp', () => {
it('should return utxo details', async () => { it('should return utxo details', async () => {
const utxos = [ const utxos = [
{ {
txid: utxos: [
'd56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56', {
vout: 3, txid:
value: '6816', 'd56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56',
height: 606848, vout: 3,
confirmations: 13, value: '6816',
satoshis: 6816 height: 606848,
}, confirmations: 13,
{ satoshis: 6816
txid: },
'd56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56', {
vout: 2, txid:
value: '546', 'd56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56',
height: 606848, vout: 2,
confirmations: 13, value: '546',
satoshis: 546 height: 606848,
confirmations: 13,
satoshis: 546
}
]
} }
] ]
@@ -151,36 +158,59 @@ describe('#slp', () => {
// Test the general structure of the output. // Test the general structure of the output.
assert.isArray(result.slpUtxos) assert.isArray(result.slpUtxos)
assert.equal(result.slpUtxos.length, 2) assert.equal(result.slpUtxos.length, 1)
assert.equal(result.slpUtxos[0].utxos.length, 2)
// Test the non-slp UTXO. // Test the non-slp UTXO.
assert.property(result.slpUtxos[0], 'txid') assert.property(result.slpUtxos[0].utxos[0], 'txid')
assert.property(result.slpUtxos[0], 'vout') assert.property(result.slpUtxos[0].utxos[0], 'vout')
assert.property(result.slpUtxos[0], 'value') assert.property(result.slpUtxos[0].utxos[0], 'value')
assert.property(result.slpUtxos[0], 'height') assert.property(result.slpUtxos[0].utxos[0], 'height')
assert.property(result.slpUtxos[0], 'confirmations') assert.property(result.slpUtxos[0].utxos[0], 'confirmations')
assert.property(result.slpUtxos[0], 'satoshis') assert.property(result.slpUtxos[0].utxos[0], 'satoshis')
assert.property(result.slpUtxos[0], 'isValid') assert.property(result.slpUtxos[0].utxos[0], 'isValid')
assert.equal(result.slpUtxos[0].isValid, false) assert.equal(result.slpUtxos[0].utxos[0].isValid, false)
// Test the slp UTXO. // Test the slp UTXO.
assert.property(result.slpUtxos[1], 'txid') assert.property(result.slpUtxos[0].utxos[1], 'txid')
assert.property(result.slpUtxos[1], 'vout') assert.property(result.slpUtxos[0].utxos[1], 'vout')
assert.property(result.slpUtxos[1], 'value') assert.property(result.slpUtxos[0].utxos[1], 'value')
assert.property(result.slpUtxos[1], 'height') assert.property(result.slpUtxos[0].utxos[1], 'height')
assert.property(result.slpUtxos[1], 'confirmations') assert.property(result.slpUtxos[0].utxos[1], 'confirmations')
assert.property(result.slpUtxos[1], 'satoshis') assert.property(result.slpUtxos[0].utxos[1], 'satoshis')
assert.property(result.slpUtxos[1], 'isValid') assert.property(result.slpUtxos[0].utxos[1], 'isValid')
assert.equal(result.slpUtxos[1].isValid, true) assert.equal(result.slpUtxos[0].utxos[1].isValid, true)
assert.property(result.slpUtxos[1], 'transactionType') assert.property(result.slpUtxos[0].utxos[1], 'transactionType')
assert.property(result.slpUtxos[1], 'tokenId') assert.property(result.slpUtxos[0].utxos[1], 'tokenId')
assert.property(result.slpUtxos[1], 'tokenTicker') assert.property(result.slpUtxos[0].utxos[1], 'tokenTicker')
assert.property(result.slpUtxos[1], 'tokenName') assert.property(result.slpUtxos[0].utxos[1], 'tokenName')
assert.property(result.slpUtxos[1], 'tokenDocumentUrl') assert.property(result.slpUtxos[0].utxos[1], 'tokenDocumentUrl')
assert.property(result.slpUtxos[1], 'tokenDocumentHash') assert.property(result.slpUtxos[0].utxos[1], 'tokenDocumentHash')
assert.property(result.slpUtxos[1], 'decimals') assert.property(result.slpUtxos[0].utxos[1], 'decimals')
assert.property(result.slpUtxos[1], 'tokenType') assert.property(result.slpUtxos[0].utxos[1], 'tokenType')
assert.property(result.slpUtxos[1], 'tokenQty') assert.property(result.slpUtxos[0].utxos[1], 'tokenQty')
})
it('should process data directly from Electrumx', async () => {
const addrs = [
'bitcoincash:qq6mvsm7l92d77zpymmltvaw09p5uzghyuyx7spygg',
'bitcoincash:qpjdrs8qruzh8xvusdfmutjx62awcepnhyperm3g89',
'bitcoincash:qzygn28zpgeemnptkn26xzyuzzfu9l8f9vfvq7kptk'
]
const utxos = await bchjs.Electrumx.utxo(addrs)
// console.log(`utxos: ${JSON.stringify(utxos, null, 2)}`)
req.body.utxos = utxos.utxos
const result = await slp.hydrateUtxos(req, res)
// console.log(`result: ${JSON.stringify(result, null, 2)}`)
// Test the general structure of the output.
assert.isArray(result.slpUtxos)
assert.equal(result.slpUtxos.length, 3)
assert.equal(result.slpUtxos[0].utxos.length, 1)
assert.equal(result.slpUtxos[1].utxos.length, 1)
assert.equal(result.slpUtxos[2].utxos.length, 2)
}) })
}) })
}) })
+47 -42
View File
@@ -938,22 +938,26 @@ describe('#SLP', () => {
it('should return utxo details', async () => { it('should return utxo details', async () => {
const utxos = [ const utxos = [
{ {
txid: utxos: [
'd56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56', {
vout: 3, txid:
value: '6816', 'd56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56',
height: 606848, vout: 3,
confirmations: 13, value: '6816',
satoshis: 6816 height: 606848,
}, confirmations: 13,
{ satoshis: 6816
txid: },
'd56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56', {
vout: 2, txid:
value: '546', 'd56a2b446d8149c39ca7e06163fe8097168c3604915f631bc58777d669135a56',
height: 606848, vout: 2,
confirmations: 13, value: '546',
satoshis: 546 height: 606848,
confirmations: 13,
satoshis: 546
}
]
} }
] ]
@@ -998,36 +1002,37 @@ describe('#SLP', () => {
// Test the general structure of the output. // Test the general structure of the output.
assert.isArray(result.slpUtxos) assert.isArray(result.slpUtxos)
assert.equal(result.slpUtxos.length, 2) assert.equal(result.slpUtxos.length, 1)
assert.equal(result.slpUtxos[0].utxos.length, 2)
// Test the non-slp UTXO. // Test the non-slp UTXO.
assert.property(result.slpUtxos[0], 'txid') assert.property(result.slpUtxos[0].utxos[0], 'txid')
assert.property(result.slpUtxos[0], 'vout') assert.property(result.slpUtxos[0].utxos[0], 'vout')
assert.property(result.slpUtxos[0], 'value') assert.property(result.slpUtxos[0].utxos[0], 'value')
assert.property(result.slpUtxos[0], 'height') assert.property(result.slpUtxos[0].utxos[0], 'height')
assert.property(result.slpUtxos[0], 'confirmations') assert.property(result.slpUtxos[0].utxos[0], 'confirmations')
assert.property(result.slpUtxos[0], 'satoshis') assert.property(result.slpUtxos[0].utxos[0], 'satoshis')
assert.property(result.slpUtxos[0], 'isValid') assert.property(result.slpUtxos[0].utxos[0], 'isValid')
assert.equal(result.slpUtxos[0].isValid, false) assert.equal(result.slpUtxos[0].utxos[0].isValid, false)
// Test the slp UTXO. // Test the slp UTXO.
assert.property(result.slpUtxos[1], 'txid') assert.property(result.slpUtxos[0].utxos[1], 'txid')
assert.property(result.slpUtxos[1], 'vout') assert.property(result.slpUtxos[0].utxos[1], 'vout')
assert.property(result.slpUtxos[1], 'value') assert.property(result.slpUtxos[0].utxos[1], 'value')
assert.property(result.slpUtxos[1], 'height') assert.property(result.slpUtxos[0].utxos[1], 'height')
assert.property(result.slpUtxos[1], 'confirmations') assert.property(result.slpUtxos[0].utxos[1], 'confirmations')
assert.property(result.slpUtxos[1], 'satoshis') assert.property(result.slpUtxos[0].utxos[1], 'satoshis')
assert.property(result.slpUtxos[1], 'isValid') assert.property(result.slpUtxos[0].utxos[1], 'isValid')
assert.equal(result.slpUtxos[1].isValid, true) assert.equal(result.slpUtxos[0].utxos[1].isValid, true)
assert.property(result.slpUtxos[1], 'transactionType') assert.property(result.slpUtxos[0].utxos[1], 'transactionType')
assert.property(result.slpUtxos[1], 'tokenId') assert.property(result.slpUtxos[0].utxos[1], 'tokenId')
assert.property(result.slpUtxos[1], 'tokenTicker') assert.property(result.slpUtxos[0].utxos[1], 'tokenTicker')
assert.property(result.slpUtxos[1], 'tokenName') assert.property(result.slpUtxos[0].utxos[1], 'tokenName')
assert.property(result.slpUtxos[1], 'tokenDocumentUrl') assert.property(result.slpUtxos[0].utxos[1], 'tokenDocumentUrl')
assert.property(result.slpUtxos[1], 'tokenDocumentHash') assert.property(result.slpUtxos[0].utxos[1], 'tokenDocumentHash')
assert.property(result.slpUtxos[1], 'decimals') assert.property(result.slpUtxos[0].utxos[1], 'decimals')
assert.property(result.slpUtxos[1], 'tokenType') assert.property(result.slpUtxos[0].utxos[1], 'tokenType')
assert.property(result.slpUtxos[1], 'tokenQty') assert.property(result.slpUtxos[0].utxos[1], 'tokenQty')
}) })
}) })
}) })