@bsv/sdk 1.8.0 → 1.8.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/package.json +1 -1
- package/dist/cjs/src/kvstore/GlobalKVStore.js +420 -0
- package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -0
- package/dist/cjs/src/kvstore/LocalKVStore.js +6 -6
- package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/cjs/src/kvstore/index.js +3 -1
- package/dist/cjs/src/kvstore/index.js.map +1 -1
- package/dist/cjs/src/kvstore/kvStoreInterpreter.js +74 -0
- package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -0
- package/dist/cjs/src/kvstore/types.js +11 -0
- package/dist/cjs/src/kvstore/types.js.map +1 -0
- package/dist/cjs/src/overlay-tools/Historian.js +153 -0
- package/dist/cjs/src/overlay-tools/Historian.js.map +1 -0
- package/dist/cjs/src/script/templates/PushDrop.js +2 -2
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/kvstore/GlobalKVStore.js +416 -0
- package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -0
- package/dist/esm/src/kvstore/LocalKVStore.js +6 -6
- package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/esm/src/kvstore/index.js +1 -0
- package/dist/esm/src/kvstore/index.js.map +1 -1
- package/dist/esm/src/kvstore/kvStoreInterpreter.js +47 -0
- package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -0
- package/dist/esm/src/kvstore/types.js +8 -0
- package/dist/esm/src/kvstore/types.js.map +1 -0
- package/dist/esm/src/overlay-tools/Historian.js +155 -0
- package/dist/esm/src/overlay-tools/Historian.js.map +1 -0
- package/dist/esm/src/script/templates/PushDrop.js +2 -2
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/kvstore/GlobalKVStore.d.ts +129 -0
- package/dist/types/src/kvstore/GlobalKVStore.d.ts.map +1 -0
- package/dist/types/src/kvstore/index.d.ts +1 -0
- package/dist/types/src/kvstore/index.d.ts.map +1 -1
- package/dist/types/src/kvstore/kvStoreInterpreter.d.ts +22 -0
- package/dist/types/src/kvstore/kvStoreInterpreter.d.ts.map +1 -0
- package/dist/types/src/kvstore/types.d.ts +106 -0
- package/dist/types/src/kvstore/types.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/Historian.d.ts +92 -0
- package/dist/types/src/overlay-tools/Historian.d.ts.map +1 -0
- package/dist/types/src/script/templates/PushDrop.d.ts +6 -5
- package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +3 -3
- package/dist/umd/bundle.js.map +1 -1
- package/docs/reference/compat.md +15 -27
- package/docs/reference/identity.md +12 -16
- package/docs/reference/kvstore.md +471 -4
- package/docs/reference/messages.md +0 -8
- package/docs/reference/overlay-tools.md +15 -22
- package/docs/reference/primitives.md +168 -168
- package/docs/reference/registry.md +9 -19
- package/docs/reference/script.md +35 -48
- package/docs/reference/storage.md +10 -14
- package/docs/reference/totp.md +5 -5
- package/docs/reference/transaction.md +117 -69
- package/docs/reference/wallet.md +131 -135
- package/package.json +1 -1
- package/src/kvstore/GlobalKVStore.ts +478 -0
- package/src/kvstore/LocalKVStore.ts +7 -7
- package/src/kvstore/__tests/GlobalKVStore.test.ts +965 -0
- package/src/kvstore/__tests/LocalKVStore.test.ts +72 -0
- package/src/kvstore/index.ts +1 -0
- package/src/kvstore/kvStoreInterpreter.ts +49 -0
- package/src/kvstore/types.ts +114 -0
- package/src/overlay-tools/Historian.ts +195 -0
- package/src/overlay-tools/__tests/Historian.test.ts +690 -0
- package/src/script/templates/PushDrop.ts +6 -5
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Historian builds a chronological history (oldest → newest) of typed values by traversing
|
|
3
|
+
* a transaction's input ancestry and interpreting each output with a provided interpreter.
|
|
4
|
+
*
|
|
5
|
+
* Core ideas:
|
|
6
|
+
* - You provide an interpreter `(tx, outputIndex) => T | undefined` that decodes one output
|
|
7
|
+
* into your domain value (e.g., kvstore entries). If it returns `undefined`, that output
|
|
8
|
+
* contributes nothing to history.
|
|
9
|
+
* - Traversal follows `Transaction.inputs[].sourceTransaction` recursively, so callers must
|
|
10
|
+
* supply transactions whose inputs have `sourceTransaction` populated (e.g., via overlay
|
|
11
|
+
* history reconstruction).
|
|
12
|
+
* - The traversal visits each transaction once (cycle-safe) and collects interpreted values
|
|
13
|
+
* in reverse-chronological order, then returns them as chronological (oldest-first).
|
|
14
|
+
* - Optional caching support: provide a `historyCache` Map to cache complete history results
|
|
15
|
+
* and avoid re-traversing identical transaction chains with the same context.
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* - Construct with an interpreter (and optional cache)
|
|
19
|
+
* - Call historian.buildHistory(tx, context) to get an array of values representing the history of a token over time.
|
|
20
|
+
*
|
|
21
|
+
* Example:
|
|
22
|
+
* const cache = new Map() // Optional: for caching repeated queries
|
|
23
|
+
* const historian = new Historian(interpreter, { historyCache: cache })
|
|
24
|
+
* const history = await historian.buildHistory(tipTransaction, context)
|
|
25
|
+
* // history: T[] (e.g., prior values for a protected kvstore key)
|
|
26
|
+
*
|
|
27
|
+
* Caching:
|
|
28
|
+
* - Cache keys are generated from `interpreterVersion|txid|contextKey`
|
|
29
|
+
* - Cached results are immutable snapshots to prevent external mutation
|
|
30
|
+
* - Bump `interpreterVersion` when interpreter semantics change to invalidate old cache entries
|
|
31
|
+
*/
|
|
32
|
+
export class Historian {
|
|
33
|
+
interpreter;
|
|
34
|
+
debug;
|
|
35
|
+
// --- minimal cache support ---
|
|
36
|
+
historyCache;
|
|
37
|
+
interpreterVersion;
|
|
38
|
+
ctxKeyFn;
|
|
39
|
+
/**
|
|
40
|
+
* Create a new Historian instance
|
|
41
|
+
*
|
|
42
|
+
* @param interpreter - Function to interpret transaction outputs into typed values
|
|
43
|
+
* @param options - Configuration options
|
|
44
|
+
* @param options.debug - Enable debug logging (default: false)
|
|
45
|
+
* @param options.historyCache - Optional external cache for complete history results
|
|
46
|
+
* @param options.interpreterVersion - Version identifier for cache invalidation (default: 'v1')
|
|
47
|
+
* @param options.ctxKeyFn - Custom function to serialize context for cache keys (default: JSON.stringify)
|
|
48
|
+
*/
|
|
49
|
+
constructor(interpreter, options) {
|
|
50
|
+
this.interpreter = interpreter;
|
|
51
|
+
this.debug = options?.debug ?? false;
|
|
52
|
+
// Configure caching (all optional)
|
|
53
|
+
this.historyCache = options?.historyCache;
|
|
54
|
+
this.interpreterVersion = options?.interpreterVersion ?? 'v1';
|
|
55
|
+
this.ctxKeyFn = options?.ctxKeyFn ?? ((ctx) => {
|
|
56
|
+
try {
|
|
57
|
+
return JSON.stringify(ctx ?? null);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
historyKey(startTransaction, context) {
|
|
65
|
+
const txid = startTransaction.id('hex');
|
|
66
|
+
const ctxKey = this.ctxKeyFn(context);
|
|
67
|
+
return `${this.interpreterVersion}|${txid}|${ctxKey}`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Build history by traversing input chain from a starting transaction
|
|
71
|
+
* Returns values in chronological order (oldest first)
|
|
72
|
+
*
|
|
73
|
+
* If caching is enabled, will first check for cached results matching the
|
|
74
|
+
* startTransaction and context. On cache miss, performs full traversal and
|
|
75
|
+
* stores the result for future queries.
|
|
76
|
+
*
|
|
77
|
+
* @param startTransaction - The transaction to start traversal from
|
|
78
|
+
* @param context - The context to pass to the interpreter
|
|
79
|
+
* @returns Array of interpreted values in chronological order
|
|
80
|
+
*/
|
|
81
|
+
async buildHistory(startTransaction, context) {
|
|
82
|
+
// --- minimal cache fast path ---
|
|
83
|
+
if (this.historyCache != null) {
|
|
84
|
+
const cacheKey = this.historyKey(startTransaction, context);
|
|
85
|
+
if (this.historyCache.has(cacheKey)) {
|
|
86
|
+
const cached = this.historyCache.get(cacheKey);
|
|
87
|
+
if (cached != null) {
|
|
88
|
+
if (this.debug)
|
|
89
|
+
console.log('[Historian] History cache hit:', cacheKey);
|
|
90
|
+
// Return a shallow copy to avoid external mutation of the cached array
|
|
91
|
+
return cached.slice();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const history = [];
|
|
96
|
+
const visited = new Set();
|
|
97
|
+
// Recursively traverse input transactions to build history
|
|
98
|
+
const traverseHistory = async (transaction) => {
|
|
99
|
+
const txid = transaction.id('hex');
|
|
100
|
+
// Prevent infinite loops
|
|
101
|
+
if (visited.has(txid)) {
|
|
102
|
+
if (this.debug) {
|
|
103
|
+
console.log(`[Historian] Skipping already visited transaction: ${txid}`);
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
visited.add(txid);
|
|
108
|
+
if (this.debug) {
|
|
109
|
+
console.log(`[Historian] Processing transaction: ${txid}`);
|
|
110
|
+
}
|
|
111
|
+
// Check all outputs in this transaction for interpretable values
|
|
112
|
+
for (let outputIndex = 0; outputIndex < transaction.outputs.length; outputIndex++) {
|
|
113
|
+
try {
|
|
114
|
+
// Try to interpret this output
|
|
115
|
+
const interpretedValue = await Promise.resolve(this.interpreter(transaction, outputIndex, context));
|
|
116
|
+
if (interpretedValue !== undefined) {
|
|
117
|
+
history.push(interpretedValue);
|
|
118
|
+
if (this.debug) {
|
|
119
|
+
console.log('[Historian] Added value to history:', interpretedValue);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (this.debug) {
|
|
125
|
+
console.log(`[Historian] Failed to interpret output ${outputIndex}:`, error);
|
|
126
|
+
}
|
|
127
|
+
// Skip outputs that can't be interpreted
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Recursively traverse input transactions
|
|
131
|
+
for (const input of transaction.inputs) {
|
|
132
|
+
if (input.sourceTransaction != null) {
|
|
133
|
+
await traverseHistory(input.sourceTransaction);
|
|
134
|
+
}
|
|
135
|
+
else if (this.debug) {
|
|
136
|
+
console.log('[Historian] Input missing sourceTransaction, skipping');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
// Start traversal from the provided transaction
|
|
141
|
+
await traverseHistory(startTransaction);
|
|
142
|
+
// History is built in reverse chronological order during traversal,
|
|
143
|
+
// so we reverse it to return oldest-first
|
|
144
|
+
const chronological = history.reverse();
|
|
145
|
+
if (this.historyCache != null) {
|
|
146
|
+
const cacheKey = this.historyKey(startTransaction, context);
|
|
147
|
+
// Store an immutable snapshot to avoid accidental external mutation
|
|
148
|
+
this.historyCache.set(cacheKey, Object.freeze(chronological.slice()));
|
|
149
|
+
if (this.debug)
|
|
150
|
+
console.log('[Historian] History cached:', cacheKey);
|
|
151
|
+
}
|
|
152
|
+
return chronological;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=Historian.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Historian.js","sourceRoot":"","sources":["../../../../src/overlay-tools/Historian.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,OAAO,SAAS;IACH,WAAW,CAA2B;IACtC,KAAK,CAAS;IAE/B,gCAAgC;IACf,YAAY,CAA4B;IACxC,kBAAkB,CAAQ;IAC1B,QAAQ,CAAqB;IAE9C;;;;;;;;;OASG;IACH,YACE,WAAsC,EACtC,OAQC;QAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAA;QAEpC,mCAAmC;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY,CAAA;QACzC,IAAI,CAAC,kBAAkB,GAAG,OAAO,EAAE,kBAAkB,IAAI,IAAI,CAAA;QAC7D,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAO,EAAE,EAAE;YAChD,IAAI;gBAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;aAAE;YAAC,MAAM;gBAAE,OAAO,EAAE,CAAA;aAAE;QAChE,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,UAAU,CAAE,gBAA6B,EAAE,OAAW;QAC5D,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACrC,OAAO,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAA;IACvD,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,YAAY,CAAE,gBAA6B,EAAE,OAAW;QAC5D,kCAAkC;QAClC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;YAC3D,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBAC9C,IAAI,MAAM,IAAI,IAAI,EAAE;oBAClB,IAAI,IAAI,CAAC,KAAK;wBAAE,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAA;oBACvE,uEAAuE;oBACvE,OAAO,MAAM,CAAC,KAAK,EAAE,CAAA;iBACtB;aACF;SACF;QAED,MAAM,OAAO,GAAQ,EAAE,CAAA;QACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;QAEjC,2DAA2D;QAC3D,MAAM,eAAe,GAAG,KAAK,EAAE,WAAwB,EAAiB,EAAE;YACxE,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YAElC,yBAAyB;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACrB,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,OAAO,CAAC,GAAG,CAAC,qDAAqD,IAAI,EAAE,CAAC,CAAA;iBACzE;gBACD,OAAM;aACP;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAEjB,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAA;aAC3D;YAED,iEAAiE;YACjE,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;gBACjF,IAAI;oBACF,+BAA+B;oBAC/B,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;oBAEnG,IAAI,gBAAgB,KAAK,SAAS,EAAE;wBAClC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;wBAC9B,IAAI,IAAI,CAAC,KAAK,EAAE;4BACd,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,gBAAgB,CAAC,CAAA;yBACrE;qBACF;iBACF;gBAAC,OAAO,KAAK,EAAE;oBACd,IAAI,IAAI,CAAC,KAAK,EAAE;wBACd,OAAO,CAAC,GAAG,CAAC,0CAA0C,WAAW,GAAG,EAAE,KAAK,CAAC,CAAA;qBAC7E;oBACD,yCAAyC;iBAC1C;aACF;YAED,0CAA0C;YAC1C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE;gBACtC,IAAI,KAAK,CAAC,iBAAiB,IAAI,IAAI,EAAE;oBACnC,MAAM,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;iBAC/C;qBAAM,IAAI,IAAI,CAAC,KAAK,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;iBACrE;aACF;QACH,CAAC,CAAA;QAED,gDAAgD;QAChD,MAAM,eAAe,CAAC,gBAAgB,CAAC,CAAA;QAEvC,oEAAoE;QACpE,0CAA0C;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAEvC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;YAC3D,oEAAoE;YACpE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YACrE,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAA;SACrE;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;CACF"}
|
|
@@ -96,7 +96,7 @@ export default class PushDrop {
|
|
|
96
96
|
* Creates a PushDrop locking script with arbitrary data fields and a public key lock.
|
|
97
97
|
*
|
|
98
98
|
* @param {number[][]} fields - The token fields to include in the locking script.
|
|
99
|
-
* @param {
|
|
99
|
+
* @param {WalletProtocol} protocolID - The protocol ID to use.
|
|
100
100
|
* @param {string} keyID - The key ID to use.
|
|
101
101
|
* @param {string} counterparty - The counterparty involved in the transaction, "self" or "anyone".
|
|
102
102
|
* @param {boolean} [forSelf=false] - Flag indicating if the lock is for the creator (default no).
|
|
@@ -148,7 +148,7 @@ export default class PushDrop {
|
|
|
148
148
|
/**
|
|
149
149
|
* Creates an unlocking script for spending a PushDrop token output.
|
|
150
150
|
*
|
|
151
|
-
* @param {
|
|
151
|
+
* @param {WalletProtocol} protocolID - The protocol ID to use.
|
|
152
152
|
* @param {string} keyID - The key ID to use.
|
|
153
153
|
* @param {string} counterparty - The counterparty involved in the transaction, "self" or "anyone".
|
|
154
154
|
* @param {string} [sourceTXID] - The TXID of the source transaction.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushDrop.js","sourceRoot":"","sources":["../../../../../src/script/templates/PushDrop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EACL,KAAK,EACL,IAAI,EACJ,oBAAoB,EACpB,SAAS,EACT,SAAS,EACV,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"PushDrop.js","sourceRoot":"","sources":["../../../../../src/script/templates/PushDrop.ts"],"names":[],"mappings":"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"}
|