@bsv/overlay 2.0.1 → 2.0.3
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 +106 -226
- package/dist/cjs/package.json +2 -2
- package/dist/cjs/src/Engine.js +56 -8
- package/dist/cjs/src/Engine.js.map +1 -1
- package/dist/cjs/src/storage/knex/KnexStorage.js +80 -75
- package/dist/cjs/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/Engine.js +54 -7
- package/dist/esm/src/Engine.js.map +1 -1
- package/dist/esm/src/storage/knex/KnexStorage.js +80 -75
- package/dist/esm/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/Engine.d.ts +2 -0
- package/dist/types/src/Engine.d.ts.map +1 -1
- package/dist/types/src/storage/Storage.d.ts +10 -0
- package/dist/types/src/storage/Storage.d.ts.map +1 -1
- package/dist/types/src/storage/knex/KnexStorage.d.ts +7 -0
- package/dist/types/src/storage/knex/KnexStorage.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/docs/API.md +580 -72
- package/docs/examples/README.md +2 -2
- package/docs/examples/gs-wip.md +76 -68
- package/package.json +2 -2
- package/src/Engine.ts +74 -8
- package/src/__tests/Engine.test.ts +28 -0
- package/src/storage/Storage.ts +11 -0
- package/src/storage/knex/KnexStorage.ts +104 -79
|
@@ -1,10 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.KnexStorage = void 0;
|
|
4
|
+
const OUTPUT_SELECT_FIELDS = [
|
|
5
|
+
'outputs.txid',
|
|
6
|
+
'outputs.outputIndex',
|
|
7
|
+
'outputs.outputScript',
|
|
8
|
+
'outputs.topic',
|
|
9
|
+
'outputs.satoshis',
|
|
10
|
+
'outputs.outputsConsumed',
|
|
11
|
+
'outputs.spent',
|
|
12
|
+
'outputs.consumedBy',
|
|
13
|
+
'outputs.score'
|
|
14
|
+
];
|
|
4
15
|
class KnexStorage {
|
|
5
16
|
constructor(knex) {
|
|
6
17
|
this.knex = knex;
|
|
7
18
|
}
|
|
19
|
+
parseOutputRelations(value) {
|
|
20
|
+
if (Array.isArray(value)) {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
return JSON.parse(value);
|
|
24
|
+
}
|
|
25
|
+
parseOutputRecord(row, includeBEEF, beefOverride) {
|
|
26
|
+
return {
|
|
27
|
+
...row,
|
|
28
|
+
outputScript: Array.from(row.outputScript),
|
|
29
|
+
beef: includeBEEF ? (beefOverride !== null && beefOverride !== void 0 ? beefOverride : (row.beef !== undefined ? Array.from(row.beef) : undefined)) : undefined,
|
|
30
|
+
spent: Boolean(row.spent),
|
|
31
|
+
outputsConsumed: this.parseOutputRelations(row.outputsConsumed),
|
|
32
|
+
consumedBy: this.parseOutputRelations(row.consumedBy)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async fetchTransactionBeefMap(txids) {
|
|
36
|
+
if (txids.length === 0) {
|
|
37
|
+
return new Map();
|
|
38
|
+
}
|
|
39
|
+
const rows = await this.knex('transactions')
|
|
40
|
+
.whereIn('txid', txids)
|
|
41
|
+
.select(['txid', 'beef']);
|
|
42
|
+
const beefByTxid = new Map();
|
|
43
|
+
for (const row of rows) {
|
|
44
|
+
if (row.beef !== undefined) {
|
|
45
|
+
beefByTxid.set(row.txid, Array.from(row.beef));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return beefByTxid;
|
|
49
|
+
}
|
|
8
50
|
async findOutput(txid, outputIndex, topic, spent, includeBEEF = false) {
|
|
9
51
|
const search = {
|
|
10
52
|
'outputs.txid': txid,
|
|
@@ -14,20 +56,8 @@ class KnexStorage {
|
|
|
14
56
|
search['outputs.topic'] = topic;
|
|
15
57
|
if (spent !== undefined)
|
|
16
58
|
search['outputs.spent'] = spent;
|
|
17
|
-
// Base query to get the output
|
|
18
59
|
const query = this.knex('outputs').where(search);
|
|
19
|
-
|
|
20
|
-
const selectFields = [
|
|
21
|
-
'outputs.txid',
|
|
22
|
-
'outputs.outputIndex',
|
|
23
|
-
'outputs.outputScript',
|
|
24
|
-
'outputs.topic',
|
|
25
|
-
'outputs.satoshis',
|
|
26
|
-
'outputs.outputsConsumed',
|
|
27
|
-
'outputs.spent',
|
|
28
|
-
'outputs.consumedBy',
|
|
29
|
-
'outputs.score'
|
|
30
|
-
];
|
|
60
|
+
const selectFields = [...OUTPUT_SELECT_FIELDS];
|
|
31
61
|
if (includeBEEF) {
|
|
32
62
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
33
63
|
query.leftJoin('transactions', 'outputs.txid', 'transactions.txid');
|
|
@@ -37,47 +67,41 @@ class KnexStorage {
|
|
|
37
67
|
if (output === undefined || output === null) {
|
|
38
68
|
return null;
|
|
39
69
|
}
|
|
40
|
-
return
|
|
41
|
-
...output,
|
|
42
|
-
outputScript: [...output.outputScript],
|
|
43
|
-
beef: includeBEEF ? (output.beef !== undefined ? [...output.beef] : undefined) : undefined,
|
|
44
|
-
spent: Boolean(output.spent),
|
|
45
|
-
outputsConsumed: JSON.parse(output.outputsConsumed),
|
|
46
|
-
consumedBy: JSON.parse(output.consumedBy)
|
|
47
|
-
};
|
|
70
|
+
return this.parseOutputRecord(output, includeBEEF);
|
|
48
71
|
}
|
|
49
|
-
async
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
'outputs.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
66
|
-
query.leftJoin('transactions', 'outputs.txid', 'transactions.txid');
|
|
67
|
-
selectFields.push('transactions.beef');
|
|
72
|
+
async findOutputsByOutpoints(outpoints, includeBEEF = false) {
|
|
73
|
+
if (outpoints.length === 0) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const deduped = new Map();
|
|
77
|
+
for (const outpoint of outpoints) {
|
|
78
|
+
deduped.set(`${outpoint.txid}:${outpoint.outputIndex}`, outpoint);
|
|
79
|
+
}
|
|
80
|
+
const rows = await this.knex('outputs')
|
|
81
|
+
.whereIn(['outputs.txid', 'outputs.outputIndex'], Array.from(deduped.values()).map(outpoint => [outpoint.txid, outpoint.outputIndex]))
|
|
82
|
+
.select([...OUTPUT_SELECT_FIELDS]);
|
|
83
|
+
if (rows === undefined || rows.length === 0) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
if (!includeBEEF) {
|
|
87
|
+
return rows.map(row => this.parseOutputRecord(row, false));
|
|
68
88
|
}
|
|
69
|
-
const
|
|
89
|
+
const txids = Array.from(new Set(rows.map(row => row.txid)));
|
|
90
|
+
const beefByTxid = await this.fetchTransactionBeefMap(txids);
|
|
91
|
+
return rows.map(row => this.parseOutputRecord(row, true, beefByTxid.get(row.txid)));
|
|
92
|
+
}
|
|
93
|
+
async findOutputsForTransaction(txid, includeBEEF = false) {
|
|
94
|
+
const outputs = await this.knex('outputs')
|
|
95
|
+
.where({ 'outputs.txid': txid })
|
|
96
|
+
.select([...OUTPUT_SELECT_FIELDS]);
|
|
70
97
|
if (outputs === undefined || outputs.length === 0) {
|
|
71
98
|
return [];
|
|
72
99
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
outputsConsumed: JSON.parse(output.outputsConsumed),
|
|
79
|
-
consumedBy: JSON.parse(output.consumedBy)
|
|
80
|
-
}));
|
|
100
|
+
if (!includeBEEF) {
|
|
101
|
+
return outputs.map(output => this.parseOutputRecord(output, false));
|
|
102
|
+
}
|
|
103
|
+
const beefByTxid = await this.fetchTransactionBeefMap([txid]);
|
|
104
|
+
return outputs.map(output => this.parseOutputRecord(output, true, beefByTxid.get(output.txid)));
|
|
81
105
|
}
|
|
82
106
|
async findUTXOsForTopic(topic, since, limit, includeBEEF = false) {
|
|
83
107
|
// Base query to get outputs
|
|
@@ -90,40 +114,21 @@ class KnexStorage {
|
|
|
90
114
|
// Sort by score
|
|
91
115
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
92
116
|
query.orderBy('outputs.score', 'asc');
|
|
93
|
-
// Select necessary fields from outputs and conditionally include beef from transactions
|
|
94
|
-
const selectFields = [
|
|
95
|
-
'outputs.txid',
|
|
96
|
-
'outputs.outputIndex',
|
|
97
|
-
'outputs.outputScript',
|
|
98
|
-
'outputs.topic',
|
|
99
|
-
'outputs.satoshis',
|
|
100
|
-
'outputs.outputsConsumed',
|
|
101
|
-
'outputs.spent',
|
|
102
|
-
'outputs.consumedBy',
|
|
103
|
-
'outputs.score'
|
|
104
|
-
];
|
|
105
|
-
if (includeBEEF) {
|
|
106
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
107
|
-
query.leftJoin('transactions', 'outputs.txid', 'transactions.txid');
|
|
108
|
-
selectFields.push('transactions.beef');
|
|
109
|
-
}
|
|
110
117
|
// Apply limit if specified
|
|
111
118
|
if (limit !== undefined && limit > 0) {
|
|
112
119
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
113
120
|
query.limit(limit);
|
|
114
121
|
}
|
|
115
|
-
const outputs = await query.select(
|
|
122
|
+
const outputs = await query.select([...OUTPUT_SELECT_FIELDS]);
|
|
116
123
|
if (outputs === undefined || outputs.length === 0) {
|
|
117
124
|
return [];
|
|
118
125
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
consumedBy: JSON.parse(output.consumedBy)
|
|
126
|
-
}));
|
|
126
|
+
if (!includeBEEF) {
|
|
127
|
+
return outputs.map(output => this.parseOutputRecord(output, false));
|
|
128
|
+
}
|
|
129
|
+
const txids = Array.from(new Set(outputs.map(output => output.txid)));
|
|
130
|
+
const beefByTxid = await this.fetchTransactionBeefMap(txids);
|
|
131
|
+
return outputs.map(output => this.parseOutputRecord(output, true, beefByTxid.get(output.txid)));
|
|
127
132
|
}
|
|
128
133
|
async deleteOutput(txid, outputIndex, _) {
|
|
129
134
|
await this.knex.transaction(async (trx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnexStorage.js","sourceRoot":"","sources":["../../../../../src/storage/knex/KnexStorage.ts"],"names":[],"mappings":";;;AAIA,MAAa,WAAW;IAGtB,YAAa,IAAU;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,UAAU,CAAE,IAAY,EAAE,WAAmB,EAAE,KAAc,EAAE,KAAe,EAAE,cAAuB,KAAK;QAChH,MAAM,MAAM,GAKR;YACF,cAAc,EAAE,IAAI;YACpB,qBAAqB,EAAE,WAAW;SACnC,CAAA;QACD,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,eAAe,CAAC,GAAG,KAAK,CAAA;QACxD,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,eAAe,CAAC,GAAG,KAAK,CAAA;QAExD
|
|
1
|
+
{"version":3,"file":"KnexStorage.js","sourceRoot":"","sources":["../../../../../src/storage/knex/KnexStorage.ts"],"names":[],"mappings":"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"}
|