diff --git a/package.json b/package.json index 817f1f8..69677a6 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "test:integration:local:bchn": "export RESTURL=http://localhost:3000/v4/ && mocha --timeout 30000 test/integration/ && mocha --timeout 30000 test/integration/chains/bchn/", "test:integration:local:testnet": "RESTURL=http://localhost:4000/v4/ mocha --timeout 30000 test/integration/chains/testnet", "test:integration:decatur:bchn": "export RESTURL=http://192.168.0.36:3000/v4/ && mocha --timeout 30000 test/integration/", + "test:integration:temp:bchn": "export RESTURL=http://157.90.174.219:3000/v4/ && mocha -g '#hydrateUtxosWL' --timeout 30000 test/integration/", "test:temp": "export RESTURL=http://localhost:3000/v4/ && mocha --timeout 30000 -g '#hydrateUtxos' test/integration/", "test:temp2": "mocha --timeout=30000 -g '#_hydrateUtxo' test/unit/", "test:temp3": "export RESTURL=https://bchn.fullstack.cash/v4/ && mocha --timeout 30000 -g '#hydrateUtxos' test/integration/", diff --git a/src/slp/utils.js b/src/slp/utils.js index fd03091..109e484 100644 --- a/src/slp/utils.js +++ b/src/slp/utils.js @@ -1179,8 +1179,20 @@ class Utils { * but much more performant handling of SLP tokens. Some wallet apps prefer * the scaling performance over the breadth of supported tokens. * + * An optional second input object, `usrObj`, allows the user to inject an + * artifical delay while processing UTXOs. If `usrObj.utxoDelay` is set to + * a number, the call will delay by that number of milliseconds between + * processing UTXOs. + * + * This is an API-heavy call. If you get a lot of `null` values, then slow down + * the calls by using the usrObj.utxoDelay property, or request info on fewer + * UTXOs at a + * time. `null` indicates that the UTXO can *not* be safely spent, because + * a judgement as to weather it is a token UTXO has not been made. Spending it + * could burn tokens. It's safest to ignore UTXOs with a value of `null`. + * */ - async tokenUtxoDetailsWL (utxos) { + async tokenUtxoDetailsWL (utxos, usrObj = null) { try { // Throw error if input is not an array. if (!Array.isArray(utxos)) throw new Error('Input must be an array.') @@ -1216,7 +1228,7 @@ class Utils { } // Hydrate each UTXO with data from SLP OP_REUTRNs. - const outAry = await this._hydrateUtxo(utxos) + const outAry = await this._hydrateUtxo(utxos, usrObj) // console.log(`outAry: ${JSON.stringify(outAry, null, 2)}`) // *After* each UTXO has been hydrated with SLP data, @@ -1232,7 +1244,7 @@ class Utils { // information. // Validate against the whitelist SLPDB. - const whitelistResult = await this.validateTxid3(utxo.txid) + const whitelistResult = await this.validateTxid3(utxo.txid, usrObj) // console.log( // `whitelist-SLPDB for ${txid}: ${JSON.stringify( // whitelistResult, diff --git a/test/integration/slp.js b/test/integration/slp.js index 1d4570b..3a74ce1 100644 --- a/test/integration/slp.js +++ b/test/integration/slp.js @@ -639,7 +639,7 @@ describe('#SLP', () => { }) }) - describe('#hydrateUtxos', () => { + describe('#hydrateUtxos-', () => { it('should hydrate UTXOs', async () => { const utxos = [ {