@bsv/overlay 2.3.0 → 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/LICENSES/Open-BSV-License-4-standard-pre-2026.txt +28 -0
- package/README.md +171 -1
- package/THIRD_PARTY_NOTICES.md +49 -0
- package/dist/cjs/mod.d.ts +4 -1
- 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 +13 -5
- 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 +38 -13
- package/dist/cjs/src/Engine.d.ts.map +1 -1
- package/dist/cjs/src/Engine.js +1735 -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/TopicManager.d.ts +13 -3
- package/dist/cjs/src/TopicManager.d.ts.map +1 -1
- 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 +1720 -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 +4 -1
- 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 +38 -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/TopicManager.d.ts +13 -3
- package/dist/types/src/TopicManager.d.ts.map +1 -1
- 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 +14 -6
|
@@ -9,7 +9,12 @@ import { SyncConfiguration } from './SyncConfiguration.js';
|
|
|
9
9
|
import { type AdmittedListResponse, type BASMPeerSyncReport, type CompoundMerklePathResponse, type RawTransactionResponse, type ReorgReport, type TopicAnchorHeaderResolver, type TopicAnchorRangeResponse, type TopicAnchorTip } from './BASM.js';
|
|
10
10
|
type UTXOHistoryHydrationContext = {
|
|
11
11
|
outputCache: Map<string, Promise<Output | null>>;
|
|
12
|
+
budgetedOutputs: Set<string>;
|
|
13
|
+
hydratedNodes: number;
|
|
14
|
+
relationCount: number;
|
|
15
|
+
totalBeefBytes: number;
|
|
12
16
|
};
|
|
17
|
+
type SubmissionMode = 'historical-tx' | 'current-tx' | 'historical-tx-no-spv';
|
|
13
18
|
/**
|
|
14
19
|
* An engine for running BSV Overlay Services (topic managers and lookup services).
|
|
15
20
|
*/
|
|
@@ -38,6 +43,8 @@ export declare class Engine {
|
|
|
38
43
|
basmSyncEnabled: boolean;
|
|
39
44
|
unprovenEvictionBlocks: number;
|
|
40
45
|
maxLookupResults: number;
|
|
46
|
+
private submissionTail;
|
|
47
|
+
private basmFetchImpl?;
|
|
41
48
|
/**
|
|
42
49
|
* Creates a new Overlay Services Engine
|
|
43
50
|
* @param {[key: string]: TopicManager} managers - manages topic admittance
|
|
@@ -108,6 +115,7 @@ export declare class Engine {
|
|
|
108
115
|
rebuildFromHeight: number;
|
|
109
116
|
newTipHeight: number;
|
|
110
117
|
}): Promise<ReorgReport>;
|
|
118
|
+
private reconcileReorg;
|
|
111
119
|
/**
|
|
112
120
|
* Revalidation sweep: the reorg fallback for chain trackers without a reorg
|
|
113
121
|
* event stream, and the catch-up step on every reorg-SSE (re)connect (the
|
|
@@ -122,6 +130,7 @@ export declare class Engine {
|
|
|
122
130
|
private validateTopicSubmission;
|
|
123
131
|
private isTopicSubmissionAccepted;
|
|
124
132
|
private broadcastAcceptedSubmission;
|
|
133
|
+
private abortProvisionalAdmissions;
|
|
125
134
|
private notifyOutputSpent;
|
|
126
135
|
private markPreviousOutputSpent;
|
|
127
136
|
private markPreviousOutputsSpent;
|
|
@@ -133,6 +142,10 @@ export declare class Engine {
|
|
|
133
142
|
private applyTopicStorageMutation;
|
|
134
143
|
private applyStorageMutations;
|
|
135
144
|
private propagateSubmission;
|
|
145
|
+
private assertSupportedTopics;
|
|
146
|
+
private shouldSkipPropagation;
|
|
147
|
+
private notifySteakReady;
|
|
148
|
+
private acknowledgeOverlayAdmission;
|
|
136
149
|
/**
|
|
137
150
|
* Submits a transaction for processing by Overlay Services.
|
|
138
151
|
* @param {TaggedBEEF} taggedBEEF - The transaction to process
|
|
@@ -140,11 +153,13 @@ export declare class Engine {
|
|
|
140
153
|
* @param {string} mode — Indicates the submission behavior, whether historical or current. Historical transactions are not broadcast or propagated.
|
|
141
154
|
* @param {number[]} offChainValues — Values necessary to evaluate topical admittance that are not stored on-chain.
|
|
142
155
|
*
|
|
143
|
-
* The optional callback
|
|
156
|
+
* The optional callback is invoked after any required transaction broadcast and
|
|
157
|
+
* local storage mutations have completed, but before peer-to-peer propagation.
|
|
144
158
|
*
|
|
145
159
|
* @returns {Promise<STEAK>} The submitted transaction execution acknowledgement
|
|
146
160
|
*/
|
|
147
|
-
submit(taggedBEEF: TaggedBEEF, onSteakReady?: (steak: STEAK) => void, mode?:
|
|
161
|
+
submit(taggedBEEF: TaggedBEEF, onSteakReady?: (steak: STEAK) => void, mode?: SubmissionMode, offChainValues?: number[]): Promise<STEAK>;
|
|
162
|
+
private submitUnlocked;
|
|
148
163
|
/**
|
|
149
164
|
* Submit a lookup question to the Overlay Services Engine, and receive back a Lookup Answer
|
|
150
165
|
* @param LookupQuestion — The question to ask the Overlay Services Engine
|
|
@@ -153,6 +168,8 @@ export declare class Engine {
|
|
|
153
168
|
lookup(lookupQuestion: LookupQuestion): Promise<LookupAnswer>;
|
|
154
169
|
private createUTXOHistoryHydrationContext;
|
|
155
170
|
private toOutputCacheKey;
|
|
171
|
+
private assertLookupFormula;
|
|
172
|
+
private validateLookupOutput;
|
|
156
173
|
private preloadOutputsWithBEEF;
|
|
157
174
|
private loadOutputWithBEEF;
|
|
158
175
|
private hydrateUTXOHistoryNode;
|
|
@@ -175,6 +192,7 @@ export declare class Engine {
|
|
|
175
192
|
* @throws Will throw an error if there are issues during the advertisement synchronization process.
|
|
176
193
|
* @returns {Promise<void>} A promise that resolves when the synchronization process is complete.
|
|
177
194
|
*/
|
|
195
|
+
private validateCurrentAdvertisements;
|
|
178
196
|
syncAdvertisements(): Promise<void>;
|
|
179
197
|
/**
|
|
180
198
|
* This method goes through each topic that we support syncing and attempts to sync with each endpoint
|
|
@@ -186,13 +204,23 @@ export declare class Engine {
|
|
|
186
204
|
startGASPSync(): Promise<void>;
|
|
187
205
|
private syncGASPWithPeer;
|
|
188
206
|
private resolveSyncEndpointsForTopic;
|
|
207
|
+
private assertSupportedBASMTopic;
|
|
208
|
+
private assertTopicAnchorTip;
|
|
209
|
+
private assertTopicBlockAnchor;
|
|
189
210
|
provideTopicAnchorTip(topic: string): Promise<TopicAnchorTip>;
|
|
190
211
|
provideTopicAnchorRange(topic: string, fromHeight: number, toHeight: number): Promise<TopicAnchorRangeResponse>;
|
|
191
212
|
provideAdmittedList(topic: string, blockHeight: number, blockHash?: string): Promise<AdmittedListResponse>;
|
|
192
213
|
provideCompoundMerklePath(topic: string, blockHeight: number, txids: string[]): Promise<CompoundMerklePathResponse>;
|
|
193
|
-
provideRawTransactions(txids: string[]): Promise<RawTransactionResponse>;
|
|
214
|
+
provideRawTransactions(txids: string[], topic?: string): Promise<RawTransactionResponse>;
|
|
194
215
|
startBASMSync(): Promise<BASMPeerSyncReport[]>;
|
|
195
216
|
private reconcileBASMWithPeer;
|
|
217
|
+
private requireMatchingRemoteBASMTip;
|
|
218
|
+
private finishBASMWhenRemoteIsNotAhead;
|
|
219
|
+
private requireBASMRangePrefix;
|
|
220
|
+
private advanceBASMWithRemoteAnchors;
|
|
221
|
+
private markBASMPeerSyncError;
|
|
222
|
+
private requireCanonicalBASMAnchor;
|
|
223
|
+
private validateBASMProofPositions;
|
|
196
224
|
private reconcileRemoteAnchor;
|
|
197
225
|
private fetchBASMMissingTransactions;
|
|
198
226
|
evictUnprovenTransactions(options?: {
|
|
@@ -222,6 +250,7 @@ export declare class Engine {
|
|
|
222
250
|
error: string;
|
|
223
251
|
}>;
|
|
224
252
|
}>;
|
|
253
|
+
private validateUnprovenCandidates;
|
|
225
254
|
maintainUnprovenTransactions(options: {
|
|
226
255
|
topic?: string;
|
|
227
256
|
thresholdBlocks?: number;
|
|
@@ -278,7 +307,7 @@ export declare class Engine {
|
|
|
278
307
|
* @returns A promise that resolves to a GASPNode containing the raw transaction and other optional data.
|
|
279
308
|
* @throws An error if no output is found for the given transaction ID and output index.
|
|
280
309
|
*/
|
|
281
|
-
provideForeignGASPNode(graphID: string, txid: string, outputIndex: number): Promise<GASPNode>;
|
|
310
|
+
provideForeignGASPNode(graphID: string, txid: string, outputIndex: number, topic?: string): Promise<GASPNode>;
|
|
282
311
|
/**
|
|
283
312
|
* Traverse and return the history of a UTXO.
|
|
284
313
|
*
|
|
@@ -293,7 +322,7 @@ export declare class Engine {
|
|
|
293
322
|
* @param {number} [currentDepth=0] - The current depth of the traversal relative to the top-level UTXO.
|
|
294
323
|
*
|
|
295
324
|
* @returns {Promise<Output | undefined>} - A promise that resolves to the output history if found, or undefined if not.
|
|
296
|
-
|
|
325
|
+
*/
|
|
297
326
|
getUTXOHistory(output: Output, historySelector?: ((beef: number[], outputIndex: number, currentDepth: number) => Promise<boolean>) | number, currentDepth?: number, context?: UTXOHistoryHydrationContext): Promise<Output | undefined>;
|
|
298
327
|
/**
|
|
299
328
|
* Delete a UTXO and all stale consumed inputs.
|
|
@@ -301,6 +330,8 @@ export declare class Engine {
|
|
|
301
330
|
* @returns {Promise<void>} - A promise that resolves when the deletion process is complete.
|
|
302
331
|
*/
|
|
303
332
|
private deleteUTXODeep;
|
|
333
|
+
private assertStoredOutputRelations;
|
|
334
|
+
private assertStoredOutputMatches;
|
|
304
335
|
/**
|
|
305
336
|
* Given a new transaction proof (txid, proof),
|
|
306
337
|
* update tx.merklePath if appropriate,
|
|
@@ -311,14 +342,8 @@ export declare class Engine {
|
|
|
311
342
|
* @param proof for txid
|
|
312
343
|
*/
|
|
313
344
|
private updateInputProofs;
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
*
|
|
317
|
-
* @param output - An output derived from txid which may benefit from new proof.
|
|
318
|
-
* @param txid - The txid for which proof is a valid merkle path.
|
|
319
|
-
* @param proof - The merklePath proving txid is a mined transaction hash
|
|
320
|
-
*/
|
|
321
|
-
private updateMerkleProof;
|
|
345
|
+
private prepareMerkleProofUpdate;
|
|
346
|
+
private collectMerkleProofOutputs;
|
|
322
347
|
/**
|
|
323
348
|
* Recursively prune UTXOs when an incoming Merkle Proof is received.
|
|
324
349
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../../src/Engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { Transaction } from '@bsv/sdk';
|
|
2
|
+
import { type AdmissionCommit, type AdmissionCommitResult, type AdmissionPayloadRef, type AdmissionStorage, type HistoryFence, type StorageScope } from './storage/AdmissionStorage.js';
|
|
3
|
+
import type { Output } from './Output.js';
|
|
4
|
+
import type { LookupService } from './LookupService.js';
|
|
5
|
+
export declare const OVERLAY_ENGINE_POLICY_ID = "overlay-engine-submit-v1";
|
|
6
|
+
export type OverlayAdmissionMode = 'live' | 'historical';
|
|
7
|
+
type TopicValidationLike = {
|
|
8
|
+
topic: string;
|
|
9
|
+
isDupe: boolean;
|
|
10
|
+
previousCoins: number[];
|
|
11
|
+
previousOutputs: Array<Output | null>;
|
|
12
|
+
admissibleOutputs: {
|
|
13
|
+
outputsToAdmit: number[];
|
|
14
|
+
coinsToRetain: number[];
|
|
15
|
+
coinsRemoved?: number[];
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export interface OverlayAdmissionHost {
|
|
19
|
+
admission: AdmissionStorage;
|
|
20
|
+
admissionScope: StorageScope;
|
|
21
|
+
publishAdmissionPayload?: (input: {
|
|
22
|
+
kind: AdmissionPayloadRef['kind'];
|
|
23
|
+
bytes: Uint8Array;
|
|
24
|
+
txid?: string;
|
|
25
|
+
}) => Promise<AdmissionPayloadRef>;
|
|
26
|
+
enlistedIndexTargets?: () => readonly string[];
|
|
27
|
+
getHistoryFence?: (topic: string) => Promise<HistoryFence>;
|
|
28
|
+
}
|
|
29
|
+
export declare function getOverlayAdmissionHost(storage: unknown): OverlayAdmissionHost | undefined;
|
|
30
|
+
export declare function overlayAdmissionContextDigest(offChainValues?: number[]): string;
|
|
31
|
+
export declare function overlayAdmissionOperationId(_mode: OverlayAdmissionMode, txid: string, topics: string[]): string;
|
|
32
|
+
export declare function overlayAdmissionMode(mode: 'historical-tx' | 'current-tx' | 'historical-tx-no-spv'): OverlayAdmissionMode;
|
|
33
|
+
/**
|
|
34
|
+
* Selects the topics that require a new admission decision: topics that did
|
|
35
|
+
* not fail validation, are not already-applied dupes, and actually admit or
|
|
36
|
+
* retain something (or consume a previously-admitted coin). Already-applied
|
|
37
|
+
* (dupe) topics are excluded so that a retry — including a historical GASP
|
|
38
|
+
* replay after a live admit, or a multi-topic resubmit where only some
|
|
39
|
+
* topics were previously applied — never re-submits an admission decision
|
|
40
|
+
* for a topic that MongoAdmissionStorage.assertAppliedAvailable would reject
|
|
41
|
+
* as belonging to a different operation.
|
|
42
|
+
*/
|
|
43
|
+
export declare function selectNewAdmissionTopics<T extends TopicValidationLike>(validations: readonly T[], failedTopics: Set<string>): T[];
|
|
44
|
+
export declare function buildOverlayAdmissionPlan(input: {
|
|
45
|
+
host: OverlayAdmissionHost;
|
|
46
|
+
tx: Transaction;
|
|
47
|
+
txid: string;
|
|
48
|
+
beef: number[];
|
|
49
|
+
topics: string[];
|
|
50
|
+
mode: OverlayAdmissionMode;
|
|
51
|
+
offChainValues?: number[];
|
|
52
|
+
validations: TopicValidationLike[];
|
|
53
|
+
failedTopics: Set<string>;
|
|
54
|
+
lookupServices: {
|
|
55
|
+
[key: string]: LookupService;
|
|
56
|
+
};
|
|
57
|
+
includePropagation: boolean;
|
|
58
|
+
applied?: {
|
|
59
|
+
firstSeenHeight?: number;
|
|
60
|
+
blockHeight?: number;
|
|
61
|
+
blockHash?: string;
|
|
62
|
+
blockIndex?: number;
|
|
63
|
+
merkleRoot?: string;
|
|
64
|
+
};
|
|
65
|
+
}): Promise<AdmissionCommit>;
|
|
66
|
+
export declare function waitForAdmissionReceipt(admission: AdmissionStorage, plan: AdmissionCommit, rebuild: () => Promise<AdmissionCommit>): Promise<AdmissionCommitResult & {
|
|
67
|
+
state: 'committed';
|
|
68
|
+
}>;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=EngineAdmission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EngineAdmission.d.ts","sourceRoot":"","sources":["../../../src/EngineAdmission.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { GASPInitialReply, GASPInitialRequest, GASPInitialResponse, GASPNode, GASPNodeResponse, GASPRemote } from '@bsv/gasp';
|
|
2
2
|
export declare class OverlayGASPRemote implements GASPRemote {
|
|
3
|
-
endpointURL: string;
|
|
4
|
-
topic: string;
|
|
5
|
-
|
|
3
|
+
readonly endpointURL: string;
|
|
4
|
+
readonly topic: string;
|
|
5
|
+
private readonly fetchImpl;
|
|
6
|
+
constructor(endpointURL: string, topic: string, fetchImpl?: typeof fetch);
|
|
6
7
|
/**
|
|
7
8
|
* Given an outgoing initial request, sends the request to the foreign instance and obtains their initial response.
|
|
8
9
|
* @param request
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayGASPRemote.d.ts","sourceRoot":"","sources":["../../../../src/GASP/OverlayGASPRemote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"OverlayGASPRemote.d.ts","sourceRoot":"","sources":["../../../../src/GASP/OverlayGASPRemote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAe7H,qBAAa,iBAAkB,YAAW,UAAU;IAClD,SAAgB,WAAW,EAAE,MAAM,CAAA;IACnC,SAAgB,KAAK,EAAE,MAAM,CAAA;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IAExC,YAAa,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,EAMxE;IAED;;;;OAIG;IACG,kBAAkB,CAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmBnF;IAED;;;;;;;OAOG;IACG,WAAW,CAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyB3G;IAKK,eAAe,CAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEhF;IAIK,UAAU,CAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAExE;CACF"}
|
|
@@ -22,14 +22,20 @@ export declare class OverlayGASPStorage implements GASPStorage {
|
|
|
22
22
|
topic: string;
|
|
23
23
|
engine: Engine;
|
|
24
24
|
maxNodesInGraph?: number | undefined;
|
|
25
|
+
maxBytesInGraph: number;
|
|
25
26
|
readonly temporaryGraphNodeRefs: Record<string, GraphNode>;
|
|
27
|
+
private readonly graphNodeCounts;
|
|
28
|
+
private readonly graphByteCounts;
|
|
26
29
|
private static activeAnchorValidations;
|
|
27
30
|
private static readonly anchorValidationQueue;
|
|
28
31
|
private static activeFinalizations;
|
|
29
32
|
private static readonly finalizationQueue;
|
|
30
33
|
private static readonly MAX_CONCURRENT_ANCHOR_VALIDATIONS;
|
|
31
34
|
private static readonly MAX_CONCURRENT_FINALIZATIONS;
|
|
32
|
-
constructor(topic: string, engine: Engine, maxNodesInGraph?: number | undefined);
|
|
35
|
+
constructor(topic: string, engine: Engine, maxNodesInGraph?: number | undefined, maxBytesInGraph?: number);
|
|
36
|
+
private graphNodeKey;
|
|
37
|
+
private graphNode;
|
|
38
|
+
private nodeByteLength;
|
|
33
39
|
private static acquireAnchorValidationSlot;
|
|
34
40
|
private static releaseAnchorValidationSlot;
|
|
35
41
|
private static acquireFinalizationSlot;
|
|
@@ -50,10 +56,10 @@ export declare class OverlayGASPStorage implements GASPStorage {
|
|
|
50
56
|
*/
|
|
51
57
|
hydrateGASPNode(graphID: string, txid: string, outputIndex: number, _metadata: boolean): Promise<GASPNode>;
|
|
52
58
|
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
* For a given node, returns the inputs needed to complete the graph, including whether updated metadata is requested for those inputs.
|
|
60
|
+
* @param tx The node for which needed inputs should be found.
|
|
61
|
+
* @returns A promise for a mapping of requested input transactions and whether metadata should be provided for each.
|
|
62
|
+
*/
|
|
57
63
|
findNeededInputs(tx: GASPNode): Promise<GASPNodeResponse | undefined>;
|
|
58
64
|
/**
|
|
59
65
|
* Ensures that no inputs are requested from foreign nodes before sending any GASP response
|
|
@@ -61,21 +67,21 @@ export declare class OverlayGASPStorage implements GASPStorage {
|
|
|
61
67
|
*/
|
|
62
68
|
private stripAlreadyKnownInputs;
|
|
63
69
|
/**
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
* Appends a new node to a temporary graph.
|
|
71
|
+
* @param tx The node to append to this graph.
|
|
72
|
+
* @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.
|
|
73
|
+
* @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.
|
|
74
|
+
*/
|
|
69
75
|
appendToGraph(tx: GASPNode, spentBy?: string | undefined): Promise<void>;
|
|
70
76
|
private previousCoinIndexes;
|
|
71
77
|
private admitHistoricalBEEF;
|
|
72
78
|
/**
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
* 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.
|
|
80
|
+
* 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,
|
|
81
|
+
* while considering any coins which the Manager had previously indicated were either valid or invalid.
|
|
82
|
+
* @param graphID The TXID and output index (in 36-byte format) for the UTXO at the tip of this graph.
|
|
83
|
+
* @throws If the graph is not well-anchored, according to the rules of Bitcoin or the rules of the Overlay Topic Manager.
|
|
84
|
+
*/
|
|
79
85
|
validateGraphAnchor(graphID: string): Promise<void>;
|
|
80
86
|
/**
|
|
81
87
|
* Deletes all data associated with a temporary graph that has failed to sync, if the graph exists.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayGASPStorage.d.ts","sourceRoot":"","sources":["../../../../src/GASP/OverlayGASPStorage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OverlayGASPStorage.d.ts","sourceRoot":"","sources":["../../../../src/GASP/OverlayGASPStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Transaction, type AdmittanceInstructions } from '@bsv/sdk';
|
|
2
|
+
export declare const MAX_GASP_PAGE_SIZE = 10000;
|
|
3
|
+
export declare const MAX_BASM_TXIDS = 256;
|
|
4
|
+
export declare const MAX_REMOTE_JSON_BYTES: number;
|
|
5
|
+
export declare const MAX_GASP_NODE_JSON_BYTES: number;
|
|
6
|
+
export declare const MAX_RAW_TRANSACTION_BYTES: number;
|
|
7
|
+
export declare const REMOTE_BODY_TIMEOUT_MS = 30000;
|
|
8
|
+
export declare function validateAdmittanceInstructions(value: unknown, tx: Transaction, previousCoins: number[]): AdmittanceInstructions;
|
|
9
|
+
export declare function assertTopic(topic: unknown, label?: string): asserts topic is string;
|
|
10
|
+
export declare function assertRegistryName(value: unknown, label: string): asserts value is string;
|
|
11
|
+
export declare function assertHash(value: unknown, label: string): asserts value is string;
|
|
12
|
+
export declare function assertOutputIndex(value: unknown, label: string): asserts value is number;
|
|
13
|
+
export declare function assertNonnegativeInteger(value: unknown, label: string): asserts value is number;
|
|
14
|
+
export declare function assertOutpoint(value: unknown, label: string): asserts value is string;
|
|
15
|
+
export declare function assertHexBytes(value: unknown, label: string, maxBytes: number, allowEmpty?: boolean): asserts value is string;
|
|
16
|
+
export declare function assertTxidList(value: unknown, label: string, options?: {
|
|
17
|
+
allowEmpty?: boolean;
|
|
18
|
+
max?: number;
|
|
19
|
+
}): asserts value is string[];
|
|
20
|
+
export declare function normalizePeerEndpoint(endpoint: string): string;
|
|
21
|
+
export declare function securePeerFetch(endpoint: string, supplied?: typeof fetch): {
|
|
22
|
+
endpoint: string;
|
|
23
|
+
fetchImpl: typeof fetch;
|
|
24
|
+
};
|
|
25
|
+
export declare function readPeerJSON(response: Response, maxBytes?: number): Promise<unknown>;
|
|
26
|
+
export declare function assertGASPInitialResponse(value: unknown, maxOutputs: number): asserts value is {
|
|
27
|
+
UTXOList: Array<{
|
|
28
|
+
txid: string;
|
|
29
|
+
outputIndex: number;
|
|
30
|
+
score: number;
|
|
31
|
+
}>;
|
|
32
|
+
since: number;
|
|
33
|
+
};
|
|
34
|
+
export declare function assertGASPNode(value: unknown, expected: {
|
|
35
|
+
graphID: string;
|
|
36
|
+
txid: string;
|
|
37
|
+
outputIndex: number;
|
|
38
|
+
}): asserts value is {
|
|
39
|
+
graphID: string;
|
|
40
|
+
rawTx: string;
|
|
41
|
+
outputIndex: number;
|
|
42
|
+
proof?: string;
|
|
43
|
+
txMetadata?: string;
|
|
44
|
+
outputMetadata?: string;
|
|
45
|
+
inputs?: Record<string, {
|
|
46
|
+
hash: string;
|
|
47
|
+
}>;
|
|
48
|
+
};
|
|
49
|
+
export declare function assertRawTransactionMatches(txid: string, rawTx: string): void;
|
|
50
|
+
//# sourceMappingURL=RemoteSecurity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteSecurity.d.ts","sourceRoot":"","sources":["../../../src/RemoteSecurity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0B,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAE3F,eAAO,MAAM,kBAAkB,QAAS,CAAA;AACxC,eAAO,MAAM,cAAc,MAAM,CAAA;AACjC,eAAO,MAAM,qBAAqB,QAAmB,CAAA;AACrD,eAAO,MAAM,wBAAwB,QAAmB,CAAA;AACxD,eAAO,MAAM,yBAAyB,QAAmB,CAAA;AACzD,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAe5C,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,EACd,EAAE,EAAE,WAAW,EACf,aAAa,EAAE,MAAM,EAAE,GACtB,sBAAsB,CA+BxB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAU,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAYpF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAKzF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAIjF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAIxF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAI/F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAQrF;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,UAAU,UAAQ,GACjB,OAAO,CAAC,KAAK,IAAI,MAAM,CASzB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,CAc3B;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAc9D;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,OAAO,KAAK,GACtB;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,KAAK,CAAA;CACxB,CAMA;AA+DD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,SAAwB,GAC/B,OAAO,CAAC,OAAO,CAAC,CA2BlB;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,IAAI;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrE,KAAK,EAAE,MAAM,CAAA;CACd,CAgBA;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAAC,KAAK,IAAI;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1C,CAuCA;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAY7E"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { AdmittanceInstructions } from '@bsv/sdk';
|
|
2
|
+
export interface TopicAdmittanceContext {
|
|
3
|
+
/** Validate protocol shape without creating provisional external state. */
|
|
4
|
+
dryRun?: boolean;
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
7
|
* Defines a Topic Manager interface that can be implemented for specific use-cases
|
|
4
8
|
*/
|
|
@@ -8,7 +12,13 @@ export interface TopicManager {
|
|
|
8
12
|
* Accepts the transaction in BEEF format and an array of those input indices which spend previously-admitted outputs from the same topic.
|
|
9
13
|
* The transaction's BEEF structure will always contain the transactions associated with previous coins for reference (if any), regardless of whether the current transaction was directly proven.
|
|
10
14
|
*/
|
|
11
|
-
identifyAdmissibleOutputs: (beef: number[], previousCoins: number[], offChainValues?: number[], mode?: 'historical-tx' | 'current-tx' | 'historical-tx-no-spv') => Promise<AdmittanceInstructions>;
|
|
15
|
+
identifyAdmissibleOutputs: (beef: number[], previousCoins: number[], offChainValues?: number[], mode?: 'historical-tx' | 'current-tx' | 'historical-tx-no-spv', context?: TopicAdmittanceContext) => Promise<AdmittanceInstructions>;
|
|
16
|
+
/**
|
|
17
|
+
* Releases provisional state created while identifying admissible outputs
|
|
18
|
+
* when a current transaction cannot be broadcast. Implementations that keep
|
|
19
|
+
* validation read-only do not need this hook.
|
|
20
|
+
*/
|
|
21
|
+
abortAdmissibleOutputs?: (beef: number[], outputsToAbort: number[]) => Promise<void> | void;
|
|
12
22
|
/**
|
|
13
23
|
* Identifies and returns the inputs needed to anchor any topical outputs from this transaction to their associated previous history.
|
|
14
24
|
* @throws - if there are no potentially valid topical outputs in this transaction
|
|
@@ -18,8 +28,8 @@ export interface TopicManager {
|
|
|
18
28
|
outputIndex: number;
|
|
19
29
|
}>>;
|
|
20
30
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
31
|
+
* Returns a Markdown-formatted documentation string for the topic manager.
|
|
32
|
+
*/
|
|
23
33
|
getDocumentation: () => Promise<string>;
|
|
24
34
|
/**
|
|
25
35
|
* Returns a metadata object that can be used to identify the topic manager.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopicManager.d.ts","sourceRoot":"","sources":["../../../src/TopicManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,yBAAyB,EAAE,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,aAAa,EAAE,MAAM,EAAE,EACvB,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,IAAI,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"TopicManager.d.ts","sourceRoot":"","sources":["../../../src/TopicManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEjD,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,yBAAyB,EAAE,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,aAAa,EAAE,MAAM,EAAE,EACvB,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,IAAI,CAAC,EAAE,eAAe,GAAG,YAAY,GAAG,sBAAsB,EAC9D,OAAO,CAAC,EAAE,sBAAsB,KAC7B,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAEpC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAE3F;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CACrB,IAAI,EAAE,MAAM,EAAE,EACd,cAAc,CAAC,EAAE,MAAM,EAAE,KACtB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;IAE1D;;OAEG;IACH,gBAAgB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAEvC;;OAEG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC;QACzB,IAAI,EAAE,MAAM,CAAA;QACZ,gBAAgB,EAAE,MAAM,CAAA;QACxB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAC,CAAA;CACH"}
|