| { | ||
| "name": "@bsv/gasp", | ||
| "version": "1.1.0", | ||
| "version": "1.2.0", | ||
| "type": "commonjs", | ||
@@ -41,4 +41,4 @@ "description": "Graph Aware Sync Protocol", | ||
| "dependencies": { | ||
| "@bsv/sdk": "^1.4.18" | ||
| "@bsv/sdk": "^1.6.12" | ||
| } | ||
| } |
+52
-27
@@ -143,17 +143,42 @@ "use strict"; | ||
| * Synchronizes the transaction data between the local and remote participants. | ||
| * @param host Host identifier for sync state management | ||
| * @param limit Optional limit for the number of UTXOs to fetch per page (default: 1000) | ||
| */ | ||
| async sync() { | ||
| async sync(host, limit) { | ||
| this.infoLog(`Starting sync process. Last interaction timestamp: ${this.lastInteraction}`); | ||
| const initialRequest = await this.buildInitialRequest(this.lastInteraction); | ||
| const initialResponse = await this.remote.getInitialResponse(initialRequest); | ||
| // 1. Pull the remote UTXOs that we don't already have | ||
| if (initialResponse.UTXOList.length > 0) { | ||
| const foreignUTXOs = await this.storage.findKnownUTXOs(0); | ||
| await this.runConcurrently(initialResponse.UTXOList.filter(x => !foreignUTXOs.some(y => x.txid === y.txid && x.outputIndex === y.outputIndex)), async (UTXO) => { | ||
| const localUTXOs = await this.storage.findKnownUTXOs(0); | ||
| // Find which UTXOs we already have | ||
| const knownOutpoints = new Set(); | ||
| for (const utxo of await this.storage.findKnownUTXOs(0)) { | ||
| knownOutpoints.add(this.compute36ByteStructure(utxo.txid, utxo.outputIndex)); | ||
| } | ||
| const sharedOutpoints = new Set(); | ||
| let initialResponse; | ||
| do { | ||
| const initialRequest = await this.buildInitialRequest(this.lastInteraction, limit); | ||
| initialResponse = await this.remote.getInitialResponse(initialRequest); | ||
| const ingestQueue = []; | ||
| for (const utxo of initialResponse.UTXOList) { | ||
| if (utxo.score !== undefined && utxo.score > this.lastInteraction) { | ||
| this.lastInteraction = utxo.score; | ||
| } | ||
| const outpoint = this.compute36ByteStructure(utxo.txid, utxo.outputIndex); | ||
| if (knownOutpoints.has(outpoint)) { | ||
| sharedOutpoints.add(outpoint); | ||
| knownOutpoints.delete(outpoint); | ||
| } | ||
| else if (!sharedOutpoints.has(outpoint)) { | ||
| ingestQueue.push(utxo); | ||
| } | ||
| } | ||
| this.infoLog(`Processing page with ${initialResponse.UTXOList.length} UTXOs (since: ${initialResponse.since})`); | ||
| await this.runConcurrently(ingestQueue, async (UTXO) => { | ||
| try { | ||
| this.infoLog(`Requesting node for UTXO: ${JSON.stringify(UTXO)}`); | ||
| const resolvedNode = await this.remote.requestNode(this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex), UTXO.txid, UTXO.outputIndex, true); | ||
| const outpoint = this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex); | ||
| const resolvedNode = await this.remote.requestNode(outpoint, UTXO.txid, UTXO.outputIndex, true); | ||
| this.debugLog(`Received unspent graph node from remote: ${JSON.stringify(resolvedNode)}`); | ||
| await this.processIncomingNode(resolvedNode); | ||
| await this.completeGraph(resolvedNode.graphID); | ||
| sharedOutpoints.add(outpoint); | ||
| } | ||
@@ -164,20 +189,17 @@ catch (e) { | ||
| }); | ||
| } | ||
| } while (limit && initialResponse.UTXOList.length >= limit); | ||
| // 2. Only do the “reply” half if unidirectional is disabled | ||
| if (!this.unidirectional) { | ||
| const initialReply = await this.getInitialReply(initialResponse); | ||
| this.infoLog(`Received initial reply: ${JSON.stringify(initialReply)}`); | ||
| if (initialReply.UTXOList.length > 0) { | ||
| await this.runConcurrently(initialReply.UTXOList, async (UTXO) => { | ||
| try { | ||
| this.infoLog(`Hydrating GASP node for UTXO: ${JSON.stringify(UTXO)}`); | ||
| const outgoingNode = await this.storage.hydrateGASPNode(this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex), UTXO.txid, UTXO.outputIndex, true); | ||
| this.debugLog(`Sending unspent graph node for remote: ${JSON.stringify(outgoingNode)}`); | ||
| await this.processOutgoingNode(outgoingNode); | ||
| } | ||
| catch (e) { | ||
| this.warnLog(`Error with outgoing UTXO ${UTXO.txid}.${UTXO.outputIndex}: ${e.message}`); | ||
| } | ||
| }); | ||
| } | ||
| await this.runConcurrently(localUTXOs.filter(utxo => utxo.score >= initialResponse.since && | ||
| !sharedOutpoints.has(this.compute36ByteStructure(utxo.txid, utxo.outputIndex))), async (UTXO) => { | ||
| try { | ||
| this.infoLog(`Hydrating GASP node for UTXO: ${JSON.stringify(UTXO)}`); | ||
| const outgoingNode = await this.storage.hydrateGASPNode(this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex), UTXO.txid, UTXO.outputIndex, true); | ||
| this.debugLog(`Sending unspent graph node for remote: ${JSON.stringify(outgoingNode)}`); | ||
| await this.processOutgoingNode(outgoingNode); | ||
| } | ||
| catch (e) { | ||
| this.warnLog(`Error with outgoing UTXO ${UTXO.txid}.${UTXO.outputIndex}: ${e.message}`); | ||
| } | ||
| }); | ||
| } | ||
@@ -188,8 +210,11 @@ this.infoLog('Sync completed!'); | ||
| * Builds the initial request for the sync process. | ||
| * @param since The timestamp to sync from | ||
| * @param limit The limit for the number of UTXOs to fetch | ||
| * @returns A promise for the initial request object. | ||
| */ | ||
| async buildInitialRequest(since) { | ||
| async buildInitialRequest(since, limit) { | ||
| const request = { | ||
| version: this.version, | ||
| since | ||
| since, | ||
| limit | ||
| }; | ||
@@ -214,3 +239,3 @@ this.debugLog(`Built initial request: ${JSON.stringify(request)}`); | ||
| since: this.lastInteraction, | ||
| UTXOList: await this.storage.findKnownUTXOs(request.since) | ||
| UTXOList: await this.storage.findKnownUTXOs(request.since, request.limit) | ||
| }; | ||
@@ -217,0 +242,0 @@ this.debugLog(`Built initial response: ${JSON.stringify(response)}`); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"GASP.js","sourceRoot":"","sources":["../../../src/GASP.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"GASP.js","sourceRoot":"","sources":["../../../src/GASP.ts"],"names":[],"mappings":"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"} |
+52
-27
@@ -160,17 +160,42 @@ import { Transaction } from '@bsv/sdk'; | ||
| * Synchronizes the transaction data between the local and remote participants. | ||
| * @param host Host identifier for sync state management | ||
| * @param limit Optional limit for the number of UTXOs to fetch per page (default: 1000) | ||
| */ | ||
| async sync() { | ||
| async sync(host, limit) { | ||
| this.infoLog(`Starting sync process. Last interaction timestamp: ${this.lastInteraction}`); | ||
| const initialRequest = await this.buildInitialRequest(this.lastInteraction); | ||
| const initialResponse = await this.remote.getInitialResponse(initialRequest); | ||
| // 1. Pull the remote UTXOs that we don't already have | ||
| if (initialResponse.UTXOList.length > 0) { | ||
| const foreignUTXOs = await this.storage.findKnownUTXOs(0); | ||
| await this.runConcurrently(initialResponse.UTXOList.filter(x => !foreignUTXOs.some(y => x.txid === y.txid && x.outputIndex === y.outputIndex)), async (UTXO) => { | ||
| const localUTXOs = await this.storage.findKnownUTXOs(0); | ||
| // Find which UTXOs we already have | ||
| const knownOutpoints = new Set(); | ||
| for (const utxo of await this.storage.findKnownUTXOs(0)) { | ||
| knownOutpoints.add(this.compute36ByteStructure(utxo.txid, utxo.outputIndex)); | ||
| } | ||
| const sharedOutpoints = new Set(); | ||
| let initialResponse; | ||
| do { | ||
| const initialRequest = await this.buildInitialRequest(this.lastInteraction, limit); | ||
| initialResponse = await this.remote.getInitialResponse(initialRequest); | ||
| const ingestQueue = []; | ||
| for (const utxo of initialResponse.UTXOList) { | ||
| if (utxo.score !== undefined && utxo.score > this.lastInteraction) { | ||
| this.lastInteraction = utxo.score; | ||
| } | ||
| const outpoint = this.compute36ByteStructure(utxo.txid, utxo.outputIndex); | ||
| if (knownOutpoints.has(outpoint)) { | ||
| sharedOutpoints.add(outpoint); | ||
| knownOutpoints.delete(outpoint); | ||
| } | ||
| else if (!sharedOutpoints.has(outpoint)) { | ||
| ingestQueue.push(utxo); | ||
| } | ||
| } | ||
| this.infoLog(`Processing page with ${initialResponse.UTXOList.length} UTXOs (since: ${initialResponse.since})`); | ||
| await this.runConcurrently(ingestQueue, async (UTXO) => { | ||
| try { | ||
| this.infoLog(`Requesting node for UTXO: ${JSON.stringify(UTXO)}`); | ||
| const resolvedNode = await this.remote.requestNode(this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex), UTXO.txid, UTXO.outputIndex, true); | ||
| const outpoint = this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex); | ||
| const resolvedNode = await this.remote.requestNode(outpoint, UTXO.txid, UTXO.outputIndex, true); | ||
| this.debugLog(`Received unspent graph node from remote: ${JSON.stringify(resolvedNode)}`); | ||
| await this.processIncomingNode(resolvedNode); | ||
| await this.completeGraph(resolvedNode.graphID); | ||
| sharedOutpoints.add(outpoint); | ||
| } | ||
@@ -181,20 +206,17 @@ catch (e) { | ||
| }); | ||
| } | ||
| } while (limit && initialResponse.UTXOList.length >= limit); | ||
| // 2. Only do the “reply” half if unidirectional is disabled | ||
| if (!this.unidirectional) { | ||
| const initialReply = await this.getInitialReply(initialResponse); | ||
| this.infoLog(`Received initial reply: ${JSON.stringify(initialReply)}`); | ||
| if (initialReply.UTXOList.length > 0) { | ||
| await this.runConcurrently(initialReply.UTXOList, async (UTXO) => { | ||
| try { | ||
| this.infoLog(`Hydrating GASP node for UTXO: ${JSON.stringify(UTXO)}`); | ||
| const outgoingNode = await this.storage.hydrateGASPNode(this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex), UTXO.txid, UTXO.outputIndex, true); | ||
| this.debugLog(`Sending unspent graph node for remote: ${JSON.stringify(outgoingNode)}`); | ||
| await this.processOutgoingNode(outgoingNode); | ||
| } | ||
| catch (e) { | ||
| this.warnLog(`Error with outgoing UTXO ${UTXO.txid}.${UTXO.outputIndex}: ${e.message}`); | ||
| } | ||
| }); | ||
| } | ||
| await this.runConcurrently(localUTXOs.filter(utxo => utxo.score >= initialResponse.since && | ||
| !sharedOutpoints.has(this.compute36ByteStructure(utxo.txid, utxo.outputIndex))), async (UTXO) => { | ||
| try { | ||
| this.infoLog(`Hydrating GASP node for UTXO: ${JSON.stringify(UTXO)}`); | ||
| const outgoingNode = await this.storage.hydrateGASPNode(this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex), UTXO.txid, UTXO.outputIndex, true); | ||
| this.debugLog(`Sending unspent graph node for remote: ${JSON.stringify(outgoingNode)}`); | ||
| await this.processOutgoingNode(outgoingNode); | ||
| } | ||
| catch (e) { | ||
| this.warnLog(`Error with outgoing UTXO ${UTXO.txid}.${UTXO.outputIndex}: ${e.message}`); | ||
| } | ||
| }); | ||
| } | ||
@@ -205,8 +227,11 @@ this.infoLog('Sync completed!'); | ||
| * Builds the initial request for the sync process. | ||
| * @param since The timestamp to sync from | ||
| * @param limit The limit for the number of UTXOs to fetch | ||
| * @returns A promise for the initial request object. | ||
| */ | ||
| async buildInitialRequest(since) { | ||
| async buildInitialRequest(since, limit) { | ||
| const request = { | ||
| version: this.version, | ||
| since | ||
| since, | ||
| limit | ||
| }; | ||
@@ -231,3 +256,3 @@ this.debugLog(`Built initial request: ${JSON.stringify(request)}`); | ||
| since: this.lastInteraction, | ||
| UTXOList: await this.storage.findKnownUTXOs(request.since) | ||
| UTXOList: await this.storage.findKnownUTXOs(request.since, request.limit) | ||
| }; | ||
@@ -234,0 +259,0 @@ this.debugLog(`Built initial response: ${JSON.stringify(response)}`); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"GASP.js","sourceRoot":"","sources":["../../../src/GASP.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAsHtC,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,IAAI,CAA6B;IACjC,cAAc,CAAQ;IACtB,cAAc,CAAQ;IAEtB,YAAY,OAAe,EAAE,cAAsB,EAAE,cAAsB;QACzE,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAA;QACvC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACX,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED;;GAEG;AACH,MAAM,OAAO,IAAI;IACf,OAAO,CAAQ;IACf,OAAO,CAAa;IACpB,MAAM,CAAY;IAClB,eAAe,CAAQ;IAEvB;;OAEG;IACH,GAAG,CAAS;IAEZ;;OAEG;IACH,QAAQ,CAAU;IAElB,SAAS,CAAQ;IACjB,cAAc,CAAS;IAEvB;;OAEG;IACH,UAAU,CAAS;IAEnB;;;;;;;;;;OAUG;IACH,YACE,OAAoB,EACpB,MAAkB,EAClB,eAAe,GAAG,CAAC,EACnB,SAAS,GAAG,SAAS,EACrB,GAAG,GAAG,KAAK,EACX,cAAc,GAAG,KAAK,EACtB,WAAqB,QAAQ,CAAC,IAAI,EAClC,UAAU,GAAG,KAAK;QAElB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,CAAC,kCAAkC,IAAI,CAAC,OAAO,sBAAsB,IAAI,CAAC,eAAe,qBAAqB,IAAI,CAAC,cAAc,eAAe,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACxN,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe,CAC3B,KAAU,EACV,QAAoC;QAEpC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,mBAAmB;YACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,OAAO,CAAC,GAAG,IAAS;QAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,GAAG,IAAS;QAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAG,IAAS;QAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAG,IAAS;QAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,GAAG,IAAS;QAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,SAAiB;QACzC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACvG,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,sBAAsB,CAAC,IAAY,EAAE,KAAa;QACxD,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;QAC5C,IAAI,CAAC,QAAQ,CAAC,+BAA+B,MAAM,eAAe,IAAI,YAAY,KAAK,EAAE,CAAC,CAAA;QAC1F,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;OAIG;IACK,0BAA0B,CAAC,QAAgB;QACjD,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG;YACb,IAAI;YACJ,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;SACjC,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,oCAAoC,QAAQ,eAAe,IAAI,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QACpH,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,EAAU;QAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,sBAAsB,EAAE,EAAE,CAAC,CAAA;QAC/D,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,CAAC,sDAAsD,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;QAC1F,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC3E,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAA;QAE5E,sDAAsD;QACtD,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YAEzD,MAAM,IAAI,CAAC,eAAe,CACxB,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAClC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,CAAC,CAC9E,EACD,KAAK,EAAC,IAAI,EAAC,EAAE;gBACX,IAAI,CAAC;oBACH,IAAI,CAAC,OAAO,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBACjE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAChD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,EACxD,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,EAChB,IAAI,CACL,CAAA;oBACD,IAAI,CAAC,QAAQ,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;oBACzF,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAA;oBAC5C,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;gBAChD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,OAAO,CAAC,4BAA4B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;gBACpG,CAAC;YACH,CAAC,CACF,CAAA;QACH,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;YAChE,IAAI,CAAC,OAAO,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YAEvE,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;oBAC7D,IAAI,CAAC;wBACH,IAAI,CAAC,OAAO,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;wBACrE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CACrD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,EACxD,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,EAChB,IAAI,CACL,CAAA;wBACD,IAAI,CAAC,QAAQ,CAAC,0CAA0C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;wBACvF,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAA;oBAC9C,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,IAAI,CAAC,OAAO,CAAC,4BAA4B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;oBACpG,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,mBAAmB,CAAC,KAAa;QACrC,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK;SACN,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAClE,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAA2B;QAClD,IAAI,CAAC,OAAO,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACpE,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,wBAAwB,CACxC,2CAA2C,IAAI,CAAC,OAAO,sBAAsB,OAAO,CAAC,OAAO,EAAE,EAC9F,IAAI,CAAC,OAAO,EACZ,OAAO,CAAC,OAAO,CAChB,CAAA;YACD,IAAI,CAAC,QAAQ,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YAC9D,MAAM,KAAK,CAAA;QACb,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,IAAI,CAAC,eAAe;YAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC;SAC3D,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACpE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,QAA6B;QACjD,IAAI,CAAC,OAAO,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACtE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpE,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,CAAC,CACxF,CAAA;QACD,MAAM,KAAK,GAAG;YACZ,QAAQ,EAAE,aAAa;SACxB,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC9D,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,IAAY,EAAE,WAAmB,EAAE,QAAiB;QACrF,IAAI,CAAC,OAAO,CAAC,2CAA2C,OAAO,WAAW,IAAI,kBAAkB,WAAW,eAAe,QAAQ,EAAE,CAAC,CAAA;QACrI,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QACrF,IAAI,CAAC,QAAQ,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,IAAc;QAC7B,IAAI,CAAC,OAAO,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxE,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACjE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QACrE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,eAAe,CAAA;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,IAAI,CAAC,OAAO,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;YAC/C,IAAI,CAAC,QAAQ,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAA;YACrD,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YACzC,IAAI,CAAC,OAAO,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAA;QACtD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,2BAA4B,CAAW,CAAC,OAAO,gCAAgC,OAAO,EAAE,CAAC,CAAA;YACtG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,mBAAmB,CAAC,IAAc,EAAE,OAAgB,EAAE,SAAS,GAAG,IAAI,GAAG,EAAE;QACvF,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAA;QACpE,IAAI,CAAC,QAAQ,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAA;QACvF,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,MAAM,+BAA+B,CAAC,CAAA;YAC5D,OAAM,CAAC,6BAA6B;QACtC,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACrB,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC/C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAC9D,IAAI,CAAC,QAAQ,CAAC,0BAA0B,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QAClF,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,eAAe,CACxB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,EAC5C,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;gBACjC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAA;gBACvE,IAAI,CAAC,OAAO,CAAC,iCAAiC,IAAI,kBAAkB,WAAW,eAAe,QAAQ,EAAE,CAAC,CAAA;gBACzG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;gBACxF,IAAI,CAAC,QAAQ,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;gBAC9D,MAAM,IAAI,CAAC,mBAAmB,CAC5B,OAAO,EACP,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,EAC3E,SAAS,CACV,CAAA;YACH,CAAC,CACF,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,mBAAmB,CAAC,IAAc,EAAE,SAAS,GAAG,IAAI,GAAG,EAAE;QACrE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,2DAA2D,CAAC,CAAA;YAC1E,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAA;QACpE,IAAI,CAAC,QAAQ,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAClE,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,MAAM,+BAA+B,CAAC,CAAA;YAC5D,OAAM,CAAC,6BAA6B;QACtC,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAErB,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,CAAC,yCAAyC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAClF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,eAAe,CACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EACxC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;gBACjC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAA;gBACvE,IAAI,CAAC;oBACH,IAAI,CAAC,OAAO,CAAC,4BAA4B,IAAI,kBAAkB,WAAW,eAAe,QAAQ,EAAE,CAAC,CAAA;oBACpG,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;oBAClG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;oBAC/D,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;gBACzD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,QAAQ,CAAC,yBAA0B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;oBAC9D,uIAAuI;oBACvI,OAAM;gBACR,CAAC;YACH,CAAC,CACF,CAAA;QACH,CAAC;IACH,CAAC;CACF"} | ||
| {"version":3,"file":"GASP.js","sourceRoot":"","sources":["../../../src/GASP.ts"],"names":[],"mappings":"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"} |
+25
-15
@@ -9,4 +9,17 @@ /** | ||
| since: number; | ||
| /** Optional limit on the number of UTXOs to return */ | ||
| limit?: number; | ||
| }; | ||
| /** | ||
| * Represents an output in the GASP protocol. | ||
| */ | ||
| export type GASPOutput = { | ||
| /** The transaction ID */ | ||
| txid: string; | ||
| /** The output index */ | ||
| outputIndex: number; | ||
| /** The score/timestamp for this output */ | ||
| score: number; | ||
| }; | ||
| /** | ||
| * Represents the initial response made under the Graph Aware Sync Protocol. | ||
@@ -16,6 +29,3 @@ */ | ||
| /** A list of outputs witnessed by the recipient since the initial request's timestamp. If not provided, a complete list of outputs since the beginning of time is returned. Unconfirmed (non-timestamped) UTXOs are always returned. */ | ||
| UTXOList: Array<{ | ||
| txid: string; | ||
| outputIndex: number; | ||
| }>; | ||
| UTXOList: GASPOutput[]; | ||
| /** A timestamp from when the responder wants to receive UTXOs in the other direction, back from the requester. */ | ||
@@ -27,6 +37,3 @@ since: number; | ||
| /** A list of outputs (excluding outputs received from the Initial Response), and ONLY after the timestamp from the initial response. We don't need to send back things from the initial response, since those were already seen by the counterparty. */ | ||
| UTXOList: Array<{ | ||
| txid: string; | ||
| outputIndex: number; | ||
| }>; | ||
| UTXOList: GASPOutput[]; | ||
| }; | ||
@@ -69,8 +76,7 @@ /** | ||
| * Non-confirmed (non-timestamped) outputs should always be returned, regardless of the timestamp. | ||
| * @returns A promise for an array of objects, each containing txid and outputIndex properties. | ||
| * @param since The timestamp to find UTXOs after | ||
| * @param limit Optional limit on the number of UTXOs to return | ||
| * @returns A promise for an array of GASPOutput objects. | ||
| */ | ||
| findKnownUTXOs: (since: number) => Promise<Array<{ | ||
| txid: string; | ||
| outputIndex: number; | ||
| }>>; | ||
| findKnownUTXOs: (since: number, limit?: number) => Promise<GASPOutput[]>; | ||
| /** | ||
@@ -216,9 +222,13 @@ * For a given txid and output index, returns the associated transaction, a merkle proof if the transaction is in a block, and metadata if if requested. If no metadata is requested, metadata hashes on inputs are not returned. | ||
| * Synchronizes the transaction data between the local and remote participants. | ||
| * @param host Host identifier for sync state management | ||
| * @param limit Optional limit for the number of UTXOs to fetch per page (default: 1000) | ||
| */ | ||
| sync(): Promise<void>; | ||
| sync(host: string, limit?: number): Promise<void>; | ||
| /** | ||
| * Builds the initial request for the sync process. | ||
| * @param since The timestamp to sync from | ||
| * @param limit The limit for the number of UTXOs to fetch | ||
| * @returns A promise for the initial request object. | ||
| */ | ||
| buildInitialRequest(since: number): Promise<GASPInitialRequest>; | ||
| buildInitialRequest(since: number, limit?: number): Promise<GASPInitialRequest>; | ||
| /** | ||
@@ -225,0 +235,0 @@ * Builds the initial response based on the received request. |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"GASP.d.ts","sourceRoot":"","sources":["../../../src/GASP.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"GASP.d.ts","sourceRoot":"","sources":["../../../src/GASP.ts"],"names":[],"mappings":"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"} |
+2
-2
| { | ||
| "name": "@bsv/gasp", | ||
| "version": "1.1.0", | ||
| "version": "1.2.0", | ||
| "type": "module", | ||
@@ -56,4 +56,4 @@ "description": "Graph Aware Sync Protocol", | ||
| "dependencies": { | ||
| "@bsv/sdk": "^1.4.18" | ||
| "@bsv/sdk": "^1.6.12" | ||
| } | ||
| } |
+62
-44
@@ -43,3 +43,3 @@ /* eslint-env jest */ | ||
| import { GASP, GASPInitialRequest, GASPNode, GASPNodeResponse, GASPStorage, GASPRemote, GASPInitialReply, GASPInitialResponse } from '../GASP' | ||
| import { GASP, GASPInitialRequest, GASPNode, GASPNodeResponse, GASPStorage, GASPRemote, GASPInitialReply, GASPInitialResponse, GASPOutput } from '../GASP' | ||
@@ -102,8 +102,9 @@ type Graph = { | ||
| async findKnownUTXOs(since: number): Promise<{ txid: string; outputIndex: number }[]> { | ||
| async findKnownUTXOs(since: number, limit?: number): Promise<GASPOutput[]> { | ||
| const utxos = this.knownStore | ||
| .filter(x => !x.time || x.time > since) // Include UTXOs with no timestamp or timestamps greater than 'since' | ||
| .map(x => ({ txid: x.txid, outputIndex: x.outputIndex })) | ||
| .sort((a, b) => (a.time || 0) - (b.time || 0)) // Sort by time ascending | ||
| .map(x => ({ txid: x.txid, outputIndex: x.outputIndex, score: x.time })) | ||
| this.logData('findKnownUTXOs', since, utxos) | ||
| return utxos | ||
| return limit ? utxos.slice(0, limit) : utxos | ||
| } | ||
@@ -165,3 +166,9 @@ | ||
| this.logData('finalizeGraph', graphID, tempGraph) | ||
| this.knownStore.push(tempGraph) | ||
| // Check if UTXO already exists to prevent duplicates | ||
| const exists = this.knownStore.some(k => | ||
| k.txid === tempGraph.txid && k.outputIndex === tempGraph.outputIndex | ||
| ) | ||
| if (!exists) { | ||
| this.knownStore.push(tempGraph) | ||
| } | ||
| this.updateCallback() | ||
@@ -173,2 +180,6 @@ delete this.tempGraphStore[graphID] | ||
| } | ||
| // Mock topic property for testing | ||
| topic: string = 'test-topic' | ||
| } | ||
@@ -201,2 +212,9 @@ | ||
| // Helper to compare UTXOs by txid and outputIndex only | ||
| const compareUTXOs = (utxos1: GASPOutput[], utxos2: GASPOutput[]) => { | ||
| const normalized1 = utxos1.map(u => ({ txid: u.txid, outputIndex: u.outputIndex })) | ||
| const normalized2 = utxos2.map(u => ({ txid: u.txid, outputIndex: u.outputIndex })) | ||
| return expect(normalized1).toEqual(normalized2) | ||
| } | ||
| describe('GASP', () => { | ||
@@ -215,3 +233,3 @@ afterEach(() => { | ||
| gasp1.version = 2 | ||
| await expect(gasp1.sync()).rejects.toThrow(new Error('GASP version mismatch. Current version: 1, foreign version: 2')) | ||
| await expect(gasp1.sync('test-host')).rejects.toThrow(new Error('GASP version mismatch. Current version: 1, foreign version: 2')) | ||
| expect(console.error).toHaveBeenCalledWith('[GASP #2] ', '[ERROR]', 'GASP version mismatch error: GASP version mismatch. Current version: 1, foreign version: 2') | ||
@@ -226,5 +244,5 @@ console.error = originalError | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage2.findKnownUTXOs(0)).length).toBe(1) | ||
| expect(await storage2.findKnownUTXOs(0)).toEqual(await storage1.findKnownUTXOs(0)) | ||
| compareUTXOs(await storage2.findKnownUTXOs(0), await storage1.findKnownUTXOs(0)) | ||
| }) | ||
@@ -237,5 +255,5 @@ it('Synchronizes a single UTXO from Bob to Alice', async () => { | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(1) | ||
| expect(await storage1.findKnownUTXOs(0)).toEqual(await storage2.findKnownUTXOs(0)) | ||
| compareUTXOs(await storage1.findKnownUTXOs(0), await storage2.findKnownUTXOs(0)) | ||
| }) | ||
@@ -251,3 +269,3 @@ it('Discards graphs that do not validate from Alice to Bob', async () => { | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage2.findKnownUTXOs(0)).length).toBe(0) | ||
@@ -265,3 +283,3 @@ expect(storage2.discardGraph).toHaveBeenCalledWith('mock_sender1_txid1.0') | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(0) | ||
@@ -286,5 +304,5 @@ expect(storage1.discardGraph).toHaveBeenCalledWith('mock_sender1_txid1.0') | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(1) | ||
| expect(await storage1.findKnownUTXOs(0)).toEqual(await storage2.findKnownUTXOs(0)) | ||
| compareUTXOs(await storage1.findKnownUTXOs(0), await storage2.findKnownUTXOs(0)) | ||
| }) | ||
@@ -307,5 +325,5 @@ it('Synchronizes a deep UTXO from Alice to Bob', async () => { | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage2.findKnownUTXOs(0)).length).toBe(1) | ||
| expect(await storage2.findKnownUTXOs(0)).toEqual(await storage1.findKnownUTXOs(0)) | ||
| compareUTXOs(await storage2.findKnownUTXOs(0), await storage1.findKnownUTXOs(0)) | ||
| }) | ||
@@ -318,3 +336,3 @@ it('Synchronizes multiple graphs from Alice to Bob', async () => { | ||
| time: 222, | ||
| txid: 'mock_sender2_txid1', | ||
| txid: 'mock_sender2_txid1', | ||
| inputs: {} | ||
@@ -328,5 +346,5 @@ } | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage2.findKnownUTXOs(0)).length).toBe(2) | ||
| expect(await storage2.findKnownUTXOs(0)).toEqual(await storage1.findKnownUTXOs(0)) | ||
| compareUTXOs(await storage2.findKnownUTXOs(0), await storage1.findKnownUTXOs(0)) | ||
| }) | ||
@@ -339,3 +357,3 @@ it('Synchronizes a graph with recursive inputs from Bob to Alice', async () => { | ||
| time: 333, | ||
| txid: 'recursive_txid', | ||
| txid: 'recursive_txid', | ||
| inputs: {} | ||
@@ -378,5 +396,5 @@ } | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(1) | ||
| expect(await storage1.findKnownUTXOs(0)).toEqual(await storage2.findKnownUTXOs(0)) | ||
| compareUTXOs(await storage1.findKnownUTXOs(0), await storage2.findKnownUTXOs(0)) | ||
| }) | ||
@@ -407,3 +425,3 @@ it('Synchronizes only UTXOs created after the specified since timestamp', async () => { | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
@@ -413,3 +431,3 @@ // Ensure only the new UTXO is synchronized | ||
| expect(syncedUTXOs.length).toBe(1) | ||
| expect(syncedUTXOs).toEqual([{ txid: 'new_txid', outputIndex: 1 }]) | ||
| expect(syncedUTXOs.map(u => ({ txid: u.txid, outputIndex: u.outputIndex }))).toEqual([{ txid: 'new_txid', outputIndex: 1 }]) | ||
| }) | ||
@@ -422,3 +440,3 @@ it('Will not sync unnecessary graphs', async () => { | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(1) | ||
@@ -428,3 +446,3 @@ expect((await storage2.findKnownUTXOs(0)).length).toBe(1) | ||
| expect(storage2.finalizeGraph).not.toHaveBeenCalled() | ||
| expect(await storage2.findKnownUTXOs(0)).toEqual(await storage1.findKnownUTXOs(0)) | ||
| compareUTXOs(await storage2.findKnownUTXOs(0), await storage1.findKnownUTXOs(0)) | ||
| }) | ||
@@ -443,4 +461,4 @@ it('Handles invalid timestamp format gracefully', async () => { | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| expect(await storage2.findKnownUTXOs(0)).not.toEqual(await storage1.findKnownUTXOs(0)) | ||
| await gasp1.sync('test-host') | ||
| expect((await storage2.findKnownUTXOs(0)).length).not.toEqual((await storage1.findKnownUTXOs(0)).length) | ||
| }) | ||
@@ -478,7 +496,7 @@ it('Handles multiple UTXOs with mixed success and failure', async () => { | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| const syncedUTXOs = await storage2.findKnownUTXOs(0) | ||
| expect(syncedUTXOs.length).toBe(1) | ||
| expect(syncedUTXOs).toEqual([{ txid: 'mock_sender1_txid1', outputIndex: 0 }]) | ||
| expect(syncedUTXOs.map(u => ({ txid: u.txid, outputIndex: u.outputIndex }))).toEqual([{ txid: 'mock_sender1_txid1', outputIndex: 0 }]) | ||
| }) | ||
@@ -551,3 +569,3 @@ describe('Not that this should ever happen in Bitcoin, but...', () => { | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
@@ -557,3 +575,3 @@ // No UTXOs were synced between the parties | ||
| // The sync process did not complete | ||
| expect(await storage2.findKnownUTXOs(0)).not.toEqual(await storage1.findKnownUTXOs(0)) | ||
| expect((await storage2.findKnownUTXOs(0)).length).not.toEqual((await storage1.findKnownUTXOs(0)).length) | ||
| // Two nodes were appended to the temporary graph | ||
@@ -629,7 +647,7 @@ expect(storage2.appendToGraph).toHaveBeenCalledTimes(2) | ||
| gasp1.remote = gasp2 | ||
| await gasp1.sync() | ||
| await gasp1.sync('test-host') | ||
| // This direction, the UTXO does sync because the recipient is able to proceed to graph finalization after refusing to process duplicative data. | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(1) | ||
| expect(await storage1.findKnownUTXOs(0)).toEqual(await storage1.findKnownUTXOs(0)) | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(1) | ||
| expect(storage1.appendToGraph).toHaveBeenCalledTimes(2) | ||
@@ -752,6 +770,6 @@ }) | ||
| await gasp1.sync(); | ||
| await gasp1.sync('test-host'); | ||
| expect((await storage2.findKnownUTXOs(0)).length).toBe(0); | ||
| expect(await storage2.findKnownUTXOs(0)).not.toEqual(await storage1.findKnownUTXOs(0)); | ||
| expect((await storage2.findKnownUTXOs(0)).length).not.toEqual((await storage1.findKnownUTXOs(0)).length); | ||
| expect(storage2.appendToGraph).toHaveBeenCalledTimes(3); | ||
@@ -876,6 +894,6 @@ expect(Object.keys(storage2.tempGraphStore).length).toEqual(3); | ||
| await gasp1.sync(); | ||
| await gasp1.sync('test-host'); | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(1); | ||
| expect(await storage1.findKnownUTXOs(0)).toEqual(await storage1.findKnownUTXOs(0)); | ||
| expect((await storage1.findKnownUTXOs(0)).length).toBe(1); | ||
| expect(storage1.appendToGraph).toHaveBeenCalledTimes(3); | ||
@@ -923,6 +941,6 @@ }) | ||
| // Let Alice do a unidirectional sync from Bob | ||
| await gaspAlice.sync() | ||
| await gaspAlice.sync('test-host') | ||
| // Expect that Bob's UTXO has arrived in Alice's store | ||
| expect((await storageAlice.findKnownUTXOs(0))).toEqual([ | ||
| expect((await storageAlice.findKnownUTXOs(0)).map(u => ({ txid: u.txid, outputIndex: u.outputIndex }))).toEqual([ | ||
| { txid: 'alice_txid', outputIndex: 0 }, | ||
@@ -933,3 +951,3 @@ { txid: 'bob_txid', outputIndex: 1 } | ||
| // But, Bob does NOT get Alice's UTXO, because unidirectional means no "reply" from Alice | ||
| expect((await storageBob.findKnownUTXOs(0))).toEqual([ | ||
| expect((await storageBob.findKnownUTXOs(0)).map(u => ({ txid: u.txid, outputIndex: u.outputIndex }))).toEqual([ | ||
| { txid: 'bob_txid', outputIndex: 1 } | ||
@@ -973,6 +991,6 @@ ]) | ||
| // Bob does a unidirectional sync from Alice | ||
| await gaspBob.sync() | ||
| await gaspBob.sync('test-host') | ||
| // Expect that Alice's UTXO has arrived in Bob's store | ||
| expect((await storageBob.findKnownUTXOs(0))).toEqual([ | ||
| expect((await storageBob.findKnownUTXOs(0)).map(u => ({ txid: u.txid, outputIndex: u.outputIndex }))).toEqual([ | ||
| { txid: 'bob_txid', outputIndex: 1 }, | ||
@@ -983,3 +1001,3 @@ { txid: 'alice_txid', outputIndex: 0 } | ||
| // But, Alice does NOT get Bob's UTXO, because Bob never pushes it in unidirectional mode | ||
| expect((await storageAlice.findKnownUTXOs(0))).toEqual([ | ||
| expect((await storageAlice.findKnownUTXOs(0)).map(u => ({ txid: u.txid, outputIndex: u.outputIndex }))).toEqual([ | ||
| { txid: 'alice_txid', outputIndex: 0 } | ||
@@ -986,0 +1004,0 @@ ]) |
+68
-26
@@ -11,5 +11,19 @@ import { Transaction } from '@bsv/sdk' | ||
| since: number | ||
| /** Optional limit on the number of UTXOs to return */ | ||
| limit?: number | ||
| } | ||
| /** | ||
| * Represents an output in the GASP protocol. | ||
| */ | ||
| export type GASPOutput = { | ||
| /** The transaction ID */ | ||
| txid: string | ||
| /** The output index */ | ||
| outputIndex: number | ||
| /** The score/timestamp for this output */ | ||
| score: number | ||
| } | ||
| /** | ||
| * Represents the initial response made under the Graph Aware Sync Protocol. | ||
@@ -19,3 +33,3 @@ */ | ||
| /** A list of outputs witnessed by the recipient since the initial request's timestamp. If not provided, a complete list of outputs since the beginning of time is returned. Unconfirmed (non-timestamped) UTXOs are always returned. */ | ||
| UTXOList: Array<{ txid: string, outputIndex: number }>, | ||
| UTXOList: GASPOutput[] | ||
| /** A timestamp from when the responder wants to receive UTXOs in the other direction, back from the requester. */ | ||
@@ -28,3 +42,3 @@ since: number | ||
| /** A list of outputs (excluding outputs received from the Initial Response), and ONLY after the timestamp from the initial response. We don't need to send back things from the initial response, since those were already seen by the counterparty. */ | ||
| UTXOList: Array<{ txid: string, outputIndex: number }>, | ||
| UTXOList: GASPOutput[] | ||
| } | ||
@@ -66,5 +80,7 @@ | ||
| * Non-confirmed (non-timestamped) outputs should always be returned, regardless of the timestamp. | ||
| * @returns A promise for an array of objects, each containing txid and outputIndex properties. | ||
| * @param since The timestamp to find UTXOs after | ||
| * @param limit Optional limit on the number of UTXOs to return | ||
| * @returns A promise for an array of GASPOutput objects. | ||
| */ | ||
| findKnownUTXOs: (since: number) => Promise<Array<{ txid: string, outputIndex: number }>> | ||
| findKnownUTXOs: (since: number, limit?: number) => Promise<GASPOutput[]> | ||
| /** | ||
@@ -311,21 +327,44 @@ * For a given txid and output index, returns the associated transaction, a merkle proof if the transaction is in a block, and metadata if if requested. If no metadata is requested, metadata hashes on inputs are not returned. | ||
| * Synchronizes the transaction data between the local and remote participants. | ||
| * @param host Host identifier for sync state management | ||
| * @param limit Optional limit for the number of UTXOs to fetch per page (default: 1000) | ||
| */ | ||
| async sync(): Promise<void> { | ||
| async sync(host: string, limit?: number): Promise<void> { | ||
| this.infoLog(`Starting sync process. Last interaction timestamp: ${this.lastInteraction}`) | ||
| const initialRequest = await this.buildInitialRequest(this.lastInteraction) | ||
| const initialResponse = await this.remote.getInitialResponse(initialRequest) | ||
| // 1. Pull the remote UTXOs that we don't already have | ||
| if (initialResponse.UTXOList.length > 0) { | ||
| const foreignUTXOs = await this.storage.findKnownUTXOs(0) | ||
| const localUTXOs = await this.storage.findKnownUTXOs(0) | ||
| // Find which UTXOs we already have | ||
| const knownOutpoints = new Set<string>() | ||
| for (const utxo of await this.storage.findKnownUTXOs(0)) { | ||
| knownOutpoints.add(this.compute36ByteStructure(utxo.txid, utxo.outputIndex)) | ||
| } | ||
| const sharedOutpoints = new Set<string>() | ||
| let initialResponse: GASPInitialResponse | ||
| do { | ||
| const initialRequest = await this.buildInitialRequest(this.lastInteraction, limit) | ||
| initialResponse = await this.remote.getInitialResponse(initialRequest) | ||
| const ingestQueue: GASPOutput[] = [] | ||
| for (const utxo of initialResponse.UTXOList) { | ||
| if (utxo.score !== undefined && utxo.score > this.lastInteraction) { | ||
| this.lastInteraction = utxo.score | ||
| } | ||
| const outpoint = this.compute36ByteStructure(utxo.txid, utxo.outputIndex) | ||
| if (knownOutpoints.has(outpoint)) { | ||
| sharedOutpoints.add(outpoint) | ||
| knownOutpoints.delete(outpoint) | ||
| } else if (!sharedOutpoints.has(outpoint)) { | ||
| ingestQueue.push(utxo) | ||
| } | ||
| } | ||
| this.infoLog(`Processing page with ${initialResponse.UTXOList.length} UTXOs (since: ${initialResponse.since})`) | ||
| await this.runConcurrently( | ||
| initialResponse.UTXOList.filter(x => | ||
| !foreignUTXOs.some(y => x.txid === y.txid && x.outputIndex === y.outputIndex) | ||
| ), | ||
| ingestQueue, | ||
| async UTXO => { | ||
| try { | ||
| this.infoLog(`Requesting node for UTXO: ${JSON.stringify(UTXO)}`) | ||
| const outpoint = this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex) | ||
| const resolvedNode = await this.remote.requestNode( | ||
| this.compute36ByteStructure(UTXO.txid, UTXO.outputIndex), | ||
| outpoint, | ||
| UTXO.txid, | ||
@@ -338,2 +377,3 @@ UTXO.outputIndex, | ||
| await this.completeGraph(resolvedNode.graphID) | ||
| sharedOutpoints.add(outpoint) | ||
| } catch (e) { | ||
@@ -344,11 +384,12 @@ this.warnLog(`Error with incoming UTXO ${UTXO.txid}.${UTXO.outputIndex}: ${(e as Error).message}`) | ||
| ) | ||
| } | ||
| } while (limit && initialResponse.UTXOList.length >= limit) | ||
| // 2. Only do the “reply” half if unidirectional is disabled | ||
| if (!this.unidirectional) { | ||
| const initialReply = await this.getInitialReply(initialResponse) | ||
| this.infoLog(`Received initial reply: ${JSON.stringify(initialReply)}`) | ||
| if (initialReply.UTXOList.length > 0) { | ||
| await this.runConcurrently(initialReply.UTXOList, async UTXO => { | ||
| await this.runConcurrently( | ||
| localUTXOs.filter(utxo => | ||
| utxo.score >= initialResponse.since && | ||
| !sharedOutpoints.has(this.compute36ByteStructure(utxo.txid, utxo.outputIndex)) | ||
| ), | ||
| async UTXO => { | ||
| try { | ||
@@ -368,5 +409,3 @@ this.infoLog(`Hydrating GASP node for UTXO: ${JSON.stringify(UTXO)}`) | ||
| }) | ||
| } | ||
| } | ||
| this.infoLog('Sync completed!') | ||
@@ -377,8 +416,11 @@ } | ||
| * Builds the initial request for the sync process. | ||
| * @param since The timestamp to sync from | ||
| * @param limit The limit for the number of UTXOs to fetch | ||
| * @returns A promise for the initial request object. | ||
| */ | ||
| async buildInitialRequest(since: number): Promise<GASPInitialRequest> { | ||
| const request = { | ||
| async buildInitialRequest(since: number, limit?: number): Promise<GASPInitialRequest> { | ||
| const request: GASPInitialRequest = { | ||
| version: this.version, | ||
| since | ||
| since, | ||
| limit | ||
| } | ||
@@ -408,3 +450,3 @@ this.debugLog(`Built initial request: ${JSON.stringify(request)}`) | ||
| since: this.lastInteraction, | ||
| UTXOList: await this.storage.findKnownUTXOs(request.since) | ||
| UTXOList: await this.storage.findKnownUTXOs(request.since, request.limit) | ||
| } | ||
@@ -411,0 +453,0 @@ this.debugLog(`Built initial response: ${JSON.stringify(response)}`) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Unidentified License
LicenseSomething that seems like a license was found, but its contents could not be matched with a known license.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Unidentified License
LicenseSomething that seems like a license was found, but its contents could not be matched with a known license.
Found 1 instance in 1 package
2169591
0.37%3845
3.11%4
-60%20
66.67%Updated