@bsv/overlay 2.3.1 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +166 -0
- package/dist/cjs/mod.d.ts +3 -0
- package/dist/cjs/mod.d.ts.map +1 -1
- package/dist/cjs/mod.js +8 -1
- package/dist/cjs/mod.js.map +1 -1
- package/dist/cjs/package.json +10 -4
- package/dist/cjs/src/BASM.d.ts +6 -0
- package/dist/cjs/src/BASM.d.ts.map +1 -1
- package/dist/cjs/src/BASM.js +21 -8
- package/dist/cjs/src/BASM.js.map +1 -1
- package/dist/cjs/src/BASMRemote.d.ts +8 -1
- package/dist/cjs/src/BASMRemote.d.ts.map +1 -1
- package/dist/cjs/src/BASMRemote.js +179 -13
- package/dist/cjs/src/BASMRemote.js.map +1 -1
- package/dist/cjs/src/BASMValidation.d.ts +27 -0
- package/dist/cjs/src/BASMValidation.d.ts.map +1 -0
- package/dist/cjs/src/BASMValidation.js +108 -0
- package/dist/cjs/src/BASMValidation.js.map +1 -0
- package/dist/cjs/src/DiscoveryAdvertisementValidation.d.ts +11 -0
- package/dist/cjs/src/DiscoveryAdvertisementValidation.d.ts.map +1 -0
- package/dist/cjs/src/DiscoveryAdvertisementValidation.js +60 -0
- package/dist/cjs/src/DiscoveryAdvertisementValidation.js.map +1 -0
- package/dist/cjs/src/Engine.d.ts +37 -13
- package/dist/cjs/src/Engine.d.ts.map +1 -1
- package/dist/cjs/src/Engine.js +1713 -336
- package/dist/cjs/src/Engine.js.map +1 -1
- package/dist/cjs/src/EngineAdmission.d.ts +70 -0
- package/dist/cjs/src/EngineAdmission.d.ts.map +1 -0
- package/dist/cjs/src/EngineAdmission.js +297 -0
- package/dist/cjs/src/EngineAdmission.js.map +1 -0
- package/dist/cjs/src/GASP/OverlayGASPRemote.d.ts +4 -3
- package/dist/cjs/src/GASP/OverlayGASPRemote.d.ts.map +1 -1
- package/dist/cjs/src/GASP/OverlayGASPRemote.js +27 -43
- package/dist/cjs/src/GASP/OverlayGASPRemote.js.map +1 -1
- package/dist/cjs/src/GASP/OverlayGASPStorage.d.ts +22 -16
- package/dist/cjs/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
- package/dist/cjs/src/GASP/OverlayGASPStorage.js +206 -57
- package/dist/cjs/src/GASP/OverlayGASPStorage.js.map +1 -1
- package/dist/cjs/src/RemoteSecurity.d.ts +50 -0
- package/dist/cjs/src/RemoteSecurity.d.ts.map +1 -0
- package/dist/cjs/src/RemoteSecurity.js +301 -0
- package/dist/cjs/src/RemoteSecurity.js.map +1 -0
- package/dist/cjs/src/storage/AdmissionStorage.d.ts +185 -0
- package/dist/cjs/src/storage/AdmissionStorage.d.ts.map +1 -0
- package/dist/cjs/src/storage/AdmissionStorage.js +93 -0
- package/dist/cjs/src/storage/AdmissionStorage.js.map +1 -0
- package/dist/cjs/src/storage/RecoveryContract.d.ts +50 -0
- package/dist/cjs/src/storage/RecoveryContract.d.ts.map +1 -0
- package/dist/cjs/src/storage/RecoveryContract.js +35 -0
- package/dist/cjs/src/storage/RecoveryContract.js.map +1 -0
- package/dist/cjs/src/storage/Storage.d.ts +32 -19
- package/dist/cjs/src/storage/Storage.d.ts.map +1 -1
- package/dist/cjs/src/storage/Storage.js +5 -0
- package/dist/cjs/src/storage/Storage.js.map +1 -1
- package/dist/cjs/src/storage/knex/KnexStorage.d.ts +8 -8
- package/dist/cjs/src/storage/knex/KnexStorage.d.ts.map +1 -1
- package/dist/cjs/src/storage/knex/KnexStorage.js +98 -61
- package/dist/cjs/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/cjs/src/storage/knex/all-migrations.d.ts.map +1 -1
- package/dist/cjs/src/storage/knex/all-migrations.js +5 -1
- package/dist/cjs/src/storage/knex/all-migrations.js.map +1 -1
- package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts +4 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts.map +1 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js +36 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js.map +1 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts +5 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts.map +1 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.js +16 -0
- package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.d.ts +18 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.js +229 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.d.ts +112 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.js +675 -0
- package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoOverlayStorage.d.ts +71 -0
- package/dist/cjs/src/storage/mongo/MongoOverlayStorage.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoOverlayStorage.js +453 -0
- package/dist/cjs/src/storage/mongo/MongoOverlayStorage.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoPayloadStore.d.ts +134 -0
- package/dist/cjs/src/storage/mongo/MongoPayloadStore.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoPayloadStore.js +756 -0
- package/dist/cjs/src/storage/mongo/MongoPayloadStore.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoReadGuards.d.ts +44 -0
- package/dist/cjs/src/storage/mongo/MongoReadGuards.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoReadGuards.js +135 -0
- package/dist/cjs/src/storage/mongo/MongoReadGuards.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoSchema.d.ts +67 -0
- package/dist/cjs/src/storage/mongo/MongoSchema.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoSchema.js +743 -0
- package/dist/cjs/src/storage/mongo/MongoSchema.js.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoTransactionRunner.d.ts +69 -0
- package/dist/cjs/src/storage/mongo/MongoTransactionRunner.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo/MongoTransactionRunner.js +368 -0
- package/dist/cjs/src/storage/mongo/MongoTransactionRunner.js.map +1 -0
- package/dist/cjs/src/storage/mongo.d.ts +9 -0
- package/dist/cjs/src/storage/mongo.d.ts.map +1 -0
- package/dist/cjs/src/storage/mongo.js +25 -0
- package/dist/cjs/src/storage/mongo.js.map +1 -0
- package/dist/esm/mod.js +3 -0
- package/dist/esm/mod.js.map +1 -1
- package/dist/esm/src/BASM.js +21 -8
- package/dist/esm/src/BASM.js.map +1 -1
- package/dist/esm/src/BASMRemote.js +176 -12
- package/dist/esm/src/BASMRemote.js.map +1 -1
- package/dist/esm/src/BASMValidation.js +95 -0
- package/dist/esm/src/BASMValidation.js.map +1 -0
- package/dist/esm/src/DiscoveryAdvertisementValidation.js +57 -0
- package/dist/esm/src/DiscoveryAdvertisementValidation.js.map +1 -0
- package/dist/esm/src/Engine.js +1698 -326
- package/dist/esm/src/Engine.js.map +1 -1
- package/dist/esm/src/EngineAdmission.js +280 -0
- package/dist/esm/src/EngineAdmission.js.map +1 -0
- package/dist/esm/src/GASP/OverlayGASPRemote.js +27 -43
- package/dist/esm/src/GASP/OverlayGASPRemote.js.map +1 -1
- package/dist/esm/src/GASP/OverlayGASPStorage.js +200 -56
- package/dist/esm/src/GASP/OverlayGASPStorage.js.map +1 -1
- package/dist/esm/src/RemoteSecurity.js +279 -0
- package/dist/esm/src/RemoteSecurity.js.map +1 -0
- package/dist/esm/src/storage/AdmissionStorage.js +85 -0
- package/dist/esm/src/storage/AdmissionStorage.js.map +1 -0
- package/dist/esm/src/storage/RecoveryContract.js +31 -0
- package/dist/esm/src/storage/RecoveryContract.js.map +1 -0
- package/dist/esm/src/storage/Storage.js +4 -1
- package/dist/esm/src/storage/Storage.js.map +1 -1
- package/dist/esm/src/storage/knex/KnexStorage.js +98 -61
- package/dist/esm/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/esm/src/storage/knex/all-migrations.js +5 -1
- package/dist/esm/src/storage/knex/all-migrations.js.map +1 -1
- package/dist/esm/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js +32 -0
- package/dist/esm/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js.map +1 -0
- package/dist/esm/src/storage/knex/migrations/2026-09-20-001-spent-by.js +12 -0
- package/dist/esm/src/storage/knex/migrations/2026-09-20-001-spent-by.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoAdmissionPlan.js +217 -0
- package/dist/esm/src/storage/mongo/MongoAdmissionPlan.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoAdmissionStorage.js +673 -0
- package/dist/esm/src/storage/mongo/MongoAdmissionStorage.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoOverlayStorage.js +451 -0
- package/dist/esm/src/storage/mongo/MongoOverlayStorage.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoPayloadStore.js +747 -0
- package/dist/esm/src/storage/mongo/MongoPayloadStore.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoReadGuards.js +129 -0
- package/dist/esm/src/storage/mongo/MongoReadGuards.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoSchema.js +730 -0
- package/dist/esm/src/storage/mongo/MongoSchema.js.map +1 -0
- package/dist/esm/src/storage/mongo/MongoTransactionRunner.js +371 -0
- package/dist/esm/src/storage/mongo/MongoTransactionRunner.js.map +1 -0
- package/dist/esm/src/storage/mongo.js +9 -0
- package/dist/esm/src/storage/mongo.js.map +1 -0
- package/dist/types/mod.d.ts +3 -0
- package/dist/types/mod.d.ts.map +1 -1
- package/dist/types/src/BASM.d.ts +6 -0
- package/dist/types/src/BASM.d.ts.map +1 -1
- package/dist/types/src/BASMRemote.d.ts +8 -1
- package/dist/types/src/BASMRemote.d.ts.map +1 -1
- package/dist/types/src/BASMValidation.d.ts +27 -0
- package/dist/types/src/BASMValidation.d.ts.map +1 -0
- package/dist/types/src/DiscoveryAdvertisementValidation.d.ts +11 -0
- package/dist/types/src/DiscoveryAdvertisementValidation.d.ts.map +1 -0
- package/dist/types/src/Engine.d.ts +37 -13
- package/dist/types/src/Engine.d.ts.map +1 -1
- package/dist/types/src/EngineAdmission.d.ts +70 -0
- package/dist/types/src/EngineAdmission.d.ts.map +1 -0
- package/dist/types/src/GASP/OverlayGASPRemote.d.ts +4 -3
- package/dist/types/src/GASP/OverlayGASPRemote.d.ts.map +1 -1
- package/dist/types/src/GASP/OverlayGASPStorage.d.ts +22 -16
- package/dist/types/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
- package/dist/types/src/RemoteSecurity.d.ts +50 -0
- package/dist/types/src/RemoteSecurity.d.ts.map +1 -0
- package/dist/types/src/storage/AdmissionStorage.d.ts +185 -0
- package/dist/types/src/storage/AdmissionStorage.d.ts.map +1 -0
- package/dist/types/src/storage/RecoveryContract.d.ts +50 -0
- package/dist/types/src/storage/RecoveryContract.d.ts.map +1 -0
- package/dist/types/src/storage/Storage.d.ts +32 -19
- package/dist/types/src/storage/Storage.d.ts.map +1 -1
- package/dist/types/src/storage/knex/KnexStorage.d.ts +8 -8
- package/dist/types/src/storage/knex/KnexStorage.d.ts.map +1 -1
- package/dist/types/src/storage/knex/all-migrations.d.ts.map +1 -1
- package/dist/types/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts +4 -0
- package/dist/types/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts.map +1 -0
- package/dist/types/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts +5 -0
- package/dist/types/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoAdmissionPlan.d.ts +18 -0
- package/dist/types/src/storage/mongo/MongoAdmissionPlan.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoAdmissionStorage.d.ts +112 -0
- package/dist/types/src/storage/mongo/MongoAdmissionStorage.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoOverlayStorage.d.ts +71 -0
- package/dist/types/src/storage/mongo/MongoOverlayStorage.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoPayloadStore.d.ts +134 -0
- package/dist/types/src/storage/mongo/MongoPayloadStore.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoReadGuards.d.ts +44 -0
- package/dist/types/src/storage/mongo/MongoReadGuards.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoSchema.d.ts +67 -0
- package/dist/types/src/storage/mongo/MongoSchema.d.ts.map +1 -0
- package/dist/types/src/storage/mongo/MongoTransactionRunner.d.ts +69 -0
- package/dist/types/src/storage/mongo/MongoTransactionRunner.d.ts.map +1 -0
- package/dist/types/src/storage/mongo.d.ts +9 -0
- package/dist/types/src/storage/mongo.d.ts.map +1 -0
- package/package.json +11 -5
|
@@ -1,23 +1,63 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toArray } from '@bsv/sdk/primitives/utils';
|
|
2
|
+
import { MerklePath, Transaction } from '@bsv/sdk';
|
|
3
|
+
import { assertGASPNode, assertHash, assertNonnegativeInteger, assertOutpoint, assertOutputIndex, assertTopic, validateAdmittanceInstructions } from '../RemoteSecurity.js';
|
|
4
|
+
const DEFAULT_MAX_NODES_IN_GRAPH = 2048;
|
|
5
|
+
const MAX_CONFIGURED_NODES_IN_GRAPH = 100_000;
|
|
6
|
+
const DEFAULT_MAX_BYTES_IN_GRAPH = 64 * 1024 * 1024;
|
|
2
7
|
export class OverlayGASPStorage {
|
|
3
8
|
topic;
|
|
4
9
|
engine;
|
|
5
10
|
maxNodesInGraph;
|
|
6
|
-
|
|
11
|
+
maxBytesInGraph;
|
|
12
|
+
temporaryGraphNodeRefs = Object.create(null);
|
|
13
|
+
graphNodeCounts = new Map();
|
|
14
|
+
graphByteCounts = new Map();
|
|
7
15
|
static activeAnchorValidations = 0;
|
|
8
16
|
static anchorValidationQueue = [];
|
|
9
17
|
static activeFinalizations = 0;
|
|
10
18
|
static finalizationQueue = [];
|
|
11
19
|
static MAX_CONCURRENT_ANCHOR_VALIDATIONS = 4;
|
|
12
20
|
static MAX_CONCURRENT_FINALIZATIONS = 2;
|
|
13
|
-
constructor(topic, engine, maxNodesInGraph) {
|
|
21
|
+
constructor(topic, engine, maxNodesInGraph, maxBytesInGraph = DEFAULT_MAX_BYTES_IN_GRAPH) {
|
|
14
22
|
this.topic = topic;
|
|
15
23
|
this.engine = engine;
|
|
16
24
|
this.maxNodesInGraph = maxNodesInGraph;
|
|
25
|
+
this.maxBytesInGraph = maxBytesInGraph;
|
|
26
|
+
assertTopic(topic, 'GASP storage topic');
|
|
27
|
+
const nodeLimit = maxNodesInGraph ?? DEFAULT_MAX_NODES_IN_GRAPH;
|
|
28
|
+
if (!Number.isSafeInteger(nodeLimit) ||
|
|
29
|
+
nodeLimit < 1 ||
|
|
30
|
+
nodeLimit > MAX_CONFIGURED_NODES_IN_GRAPH) {
|
|
31
|
+
throw new TypeError(`maxNodesInGraph must be between 1 and ${MAX_CONFIGURED_NODES_IN_GRAPH}`);
|
|
32
|
+
}
|
|
33
|
+
if (!Number.isSafeInteger(maxBytesInGraph) || maxBytesInGraph < 1) {
|
|
34
|
+
throw new TypeError('maxBytesInGraph must be a positive safe integer');
|
|
35
|
+
}
|
|
36
|
+
this.maxNodesInGraph = nodeLimit;
|
|
37
|
+
}
|
|
38
|
+
graphNodeKey(graphID, nodeID) {
|
|
39
|
+
return graphID === nodeID ? graphID : `${graphID}\u0000${nodeID}`;
|
|
40
|
+
}
|
|
41
|
+
graphNode(graphID, nodeID) {
|
|
42
|
+
return this.temporaryGraphNodeRefs[this.graphNodeKey(graphID, nodeID)];
|
|
43
|
+
}
|
|
44
|
+
nodeByteLength(node) {
|
|
45
|
+
let length = node.graphID.length + node.rawTx.length + 16;
|
|
46
|
+
length += node.proof?.length ?? 0;
|
|
47
|
+
length += node.txMetadata?.length ?? 0;
|
|
48
|
+
length += node.outputMetadata?.length ?? 0;
|
|
49
|
+
for (const [outpoint, metadata] of Object.entries(node.inputs ?? {})) {
|
|
50
|
+
length += outpoint.length + metadata.hash.length;
|
|
51
|
+
}
|
|
52
|
+
return length;
|
|
17
53
|
}
|
|
18
54
|
static async acquireAnchorValidationSlot() {
|
|
19
|
-
if (OverlayGASPStorage.activeAnchorValidations >=
|
|
20
|
-
|
|
55
|
+
if (OverlayGASPStorage.activeAnchorValidations >=
|
|
56
|
+
OverlayGASPStorage.MAX_CONCURRENT_ANCHOR_VALIDATIONS) {
|
|
57
|
+
await new Promise(resolve => {
|
|
58
|
+
OverlayGASPStorage.anchorValidationQueue.push(resolve);
|
|
59
|
+
});
|
|
60
|
+
return;
|
|
21
61
|
}
|
|
22
62
|
OverlayGASPStorage.activeAnchorValidations++;
|
|
23
63
|
}
|
|
@@ -25,12 +65,16 @@ export class OverlayGASPStorage {
|
|
|
25
65
|
OverlayGASPStorage.activeAnchorValidations--;
|
|
26
66
|
const next = OverlayGASPStorage.anchorValidationQueue.shift();
|
|
27
67
|
if (next !== undefined) {
|
|
68
|
+
OverlayGASPStorage.activeAnchorValidations++;
|
|
28
69
|
next();
|
|
29
70
|
}
|
|
30
71
|
}
|
|
31
72
|
static async acquireFinalizationSlot() {
|
|
32
73
|
if (OverlayGASPStorage.activeFinalizations >= OverlayGASPStorage.MAX_CONCURRENT_FINALIZATIONS) {
|
|
33
|
-
await new Promise(resolve => {
|
|
74
|
+
await new Promise(resolve => {
|
|
75
|
+
OverlayGASPStorage.finalizationQueue.push(resolve);
|
|
76
|
+
});
|
|
77
|
+
return;
|
|
34
78
|
}
|
|
35
79
|
OverlayGASPStorage.activeFinalizations++;
|
|
36
80
|
}
|
|
@@ -38,6 +82,7 @@ export class OverlayGASPStorage {
|
|
|
38
82
|
OverlayGASPStorage.activeFinalizations--;
|
|
39
83
|
const next = OverlayGASPStorage.finalizationQueue.shift();
|
|
40
84
|
if (next !== undefined) {
|
|
85
|
+
OverlayGASPStorage.activeFinalizations++;
|
|
41
86
|
next();
|
|
42
87
|
}
|
|
43
88
|
}
|
|
@@ -47,12 +92,20 @@ export class OverlayGASPStorage {
|
|
|
47
92
|
* @returns
|
|
48
93
|
*/
|
|
49
94
|
async findKnownUTXOs(since) {
|
|
95
|
+
assertNonnegativeInteger(since, 'GASP since score');
|
|
50
96
|
const UTXOs = await this.engine.storage.findUTXOsForTopic(this.topic, since);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
97
|
+
if (!Array.isArray(UTXOs))
|
|
98
|
+
throw new TypeError('Storage returned an invalid GASP UTXO list');
|
|
99
|
+
return UTXOs.map((output, index) => {
|
|
100
|
+
assertHash(output.txid, `GASP UTXO[${index}] txid`);
|
|
101
|
+
assertOutputIndex(output.outputIndex, `GASP UTXO[${index}] output index`);
|
|
102
|
+
assertNonnegativeInteger(output.score ?? 0, `GASP UTXO[${index}] score`);
|
|
103
|
+
return {
|
|
104
|
+
txid: output.txid,
|
|
105
|
+
outputIndex: output.outputIndex,
|
|
106
|
+
score: output.score ?? 0
|
|
107
|
+
};
|
|
108
|
+
});
|
|
56
109
|
}
|
|
57
110
|
/**
|
|
58
111
|
* 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.
|
|
@@ -63,11 +116,20 @@ export class OverlayGASPStorage {
|
|
|
63
116
|
* @returns
|
|
64
117
|
*/
|
|
65
118
|
async hydrateGASPNode(graphID, txid, outputIndex, _metadata) {
|
|
66
|
-
|
|
119
|
+
assertOutpoint(graphID, 'GASP graphID');
|
|
120
|
+
assertHash(txid, 'GASP txid');
|
|
121
|
+
assertOutputIndex(outputIndex, 'GASP output index');
|
|
122
|
+
const output = await this.engine.storage.findOutput(txid, outputIndex, this.topic, undefined, true);
|
|
67
123
|
if (output?.beef === undefined) {
|
|
68
124
|
throw new Error('No matching output found!');
|
|
69
125
|
}
|
|
126
|
+
if (output.topic !== this.topic) {
|
|
127
|
+
throw new Error('Stored GASP output is not admitted to the requested topic');
|
|
128
|
+
}
|
|
70
129
|
const tx = Transaction.fromBEEF(output.beef);
|
|
130
|
+
if (tx.id('hex').toLowerCase() !== txid.toLowerCase() || outputIndex >= tx.outputs.length) {
|
|
131
|
+
throw new Error('Stored GASP output does not match its transaction');
|
|
132
|
+
}
|
|
71
133
|
const rawTx = tx.toHex();
|
|
72
134
|
const node = {
|
|
73
135
|
rawTx,
|
|
@@ -80,16 +142,20 @@ export class OverlayGASPStorage {
|
|
|
80
142
|
return node;
|
|
81
143
|
}
|
|
82
144
|
/**
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
145
|
+
* For a given node, returns the inputs needed to complete the graph, including whether updated metadata is requested for those inputs.
|
|
146
|
+
* @param tx The node for which needed inputs should be found.
|
|
147
|
+
* @returns A promise for a mapping of requested input transactions and whether metadata should be provided for each.
|
|
148
|
+
*/
|
|
87
149
|
async findNeededInputs(tx) {
|
|
88
150
|
// If there is no Merkle proof, we always need the inputs
|
|
89
151
|
const response = {
|
|
90
|
-
requestedInputs:
|
|
152
|
+
requestedInputs: Object.create(null)
|
|
91
153
|
};
|
|
92
154
|
const parsedTx = Transaction.fromHex(tx.rawTx);
|
|
155
|
+
const nodeLimit = this.maxNodesInGraph ?? DEFAULT_MAX_NODES_IN_GRAPH;
|
|
156
|
+
if (parsedTx.inputs.length > nodeLimit) {
|
|
157
|
+
throw new Error('GASP transaction input count exceeds the graph node limit');
|
|
158
|
+
}
|
|
93
159
|
if (tx.proof === undefined) {
|
|
94
160
|
for (const input of parsedTx.inputs) {
|
|
95
161
|
response.requestedInputs[`${input.sourceTXID ?? ''}.${input.sourceOutputIndex}`] = {
|
|
@@ -100,13 +166,23 @@ export class OverlayGASPStorage {
|
|
|
100
166
|
}
|
|
101
167
|
// Attempt to check if the current transaction is admissible
|
|
102
168
|
parsedTx.merklePath = MerklePath.fromHex(tx.proof);
|
|
103
|
-
const admittanceResult = await this.engine.managers[this.topic].identifyAdmissibleOutputs(parsedTx.toBEEF(), [], typeof tx.txMetadata === 'string' ?
|
|
104
|
-
if (!admittanceResult.outputsToAdmit.includes(tx.outputIndex) &&
|
|
169
|
+
const admittanceResult = validateAdmittanceInstructions(await this.engine.managers[this.topic].identifyAdmissibleOutputs(parsedTx.toBEEF(), [], typeof tx.txMetadata === 'string' ? toArray(tx.txMetadata) : undefined, 'historical-tx', { dryRun: true }), parsedTx, []);
|
|
170
|
+
if (!admittanceResult.outputsToAdmit.includes(tx.outputIndex) &&
|
|
171
|
+
this.engine.managers[this.topic] !== undefined &&
|
|
172
|
+
typeof this.engine.managers[this.topic].identifyNeededInputs === 'function') {
|
|
105
173
|
// The transaction is not admissible, get inputs needed for further verification
|
|
106
174
|
// TopicManagers should implement a function to identify which inputs are needed.
|
|
107
175
|
try {
|
|
108
|
-
const neededInputs = await this.engine.managers[this.topic].identifyNeededInputs?.(parsedTx.toBEEF()) ?? [];
|
|
176
|
+
const neededInputs = (await this.engine.managers[this.topic].identifyNeededInputs?.(parsedTx.toBEEF())) ?? [];
|
|
177
|
+
if (!Array.isArray(neededInputs) || neededInputs.length > nodeLimit) {
|
|
178
|
+
throw new TypeError('Topic manager returned an invalid or oversized needed-input list');
|
|
179
|
+
}
|
|
109
180
|
for (const input of neededInputs) {
|
|
181
|
+
if (typeof input !== 'object' || input === null) {
|
|
182
|
+
throw new TypeError('Topic manager returned an invalid needed input');
|
|
183
|
+
}
|
|
184
|
+
assertHash(input.txid, 'Topic manager needed-input txid');
|
|
185
|
+
assertOutputIndex(input.outputIndex, 'Topic manager needed-input output index');
|
|
110
186
|
response.requestedInputs[`${input.txid}.${input.outputIndex}`] = {
|
|
111
187
|
metadata: false
|
|
112
188
|
};
|
|
@@ -144,17 +220,32 @@ export class OverlayGASPStorage {
|
|
|
144
220
|
return response;
|
|
145
221
|
}
|
|
146
222
|
/**
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
223
|
+
* Appends a new node to a temporary graph.
|
|
224
|
+
* @param tx The node to append to this graph.
|
|
225
|
+
* @param spentBy Unless this is the same node identified by the graph ID, denotes the TXID and input index for the node which spent this one, in 36-byte format.
|
|
226
|
+
* @throws If the node cannot be appended to the graph, either because the graph ID is for a graph the recipient does not want or because the graph has grown to be too large before being finalized.
|
|
227
|
+
*/
|
|
152
228
|
async appendToGraph(tx, spentBy) {
|
|
153
|
-
if (this.maxNodesInGraph !== undefined && Object.keys(this.temporaryGraphNodeRefs).length >= this.maxNodesInGraph) {
|
|
154
|
-
throw new Error('The max number of nodes in transaction graph has been reached!');
|
|
155
|
-
}
|
|
156
229
|
const parsedTx = Transaction.fromHex(tx.rawTx);
|
|
157
230
|
const txid = parsedTx.id('hex');
|
|
231
|
+
assertGASPNode(tx, { graphID: tx.graphID, txid, outputIndex: tx.outputIndex });
|
|
232
|
+
if (tx.outputIndex >= parsedTx.outputs.length) {
|
|
233
|
+
throw new Error('GASP node output index does not exist in its transaction');
|
|
234
|
+
}
|
|
235
|
+
const nodeID = `${txid}.${tx.outputIndex}`;
|
|
236
|
+
const nodeLimit = this.maxNodesInGraph ?? DEFAULT_MAX_NODES_IN_GRAPH;
|
|
237
|
+
if (parsedTx.inputs.length > nodeLimit) {
|
|
238
|
+
throw new Error('GASP transaction input count exceeds the graph node limit');
|
|
239
|
+
}
|
|
240
|
+
const nodeCount = this.graphNodeCounts.get(tx.graphID) ?? 0;
|
|
241
|
+
if (nodeCount >= nodeLimit) {
|
|
242
|
+
throw new Error('The max number of nodes in transaction graph has been reached!');
|
|
243
|
+
}
|
|
244
|
+
const nodeBytes = this.nodeByteLength(tx);
|
|
245
|
+
const graphBytes = this.graphByteCounts.get(tx.graphID) ?? 0;
|
|
246
|
+
if (graphBytes + nodeBytes > this.maxBytesInGraph) {
|
|
247
|
+
throw new Error('The max byte size of the transaction graph has been reached!');
|
|
248
|
+
}
|
|
158
249
|
if (tx.proof !== undefined) {
|
|
159
250
|
parsedTx.merklePath = MerklePath.fromHex(tx.proof);
|
|
160
251
|
}
|
|
@@ -173,19 +264,37 @@ export class OverlayGASPStorage {
|
|
|
173
264
|
};
|
|
174
265
|
// If spentBy is undefined, then we know it's the root node.
|
|
175
266
|
if (spentBy === undefined) {
|
|
176
|
-
|
|
267
|
+
if (nodeID !== tx.graphID) {
|
|
268
|
+
throw new Error('The root GASP node does not match its graph ID');
|
|
269
|
+
}
|
|
270
|
+
if (this.graphNode(tx.graphID, nodeID) !== undefined) {
|
|
271
|
+
throw new Error('The GASP graph already contains this node');
|
|
272
|
+
}
|
|
273
|
+
this.temporaryGraphNodeRefs[this.graphNodeKey(tx.graphID, nodeID)] = newGraphNode;
|
|
177
274
|
}
|
|
178
275
|
else {
|
|
276
|
+
assertOutpoint(spentBy, 'GASP parent outpoint');
|
|
179
277
|
// Find the parent node based on spentBy
|
|
180
|
-
const parentNode = this.
|
|
278
|
+
const parentNode = this.graphNode(tx.graphID, spentBy);
|
|
181
279
|
if (parentNode === undefined) {
|
|
182
280
|
throw new Error(`Parent node with GraphID ${spentBy} not found`);
|
|
183
281
|
}
|
|
282
|
+
if (this.graphNode(tx.graphID, nodeID) !== undefined) {
|
|
283
|
+
throw new Error('The GASP graph already contains this node');
|
|
284
|
+
}
|
|
285
|
+
const parentTransaction = Transaction.fromHex(parentNode.rawTx);
|
|
286
|
+
const isReferencedInput = parentTransaction.inputs.some(input => (input.sourceTXID ?? input.sourceTransaction?.id('hex'))?.toLowerCase() ===
|
|
287
|
+
txid.toLowerCase() && input.sourceOutputIndex === tx.outputIndex);
|
|
288
|
+
if (!isReferencedInput) {
|
|
289
|
+
throw new Error('The GASP child node is not an input of its declared parent');
|
|
290
|
+
}
|
|
184
291
|
// Set parent-child relationship
|
|
185
292
|
parentNode.children.push(newGraphNode);
|
|
186
293
|
newGraphNode.parent = parentNode;
|
|
187
|
-
this.temporaryGraphNodeRefs[
|
|
294
|
+
this.temporaryGraphNodeRefs[this.graphNodeKey(tx.graphID, nodeID)] = newGraphNode;
|
|
188
295
|
}
|
|
296
|
+
this.graphNodeCounts.set(tx.graphID, nodeCount + 1);
|
|
297
|
+
this.graphByteCounts.set(tx.graphID, graphBytes + nodeBytes);
|
|
189
298
|
}
|
|
190
299
|
previousCoinIndexes(tx, coins) {
|
|
191
300
|
const previousCoins = [];
|
|
@@ -193,26 +302,43 @@ export class OverlayGASPStorage {
|
|
|
193
302
|
const sourceTXID = input.sourceTXID ?? input.sourceTransaction?.id('hex');
|
|
194
303
|
if (sourceTXID == null || sourceTXID === '')
|
|
195
304
|
continue;
|
|
196
|
-
if (coins.has(`${sourceTXID}.${input.sourceOutputIndex}`)) {
|
|
305
|
+
if (coins.has(`${sourceTXID.toLowerCase()}.${input.sourceOutputIndex}`)) {
|
|
197
306
|
previousCoins.push(Number(inputIndex));
|
|
198
307
|
}
|
|
199
308
|
}
|
|
200
309
|
return previousCoins;
|
|
201
310
|
}
|
|
202
|
-
async admitHistoricalBEEF(beef, coins) {
|
|
311
|
+
async admitHistoricalBEEF(beef, coins, spentOutpoints) {
|
|
203
312
|
const tx = Transaction.fromBEEF(beef);
|
|
204
|
-
const
|
|
313
|
+
const previousCoins = this.previousCoinIndexes(tx, coins);
|
|
314
|
+
const inputOutpoints = [];
|
|
315
|
+
for (const input of tx.inputs) {
|
|
316
|
+
const sourceTXID = input.sourceTXID ?? input.sourceTransaction?.id('hex');
|
|
317
|
+
if (sourceTXID == null || sourceTXID === '') {
|
|
318
|
+
throw new Error('Historical GASP transaction contains an unresolved input');
|
|
319
|
+
}
|
|
320
|
+
const outpoint = `${sourceTXID.toLowerCase()}.${input.sourceOutputIndex}`;
|
|
321
|
+
if (spentOutpoints.has(outpoint)) {
|
|
322
|
+
throw new Error(`Historical GASP graph contains a conflicting spend of ${outpoint}`);
|
|
323
|
+
}
|
|
324
|
+
inputOutpoints.push(outpoint);
|
|
325
|
+
}
|
|
326
|
+
const admittanceInstructions = validateAdmittanceInstructions(await this.engine.managers[this.topic].identifyAdmissibleOutputs(beef, previousCoins, undefined, 'historical-tx', { dryRun: true }), tx, previousCoins);
|
|
327
|
+
for (const outpoint of inputOutpoints) {
|
|
328
|
+
spentOutpoints.add(outpoint);
|
|
329
|
+
coins.delete(outpoint);
|
|
330
|
+
}
|
|
205
331
|
for (const outputIndex of admittanceInstructions.outputsToAdmit) {
|
|
206
|
-
coins.add(`${tx.id('hex')}.${outputIndex}`);
|
|
332
|
+
coins.add(`${tx.id('hex').toLowerCase()}.${outputIndex}`);
|
|
207
333
|
}
|
|
208
334
|
}
|
|
209
335
|
/**
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
336
|
+
* Checks whether the given graph, in its current state, makes reference only to transactions that are proven in the blockchain, or already known by the recipient to be valid.
|
|
337
|
+
* Additionally, in a breadth-first manner (ensuring that all inputs for any given node are processed before nodes that spend them), it ensures that the root node remains valid according to the rules of the overlay's topic manager,
|
|
338
|
+
* while considering any coins which the Manager had previously indicated were either valid or invalid.
|
|
339
|
+
* @param graphID The TXID and output index (in 36-byte format) for the UTXO at the tip of this graph.
|
|
340
|
+
* @throws If the graph is not well-anchored, according to the rules of Bitcoin or the rules of the Overlay Topic Manager.
|
|
341
|
+
*/
|
|
216
342
|
async validateGraphAnchor(graphID) {
|
|
217
343
|
await OverlayGASPStorage.acquireAnchorValidationSlot();
|
|
218
344
|
try {
|
|
@@ -231,10 +357,11 @@ export class OverlayGASPStorage {
|
|
|
231
357
|
const beefs = this.computeOrderedBEEFsForGraph(graphID);
|
|
232
358
|
// coins: a Set of all historical coins to retain (no need to remove them), used to emulate topical admittance of previous inputs over time.
|
|
233
359
|
const coins = new Set();
|
|
360
|
+
const spentOutpoints = new Set();
|
|
234
361
|
// Submit all historical BEEFs in order through the topic manager, tracking what would be retained until we submit the root node last.
|
|
235
362
|
// If, at the end, the root node is admitted, we have a valid overlay-specific graph.
|
|
236
363
|
for (const beef of beefs) {
|
|
237
|
-
await this.admitHistoricalBEEF(beef, coins);
|
|
364
|
+
await this.admitHistoricalBEEF(beef, coins, spentOutpoints);
|
|
238
365
|
}
|
|
239
366
|
// After sending through all the graph's BEEFs...
|
|
240
367
|
// If the root node is now a coin, we have acceptance by the overlay.
|
|
@@ -259,6 +386,8 @@ export class OverlayGASPStorage {
|
|
|
259
386
|
delete this.temporaryGraphNodeRefs[nodeId];
|
|
260
387
|
}
|
|
261
388
|
}
|
|
389
|
+
this.graphNodeCounts.delete(graphID);
|
|
390
|
+
this.graphByteCounts.delete(graphID);
|
|
262
391
|
}
|
|
263
392
|
/**
|
|
264
393
|
* Finalizes a graph, solidifying the new UTXO and its ancestors so that it will appear in the list of known UTXOs.
|
|
@@ -276,6 +405,7 @@ export class OverlayGASPStorage {
|
|
|
276
405
|
topics: [this.topic]
|
|
277
406
|
}, () => { }, 'historical-tx-no-spv');
|
|
278
407
|
}
|
|
408
|
+
await this.discardGraph(graphID);
|
|
279
409
|
}
|
|
280
410
|
finally {
|
|
281
411
|
OverlayGASPStorage.releaseFinalizationSlot();
|
|
@@ -288,22 +418,36 @@ export class OverlayGASPStorage {
|
|
|
288
418
|
*/
|
|
289
419
|
computeOrderedBEEFsForGraph(graphID) {
|
|
290
420
|
const beefs = [];
|
|
291
|
-
const
|
|
292
|
-
const currentBEEF = this.getBEEFForNode(node);
|
|
293
|
-
if (!beefs.includes(currentBEEF)) {
|
|
294
|
-
beefs.unshift(currentBEEF);
|
|
295
|
-
}
|
|
296
|
-
for (const child of node.children) {
|
|
297
|
-
// Continue backwards to the earliest nodes, adding them onto the beginning
|
|
298
|
-
hydrator(child);
|
|
299
|
-
}
|
|
300
|
-
};
|
|
301
|
-
// Start the hydrator with the root node
|
|
302
|
-
const foundRoot = this.temporaryGraphNodeRefs[graphID];
|
|
421
|
+
const foundRoot = this.graphNode(graphID, graphID);
|
|
303
422
|
if (foundRoot == null) {
|
|
304
423
|
throw new Error('Unable to find root node in graph for finalization!');
|
|
305
424
|
}
|
|
306
|
-
|
|
425
|
+
const complete = new Set();
|
|
426
|
+
const visiting = new Set();
|
|
427
|
+
const stack = [
|
|
428
|
+
{ node: foundRoot, expanded: false }
|
|
429
|
+
];
|
|
430
|
+
while (stack.length > 0) {
|
|
431
|
+
const current = stack.pop();
|
|
432
|
+
const nodeID = `${current.node.txid}.${current.node.outputIndex}`;
|
|
433
|
+
if (current.expanded) {
|
|
434
|
+
visiting.delete(nodeID);
|
|
435
|
+
if (!complete.has(nodeID)) {
|
|
436
|
+
beefs.push(this.getBEEFForNode(current.node));
|
|
437
|
+
complete.add(nodeID);
|
|
438
|
+
}
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
if (complete.has(nodeID))
|
|
442
|
+
continue;
|
|
443
|
+
if (visiting.has(nodeID))
|
|
444
|
+
throw new Error('Cycle detected in temporary GASP graph');
|
|
445
|
+
visiting.add(nodeID);
|
|
446
|
+
stack.push({ node: current.node, expanded: true });
|
|
447
|
+
for (let index = current.node.children.length - 1; index >= 0; index--) {
|
|
448
|
+
stack.push({ node: current.node.children[index], expanded: false });
|
|
449
|
+
}
|
|
450
|
+
}
|
|
307
451
|
return beefs;
|
|
308
452
|
}
|
|
309
453
|
/**
|
|
@@ -321,7 +465,7 @@ export class OverlayGASPStorage {
|
|
|
321
465
|
}
|
|
322
466
|
// For each input, look it up and recurse.
|
|
323
467
|
for (const [inputIndex, input] of tx.inputs.entries()) {
|
|
324
|
-
const foundNode = this.
|
|
468
|
+
const foundNode = this.graphNode(node.graphID, `${input.sourceTXID ?? ''}.${input.sourceOutputIndex}`);
|
|
325
469
|
if (foundNode == null) {
|
|
326
470
|
throw new Error('Required input node for unproven parent not found in temporary graph store. Ensure, for every parent of any given already-proven node (kept for Overlay-specific historical reasons), that a proof is also provided on those inputs. While implicitly they are valid by virtue of their descendents being proven in the blockchain, BEEF serialization will still fail when winding forward the topical UTXO set histories during sync.');
|
|
327
471
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayGASPStorage.js","sourceRoot":"","sources":["../../../../src/GASP/OverlayGASPStorage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OverlayGASPStorage.js","sourceRoot":"","sources":["../../../../src/GASP/OverlayGASPStorage.ts"],"names":[],"mappings":"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"}
|