fix(utxo.get()): Detecting out-of-sync SLP indexer, protecting tokens

This commit is contained in:
Chris Troutner
2022-11-01 14:58:28 -07:00
parent 1d91eed5df
commit 9326fd6e59
3 changed files with 45 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
/*
This test is used to interrogate the behavior of bch-js when a psf-slp-indexer
panicks and starts indexing from SLP genesis. In this corner-case, bch-js
should detect the indexer is out of sync, and protect any token UTXOs by
moving any UTXO under 600 sats into the null array.
TO RUN THIS TEST:
- Reset a local instance of psf-slp-indexer to sync from genesis.
- Start a local copy of bch-api
*/
const BCHJS = require('../../../src/bch-js.js')
const bchjs = new BCHJS({
restURL: 'http://localhost:3000/v5/'
})
async function startTest () {
try {
const addr = 'bitcoincash:qzkvas58zag9tjry693mflkjze2m20ps7vx7uw7z9d'
const result = await bchjs.Utxo.get(addr)
console.log(`result: ${JSON.stringify(result, null, 2)}`)
} catch (err) {
console.error('Error in startTest(): ', err)
}
}
startTest()
+4
View File
@@ -121,6 +121,8 @@ describe('#utxo', () => {
sandbox
.stub(bchjs.Utxo.psfSlpIndexer, 'tx')
.resolves({ txData: { isValidSlp: false } })
sandbox.stub(bchjs.Utxo.psfSlpIndexer, 'status')
.resolves({ status: { syncedBlockHeight: 600000, chainBlockHeight: 600000 } })
// Mock function to return the same input. Good enough for this test.
sandbox.stub(bchjs.Utxo, 'hydrateTokenData').resolves(x => x)
@@ -154,6 +156,8 @@ describe('#utxo', () => {
sandbox
.stub(bchjs.Utxo.psfSlpIndexer, 'tx')
.resolves({ txData: { isValidSlp: false } })
sandbox.stub(bchjs.Utxo.psfSlpIndexer, 'status')
.resolves({ status: { syncedBlockHeight: 600000, chainBlockHeight: 600000 } })
// Force psf-slp-indexer to return no UTXOs
sandbox