mirror of
https://github.com/Permissionless-Software-Foundation/bch-js.git
synced 2026-09-22 00:52:01 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
906d9b2094 | ||
|
|
9326fd6e59 | ||
|
|
1d91eed5df |
+1
-1
@@ -19,7 +19,7 @@
|
||||
"test:integration:local:bchn": "export RESTURL=http://localhost:3000/v5/ && mocha --timeout 30000 test/integration/ && mocha --timeout 30000 test/integration/chains/bchn/",
|
||||
"test:integration:local:testnet": "RESTURL=http://localhost:4000/v5/ mocha --timeout 30000 test/integration/chains/testnet",
|
||||
"test:integration:decatur:bchn": "export RESTURL=http://192.168.2.129:3000/v5/ && mocha --timeout 30000 test/integration/ && mocha --timeout 30000 test/integration/chains/bchn/",
|
||||
"test:integration:decatur:abc": "export RESTURL=http://192.168.2.141:3000/v5/ && mocha --timeout 30000 test/integration && mocha --timeout 30000 test/integration/chains/abc/",
|
||||
"test:integration:decatur:abc": "export RESTURL=http://192.168.2.142:3000/v5/ && mocha --timeout 30000 test/integration && mocha --timeout 30000 test/integration/chains/abc/",
|
||||
"test:integration:temp:bchn": "export RESTURL=http://157.90.174.219:3000/v5/ && mocha --timeout 30000 test/integration/",
|
||||
"test:temp": "export RESTURL=http://localhost:3000/v5/ && mocha --timeout 30000 -g '#Encryption' test/integration/",
|
||||
"test:temp2": "mocha --timeout=30000 -g '#TransactionLib' test/unit/",
|
||||
|
||||
+14
@@ -109,6 +109,11 @@ class UTXO {
|
||||
}
|
||||
}
|
||||
|
||||
// Get the sync status of the SLP indexer
|
||||
const syncStatus = await this.psfSlpIndexer.status()
|
||||
const slpIndexerHeight = syncStatus.status.syncedBlockHeight
|
||||
const chainBlockHeight = syncStatus.status.chainBlockHeight
|
||||
|
||||
// Loop through the Fulcrum UTXOs.
|
||||
for (let i = 0; i < utxos.length; i++) {
|
||||
const thisUtxo = utxos[i]
|
||||
@@ -152,6 +157,15 @@ class UTXO {
|
||||
thisUtxo.isSlp = false
|
||||
}
|
||||
// console.log(`thisUtxo.isSlp: ${thisUtxo.isSlp}`)
|
||||
|
||||
// If the SLP indexer more than 1 block behind the full node, then
|
||||
// move any BCH UTXOs of 600 sats or less into the null array. This
|
||||
// protects token UTXOs from being burned accidentally.
|
||||
if (slpIndexerHeight < chainBlockHeight - 1) {
|
||||
if (thisUtxo.value < 601) {
|
||||
thisUtxo.isSlp = null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user