@bsv/sdk 1.6.6 → 1.6.7
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/LocalKVStore.js +74 -45
- package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/kvstore/LocalKVStore.js +74 -45
- package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/kvstore/LocalKVStore.d.ts +2 -0
- package/dist/types/src/kvstore/LocalKVStore.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/package.json +1 -1
- package/src/kvstore/LocalKVStore.ts +76 -44
|
@@ -58,6 +58,34 @@ export default class LocalKVStore {
|
|
|
58
58
|
this.originator = originator;
|
|
59
59
|
this.acceptDelayedBroadcast = acceptDelayedBroadcast;
|
|
60
60
|
}
|
|
61
|
+
async queueOperationOnKey(key) {
|
|
62
|
+
// Check if a lock exists for this key and wait for it to resolve
|
|
63
|
+
let lockQueue = this.keyLocks.get(key);
|
|
64
|
+
if (lockQueue == null) {
|
|
65
|
+
lockQueue = [];
|
|
66
|
+
this.keyLocks.set(key, lockQueue);
|
|
67
|
+
}
|
|
68
|
+
let resolveNewLock = () => { };
|
|
69
|
+
const newLock = new Promise((resolve) => {
|
|
70
|
+
resolveNewLock = resolve;
|
|
71
|
+
if (lockQueue != null) {
|
|
72
|
+
lockQueue.push(resolve);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// If we are the only request, resolve the lock immediately, queue remains at 1 item until request ends.
|
|
76
|
+
if (lockQueue.length === 1) {
|
|
77
|
+
resolveNewLock();
|
|
78
|
+
}
|
|
79
|
+
await newLock;
|
|
80
|
+
return lockQueue;
|
|
81
|
+
}
|
|
82
|
+
finishOperationOnKey(key, lockQueue) {
|
|
83
|
+
lockQueue.shift(); // Remove the current lock from the queue
|
|
84
|
+
if (lockQueue.length > 0) {
|
|
85
|
+
// If there are more locks waiting, resolve the next one
|
|
86
|
+
lockQueue[0]();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
61
89
|
getProtocol(key) {
|
|
62
90
|
return { protocolID: [2, this.context], keyID: key };
|
|
63
91
|
}
|
|
@@ -82,8 +110,14 @@ export default class LocalKVStore {
|
|
|
82
110
|
* @throws {Error} If the found output's locking script cannot be decoded or represents an invalid token format.
|
|
83
111
|
*/
|
|
84
112
|
async get(key, defaultValue = undefined) {
|
|
85
|
-
const
|
|
86
|
-
|
|
113
|
+
const lockQueue = await this.queueOperationOnKey(key);
|
|
114
|
+
try {
|
|
115
|
+
const r = await this.lookupValue(key, defaultValue, 5);
|
|
116
|
+
return r.value;
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
this.finishOperationOnKey(key, lockQueue);
|
|
120
|
+
}
|
|
87
121
|
}
|
|
88
122
|
getLockingScript(output, beef) {
|
|
89
123
|
const [txid, vout] = output.outpoint.split('.');
|
|
@@ -170,16 +204,7 @@ export default class LocalKVStore {
|
|
|
170
204
|
* @returns {Promise<OutpointString>} A promise that resolves to the outpoint string (txid.vout) of the new or updated token output.
|
|
171
205
|
*/
|
|
172
206
|
async set(key, value) {
|
|
173
|
-
|
|
174
|
-
const existingLock = this.keyLocks.get(key);
|
|
175
|
-
if (existingLock != null) {
|
|
176
|
-
await existingLock;
|
|
177
|
-
}
|
|
178
|
-
let resolveNewLock = () => { };
|
|
179
|
-
const newLock = new Promise((resolve) => {
|
|
180
|
-
resolveNewLock = resolve;
|
|
181
|
-
});
|
|
182
|
-
this.keyLocks.set(key, newLock);
|
|
207
|
+
const lockQueue = await this.queueOperationOnKey(key);
|
|
183
208
|
try {
|
|
184
209
|
const current = await this.lookupValue(key, undefined, 10);
|
|
185
210
|
if (current.value === value) {
|
|
@@ -241,9 +266,7 @@ export default class LocalKVStore {
|
|
|
241
266
|
return outpoint;
|
|
242
267
|
}
|
|
243
268
|
finally {
|
|
244
|
-
|
|
245
|
-
this.keyLocks.delete(key);
|
|
246
|
-
resolveNewLock();
|
|
269
|
+
this.finishOperationOnKey(key, lockQueue);
|
|
247
270
|
}
|
|
248
271
|
}
|
|
249
272
|
/**
|
|
@@ -257,43 +280,49 @@ export default class LocalKVStore {
|
|
|
257
280
|
* @returns {Promise<string[]>} A promise that resolves to the txids of the removal transactions if successful.
|
|
258
281
|
*/
|
|
259
282
|
async remove(key) {
|
|
260
|
-
const
|
|
261
|
-
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
283
|
+
const lockQueue = await this.queueOperationOnKey(key);
|
|
284
|
+
try {
|
|
285
|
+
const txids = [];
|
|
286
|
+
for (;;) {
|
|
287
|
+
const { outputs, BEEF: inputBEEF, totalOutputs } = await this.getOutputs(key);
|
|
288
|
+
if (outputs.length > 0) {
|
|
289
|
+
const pushdrop = new PushDrop(this.wallet, this.originator);
|
|
290
|
+
try {
|
|
291
|
+
const inputs = this.getInputs(outputs);
|
|
292
|
+
const { signableTransaction } = await this.wallet.createAction({
|
|
293
|
+
description: `Remove ${key} in ${this.context}`,
|
|
294
|
+
inputBEEF,
|
|
295
|
+
inputs,
|
|
296
|
+
options: {
|
|
297
|
+
acceptDelayedBroadcast: this.acceptDelayedBroadcast
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
if (typeof signableTransaction !== 'object') {
|
|
301
|
+
throw new Error('Wallet did not return a signable transaction when expected.');
|
|
273
302
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
303
|
+
const spends = await this.getSpends(key, outputs, pushdrop, signableTransaction.tx);
|
|
304
|
+
const { txid } = await this.wallet.signAction({
|
|
305
|
+
reference: signableTransaction.reference,
|
|
306
|
+
spends
|
|
307
|
+
});
|
|
308
|
+
if (txid === undefined) {
|
|
309
|
+
throw new Error('signAction must return a valid txid');
|
|
310
|
+
}
|
|
311
|
+
txids.push(txid);
|
|
277
312
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
reference: signableTransaction.reference,
|
|
281
|
-
spends
|
|
282
|
-
});
|
|
283
|
-
if (txid === undefined) {
|
|
284
|
-
throw new Error('signAction must return a valid txid');
|
|
313
|
+
catch (_) {
|
|
314
|
+
throw new Error(`There are ${totalOutputs} outputs with tag ${key} that cannot be unlocked.`);
|
|
285
315
|
}
|
|
286
|
-
txids.push(txid);
|
|
287
316
|
}
|
|
288
|
-
|
|
289
|
-
|
|
317
|
+
if (outputs.length === totalOutputs) {
|
|
318
|
+
break;
|
|
290
319
|
}
|
|
291
320
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
321
|
+
return txids;
|
|
322
|
+
}
|
|
323
|
+
finally {
|
|
324
|
+
this.finishOperationOnKey(key, lockQueue);
|
|
295
325
|
}
|
|
296
|
-
return txids;
|
|
297
326
|
}
|
|
298
327
|
}
|
|
299
328
|
//# sourceMappingURL=LocalKVStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalKVStore.js","sourceRoot":"","sources":["../../../../src/kvstore/LocalKVStore.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,iCAAiC,CAAA;AACtD,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAA;AAE/C,OAAO,YAAY,MAAM,2BAA2B,CAAA;AACpD,OAAO,WAAW,MAAM,+BAA+B,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAE7C;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B;;;;OAIG;IACc,MAAM,CAAiB;IACxC;;;;OAIG;IACc,OAAO,CAAQ;IAChC;;;;OAIG;IACc,OAAO,CAAS;IAEjC;;;;OAIG;IACc,UAAU,CAAS;IAEpC,sBAAsB,GAAY,KAAK,CAAA;IAEvC;;;OAGG;IACc,QAAQ,
|
|
1
|
+
{"version":3,"file":"LocalKVStore.js","sourceRoot":"","sources":["../../../../src/kvstore/LocalKVStore.ts"],"names":[],"mappings":"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"}
|