Compare commits

...
6 Commits
Author SHA1 Message Date
Chris Troutner 7e1c3d6a73 Merge pull request #31 from Permissionless-Software-Foundation/ct-unstable
fix(hydrateUtxos): Bumping bch-js version to fix hydateUtxos
2020-09-28 18:13:43 -07:00
Chris Troutner 6165001790 fix(hydrateUtxos): Bumping bch-js version to fix hydateUtxos 2020-09-28 18:10:49 -07:00
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
6 changed files with 469 additions and 613 deletions
+336 -524
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -28,7 +28,7 @@
"node": ">=10.15.1"
},
"dependencies": {
"@psf/bch-js": "^3.5.5",
"@psf/bch-js": "^3.6.2",
"apidoc": "^0.23.0",
"axios": "^0.19.0",
"bitcore-lib-cash": "^8.20.3",
+1
View File
@@ -129,6 +129,7 @@ class RateLimits {
origin &&
(origin.toString().indexOf('wallet.fullstack.cash') > -1 ||
origin.toString().indexOf('sandbox.fullstack.cash') > -1 ||
origin.toString().indexOf('172.17.') > -1 ||
origin === 'slp-api')
) {
pointsToConsume = 1
+12 -4
View File
@@ -1567,12 +1567,20 @@ class Slp {
})
}
// Get Token Utxo Details
const details = await _this.bchjs.SLP.Utils.tokenUtxoDetails(utxos)
// console.log('details : ', details)
// Loop through each address and query the UTXOs for that element.
for (let i = 0; i < utxos.length; i++) {
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)
return res.json({ slpUtxos: details })
return res.json({ slpUtxos: utxos })
} catch (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 = new SLP()
const BCHJS = require('@psf/bch-js')
const bchjs = new BCHJS()
const { mockReq, mockRes } = require('../mocks/express-mocks')
describe('#slp', () => {
@@ -126,22 +129,26 @@ describe('#slp', () => {
it('should return utxo details', async () => {
const 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
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
}
]
}
]
@@ -151,36 +158,59 @@ describe('#slp', () => {
// Test the general structure of the output.
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.
assert.property(result.slpUtxos[0], 'txid')
assert.property(result.slpUtxos[0], 'vout')
assert.property(result.slpUtxos[0], 'value')
assert.property(result.slpUtxos[0], 'height')
assert.property(result.slpUtxos[0], 'confirmations')
assert.property(result.slpUtxos[0], 'satoshis')
assert.property(result.slpUtxos[0], 'isValid')
assert.equal(result.slpUtxos[0].isValid, false)
assert.property(result.slpUtxos[0].utxos[0], 'txid')
assert.property(result.slpUtxos[0].utxos[0], 'vout')
assert.property(result.slpUtxos[0].utxos[0], 'value')
assert.property(result.slpUtxos[0].utxos[0], 'height')
assert.property(result.slpUtxos[0].utxos[0], 'confirmations')
assert.property(result.slpUtxos[0].utxos[0], 'satoshis')
assert.property(result.slpUtxos[0].utxos[0], 'isValid')
assert.equal(result.slpUtxos[0].utxos[0].isValid, false)
// Test the slp UTXO.
assert.property(result.slpUtxos[1], 'txid')
assert.property(result.slpUtxos[1], 'vout')
assert.property(result.slpUtxos[1], 'value')
assert.property(result.slpUtxos[1], 'height')
assert.property(result.slpUtxos[1], 'confirmations')
assert.property(result.slpUtxos[1], 'satoshis')
assert.property(result.slpUtxos[1], 'isValid')
assert.equal(result.slpUtxos[1].isValid, true)
assert.property(result.slpUtxos[1], 'transactionType')
assert.property(result.slpUtxos[1], 'tokenId')
assert.property(result.slpUtxos[1], 'tokenTicker')
assert.property(result.slpUtxos[1], 'tokenName')
assert.property(result.slpUtxos[1], 'tokenDocumentUrl')
assert.property(result.slpUtxos[1], 'tokenDocumentHash')
assert.property(result.slpUtxos[1], 'decimals')
assert.property(result.slpUtxos[1], 'tokenType')
assert.property(result.slpUtxos[1], 'tokenQty')
assert.property(result.slpUtxos[0].utxos[1], 'txid')
assert.property(result.slpUtxos[0].utxos[1], 'vout')
assert.property(result.slpUtxos[0].utxos[1], 'value')
assert.property(result.slpUtxos[0].utxos[1], 'height')
assert.property(result.slpUtxos[0].utxos[1], 'confirmations')
assert.property(result.slpUtxos[0].utxos[1], 'satoshis')
assert.property(result.slpUtxos[0].utxos[1], 'isValid')
assert.equal(result.slpUtxos[0].utxos[1].isValid, true)
assert.property(result.slpUtxos[0].utxos[1], 'transactionType')
assert.property(result.slpUtxos[0].utxos[1], 'tokenId')
assert.property(result.slpUtxos[0].utxos[1], 'tokenTicker')
assert.property(result.slpUtxos[0].utxos[1], 'tokenName')
assert.property(result.slpUtxos[0].utxos[1], 'tokenDocumentUrl')
assert.property(result.slpUtxos[0].utxos[1], 'tokenDocumentHash')
assert.property(result.slpUtxos[0].utxos[1], 'decimals')
assert.property(result.slpUtxos[0].utxos[1], 'tokenType')
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 () => {
const 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
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
}
]
}
]
@@ -998,36 +1002,37 @@ describe('#SLP', () => {
// Test the general structure of the output.
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.
assert.property(result.slpUtxos[0], 'txid')
assert.property(result.slpUtxos[0], 'vout')
assert.property(result.slpUtxos[0], 'value')
assert.property(result.slpUtxos[0], 'height')
assert.property(result.slpUtxos[0], 'confirmations')
assert.property(result.slpUtxos[0], 'satoshis')
assert.property(result.slpUtxos[0], 'isValid')
assert.equal(result.slpUtxos[0].isValid, false)
assert.property(result.slpUtxos[0].utxos[0], 'txid')
assert.property(result.slpUtxos[0].utxos[0], 'vout')
assert.property(result.slpUtxos[0].utxos[0], 'value')
assert.property(result.slpUtxos[0].utxos[0], 'height')
assert.property(result.slpUtxos[0].utxos[0], 'confirmations')
assert.property(result.slpUtxos[0].utxos[0], 'satoshis')
assert.property(result.slpUtxos[0].utxos[0], 'isValid')
assert.equal(result.slpUtxos[0].utxos[0].isValid, false)
// Test the slp UTXO.
assert.property(result.slpUtxos[1], 'txid')
assert.property(result.slpUtxos[1], 'vout')
assert.property(result.slpUtxos[1], 'value')
assert.property(result.slpUtxos[1], 'height')
assert.property(result.slpUtxos[1], 'confirmations')
assert.property(result.slpUtxos[1], 'satoshis')
assert.property(result.slpUtxos[1], 'isValid')
assert.equal(result.slpUtxos[1].isValid, true)
assert.property(result.slpUtxos[1], 'transactionType')
assert.property(result.slpUtxos[1], 'tokenId')
assert.property(result.slpUtxos[1], 'tokenTicker')
assert.property(result.slpUtxos[1], 'tokenName')
assert.property(result.slpUtxos[1], 'tokenDocumentUrl')
assert.property(result.slpUtxos[1], 'tokenDocumentHash')
assert.property(result.slpUtxos[1], 'decimals')
assert.property(result.slpUtxos[1], 'tokenType')
assert.property(result.slpUtxos[1], 'tokenQty')
assert.property(result.slpUtxos[0].utxos[1], 'txid')
assert.property(result.slpUtxos[0].utxos[1], 'vout')
assert.property(result.slpUtxos[0].utxos[1], 'value')
assert.property(result.slpUtxos[0].utxos[1], 'height')
assert.property(result.slpUtxos[0].utxos[1], 'confirmations')
assert.property(result.slpUtxos[0].utxos[1], 'satoshis')
assert.property(result.slpUtxos[0].utxos[1], 'isValid')
assert.equal(result.slpUtxos[0].utxos[1].isValid, true)
assert.property(result.slpUtxos[0].utxos[1], 'transactionType')
assert.property(result.slpUtxos[0].utxos[1], 'tokenId')
assert.property(result.slpUtxos[0].utxos[1], 'tokenTicker')
assert.property(result.slpUtxos[0].utxos[1], 'tokenName')
assert.property(result.slpUtxos[0].utxos[1], 'tokenDocumentUrl')
assert.property(result.slpUtxos[0].utxos[1], 'tokenDocumentHash')
assert.property(result.slpUtxos[0].utxos[1], 'decimals')
assert.property(result.slpUtxos[0].utxos[1], 'tokenType')
assert.property(result.slpUtxos[0].utxos[1], 'tokenQty')
})
})
})