@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.
Files changed (201) hide show
  1. package/README.md +166 -0
  2. package/dist/cjs/mod.d.ts +3 -0
  3. package/dist/cjs/mod.d.ts.map +1 -1
  4. package/dist/cjs/mod.js +8 -1
  5. package/dist/cjs/mod.js.map +1 -1
  6. package/dist/cjs/package.json +10 -4
  7. package/dist/cjs/src/BASM.d.ts +6 -0
  8. package/dist/cjs/src/BASM.d.ts.map +1 -1
  9. package/dist/cjs/src/BASM.js +21 -8
  10. package/dist/cjs/src/BASM.js.map +1 -1
  11. package/dist/cjs/src/BASMRemote.d.ts +8 -1
  12. package/dist/cjs/src/BASMRemote.d.ts.map +1 -1
  13. package/dist/cjs/src/BASMRemote.js +179 -13
  14. package/dist/cjs/src/BASMRemote.js.map +1 -1
  15. package/dist/cjs/src/BASMValidation.d.ts +27 -0
  16. package/dist/cjs/src/BASMValidation.d.ts.map +1 -0
  17. package/dist/cjs/src/BASMValidation.js +108 -0
  18. package/dist/cjs/src/BASMValidation.js.map +1 -0
  19. package/dist/cjs/src/DiscoveryAdvertisementValidation.d.ts +11 -0
  20. package/dist/cjs/src/DiscoveryAdvertisementValidation.d.ts.map +1 -0
  21. package/dist/cjs/src/DiscoveryAdvertisementValidation.js +60 -0
  22. package/dist/cjs/src/DiscoveryAdvertisementValidation.js.map +1 -0
  23. package/dist/cjs/src/Engine.d.ts +37 -13
  24. package/dist/cjs/src/Engine.d.ts.map +1 -1
  25. package/dist/cjs/src/Engine.js +1713 -336
  26. package/dist/cjs/src/Engine.js.map +1 -1
  27. package/dist/cjs/src/EngineAdmission.d.ts +70 -0
  28. package/dist/cjs/src/EngineAdmission.d.ts.map +1 -0
  29. package/dist/cjs/src/EngineAdmission.js +297 -0
  30. package/dist/cjs/src/EngineAdmission.js.map +1 -0
  31. package/dist/cjs/src/GASP/OverlayGASPRemote.d.ts +4 -3
  32. package/dist/cjs/src/GASP/OverlayGASPRemote.d.ts.map +1 -1
  33. package/dist/cjs/src/GASP/OverlayGASPRemote.js +27 -43
  34. package/dist/cjs/src/GASP/OverlayGASPRemote.js.map +1 -1
  35. package/dist/cjs/src/GASP/OverlayGASPStorage.d.ts +22 -16
  36. package/dist/cjs/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
  37. package/dist/cjs/src/GASP/OverlayGASPStorage.js +206 -57
  38. package/dist/cjs/src/GASP/OverlayGASPStorage.js.map +1 -1
  39. package/dist/cjs/src/RemoteSecurity.d.ts +50 -0
  40. package/dist/cjs/src/RemoteSecurity.d.ts.map +1 -0
  41. package/dist/cjs/src/RemoteSecurity.js +301 -0
  42. package/dist/cjs/src/RemoteSecurity.js.map +1 -0
  43. package/dist/cjs/src/storage/AdmissionStorage.d.ts +185 -0
  44. package/dist/cjs/src/storage/AdmissionStorage.d.ts.map +1 -0
  45. package/dist/cjs/src/storage/AdmissionStorage.js +93 -0
  46. package/dist/cjs/src/storage/AdmissionStorage.js.map +1 -0
  47. package/dist/cjs/src/storage/RecoveryContract.d.ts +50 -0
  48. package/dist/cjs/src/storage/RecoveryContract.d.ts.map +1 -0
  49. package/dist/cjs/src/storage/RecoveryContract.js +35 -0
  50. package/dist/cjs/src/storage/RecoveryContract.js.map +1 -0
  51. package/dist/cjs/src/storage/Storage.d.ts +32 -19
  52. package/dist/cjs/src/storage/Storage.d.ts.map +1 -1
  53. package/dist/cjs/src/storage/Storage.js +5 -0
  54. package/dist/cjs/src/storage/Storage.js.map +1 -1
  55. package/dist/cjs/src/storage/knex/KnexStorage.d.ts +8 -8
  56. package/dist/cjs/src/storage/knex/KnexStorage.d.ts.map +1 -1
  57. package/dist/cjs/src/storage/knex/KnexStorage.js +98 -61
  58. package/dist/cjs/src/storage/knex/KnexStorage.js.map +1 -1
  59. package/dist/cjs/src/storage/knex/all-migrations.d.ts.map +1 -1
  60. package/dist/cjs/src/storage/knex/all-migrations.js +5 -1
  61. package/dist/cjs/src/storage/knex/all-migrations.js.map +1 -1
  62. package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts +4 -0
  63. package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts.map +1 -0
  64. package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js +36 -0
  65. package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js.map +1 -0
  66. package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts +5 -0
  67. package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts.map +1 -0
  68. package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.js +16 -0
  69. package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.js.map +1 -0
  70. package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.d.ts +18 -0
  71. package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.d.ts.map +1 -0
  72. package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.js +229 -0
  73. package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.js.map +1 -0
  74. package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.d.ts +112 -0
  75. package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.d.ts.map +1 -0
  76. package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.js +675 -0
  77. package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.js.map +1 -0
  78. package/dist/cjs/src/storage/mongo/MongoOverlayStorage.d.ts +71 -0
  79. package/dist/cjs/src/storage/mongo/MongoOverlayStorage.d.ts.map +1 -0
  80. package/dist/cjs/src/storage/mongo/MongoOverlayStorage.js +453 -0
  81. package/dist/cjs/src/storage/mongo/MongoOverlayStorage.js.map +1 -0
  82. package/dist/cjs/src/storage/mongo/MongoPayloadStore.d.ts +134 -0
  83. package/dist/cjs/src/storage/mongo/MongoPayloadStore.d.ts.map +1 -0
  84. package/dist/cjs/src/storage/mongo/MongoPayloadStore.js +756 -0
  85. package/dist/cjs/src/storage/mongo/MongoPayloadStore.js.map +1 -0
  86. package/dist/cjs/src/storage/mongo/MongoReadGuards.d.ts +44 -0
  87. package/dist/cjs/src/storage/mongo/MongoReadGuards.d.ts.map +1 -0
  88. package/dist/cjs/src/storage/mongo/MongoReadGuards.js +135 -0
  89. package/dist/cjs/src/storage/mongo/MongoReadGuards.js.map +1 -0
  90. package/dist/cjs/src/storage/mongo/MongoSchema.d.ts +67 -0
  91. package/dist/cjs/src/storage/mongo/MongoSchema.d.ts.map +1 -0
  92. package/dist/cjs/src/storage/mongo/MongoSchema.js +743 -0
  93. package/dist/cjs/src/storage/mongo/MongoSchema.js.map +1 -0
  94. package/dist/cjs/src/storage/mongo/MongoTransactionRunner.d.ts +69 -0
  95. package/dist/cjs/src/storage/mongo/MongoTransactionRunner.d.ts.map +1 -0
  96. package/dist/cjs/src/storage/mongo/MongoTransactionRunner.js +368 -0
  97. package/dist/cjs/src/storage/mongo/MongoTransactionRunner.js.map +1 -0
  98. package/dist/cjs/src/storage/mongo.d.ts +9 -0
  99. package/dist/cjs/src/storage/mongo.d.ts.map +1 -0
  100. package/dist/cjs/src/storage/mongo.js +25 -0
  101. package/dist/cjs/src/storage/mongo.js.map +1 -0
  102. package/dist/esm/mod.js +3 -0
  103. package/dist/esm/mod.js.map +1 -1
  104. package/dist/esm/src/BASM.js +21 -8
  105. package/dist/esm/src/BASM.js.map +1 -1
  106. package/dist/esm/src/BASMRemote.js +176 -12
  107. package/dist/esm/src/BASMRemote.js.map +1 -1
  108. package/dist/esm/src/BASMValidation.js +95 -0
  109. package/dist/esm/src/BASMValidation.js.map +1 -0
  110. package/dist/esm/src/DiscoveryAdvertisementValidation.js +57 -0
  111. package/dist/esm/src/DiscoveryAdvertisementValidation.js.map +1 -0
  112. package/dist/esm/src/Engine.js +1698 -326
  113. package/dist/esm/src/Engine.js.map +1 -1
  114. package/dist/esm/src/EngineAdmission.js +280 -0
  115. package/dist/esm/src/EngineAdmission.js.map +1 -0
  116. package/dist/esm/src/GASP/OverlayGASPRemote.js +27 -43
  117. package/dist/esm/src/GASP/OverlayGASPRemote.js.map +1 -1
  118. package/dist/esm/src/GASP/OverlayGASPStorage.js +200 -56
  119. package/dist/esm/src/GASP/OverlayGASPStorage.js.map +1 -1
  120. package/dist/esm/src/RemoteSecurity.js +279 -0
  121. package/dist/esm/src/RemoteSecurity.js.map +1 -0
  122. package/dist/esm/src/storage/AdmissionStorage.js +85 -0
  123. package/dist/esm/src/storage/AdmissionStorage.js.map +1 -0
  124. package/dist/esm/src/storage/RecoveryContract.js +31 -0
  125. package/dist/esm/src/storage/RecoveryContract.js.map +1 -0
  126. package/dist/esm/src/storage/Storage.js +4 -1
  127. package/dist/esm/src/storage/Storage.js.map +1 -1
  128. package/dist/esm/src/storage/knex/KnexStorage.js +98 -61
  129. package/dist/esm/src/storage/knex/KnexStorage.js.map +1 -1
  130. package/dist/esm/src/storage/knex/all-migrations.js +5 -1
  131. package/dist/esm/src/storage/knex/all-migrations.js.map +1 -1
  132. package/dist/esm/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js +32 -0
  133. package/dist/esm/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js.map +1 -0
  134. package/dist/esm/src/storage/knex/migrations/2026-09-20-001-spent-by.js +12 -0
  135. package/dist/esm/src/storage/knex/migrations/2026-09-20-001-spent-by.js.map +1 -0
  136. package/dist/esm/src/storage/mongo/MongoAdmissionPlan.js +217 -0
  137. package/dist/esm/src/storage/mongo/MongoAdmissionPlan.js.map +1 -0
  138. package/dist/esm/src/storage/mongo/MongoAdmissionStorage.js +673 -0
  139. package/dist/esm/src/storage/mongo/MongoAdmissionStorage.js.map +1 -0
  140. package/dist/esm/src/storage/mongo/MongoOverlayStorage.js +451 -0
  141. package/dist/esm/src/storage/mongo/MongoOverlayStorage.js.map +1 -0
  142. package/dist/esm/src/storage/mongo/MongoPayloadStore.js +747 -0
  143. package/dist/esm/src/storage/mongo/MongoPayloadStore.js.map +1 -0
  144. package/dist/esm/src/storage/mongo/MongoReadGuards.js +129 -0
  145. package/dist/esm/src/storage/mongo/MongoReadGuards.js.map +1 -0
  146. package/dist/esm/src/storage/mongo/MongoSchema.js +730 -0
  147. package/dist/esm/src/storage/mongo/MongoSchema.js.map +1 -0
  148. package/dist/esm/src/storage/mongo/MongoTransactionRunner.js +371 -0
  149. package/dist/esm/src/storage/mongo/MongoTransactionRunner.js.map +1 -0
  150. package/dist/esm/src/storage/mongo.js +9 -0
  151. package/dist/esm/src/storage/mongo.js.map +1 -0
  152. package/dist/types/mod.d.ts +3 -0
  153. package/dist/types/mod.d.ts.map +1 -1
  154. package/dist/types/src/BASM.d.ts +6 -0
  155. package/dist/types/src/BASM.d.ts.map +1 -1
  156. package/dist/types/src/BASMRemote.d.ts +8 -1
  157. package/dist/types/src/BASMRemote.d.ts.map +1 -1
  158. package/dist/types/src/BASMValidation.d.ts +27 -0
  159. package/dist/types/src/BASMValidation.d.ts.map +1 -0
  160. package/dist/types/src/DiscoveryAdvertisementValidation.d.ts +11 -0
  161. package/dist/types/src/DiscoveryAdvertisementValidation.d.ts.map +1 -0
  162. package/dist/types/src/Engine.d.ts +37 -13
  163. package/dist/types/src/Engine.d.ts.map +1 -1
  164. package/dist/types/src/EngineAdmission.d.ts +70 -0
  165. package/dist/types/src/EngineAdmission.d.ts.map +1 -0
  166. package/dist/types/src/GASP/OverlayGASPRemote.d.ts +4 -3
  167. package/dist/types/src/GASP/OverlayGASPRemote.d.ts.map +1 -1
  168. package/dist/types/src/GASP/OverlayGASPStorage.d.ts +22 -16
  169. package/dist/types/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
  170. package/dist/types/src/RemoteSecurity.d.ts +50 -0
  171. package/dist/types/src/RemoteSecurity.d.ts.map +1 -0
  172. package/dist/types/src/storage/AdmissionStorage.d.ts +185 -0
  173. package/dist/types/src/storage/AdmissionStorage.d.ts.map +1 -0
  174. package/dist/types/src/storage/RecoveryContract.d.ts +50 -0
  175. package/dist/types/src/storage/RecoveryContract.d.ts.map +1 -0
  176. package/dist/types/src/storage/Storage.d.ts +32 -19
  177. package/dist/types/src/storage/Storage.d.ts.map +1 -1
  178. package/dist/types/src/storage/knex/KnexStorage.d.ts +8 -8
  179. package/dist/types/src/storage/knex/KnexStorage.d.ts.map +1 -1
  180. package/dist/types/src/storage/knex/all-migrations.d.ts.map +1 -1
  181. package/dist/types/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts +4 -0
  182. package/dist/types/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts.map +1 -0
  183. package/dist/types/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts +5 -0
  184. package/dist/types/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts.map +1 -0
  185. package/dist/types/src/storage/mongo/MongoAdmissionPlan.d.ts +18 -0
  186. package/dist/types/src/storage/mongo/MongoAdmissionPlan.d.ts.map +1 -0
  187. package/dist/types/src/storage/mongo/MongoAdmissionStorage.d.ts +112 -0
  188. package/dist/types/src/storage/mongo/MongoAdmissionStorage.d.ts.map +1 -0
  189. package/dist/types/src/storage/mongo/MongoOverlayStorage.d.ts +71 -0
  190. package/dist/types/src/storage/mongo/MongoOverlayStorage.d.ts.map +1 -0
  191. package/dist/types/src/storage/mongo/MongoPayloadStore.d.ts +134 -0
  192. package/dist/types/src/storage/mongo/MongoPayloadStore.d.ts.map +1 -0
  193. package/dist/types/src/storage/mongo/MongoReadGuards.d.ts +44 -0
  194. package/dist/types/src/storage/mongo/MongoReadGuards.d.ts.map +1 -0
  195. package/dist/types/src/storage/mongo/MongoSchema.d.ts +67 -0
  196. package/dist/types/src/storage/mongo/MongoSchema.d.ts.map +1 -0
  197. package/dist/types/src/storage/mongo/MongoTransactionRunner.d.ts +69 -0
  198. package/dist/types/src/storage/mongo/MongoTransactionRunner.d.ts.map +1 -0
  199. package/dist/types/src/storage/mongo.d.ts +9 -0
  200. package/dist/types/src/storage/mongo.d.ts.map +1 -0
  201. package/package.json +11 -5
