@bsv/overlay 0.1.0-alpha.1 → 0.1.0-alpha.2
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/dist/cjs/mod.js +5 -14
- package/dist/cjs/mod.js.map +1 -1
- package/dist/cjs/package.json +2 -2
- package/dist/cjs/src/Engine.js +110 -43
- package/dist/cjs/src/Engine.js.map +1 -1
- package/dist/cjs/src/storage/knex/KnexStorage.js +25 -3
- package/dist/cjs/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +2 -13
- package/dist/esm/mod.js.map +1 -1
- package/dist/esm/src/Engine.js +110 -43
- package/dist/esm/src/Engine.js.map +1 -1
- package/dist/esm/src/storage/knex/KnexStorage.js +24 -3
- package/dist/esm/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +12 -12
- package/dist/types/mod.d.ts.map +1 -1
- package/dist/types/src/AdmittanceInstructions.d.ts +2 -2
- package/dist/types/src/AdmittanceInstructions.d.ts.map +1 -1
- package/dist/types/src/Engine.d.ts +46 -26
- package/dist/types/src/Engine.d.ts.map +1 -1
- package/dist/types/src/LookupAnswer.d.ts.map +1 -1
- package/dist/types/src/LookupFormula.d.ts +5 -5
- package/dist/types/src/LookupFormula.d.ts.map +1 -1
- package/dist/types/src/LookupQuestion.d.ts.map +1 -1
- package/dist/types/src/LookupService.d.ts +32 -20
- package/dist/types/src/LookupService.d.ts.map +1 -1
- package/dist/types/src/Output.d.ts +4 -4
- package/dist/types/src/Output.d.ts.map +1 -1
- package/dist/types/src/STEAK.d.ts +1 -1
- package/dist/types/src/TopicManager.d.ts +5 -5
- package/dist/types/src/TopicManager.d.ts.map +1 -1
- package/dist/types/src/storage/Storage.d.ts +47 -34
- package/dist/types/src/storage/Storage.d.ts.map +1 -1
- package/dist/types/src/storage/knex/KnexStorage.d.ts +6 -4
- package/dist/types/src/storage/knex/KnexStorage.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/mod.ts +12 -12
- package/package.json +2 -2
- package/src/AdmittanceInstructions.ts +8 -8
- package/src/Engine.ts +458 -383
- package/src/LookupAnswer.ts +7 -7
- package/src/LookupFormula.ts +21 -21
- package/src/LookupQuestion.ts +9 -9
- package/src/LookupService.ts +54 -36
- package/src/Output.ts +22 -22
- package/src/STEAK.ts +1 -1
- package/src/TopicManager.ts +21 -15
- package/src/__tests/Engine.test.ts +6 -4
- package/src/storage/Storage.ts +49 -34
- package/src/storage/knex/KnexStorage.ts +101 -76
package/dist/esm/src/Engine.js
CHANGED
|
@@ -2,26 +2,26 @@ import { Transaction } from '@bsv/sdk';
|
|
|
2
2
|
/**
|
|
3
3
|
* Am engine for running BSV Overlay Services (topic managers and lookup services).
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
5
|
+
export class Engine {
|
|
6
6
|
managers;
|
|
7
7
|
lookupServices;
|
|
8
8
|
storage;
|
|
9
9
|
chainTracker;
|
|
10
|
+
broadcaster;
|
|
10
11
|
/**
|
|
11
12
|
* Creates a new Overlay Services Engine
|
|
12
13
|
* @param {[key: string]: TopicManager} managers - manages topic admittance
|
|
13
14
|
* @param {[key: string]: LookupService} lookupServices - manages UTXO lookups
|
|
14
15
|
* @param {Storage} storage - for interacting with internally-managed persistent data
|
|
15
16
|
* @param {ChainTracker} chainTracker - Verifies SPV data associated with transactions
|
|
16
|
-
* @param {
|
|
17
|
+
* @param {Broadcaster} [Broadcaster] - broadcaster used for broadcasting the incoming transaction
|
|
17
18
|
*/
|
|
18
|
-
constructor(managers, lookupServices, storage, chainTracker
|
|
19
|
-
// public proofNotifiers: ProofNotifier[]
|
|
20
|
-
) {
|
|
19
|
+
constructor(managers, lookupServices, storage, chainTracker, broadcaster) {
|
|
21
20
|
this.managers = managers;
|
|
22
21
|
this.lookupServices = lookupServices;
|
|
23
22
|
this.storage = storage;
|
|
24
23
|
this.chainTracker = chainTracker;
|
|
24
|
+
this.broadcaster = broadcaster;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Submits a transaction for processing by Overlay Services.
|
|
@@ -30,8 +30,9 @@ export default class Engine {
|
|
|
30
30
|
*/
|
|
31
31
|
async submit(taggedBEEF) {
|
|
32
32
|
for (const t of taggedBEEF.topics) {
|
|
33
|
-
if (
|
|
33
|
+
if (this.managers[t] === undefined || this.managers[t] === null) {
|
|
34
34
|
throw new Error(`This server does not support this topic: ${t}`);
|
|
35
|
+
}
|
|
35
36
|
}
|
|
36
37
|
// Validate the transaction SPV information
|
|
37
38
|
const tx = Transaction.fromBEEF(taggedBEEF.beef);
|
|
@@ -64,14 +65,14 @@ export default class Engine {
|
|
|
64
65
|
const previousTXID = input.sourceTXID || input.sourceTransaction?.id('hex');
|
|
65
66
|
// Check if a previous UTXO exists in the storage medium
|
|
66
67
|
const output = await this.storage.findOutput(previousTXID, input.sourceOutputIndex, topic);
|
|
67
|
-
if (output) {
|
|
68
|
+
if (output !== undefined && output !== null) {
|
|
68
69
|
previousCoins.push(i);
|
|
69
70
|
// This output is now spent.
|
|
70
71
|
await this.storage.markUTXOAsSpent(output.txid, output.outputIndex, topic);
|
|
71
72
|
// Notify the lookup services about the spending of this output
|
|
72
73
|
for (const l of Object.values(this.lookupServices)) {
|
|
73
74
|
try {
|
|
74
|
-
if (l.outputSpent) {
|
|
75
|
+
if (l.outputSpent !== undefined && l.outputSpent !== null) {
|
|
75
76
|
await l.outputSpent(output.txid, output.outputIndex, topic);
|
|
76
77
|
}
|
|
77
78
|
}
|
|
@@ -94,9 +95,9 @@ export default class Engine {
|
|
|
94
95
|
continue;
|
|
95
96
|
}
|
|
96
97
|
// Keep track of which outputs to admit, mark as stale, or retain
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
const outputsToAdmit = admissableOutputs.outputsToAdmit;
|
|
99
|
+
const staleCoins = [];
|
|
100
|
+
const outputsConsumed = [];
|
|
100
101
|
// Find which outputs should not be retained and mark them as stale
|
|
101
102
|
// For each of the previous UTXOs, if the the UTXO was not included in the list of UTXOs identified for retention, then it will be marked as stale.
|
|
102
103
|
for (const inputIndex of previousCoins) {
|
|
@@ -118,7 +119,7 @@ export default class Engine {
|
|
|
118
119
|
// Remove stale outputs recursively
|
|
119
120
|
for (const coin of staleCoins) {
|
|
120
121
|
const output = await this.storage.findOutput(coin.txid, coin.outputIndex, topic);
|
|
121
|
-
if (output) {
|
|
122
|
+
if (output !== undefined && output !== null) {
|
|
122
123
|
await this.deleteUTXODeep(output);
|
|
123
124
|
}
|
|
124
125
|
}
|
|
@@ -144,7 +145,7 @@ export default class Engine {
|
|
|
144
145
|
// Notify all the lookup services about the new UTXO
|
|
145
146
|
for (const l of Object.values(this.lookupServices)) {
|
|
146
147
|
try {
|
|
147
|
-
if (l.outputAdded) {
|
|
148
|
+
if (l.outputAdded !== undefined && l.outputAdded !== null) {
|
|
148
149
|
await l.outputAdded(txid, outputIndex, tx.outputs[outputIndex].lockingScript, topic);
|
|
149
150
|
}
|
|
150
151
|
}
|
|
@@ -154,7 +155,7 @@ export default class Engine {
|
|
|
154
155
|
// Update each output consumed to know who consumed it
|
|
155
156
|
for (const output of outputsConsumed) {
|
|
156
157
|
const outputToUpdate = await this.storage.findOutput(output.txid, output.outputIndex, topic);
|
|
157
|
-
if (outputToUpdate) {
|
|
158
|
+
if (outputToUpdate !== undefined && outputToUpdate !== null) {
|
|
158
159
|
const newConsumedBy = [...new Set([...newUTXOs, ...outputToUpdate.consumedBy])];
|
|
159
160
|
// Note: only update if newConsumedBy !== new Set(JSON.parse(outputToUpdate.consumedBy)) ?
|
|
160
161
|
await this.storage.updateConsumedBy(output.txid, output.outputIndex, topic, newConsumedBy);
|
|
@@ -168,8 +169,11 @@ export default class Engine {
|
|
|
168
169
|
// Keep track of what outputs were admitted for what topic
|
|
169
170
|
steak[topic] = admissableOutputs;
|
|
170
171
|
}
|
|
172
|
+
// Broadcast the transaction
|
|
173
|
+
if (Object.keys(steak).length > 0 && this.broadcaster !== undefined) {
|
|
174
|
+
await this.broadcaster.broadcast(tx);
|
|
175
|
+
}
|
|
171
176
|
return steak;
|
|
172
|
-
// TODO subscribe to get notified by proof notifiers when proof is found for TX if not already present, so the tree can be chopped down
|
|
173
177
|
// TODO propagate transaction to other nodes according to synchronization agreements
|
|
174
178
|
}
|
|
175
179
|
/**
|
|
@@ -180,7 +184,7 @@ export default class Engine {
|
|
|
180
184
|
async lookup(lookupQuestion) {
|
|
181
185
|
// Validate a lookup service for the provider is found
|
|
182
186
|
const lookupService = this.lookupServices[lookupQuestion.service];
|
|
183
|
-
if (
|
|
187
|
+
if (lookupService === undefined || lookupService === null)
|
|
184
188
|
throw new Error(`Lookup service not found for provider: ${lookupQuestion.service}`);
|
|
185
189
|
let lookupResult = await lookupService.lookup(lookupQuestion);
|
|
186
190
|
// Handle custom lookup service answers
|
|
@@ -192,11 +196,11 @@ export default class Engine {
|
|
|
192
196
|
for (const { txid, outputIndex, history } of lookupResult) {
|
|
193
197
|
// Make sure this is an unspent output (UTXO)
|
|
194
198
|
const UTXO = await this.storage.findOutput(txid, outputIndex, undefined, false);
|
|
195
|
-
if (
|
|
199
|
+
if (UTXO === undefined || UTXO === null)
|
|
196
200
|
continue;
|
|
197
201
|
// Get the history for this utxo and construct a BRC-8 Envelope
|
|
198
202
|
const output = await this.getUTXOHistory(UTXO, history, 0);
|
|
199
|
-
if (output) {
|
|
203
|
+
if (output !== undefined && output !== null) {
|
|
200
204
|
hydratedOutputs.push({
|
|
201
205
|
beef: output.beef,
|
|
202
206
|
outputIndex: output.outputIndex
|
|
@@ -209,14 +213,19 @@ export default class Engine {
|
|
|
209
213
|
};
|
|
210
214
|
}
|
|
211
215
|
/**
|
|
212
|
-
* Traverse and return the history of a UTXO
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* @param
|
|
218
|
-
* @param
|
|
219
|
-
*
|
|
216
|
+
* Traverse and return the history of a UTXO.
|
|
217
|
+
*
|
|
218
|
+
* This method traverses the history of a given Unspent Transaction Output (UTXO) and returns
|
|
219
|
+
* its historical data based on the provided history selector and current depth.
|
|
220
|
+
*
|
|
221
|
+
* @param output - The UTXO to traverse the history for.
|
|
222
|
+
* @param historySelector - Optionally directs the history traversal:
|
|
223
|
+
* - If a number, denotes how many previous spends (in terms of chain depth) to include.
|
|
224
|
+
* - If a function, accepts a BEEF-formatted transaction, an output index, and the current depth as parameters,
|
|
225
|
+
* returning a promise that resolves to a boolean indicating whether to include the output in the history.
|
|
226
|
+
* @param {number} [currentDepth=0] - The current depth of the traversal relative to the top-level UTXO.
|
|
227
|
+
*
|
|
228
|
+
* @returns {Promise<Output | undefined>} - A promise that resolves to the output history if found, or undefined if not.
|
|
220
229
|
*/
|
|
221
230
|
async getUTXOHistory(output, historySelector, currentDepth = 0) {
|
|
222
231
|
// If we have an output but no history selector, jsut return the output.
|
|
@@ -234,7 +243,7 @@ export default class Engine {
|
|
|
234
243
|
if (shouldTraverseHistory === false) {
|
|
235
244
|
return undefined;
|
|
236
245
|
}
|
|
237
|
-
else if (output && output.outputsConsumed.length === 0) {
|
|
246
|
+
else if (output !== null && output !== undefined && output.outputsConsumed.length === 0) {
|
|
238
247
|
return output;
|
|
239
248
|
}
|
|
240
249
|
try {
|
|
@@ -242,21 +251,23 @@ export default class Engine {
|
|
|
242
251
|
// Only retrieve unique values in case outputs are doubly referenced
|
|
243
252
|
const outputsConsumed = output.outputsConsumed;
|
|
244
253
|
// Find the child outputs for each utxo consumed by the current output
|
|
245
|
-
const childHistories =
|
|
254
|
+
const childHistories = (await Promise.all(outputsConsumed.map(async (outputIdentifier) => {
|
|
246
255
|
const output = await this.storage.findOutput(outputIdentifier.txid, outputIdentifier.outputIndex);
|
|
247
256
|
// Make sure an output was found
|
|
248
|
-
if (
|
|
257
|
+
if (output === undefined || output === null) {
|
|
249
258
|
return undefined;
|
|
250
259
|
}
|
|
251
260
|
// Find previousUTXO history
|
|
252
|
-
return this.getUTXOHistory(output, historySelector, currentDepth + 1);
|
|
261
|
+
return await this.getUTXOHistory(output, historySelector, currentDepth + 1);
|
|
253
262
|
}))).filter(x => x !== undefined);
|
|
254
263
|
const tx = Transaction.fromBEEF(output.beef);
|
|
255
264
|
for (const input of childHistories) {
|
|
256
|
-
if (
|
|
265
|
+
if (input === undefined || input === null)
|
|
257
266
|
continue;
|
|
258
267
|
const inputIndex = tx.inputs.findIndex((input) => {
|
|
259
|
-
const sourceTXID = input.sourceTXID
|
|
268
|
+
const sourceTXID = input.sourceTXID !== undefined && input.sourceTXID !== ''
|
|
269
|
+
? input.sourceTXID
|
|
270
|
+
: input.sourceTransaction?.id('hex');
|
|
260
271
|
return sourceTXID === output.txid && input.sourceOutputIndex === output.outputIndex;
|
|
261
272
|
});
|
|
262
273
|
tx.inputs[inputIndex].sourceTransaction = Transaction.fromBEEF(input.beef);
|
|
@@ -276,13 +287,10 @@ export default class Engine {
|
|
|
276
287
|
}
|
|
277
288
|
}
|
|
278
289
|
/**
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
* @param outputIndex
|
|
284
|
-
* @returns {Promise<void>}
|
|
285
|
-
*/
|
|
290
|
+
* Delete a UTXO and all stale consumed inputs.
|
|
291
|
+
* @param output - The UTXO to be deleted.
|
|
292
|
+
* @returns {Promise<void>} - A promise that resolves when the deletion process is complete.
|
|
293
|
+
*/
|
|
286
294
|
async deleteUTXODeep(output) {
|
|
287
295
|
try {
|
|
288
296
|
// Delete the current output IFF there are no references to it
|
|
@@ -304,7 +312,7 @@ export default class Engine {
|
|
|
304
312
|
output.outputsConsumed.map(async (outputIdentifier) => {
|
|
305
313
|
const staleOutput = await this.storage.findOutput(outputIdentifier.txid, outputIdentifier.outputIndex, output.topic);
|
|
306
314
|
// Make sure an output was found
|
|
307
|
-
if (
|
|
315
|
+
if (staleOutput === null || staleOutput === undefined) {
|
|
308
316
|
return undefined;
|
|
309
317
|
}
|
|
310
318
|
// Parse out the existing data, then concat the new outputs with no duplicates
|
|
@@ -321,6 +329,63 @@ export default class Engine {
|
|
|
321
329
|
throw new Error(`Failed to delete all stale outputs: ${error}`);
|
|
322
330
|
}
|
|
323
331
|
}
|
|
332
|
+
/**
|
|
333
|
+
* Recursively updates the Merkle proof for the given output and its consumedBy outputs.
|
|
334
|
+
* If the output matches the source transaction ID, its Merkle proof is updated directly.
|
|
335
|
+
* Otherwise, the Merkle proof is updated for the corresponding input in each transaction.
|
|
336
|
+
*
|
|
337
|
+
* @param output - The output to update with the new Merkle proof.
|
|
338
|
+
* @param proof - The Merkle proof to be applied to the output or its inputs.
|
|
339
|
+
* @param sourceTxid - The transaction ID of the source output whose Merkle proof is being updated.
|
|
340
|
+
*/
|
|
341
|
+
async updateMerkleProof(output, proof, recursionPath) {
|
|
342
|
+
// Add current output to recursionPath
|
|
343
|
+
recursionPath.push({ txid: output.txid, outputIndex: output.outputIndex });
|
|
344
|
+
const tx = Transaction.fromBEEF(output.beef);
|
|
345
|
+
// Handle the base case
|
|
346
|
+
if (output.txid === recursionPath[0].txid) {
|
|
347
|
+
tx.merklePath = proof;
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
// Traverse inputs to update the Merkle proof according to the recursionPath
|
|
351
|
+
let currentInputs = tx.inputs;
|
|
352
|
+
for (let i = recursionPath.length - 1; i >= 0; i--) {
|
|
353
|
+
const crumb = recursionPath[i];
|
|
354
|
+
for (const input of currentInputs) {
|
|
355
|
+
if (input.sourceTXID === crumb.txid && input.sourceOutputIndex === crumb.outputIndex) {
|
|
356
|
+
if (i === 0 && input.sourceTransaction !== undefined) {
|
|
357
|
+
input.sourceTransaction.merklePath = proof;
|
|
358
|
+
}
|
|
359
|
+
else if (input.sourceTransaction !== undefined) {
|
|
360
|
+
currentInputs = input.sourceTransaction.inputs;
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// Update the output's BEEF in the storage DB
|
|
368
|
+
await this.storage.updateOutputBeef(output.txid, output.outputIndex, output.topic, tx.toBEEF());
|
|
369
|
+
// Recursively update the consumedBy outputs
|
|
370
|
+
for (const consumingOutput of output.consumedBy) {
|
|
371
|
+
const consumedOutputs = await this.storage.findOutputsForTransaction(consumingOutput.txid);
|
|
372
|
+
for (const consumedOutput of consumedOutputs) {
|
|
373
|
+
await this.updateMerkleProof(consumedOutput, proof, []);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Recursively prune UTXOs when an incoming Merkle Proof is received.
|
|
379
|
+
*
|
|
380
|
+
* @param txid - Transaction ID of the associated outputs to prune.
|
|
381
|
+
* @param proof - Merkle proof containing the Merkle path and other relevant data to verify the transaction.
|
|
382
|
+
*/
|
|
383
|
+
async handleNewMerkleProof(txid, proof) {
|
|
384
|
+
const outputs = await this.storage.findOutputsForTransaction(txid);
|
|
385
|
+
for (const output of outputs) {
|
|
386
|
+
await this.updateMerkleProof(output, proof, []);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
324
389
|
/**
|
|
325
390
|
* Find a list of supported topic managers
|
|
326
391
|
* @public
|
|
@@ -342,8 +407,9 @@ export default class Engine {
|
|
|
342
407
|
* @public
|
|
343
408
|
* @returns {Promise<string>} - the documentation for the topic manager
|
|
344
409
|
*/
|
|
345
|
-
async
|
|
346
|
-
|
|
410
|
+
async getDocumentationForTopicManager(manager) {
|
|
411
|
+
const documentation = await this.managers[manager]?.getDocumentation?.();
|
|
412
|
+
return documentation !== undefined ? documentation : 'No documentation found!';
|
|
347
413
|
}
|
|
348
414
|
/**
|
|
349
415
|
* Run a query to get the documentation for a particular lookup service
|
|
@@ -351,7 +417,8 @@ export default class Engine {
|
|
|
351
417
|
* @returns {Promise<string>} - the documentation for the lookup service
|
|
352
418
|
*/
|
|
353
419
|
async getDocumentationForLookupServiceProvider(provider) {
|
|
354
|
-
|
|
420
|
+
const documentation = await this.lookupServices[provider]?.getDocumentation?.();
|
|
421
|
+
return documentation !== undefined ? documentation : 'No documentation found!';
|
|
355
422
|
}
|
|
356
423
|
}
|
|
357
424
|
//# sourceMappingURL=Engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.js","sourceRoot":"","sources":["../../../src/Engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Engine.js","sourceRoot":"","sources":["../../../src/Engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export class KnexStorage {
|
|
2
2
|
knex;
|
|
3
3
|
constructor(knex) {
|
|
4
4
|
this.knex = knex;
|
|
@@ -13,7 +13,7 @@ export default class KnexStorage {
|
|
|
13
13
|
if (spent !== undefined)
|
|
14
14
|
search.spent = spent;
|
|
15
15
|
const [output] = await this.knex('outputs').where(search).select('txid', 'outputIndex', 'outputScript', 'topic', 'satoshis', 'beef', 'outputsConsumed', 'spent', 'consumedBy');
|
|
16
|
-
if (
|
|
16
|
+
if (output === undefined || output === null) {
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
19
|
return {
|
|
@@ -25,6 +25,20 @@ export default class KnexStorage {
|
|
|
25
25
|
consumedBy: JSON.parse(output.consumedBy)
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
+
async findOutputsForTransaction(txid) {
|
|
29
|
+
const [output] = await this.knex('outputs').where({ txid }).select('txid', 'outputIndex', 'outputScript', 'topic', 'satoshis', 'beef', 'outputsConsumed', 'spent', 'consumedBy');
|
|
30
|
+
if (output === undefined || output === null) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
...output,
|
|
35
|
+
outputScript: [...output.outputScript],
|
|
36
|
+
beef: [...output.beef],
|
|
37
|
+
spent: Boolean(output.spent),
|
|
38
|
+
outputsConsumed: JSON.parse(output.outputsConsumed),
|
|
39
|
+
consumedBy: JSON.parse(output.consumedBy)
|
|
40
|
+
};
|
|
41
|
+
}
|
|
28
42
|
async deleteOutput(txid, outputIndex, topic) {
|
|
29
43
|
await this.knex('outputs').where({
|
|
30
44
|
txid, outputIndex, topic
|
|
@@ -37,7 +51,7 @@ export default class KnexStorage {
|
|
|
37
51
|
outputScript: Buffer.from(output.outputScript),
|
|
38
52
|
topic: output.topic,
|
|
39
53
|
satoshis: Number(output.satoshis),
|
|
40
|
-
beef:
|
|
54
|
+
beef: Buffer.from(new Uint8Array(output.beef)),
|
|
41
55
|
outputsConsumed: JSON.stringify(output.outputsConsumed),
|
|
42
56
|
consumedBy: JSON.stringify(output.consumedBy),
|
|
43
57
|
spent: output.spent
|
|
@@ -57,6 +71,13 @@ export default class KnexStorage {
|
|
|
57
71
|
topic
|
|
58
72
|
}).update('consumedBy', consumedBy);
|
|
59
73
|
}
|
|
74
|
+
async updateOutputBeef(txid, outputIndex, topic, beef) {
|
|
75
|
+
await this.knex('outputs').where({
|
|
76
|
+
txid,
|
|
77
|
+
outputIndex,
|
|
78
|
+
topic
|
|
79
|
+
}).update('beef', beef);
|
|
80
|
+
}
|
|
60
81
|
async insertAppliedTransaction(tx) {
|
|
61
82
|
await this.knex('applied_transactions').insert({
|
|
62
83
|
txid: tx.txid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnexStorage.js","sourceRoot":"","sources":["../../../../../src/storage/knex/KnexStorage.ts"],"names":[],"mappings":"AAIA,MAAM,
|
|
1
|
+
{"version":3,"file":"KnexStorage.js","sourceRoot":"","sources":["../../../../../src/storage/knex/KnexStorage.ts"],"names":[],"mappings":"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"}
|