@bsv/overlay 2.0.3 → 2.0.4
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 +226 -106
- package/dist/cjs/mod.js +6 -1
- package/dist/cjs/mod.js.map +1 -1
- package/dist/cjs/package.json +13 -11
- package/dist/cjs/src/BASM.js +92 -0
- package/dist/cjs/src/BASM.js.map +1 -0
- package/dist/cjs/src/BASMRemote.js +43 -0
- package/dist/cjs/src/BASMRemote.js.map +1 -0
- package/dist/cjs/src/Engine.js +649 -47
- package/dist/cjs/src/Engine.js.map +1 -1
- package/dist/cjs/src/GASP/OverlayGASPRemote.js +2 -2
- package/dist/cjs/src/GASP/OverlayGASPRemote.js.map +1 -1
- package/dist/cjs/src/GASP/OverlayGASPStorage.js +18 -25
- package/dist/cjs/src/GASP/OverlayGASPStorage.js.map +1 -1
- package/dist/cjs/src/storage/knex/KnexStorage.js +329 -12
- package/dist/cjs/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/cjs/src/storage/knex/all-migrations.js +3 -1
- package/dist/cjs/src/storage/knex/all-migrations.js.map +1 -1
- package/dist/cjs/src/storage/knex/migrations/2025-05-28-001-enlarge.js +2 -24
- package/dist/cjs/src/storage/knex/migrations/2025-05-28-001-enlarge.js.map +1 -1
- package/dist/cjs/src/storage/knex/migrations/2026-05-29-001-brc136-basm.js +114 -0
- package/dist/cjs/src/storage/knex/migrations/2026-05-29-001-brc136-basm.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +1 -0
- package/dist/esm/mod.js.map +1 -1
- package/dist/esm/src/BASM.js +85 -0
- package/dist/esm/src/BASM.js.map +1 -0
- package/dist/esm/src/BASMRemote.js +42 -0
- package/dist/esm/src/BASMRemote.js.map +1 -0
- package/dist/esm/src/Engine.js +637 -46
- package/dist/esm/src/Engine.js.map +1 -1
- package/dist/esm/src/GASP/OverlayGASPRemote.js +2 -2
- package/dist/esm/src/GASP/OverlayGASPRemote.js.map +1 -1
- package/dist/esm/src/GASP/OverlayGASPStorage.js +18 -25
- package/dist/esm/src/GASP/OverlayGASPStorage.js.map +1 -1
- package/dist/esm/src/storage/knex/KnexStorage.js +323 -12
- package/dist/esm/src/storage/knex/KnexStorage.js.map +1 -1
- package/dist/esm/src/storage/knex/all-migrations.js +3 -1
- package/dist/esm/src/storage/knex/all-migrations.js.map +1 -1
- package/dist/esm/src/storage/knex/migrations/2025-05-28-001-enlarge.js +2 -24
- package/dist/esm/src/storage/knex/migrations/2025-05-28-001-enlarge.js.map +1 -1
- package/dist/esm/src/storage/knex/migrations/2026-05-29-001-brc136-basm.js +109 -0
- package/dist/esm/src/storage/knex/migrations/2026-05-29-001-brc136-basm.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +2 -0
- package/dist/types/mod.d.ts.map +1 -1
- package/dist/types/src/BASM.d.ts +110 -0
- package/dist/types/src/BASM.d.ts.map +1 -0
- package/dist/types/src/BASMRemote.d.ts +14 -0
- package/dist/types/src/BASMRemote.d.ts.map +1 -0
- package/dist/types/src/Engine.d.ts +78 -1
- package/dist/types/src/Engine.d.ts.map +1 -1
- package/dist/types/src/GASP/OverlayGASPStorage.d.ts +1 -1
- package/dist/types/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
- package/dist/types/src/LookupService.d.ts.map +1 -1
- package/dist/types/src/storage/Storage.d.ts +118 -0
- package/dist/types/src/storage/Storage.d.ts.map +1 -1
- package/dist/types/src/storage/knex/KnexStorage.d.ts +38 -6
- 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/2025-05-28-001-enlarge.d.ts.map +1 -1
- package/dist/types/src/storage/knex/migrations/2026-05-29-001-brc136-basm.d.ts +4 -0
- package/dist/types/src/storage/knex/migrations/2026-05-29-001-brc136-basm.d.ts.map +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/docs/API.md +72 -580
- package/docs/BRC-136-BASM.md +285 -0
- package/docs/README.md +2 -0
- package/docs/Synchronization.md +10 -1
- package/docs/examples/README.md +2 -2
- package/docs/examples/gs-wip.md +68 -76
- package/mod.ts +25 -1
- package/package.json +25 -23
- package/src/BASM.ts +208 -0
- package/src/BASMRemote.ts +54 -0
- package/src/Engine.ts +762 -47
- package/src/GASP/OverlayGASPRemote.ts +2 -2
- package/src/GASP/OverlayGASPStorage.ts +17 -22
- package/src/LookupService.ts +2 -1
- package/src/__tests/BASM.test.ts +44 -0
- package/src/__tests/BASMChain.test.ts +290 -0
- package/src/__tests/Engine.test.ts +3 -4
- package/src/storage/Storage.ts +127 -0
- package/src/storage/knex/KnexStorage.ts +376 -14
- package/src/storage/knex/all-migrations.ts +3 -1
- package/src/storage/knex/migrations/2025-05-28-001-enlarge.ts +2 -22
- package/src/storage/knex/migrations/2026-05-29-001-brc136-basm.ts +123 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.up = up;
|
|
4
|
+
exports.down = down;
|
|
5
|
+
function binaryLargeType(knex) {
|
|
6
|
+
var _a;
|
|
7
|
+
const client = String((_a = knex.client.config.client) !== null && _a !== void 0 ? _a : '').toLowerCase();
|
|
8
|
+
if (client.includes('mysql'))
|
|
9
|
+
return 'longblob';
|
|
10
|
+
if (client.includes('pg'))
|
|
11
|
+
return 'bytea';
|
|
12
|
+
return 'blob';
|
|
13
|
+
}
|
|
14
|
+
async function addColumnIfMissing(knex, tableName, columnName, addColumn) {
|
|
15
|
+
const exists = await knex.schema.hasColumn(tableName, columnName);
|
|
16
|
+
if (!exists) {
|
|
17
|
+
await knex.schema.table(tableName, addColumn);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function up(knex) {
|
|
21
|
+
await addColumnIfMissing(knex, 'applied_transactions', 'blockHeight', table => {
|
|
22
|
+
table.integer('blockHeight').unsigned().nullable();
|
|
23
|
+
});
|
|
24
|
+
await addColumnIfMissing(knex, 'applied_transactions', 'blockHash', table => {
|
|
25
|
+
table.string('blockHash', 64).nullable();
|
|
26
|
+
});
|
|
27
|
+
await addColumnIfMissing(knex, 'applied_transactions', 'blockIndex', table => {
|
|
28
|
+
table.integer('blockIndex').unsigned().nullable();
|
|
29
|
+
});
|
|
30
|
+
await addColumnIfMissing(knex, 'applied_transactions', 'merkleRoot', table => {
|
|
31
|
+
table.string('merkleRoot', 64).nullable();
|
|
32
|
+
});
|
|
33
|
+
await addColumnIfMissing(knex, 'applied_transactions', 'firstSeenHeight', table => {
|
|
34
|
+
table.integer('firstSeenHeight').unsigned().nullable();
|
|
35
|
+
});
|
|
36
|
+
await addColumnIfMissing(knex, 'applied_transactions', 'proven', table => {
|
|
37
|
+
table.boolean('proven').notNullable().defaultTo(false);
|
|
38
|
+
});
|
|
39
|
+
await addColumnIfMissing(knex, 'transactions', 'rawTx', table => {
|
|
40
|
+
table.specificType('rawTx', binaryLargeType(knex)).nullable();
|
|
41
|
+
});
|
|
42
|
+
await addColumnIfMissing(knex, 'transactions', 'merklePath', table => {
|
|
43
|
+
table.specificType('merklePath', binaryLargeType(knex)).nullable();
|
|
44
|
+
});
|
|
45
|
+
await addColumnIfMissing(knex, 'transactions', 'blockHeight', table => {
|
|
46
|
+
table.integer('blockHeight').unsigned().nullable();
|
|
47
|
+
});
|
|
48
|
+
await addColumnIfMissing(knex, 'transactions', 'blockHash', table => {
|
|
49
|
+
table.string('blockHash', 64).nullable();
|
|
50
|
+
});
|
|
51
|
+
await addColumnIfMissing(knex, 'transactions', 'blockIndex', table => {
|
|
52
|
+
table.integer('blockIndex').unsigned().nullable();
|
|
53
|
+
});
|
|
54
|
+
await addColumnIfMissing(knex, 'transactions', 'merkleRoot', table => {
|
|
55
|
+
table.string('merkleRoot', 64).nullable();
|
|
56
|
+
});
|
|
57
|
+
await addColumnIfMissing(knex, 'transactions', 'updatedAt', table => {
|
|
58
|
+
table.timestamp('updatedAt').nullable();
|
|
59
|
+
});
|
|
60
|
+
const topicBlockAnchorsExists = await knex.schema.hasTable('topic_block_anchors');
|
|
61
|
+
if (!topicBlockAnchorsExists) {
|
|
62
|
+
await knex.schema.createTable('topic_block_anchors', table => {
|
|
63
|
+
table.increments();
|
|
64
|
+
table.string('topic').notNullable();
|
|
65
|
+
table.integer('blockHeight').unsigned().notNullable();
|
|
66
|
+
table.string('blockHash', 64).notNullable();
|
|
67
|
+
table.string('basmRoot', 64).notNullable();
|
|
68
|
+
table.integer('admittedCount').unsigned().notNullable();
|
|
69
|
+
table.string('tac', 64).notNullable();
|
|
70
|
+
table.timestamp('updatedAt').nullable();
|
|
71
|
+
table.unique(['topic', 'blockHeight'], 'idx_topic_block_anchors_topic_height_unique');
|
|
72
|
+
table.index(['topic', 'blockHeight'], 'idx_topic_block_anchors_topic_height');
|
|
73
|
+
table.index(['topic', 'blockHash'], 'idx_topic_block_anchors_topic_hash');
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const syncStateExists = await knex.schema.hasTable('basm_sync_state');
|
|
77
|
+
if (!syncStateExists) {
|
|
78
|
+
await knex.schema.createTable('basm_sync_state', table => {
|
|
79
|
+
table.string('host').notNullable();
|
|
80
|
+
table.string('topic').notNullable();
|
|
81
|
+
table.integer('lastHeight').unsigned().notNullable().defaultTo(0);
|
|
82
|
+
table.timestamp('updatedAt').nullable();
|
|
83
|
+
table.primary(['host', 'topic']);
|
|
84
|
+
table.index('topic');
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const appliedTopicHeightIndex = 'idx_applied_transactions_topic_height';
|
|
88
|
+
const hasAppliedTopicHeightIndex = await knex.schema.hasTable('applied_transactions');
|
|
89
|
+
if (hasAppliedTopicHeightIndex) {
|
|
90
|
+
await knex.schema.table('applied_transactions', table => {
|
|
91
|
+
table.index(['topic', 'blockHeight', 'blockHash', 'blockIndex'], appliedTopicHeightIndex);
|
|
92
|
+
table.index(['topic', 'proven', 'firstSeenHeight'], 'idx_applied_transactions_unproven');
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function down(knex) {
|
|
97
|
+
await knex.schema.dropTableIfExists('basm_sync_state');
|
|
98
|
+
await knex.schema.dropTableIfExists('topic_block_anchors');
|
|
99
|
+
await knex.schema.table('applied_transactions', table => {
|
|
100
|
+
table.dropIndex(['topic', 'blockHeight', 'blockHash', 'blockIndex'], 'idx_applied_transactions_topic_height');
|
|
101
|
+
table.dropIndex(['topic', 'proven', 'firstSeenHeight'], 'idx_applied_transactions_unproven');
|
|
102
|
+
});
|
|
103
|
+
for (const column of ['updatedAt', 'merkleRoot', 'blockIndex', 'blockHash', 'blockHeight', 'merklePath', 'rawTx']) {
|
|
104
|
+
if (await knex.schema.hasColumn('transactions', column)) {
|
|
105
|
+
await knex.schema.table('transactions', table => table.dropColumn(column));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
for (const column of ['proven', 'firstSeenHeight', 'merkleRoot', 'blockIndex', 'blockHash', 'blockHeight']) {
|
|
109
|
+
if (await knex.schema.hasColumn('applied_transactions', column)) {
|
|
110
|
+
await knex.schema.table('applied_transactions', table => table.dropColumn(column));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=2026-05-29-001-brc136-basm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2026-05-29-001-brc136-basm.js","sourceRoot":"","sources":["../../../../../../src/storage/knex/migrations/2026-05-29-001-brc136-basm.ts"],"names":[],"mappings":"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"}
|