@@ -1,23 +1,63 @@
1
- import { MerklePath, Transaction, Utils } from '@bsv/sdk';
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
- temporaryGraphNodeRefs = {};
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 >= OverlayGASPStorage.MAX_CONCURRENT_ANCHOR_VALIDATIONS) {
20
- await new Promise(resolve => { OverlayGASPStorage.anchorValidationQueue.push(resolve); });
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 => { OverlayGASPStorage.finalizationQueue.push(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
- return UTXOs.map(output => ({
52
- txid: output.txid,
53
- outputIndex: output.outputIndex,
54
- score: output.score ?? 0
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
- const output = await this.engine.storage.findOutput(txid, outputIndex, undefined, undefined, true);
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
- * For a given node, returns the inputs needed to complete the graph, including whether updated metadata is requested for those inputs.
84
- * @param tx The node for which needed inputs should be found.
85
- * @returns A promise for a mapping of requested input transactions and whether metadata should be provided for each.
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' ? Utils.toArray(tx.txMetadata) : undefined, 'historical-tx', { dryRun: true });
104
- if (!admittanceResult.outputsToAdmit.includes(tx.outputIndex) && this.engine.managers[this.topic] !== undefined && typeof this.engine.managers[this.topic].identifyNeededInputs === 'function') {
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
- * Appends a new node to a temporary graph.
148
- * @param tx The node to append to this graph.
149
- * @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.
150
- * @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.
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
- this.temporaryGraphNodeRefs[tx.graphID] = newGraphNode;
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.temporaryGraphNodeRefs[spentBy];
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[`${newGraphNode.txid}.${newGraphNode.outputIndex}`] = newGraphNode;
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 admittanceInstructions = await this.engine.managers[this.topic].identifyAdmissibleOutputs(beef, this.previousCoinIndexes(tx, coins), undefined, 'historical-tx', { dryRun: true });
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
- * 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.
211
- * 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,
212
- * while considering any coins which the Manager had previously indicated were either valid or invalid.
213
- * @param graphID The TXID and output index (in 36-byte format) for the UTXO at the tip of this graph.
214
- * @throws If the graph is not well-anchored, according to the rules of Bitcoin or the rules of the Overlay Topic Manager.
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 hydrator = (node) => {
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
- hydrator(foundRoot);
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.temporaryGraphNodeRefs[`${input.sourceTXID ?? ''}.${input.sourceOutputIndex}`];
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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"}