@aztec/kv-store 0.82.2-alpha-testnet.5 → 0.82.3-nightly.20250330
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/dest/indexeddb/store.d.ts +1 -5
- package/dest/indexeddb/store.d.ts.map +1 -1
- package/dest/indexeddb/store.js +3 -19
- package/dest/interfaces/store.d.ts +6 -20
- package/dest/interfaces/store.d.ts.map +1 -1
- package/dest/lmdb/store.d.ts +1 -5
- package/dest/lmdb/store.d.ts.map +1 -1
- package/dest/lmdb/store.js +3 -15
- package/dest/lmdb-v2/message.d.ts +8 -1
- package/dest/lmdb-v2/message.d.ts.map +1 -1
- package/dest/lmdb-v2/message.js +1 -0
- package/dest/lmdb-v2/store.d.ts +1 -1
- package/dest/lmdb-v2/store.d.ts.map +1 -1
- package/dest/lmdb-v2/store.js +10 -4
- package/dest/stores/index.d.ts +3 -0
- package/dest/stores/index.d.ts.map +1 -1
- package/dest/stores/index.js +1 -0
- package/dest/stores/interface.d.ts +3 -0
- package/dest/stores/interface.d.ts.map +1 -0
- package/dest/stores/interface.js +1 -0
- package/dest/stores/l2_tips_memory_store.d.ts +11 -0
- package/dest/stores/l2_tips_memory_store.d.ts.map +1 -0
- package/dest/stores/l2_tips_memory_store.js +58 -0
- package/dest/stores/l2_tips_store.d.ts +1 -1
- package/dest/stores/l2_tips_store.d.ts.map +1 -1
- package/dest/stores/l2_tips_store.js +1 -1
- package/package.json +5 -5
- package/src/indexeddb/store.ts +4 -23
- package/src/interfaces/store.ts +7 -22
- package/src/lmdb/store.ts +4 -15
- package/src/lmdb-v2/message.ts +9 -0
- package/src/lmdb-v2/store.ts +6 -5
- package/src/stores/index.ts +5 -0
- package/src/stores/interface.ts +3 -0
- package/src/stores/l2_tips_memory_store.ts +66 -0
- package/src/stores/l2_tips_store.ts +1 -1
- package/dest/interfaces/store_test_suite.d.ts +0 -3
- package/dest/interfaces/store_test_suite.d.ts.map +0 -1
- package/dest/interfaces/store_test_suite.js +0 -37
- package/src/interfaces/store_test_suite.ts +0 -56
|
@@ -44,11 +44,6 @@ export declare class AztecIndexedDBStore implements AztecAsyncKVStore {
|
|
|
44
44
|
* @returns The store
|
|
45
45
|
*/
|
|
46
46
|
static open(log: Logger, name?: string, ephemeral?: boolean): Promise<AztecIndexedDBStore>;
|
|
47
|
-
/**
|
|
48
|
-
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new indexedb.
|
|
49
|
-
* @returns A new AztecIndexedDBStore.
|
|
50
|
-
*/
|
|
51
|
-
fork(): Promise<AztecAsyncKVStore>;
|
|
52
47
|
/**
|
|
53
48
|
* Creates a new AztecMap in the store.
|
|
54
49
|
* @param name - Name of the map
|
|
@@ -94,5 +89,6 @@ export declare class AztecIndexedDBStore implements AztecAsyncKVStore {
|
|
|
94
89
|
delete(): Promise<void>;
|
|
95
90
|
estimateSize(): Promise<StoreSize>;
|
|
96
91
|
close(): Promise<void>;
|
|
92
|
+
backupTo(_dstPath: string, _compact?: boolean): Promise<void>;
|
|
97
93
|
}
|
|
98
94
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/indexeddb/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAoB,MAAM,KAAK,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAOhE,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzG,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE;QACJ,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/D,CAAC;CACH;AAED;;GAEG;AAEH,qBAAa,mBAAoB,YAAW,iBAAiB;;aAaO,WAAW,EAAE,OAAO;gBAA1E,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,EAAkB,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAKjH;;;;;;;;;OASG;WACU,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgBvG
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/indexeddb/store.ts"],"names":[],"mappings":"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"}
|
package/dest/indexeddb/store.js
CHANGED
|
@@ -55,25 +55,6 @@ import { IndexedDBAztecSingleton } from './singleton.js';
|
|
|
55
55
|
return kvStore;
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
|
-
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new indexedb.
|
|
59
|
-
* @returns A new AztecIndexedDBStore.
|
|
60
|
-
*/ async fork() {
|
|
61
|
-
const forkedStore = await AztecIndexedDBStore.open(this.#log, undefined, true);
|
|
62
|
-
this.#log.verbose(`Forking store to ${forkedStore.#name}`);
|
|
63
|
-
// Copy old data to new store
|
|
64
|
-
const oldData = this.#rootDB.transaction('data').store;
|
|
65
|
-
const dataToWrite = [];
|
|
66
|
-
for await (const cursor of oldData.iterate()){
|
|
67
|
-
dataToWrite.push(cursor.value);
|
|
68
|
-
}
|
|
69
|
-
const tx = forkedStore.#rootDB.transaction('data', 'readwrite').store;
|
|
70
|
-
for (const data of dataToWrite){
|
|
71
|
-
await tx.add(data);
|
|
72
|
-
}
|
|
73
|
-
this.#log.debug(`Forked store at ${forkedStore.#name} opened successfully`);
|
|
74
|
-
return forkedStore;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
58
|
* Creates a new AztecMap in the store.
|
|
78
59
|
* @param name - Name of the map
|
|
79
60
|
* @returns A new AztecMap
|
|
@@ -162,4 +143,7 @@ import { IndexedDBAztecSingleton } from './singleton.js';
|
|
|
162
143
|
close() {
|
|
163
144
|
return Promise.resolve();
|
|
164
145
|
}
|
|
146
|
+
backupTo(_dstPath, _compact) {
|
|
147
|
+
throw new Error('Method not implemented.');
|
|
148
|
+
}
|
|
165
149
|
}
|
|
@@ -52,10 +52,6 @@ export interface AztecKVStore {
|
|
|
52
52
|
* Clears all entries in the store
|
|
53
53
|
*/
|
|
54
54
|
clear(): Promise<void>;
|
|
55
|
-
/**
|
|
56
|
-
* Forks the store.
|
|
57
|
-
*/
|
|
58
|
-
fork(): Promise<AztecKVStore>;
|
|
59
55
|
/**
|
|
60
56
|
* Deletes the store
|
|
61
57
|
*/
|
|
@@ -110,25 +106,15 @@ export interface AztecAsyncKVStore {
|
|
|
110
106
|
* @param callback - The callback to execute in a transaction
|
|
111
107
|
*/
|
|
112
108
|
transactionAsync<T extends Exclude<any, Promise<any>>>(callback: () => Promise<T>): Promise<T>;
|
|
113
|
-
/**
|
|
114
|
-
* Clears all entries in the store
|
|
115
|
-
*/
|
|
109
|
+
/** Clears all entries in the store */
|
|
116
110
|
clear(): Promise<void>;
|
|
117
|
-
/**
|
|
118
|
-
* Forks the store.
|
|
119
|
-
*/
|
|
120
|
-
fork(): Promise<AztecAsyncKVStore>;
|
|
121
|
-
/**
|
|
122
|
-
* Deletes the store
|
|
123
|
-
*/
|
|
111
|
+
/** Deletes the store */
|
|
124
112
|
delete(): Promise<void>;
|
|
125
|
-
/**
|
|
126
|
-
* Estimates the size of the store in bytes.
|
|
127
|
-
*/
|
|
113
|
+
/** Estimates the size of the store in bytes. */
|
|
128
114
|
estimateSize(): Promise<StoreSize>;
|
|
129
|
-
/**
|
|
130
|
-
* Closes the store
|
|
131
|
-
*/
|
|
115
|
+
/** Closes the store */
|
|
132
116
|
close(): Promise<void>;
|
|
117
|
+
/** Backups the store to the target folder.*/
|
|
118
|
+
backupTo(dstPath: string, compact?: boolean): Promise<void>;
|
|
133
119
|
}
|
|
134
120
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE1E,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,IAAI,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExD;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElD;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElE;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1C;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAElD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE1D;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjF;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE1E,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,IAAI,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExD;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElD;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElE;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1C;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAElD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE1D;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjF;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7D;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAEvD;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvE;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAE/C;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAEvD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAE/D;;;OAGG;IACH,gBAAgB,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE/F,sCAAsC;IACtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,wBAAwB;IACxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB,gDAAgD;IAChD,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC,uBAAuB;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D"}
|
package/dest/lmdb/store.d.ts
CHANGED
|
@@ -31,11 +31,6 @@ export declare class AztecLmdbStore implements AztecKVStore, AztecAsyncKVStore {
|
|
|
31
31
|
*/
|
|
32
32
|
static open(path?: string, mapSizeKb?: number, // defaults to 1 GB map size
|
|
33
33
|
ephemeral?: boolean, log?: import("@aztec/foundation/log").Logger): AztecLmdbStore;
|
|
34
|
-
/**
|
|
35
|
-
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
|
|
36
|
-
* @returns A new AztecLmdbStore.
|
|
37
|
-
*/
|
|
38
|
-
fork(): Promise<AztecLmdbStore>;
|
|
39
34
|
/**
|
|
40
35
|
* Creates a new AztecMap in the store.
|
|
41
36
|
* @param name - Name of the map
|
|
@@ -95,5 +90,6 @@ export declare class AztecLmdbStore implements AztecKVStore, AztecAsyncKVStore {
|
|
|
95
90
|
delete(): Promise<void>;
|
|
96
91
|
estimateSize(): Promise<StoreSize>;
|
|
97
92
|
private estimateSubDBSize;
|
|
93
|
+
backupTo(_dstPath: string, _compact?: boolean): Promise<void>;
|
|
98
94
|
}
|
|
99
95
|
//# sourceMappingURL=store.d.ts.map
|
package/dest/lmdb/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQ9E;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY,EAAE,iBAAiB;;aAQlB,WAAW,EAAE,OAAO;IAAE,OAAO,CAAC,IAAI;IAPpF,WAAW,OAAiB;gBAOhB,MAAM,EAAE,YAAY,EAAkB,WAAW,EAAE,OAAO,EAAU,IAAI,EAAE,MAAM;IAgB5F;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,SAAkB,EAAE,4BAA4B;IACzD,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAAgC,GAClC,cAAc;IASjB
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQ9E;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY,EAAE,iBAAiB;;aAQlB,WAAW,EAAE,OAAO;IAAE,OAAO,CAAC,IAAI;IAPpF,WAAW,OAAiB;gBAOhB,MAAM,EAAE,YAAY,EAAkB,WAAW,EAAE,OAAO,EAAU,IAAI,EAAE,MAAM;IAgB5F;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,SAAkB,EAAE,4BAA4B;IACzD,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAAgC,GAClC,cAAc;IASjB;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7E;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IAIpE;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAI5F,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAIhF;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAI9D;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAI1E;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;;;OAIG;IACG,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjE;;OAEG;IACG,KAAK;IAMX;;OAEG;IACG,IAAI;IAMV;;OAEG;IACG,KAAK;IAMX,kEAAkE;IAC5D,MAAM;IASZ,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAiBlC,OAAO,CAAC,iBAAiB;IA4BzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAG9D"}
|
package/dest/lmdb/store.js
CHANGED
|
@@ -64,21 +64,6 @@ import { LmdbAztecSingleton } from './singleton.js';
|
|
|
64
64
|
return new AztecLmdbStore(rootDb, ephemeral, dbPath);
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
|
-
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
|
|
68
|
-
* @returns A new AztecLmdbStore.
|
|
69
|
-
*/ async fork() {
|
|
70
|
-
const baseDir = this.path;
|
|
71
|
-
this.#log.debug(`Forking store with basedir ${baseDir}`);
|
|
72
|
-
const forkPath = await fs.mkdtemp(join(baseDir, 'aztec-store-fork-'));
|
|
73
|
-
this.#log.verbose(`Forking store to ${forkPath}`);
|
|
74
|
-
await this.#rootDb.backup(forkPath, false);
|
|
75
|
-
const forkDb = open(forkPath, {
|
|
76
|
-
noSync: this.isEphemeral
|
|
77
|
-
});
|
|
78
|
-
this.#log.debug(`Forked store at ${forkPath} opened successfully`);
|
|
79
|
-
return new AztecLmdbStore(forkDb, this.isEphemeral, forkPath);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
67
|
* Creates a new AztecMap in the store.
|
|
83
68
|
* @param name - Name of the map
|
|
84
69
|
* @returns A new AztecMap
|
|
@@ -200,4 +185,7 @@ import { LmdbAztecSingleton } from './singleton.js';
|
|
|
200
185
|
numItems
|
|
201
186
|
};
|
|
202
187
|
}
|
|
188
|
+
backupTo(_dstPath, _compact) {
|
|
189
|
+
throw new Error('Method not implemented.');
|
|
190
|
+
}
|
|
203
191
|
}
|
|
@@ -12,7 +12,8 @@ export declare enum LMDBMessageType {
|
|
|
12
12
|
CLOSE_CURSOR = 105,
|
|
13
13
|
BATCH = 106,
|
|
14
14
|
STATS = 107,
|
|
15
|
-
CLOSE = 108
|
|
15
|
+
CLOSE = 108,
|
|
16
|
+
COPY_STORE = 109
|
|
16
17
|
}
|
|
17
18
|
type Key = Uint8Array;
|
|
18
19
|
type Value = Uint8Array;
|
|
@@ -48,6 +49,10 @@ interface AdvanceCursorRequest {
|
|
|
48
49
|
interface CloseCursorRequest {
|
|
49
50
|
cursor: number;
|
|
50
51
|
}
|
|
52
|
+
interface CopyStoreRequest {
|
|
53
|
+
dstPath: string;
|
|
54
|
+
compact: boolean;
|
|
55
|
+
}
|
|
51
56
|
export interface Batch {
|
|
52
57
|
addEntries: Array<KeyValues>;
|
|
53
58
|
removeEntries: Array<KeyOptionalValues>;
|
|
@@ -65,6 +70,7 @@ export type LMDBRequestBody = {
|
|
|
65
70
|
[LMDBMessageType.BATCH]: BatchRequest;
|
|
66
71
|
[LMDBMessageType.STATS]: void;
|
|
67
72
|
[LMDBMessageType.CLOSE]: void;
|
|
73
|
+
[LMDBMessageType.COPY_STORE]: CopyStoreRequest;
|
|
68
74
|
};
|
|
69
75
|
interface GetResponse {
|
|
70
76
|
values: OptionalValues;
|
|
@@ -104,6 +110,7 @@ export type LMDBResponseBody = {
|
|
|
104
110
|
[LMDBMessageType.BATCH]: BatchResponse;
|
|
105
111
|
[LMDBMessageType.STATS]: StatsResponse;
|
|
106
112
|
[LMDBMessageType.CLOSE]: BoolResponse;
|
|
113
|
+
[LMDBMessageType.COPY_STORE]: BoolResponse;
|
|
107
114
|
};
|
|
108
115
|
export interface LMDBMessageChannel {
|
|
109
116
|
sendMessage<T extends LMDBMessageType>(msgType: T, body: LMDBRequestBody[T]): Promise<LMDBResponseBody[T]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/message.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,oBAAY,eAAe;IACzB,aAAa,MAAM;IACnB,GAAG,MAAA;IACH,GAAG,MAAA;IAEH,YAAY,MAAA;IACZ,cAAc,MAAA;IACd,YAAY,MAAA;IAEZ,KAAK,MAAA;IAEL,KAAK,MAAA;IAEL,KAAK,MAAA;
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/message.ts"],"names":[],"mappings":"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"}
|
package/dest/lmdb-v2/message.js
CHANGED
|
@@ -14,5 +14,6 @@ export var LMDBMessageType = /*#__PURE__*/ function(LMDBMessageType) {
|
|
|
14
14
|
LMDBMessageType[LMDBMessageType["BATCH"] = 106] = "BATCH";
|
|
15
15
|
LMDBMessageType[LMDBMessageType["STATS"] = 107] = "STATS";
|
|
16
16
|
LMDBMessageType[LMDBMessageType["CLOSE"] = 108] = "CLOSE";
|
|
17
|
+
LMDBMessageType[LMDBMessageType["COPY_STORE"] = 109] = "COPY_STORE";
|
|
17
18
|
return LMDBMessageType;
|
|
18
19
|
}({});
|
package/dest/lmdb-v2/store.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageC
|
|
|
23
23
|
get dataDirectory(): string;
|
|
24
24
|
private start;
|
|
25
25
|
static new(dataDir: string, dbMapSizeKb?: number, maxReaders?: number, cleanup?: () => Promise<void>, log?: Logger): Promise<AztecLMDBStoreV2>;
|
|
26
|
+
backupTo(dstPath: string, compact?: boolean): Promise<void>;
|
|
26
27
|
getReadTx(): ReadTransaction;
|
|
27
28
|
getCurrentWriteTx(): WriteTransaction | undefined;
|
|
28
29
|
openMap<K extends Key, V>(name: string): AztecAsyncMap<K, V>;
|
|
@@ -33,7 +34,6 @@ export declare class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageC
|
|
|
33
34
|
openCounter<K extends Key>(_name: string): AztecAsyncCounter<K>;
|
|
34
35
|
transactionAsync<T extends Exclude<any, Promise<any>>>(callback: (tx: WriteTransaction) => Promise<T>): Promise<T>;
|
|
35
36
|
clear(): Promise<void>;
|
|
36
|
-
fork(): Promise<AztecAsyncKVStore>;
|
|
37
37
|
delete(): Promise<void>;
|
|
38
38
|
close(): Promise<void>;
|
|
39
39
|
sendMessage<T extends LMDBMessageType>(msgType: T, body: LMDBRequestBody[T]): Promise<LMDBResponseBody[T]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAOlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAKhE,OAAO,EAEL,KAAK,kBAAkB,EACvB,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,qBAAa,gBAAiB,YAAW,iBAAiB,EAAE,kBAAkB;IAQ1E,OAAO,CAAC,OAAO;IAGf,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO,CAAC;IAXlB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAqE;IACpF,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,gBAAgB,CAAY;IAEpC,OAAO;IAaP,IAAW,aAAa,IAAI,MAAM,CAEjC;YAEa,KAAK;WAgBC,GAAG,CACrB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAyB,EACtC,UAAU,GAAE,MAAW,EACvB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC7B,GAAG,SAAmC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/store.ts"],"names":[],"mappings":"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"}
|
package/dest/lmdb-v2/store.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
2
2
|
import { Semaphore, SerialQueue } from '@aztec/foundation/queue';
|
|
3
3
|
import { MsgpackChannel, NativeLMDBStore } from '@aztec/native';
|
|
4
4
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
5
|
-
import { rm } from 'fs/promises';
|
|
5
|
+
import { mkdir, rm } from 'fs/promises';
|
|
6
6
|
// eslint-disable-next-line import/no-cycle
|
|
7
7
|
import { LMDBArray } from './array.js';
|
|
8
8
|
// eslint-disable-next-line import/no-cycle
|
|
@@ -54,6 +54,15 @@ export class AztecLMDBStoreV2 {
|
|
|
54
54
|
await db.start();
|
|
55
55
|
return db;
|
|
56
56
|
}
|
|
57
|
+
async backupTo(dstPath, compact = true) {
|
|
58
|
+
await mkdir(dstPath, {
|
|
59
|
+
recursive: true
|
|
60
|
+
});
|
|
61
|
+
await this.channel.sendMessage(LMDBMessageType.COPY_STORE, {
|
|
62
|
+
dstPath,
|
|
63
|
+
compact
|
|
64
|
+
});
|
|
65
|
+
}
|
|
57
66
|
getReadTx() {
|
|
58
67
|
if (!this.open) {
|
|
59
68
|
throw new Error('Store is closed');
|
|
@@ -113,9 +122,6 @@ export class AztecLMDBStoreV2 {
|
|
|
113
122
|
clear() {
|
|
114
123
|
return Promise.resolve();
|
|
115
124
|
}
|
|
116
|
-
fork() {
|
|
117
|
-
throw new Error('Not implemented');
|
|
118
|
-
}
|
|
119
125
|
async delete() {
|
|
120
126
|
await this.close();
|
|
121
127
|
await rm(this.dataDir, {
|
package/dest/stores/index.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
+
import type { L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider } from '@aztec/stdlib/block';
|
|
1
2
|
export * from './l2_tips_store.js';
|
|
3
|
+
export * from './l2_tips_memory_store.js';
|
|
4
|
+
export type L2TipsStore = L2BlockStreamEventHandler & L2BlockStreamLocalDataProvider;
|
|
2
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAErG,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,yBAAyB,GAAG,8BAA8B,CAAC"}
|
package/dest/stores/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/stores/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAErG,MAAM,MAAM,WAAW,GAAG,yBAAyB,GAAG,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { L2BlockStreamEvent, L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider, L2Tips } from '@aztec/stdlib/block';
|
|
2
|
+
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
3
|
+
export declare class L2TipsMemoryStore implements L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider {
|
|
4
|
+
private readonly l2TipsStore;
|
|
5
|
+
private readonly l2BlockHashesStore;
|
|
6
|
+
getL2BlockHash(number: number): Promise<string | undefined>;
|
|
7
|
+
getL2Tips(): Promise<L2Tips>;
|
|
8
|
+
private getL2Tip;
|
|
9
|
+
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=l2_tips_memory_store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l2_tips_memory_store.d.ts","sourceRoot":"","sources":["../../src/stores/l2_tips_memory_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,yBAAyB,EACzB,8BAA8B,EAE9B,MAAM,EACP,MAAM,qBAAqB,CAAC;AAE7B,oEAAoE;AACpE,qBAAa,iBAAkB,YAAW,yBAAyB,EAAE,8BAA8B;IACjG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAkC;IAE9D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI3D,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAQnC,OAAO,CAAC,QAAQ;IAaH,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CA0B9E"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Stores currently synced L2 tips and unfinalized block hashes. */ export class L2TipsMemoryStore {
|
|
2
|
+
l2TipsStore = new Map();
|
|
3
|
+
l2BlockHashesStore = new Map();
|
|
4
|
+
getL2BlockHash(number) {
|
|
5
|
+
return Promise.resolve(this.l2BlockHashesStore.get(number));
|
|
6
|
+
}
|
|
7
|
+
getL2Tips() {
|
|
8
|
+
return Promise.resolve({
|
|
9
|
+
latest: this.getL2Tip('latest'),
|
|
10
|
+
finalized: this.getL2Tip('finalized'),
|
|
11
|
+
proven: this.getL2Tip('proven')
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
getL2Tip(tag) {
|
|
15
|
+
const blockNumber = this.l2TipsStore.get(tag);
|
|
16
|
+
if (blockNumber === undefined || blockNumber === 0) {
|
|
17
|
+
return {
|
|
18
|
+
number: 0,
|
|
19
|
+
hash: undefined
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const blockHash = this.l2BlockHashesStore.get(blockNumber);
|
|
23
|
+
if (!blockHash) {
|
|
24
|
+
throw new Error(`Block hash not found for block number ${blockNumber}`);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
number: blockNumber,
|
|
28
|
+
hash: blockHash
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
async handleBlockStreamEvent(event) {
|
|
32
|
+
switch(event.type){
|
|
33
|
+
case 'blocks-added':
|
|
34
|
+
{
|
|
35
|
+
const blocks = event.blocks.map((b)=>b.block);
|
|
36
|
+
for (const block of blocks){
|
|
37
|
+
this.l2BlockHashesStore.set(block.number, (await block.header.hash()).toString());
|
|
38
|
+
}
|
|
39
|
+
this.l2TipsStore.set('latest', blocks.at(-1).number);
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
case 'chain-pruned':
|
|
43
|
+
this.l2TipsStore.set('latest', event.blockNumber);
|
|
44
|
+
break;
|
|
45
|
+
case 'chain-proven':
|
|
46
|
+
this.l2TipsStore.set('proven', event.blockNumber);
|
|
47
|
+
break;
|
|
48
|
+
case 'chain-finalized':
|
|
49
|
+
this.l2TipsStore.set('finalized', event.blockNumber);
|
|
50
|
+
for (const key of this.l2BlockHashesStore.keys()){
|
|
51
|
+
if (key < event.blockNumber) {
|
|
52
|
+
this.l2BlockHashesStore.delete(key);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { L2BlockStreamEvent, L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider, L2Tips } from '@aztec/stdlib/block';
|
|
2
2
|
import type { AztecAsyncKVStore } from '../interfaces/store.js';
|
|
3
3
|
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
4
|
-
export declare class
|
|
4
|
+
export declare class L2TipsKVStore implements L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider {
|
|
5
5
|
private readonly l2TipsStore;
|
|
6
6
|
private readonly l2BlockHashesStore;
|
|
7
7
|
constructor(store: AztecAsyncKVStore, namespace: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l2_tips_store.d.ts","sourceRoot":"","sources":["../../src/stores/l2_tips_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,yBAAyB,EACzB,8BAA8B,EAE9B,MAAM,EACP,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,oEAAoE;AACpE,qBAAa,
|
|
1
|
+
{"version":3,"file":"l2_tips_store.d.ts","sourceRoot":"","sources":["../../src/stores/l2_tips_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAClB,yBAAyB,EACzB,8BAA8B,EAE9B,MAAM,EACP,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,oEAAoE;AACpE,qBAAa,aAAc,YAAW,yBAAyB,EAAE,8BAA8B;IAC7F,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAgC;gBAEvD,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM;IAKhD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIrD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YAQ3B,QAAQ;IAaT,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAwB9E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/kv-store",
|
|
3
|
-
"version": "0.82.
|
|
3
|
+
"version": "0.82.3-nightly.20250330",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/interfaces/index.js",
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
"./package.local.json"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@aztec/ethereum": "0.82.
|
|
29
|
-
"@aztec/foundation": "0.82.
|
|
30
|
-
"@aztec/native": "0.82.
|
|
31
|
-
"@aztec/stdlib": "0.82.
|
|
28
|
+
"@aztec/ethereum": "0.82.3-nightly.20250330",
|
|
29
|
+
"@aztec/foundation": "0.82.3-nightly.20250330",
|
|
30
|
+
"@aztec/native": "0.82.3-nightly.20250330",
|
|
31
|
+
"@aztec/stdlib": "0.82.3-nightly.20250330",
|
|
32
32
|
"idb": "^8.0.0",
|
|
33
33
|
"lmdb": "^3.2.0",
|
|
34
34
|
"msgpackr": "^1.11.2",
|
package/src/indexeddb/store.ts
CHANGED
|
@@ -74,29 +74,6 @@ export class AztecIndexedDBStore implements AztecAsyncKVStore {
|
|
|
74
74
|
return kvStore;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
/**
|
|
78
|
-
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new indexedb.
|
|
79
|
-
* @returns A new AztecIndexedDBStore.
|
|
80
|
-
*/
|
|
81
|
-
async fork(): Promise<AztecAsyncKVStore> {
|
|
82
|
-
const forkedStore = await AztecIndexedDBStore.open(this.#log, undefined, true);
|
|
83
|
-
this.#log.verbose(`Forking store to ${forkedStore.#name}`);
|
|
84
|
-
|
|
85
|
-
// Copy old data to new store
|
|
86
|
-
const oldData = this.#rootDB.transaction('data').store;
|
|
87
|
-
const dataToWrite = [];
|
|
88
|
-
for await (const cursor of oldData.iterate()) {
|
|
89
|
-
dataToWrite.push(cursor.value);
|
|
90
|
-
}
|
|
91
|
-
const tx = forkedStore.#rootDB.transaction('data', 'readwrite').store;
|
|
92
|
-
for (const data of dataToWrite) {
|
|
93
|
-
await tx.add(data);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
this.#log.debug(`Forked store at ${forkedStore.#name} opened successfully`);
|
|
97
|
-
return forkedStore;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
77
|
/**
|
|
101
78
|
* Creates a new AztecMap in the store.
|
|
102
79
|
* @param name - Name of the map
|
|
@@ -200,4 +177,8 @@ export class AztecIndexedDBStore implements AztecAsyncKVStore {
|
|
|
200
177
|
close(): Promise<void> {
|
|
201
178
|
return Promise.resolve();
|
|
202
179
|
}
|
|
180
|
+
|
|
181
|
+
backupTo(_dstPath: string, _compact?: boolean): Promise<void> {
|
|
182
|
+
throw new Error('Method not implemented.');
|
|
183
|
+
}
|
|
203
184
|
}
|
package/src/interfaces/store.ts
CHANGED
|
@@ -61,11 +61,6 @@ export interface AztecKVStore {
|
|
|
61
61
|
*/
|
|
62
62
|
clear(): Promise<void>;
|
|
63
63
|
|
|
64
|
-
/**
|
|
65
|
-
* Forks the store.
|
|
66
|
-
*/
|
|
67
|
-
fork(): Promise<AztecKVStore>;
|
|
68
|
-
|
|
69
64
|
/**
|
|
70
65
|
* Deletes the store
|
|
71
66
|
*/
|
|
@@ -130,28 +125,18 @@ export interface AztecAsyncKVStore {
|
|
|
130
125
|
*/
|
|
131
126
|
transactionAsync<T extends Exclude<any, Promise<any>>>(callback: () => Promise<T>): Promise<T>;
|
|
132
127
|
|
|
133
|
-
/**
|
|
134
|
-
* Clears all entries in the store
|
|
135
|
-
*/
|
|
128
|
+
/** Clears all entries in the store */
|
|
136
129
|
clear(): Promise<void>;
|
|
137
130
|
|
|
138
|
-
/**
|
|
139
|
-
* Forks the store.
|
|
140
|
-
*/
|
|
141
|
-
fork(): Promise<AztecAsyncKVStore>;
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Deletes the store
|
|
145
|
-
*/
|
|
131
|
+
/** Deletes the store */
|
|
146
132
|
delete(): Promise<void>;
|
|
147
133
|
|
|
148
|
-
/**
|
|
149
|
-
* Estimates the size of the store in bytes.
|
|
150
|
-
*/
|
|
134
|
+
/** Estimates the size of the store in bytes. */
|
|
151
135
|
estimateSize(): Promise<StoreSize>;
|
|
152
136
|
|
|
153
|
-
/**
|
|
154
|
-
* Closes the store
|
|
155
|
-
*/
|
|
137
|
+
/** Closes the store */
|
|
156
138
|
close(): Promise<void>;
|
|
139
|
+
|
|
140
|
+
/** Backups the store to the target folder.*/
|
|
141
|
+
backupTo(dstPath: string, compact?: boolean): Promise<void>;
|
|
157
142
|
}
|
package/src/lmdb/store.ts
CHANGED
|
@@ -75,21 +75,6 @@ export class AztecLmdbStore implements AztecKVStore, AztecAsyncKVStore {
|
|
|
75
75
|
return new AztecLmdbStore(rootDb, ephemeral, dbPath);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
/**
|
|
79
|
-
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
|
|
80
|
-
* @returns A new AztecLmdbStore.
|
|
81
|
-
*/
|
|
82
|
-
async fork() {
|
|
83
|
-
const baseDir = this.path;
|
|
84
|
-
this.#log.debug(`Forking store with basedir ${baseDir}`);
|
|
85
|
-
const forkPath = await fs.mkdtemp(join(baseDir, 'aztec-store-fork-'));
|
|
86
|
-
this.#log.verbose(`Forking store to ${forkPath}`);
|
|
87
|
-
await this.#rootDb.backup(forkPath, false);
|
|
88
|
-
const forkDb = open(forkPath, { noSync: this.isEphemeral });
|
|
89
|
-
this.#log.debug(`Forked store at ${forkPath} opened successfully`);
|
|
90
|
-
return new AztecLmdbStore(forkDb, this.isEphemeral, forkPath);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
78
|
/**
|
|
94
79
|
* Creates a new AztecMap in the store.
|
|
95
80
|
* @param name - Name of the map
|
|
@@ -238,4 +223,8 @@ export class AztecLmdbStore implements AztecKVStore, AztecAsyncKVStore {
|
|
|
238
223
|
}
|
|
239
224
|
return { actualSize, numItems };
|
|
240
225
|
}
|
|
226
|
+
|
|
227
|
+
backupTo(_dstPath: string, _compact?: boolean): Promise<void> {
|
|
228
|
+
throw new Error('Method not implemented.');
|
|
229
|
+
}
|
|
241
230
|
}
|
package/src/lmdb-v2/message.ts
CHANGED
|
@@ -19,6 +19,7 @@ export enum LMDBMessageType {
|
|
|
19
19
|
STATS,
|
|
20
20
|
|
|
21
21
|
CLOSE,
|
|
22
|
+
COPY_STORE,
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
type Key = Uint8Array;
|
|
@@ -63,6 +64,11 @@ interface CloseCursorRequest {
|
|
|
63
64
|
cursor: number;
|
|
64
65
|
}
|
|
65
66
|
|
|
67
|
+
interface CopyStoreRequest {
|
|
68
|
+
dstPath: string;
|
|
69
|
+
compact: boolean;
|
|
70
|
+
}
|
|
71
|
+
|
|
66
72
|
export interface Batch {
|
|
67
73
|
addEntries: Array<KeyValues>;
|
|
68
74
|
removeEntries: Array<KeyOptionalValues>;
|
|
@@ -87,6 +93,7 @@ export type LMDBRequestBody = {
|
|
|
87
93
|
[LMDBMessageType.STATS]: void;
|
|
88
94
|
|
|
89
95
|
[LMDBMessageType.CLOSE]: void;
|
|
96
|
+
[LMDBMessageType.COPY_STORE]: CopyStoreRequest;
|
|
90
97
|
};
|
|
91
98
|
|
|
92
99
|
interface GetResponse {
|
|
@@ -139,6 +146,8 @@ export type LMDBResponseBody = {
|
|
|
139
146
|
[LMDBMessageType.STATS]: StatsResponse;
|
|
140
147
|
|
|
141
148
|
[LMDBMessageType.CLOSE]: BoolResponse;
|
|
149
|
+
|
|
150
|
+
[LMDBMessageType.COPY_STORE]: BoolResponse;
|
|
142
151
|
};
|
|
143
152
|
|
|
144
153
|
export interface LMDBMessageChannel {
|
package/src/lmdb-v2/store.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Semaphore, SerialQueue } from '@aztec/foundation/queue';
|
|
|
3
3
|
import { MsgpackChannel, NativeLMDBStore } from '@aztec/native';
|
|
4
4
|
|
|
5
5
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
6
|
-
import { rm } from 'fs/promises';
|
|
6
|
+
import { mkdir, rm } from 'fs/promises';
|
|
7
7
|
|
|
8
8
|
import type { AztecAsyncArray } from '../interfaces/array.js';
|
|
9
9
|
import type { Key, StoreSize } from '../interfaces/common.js';
|
|
@@ -82,6 +82,11 @@ export class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageChannel {
|
|
|
82
82
|
return db;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
public async backupTo(dstPath: string, compact = true) {
|
|
86
|
+
await mkdir(dstPath, { recursive: true });
|
|
87
|
+
await this.channel.sendMessage(LMDBMessageType.COPY_STORE, { dstPath, compact });
|
|
88
|
+
}
|
|
89
|
+
|
|
85
90
|
public getReadTx(): ReadTransaction {
|
|
86
91
|
if (!this.open) {
|
|
87
92
|
throw new Error('Store is closed');
|
|
@@ -155,10 +160,6 @@ export class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageChannel {
|
|
|
155
160
|
return Promise.resolve();
|
|
156
161
|
}
|
|
157
162
|
|
|
158
|
-
fork(): Promise<AztecAsyncKVStore> {
|
|
159
|
-
throw new Error('Not implemented');
|
|
160
|
-
}
|
|
161
|
-
|
|
162
163
|
async delete(): Promise<void> {
|
|
163
164
|
await this.close();
|
|
164
165
|
await rm(this.dataDir, { recursive: true, force: true, maxRetries: 3 });
|
package/src/stores/index.ts
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
+
import type { L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider } from '@aztec/stdlib/block';
|
|
2
|
+
|
|
1
3
|
export * from './l2_tips_store.js';
|
|
4
|
+
export * from './l2_tips_memory_store.js';
|
|
5
|
+
|
|
6
|
+
export type L2TipsStore = L2BlockStreamEventHandler & L2BlockStreamLocalDataProvider;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
L2BlockId,
|
|
3
|
+
L2BlockStreamEvent,
|
|
4
|
+
L2BlockStreamEventHandler,
|
|
5
|
+
L2BlockStreamLocalDataProvider,
|
|
6
|
+
L2BlockTag,
|
|
7
|
+
L2Tips,
|
|
8
|
+
} from '@aztec/stdlib/block';
|
|
9
|
+
|
|
10
|
+
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
11
|
+
export class L2TipsMemoryStore implements L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider {
|
|
12
|
+
private readonly l2TipsStore: Map<L2BlockTag, number> = new Map();
|
|
13
|
+
private readonly l2BlockHashesStore: Map<number, string> = new Map();
|
|
14
|
+
|
|
15
|
+
public getL2BlockHash(number: number): Promise<string | undefined> {
|
|
16
|
+
return Promise.resolve(this.l2BlockHashesStore.get(number));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public getL2Tips(): Promise<L2Tips> {
|
|
20
|
+
return Promise.resolve({
|
|
21
|
+
latest: this.getL2Tip('latest'),
|
|
22
|
+
finalized: this.getL2Tip('finalized'),
|
|
23
|
+
proven: this.getL2Tip('proven'),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
private getL2Tip(tag: L2BlockTag): L2BlockId {
|
|
28
|
+
const blockNumber = this.l2TipsStore.get(tag);
|
|
29
|
+
if (blockNumber === undefined || blockNumber === 0) {
|
|
30
|
+
return { number: 0, hash: undefined };
|
|
31
|
+
}
|
|
32
|
+
const blockHash = this.l2BlockHashesStore.get(blockNumber);
|
|
33
|
+
if (!blockHash) {
|
|
34
|
+
throw new Error(`Block hash not found for block number ${blockNumber}`);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return { number: blockNumber, hash: blockHash };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
|
|
41
|
+
switch (event.type) {
|
|
42
|
+
case 'blocks-added': {
|
|
43
|
+
const blocks = event.blocks.map(b => b.block);
|
|
44
|
+
for (const block of blocks) {
|
|
45
|
+
this.l2BlockHashesStore.set(block.number, (await block.header.hash()).toString());
|
|
46
|
+
}
|
|
47
|
+
this.l2TipsStore.set('latest', blocks.at(-1)!.number);
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case 'chain-pruned':
|
|
51
|
+
this.l2TipsStore.set('latest', event.blockNumber);
|
|
52
|
+
break;
|
|
53
|
+
case 'chain-proven':
|
|
54
|
+
this.l2TipsStore.set('proven', event.blockNumber);
|
|
55
|
+
break;
|
|
56
|
+
case 'chain-finalized':
|
|
57
|
+
this.l2TipsStore.set('finalized', event.blockNumber);
|
|
58
|
+
for (const key of this.l2BlockHashesStore.keys()) {
|
|
59
|
+
if (key < event.blockNumber) {
|
|
60
|
+
this.l2BlockHashesStore.delete(key);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -11,7 +11,7 @@ import type { AztecAsyncMap } from '../interfaces/map.js';
|
|
|
11
11
|
import type { AztecAsyncKVStore } from '../interfaces/store.js';
|
|
12
12
|
|
|
13
13
|
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
14
|
-
export class
|
|
14
|
+
export class L2TipsKVStore implements L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider {
|
|
15
15
|
private readonly l2TipsStore: AztecAsyncMap<L2BlockTag, number>;
|
|
16
16
|
private readonly l2BlockHashesStore: AztecAsyncMap<number, string>;
|
|
17
17
|
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { AztecAsyncKVStore, AztecKVStore } from './store.js';
|
|
2
|
-
export declare function describeAztecStore(testName: string, getPersistentStore: () => Promise<AztecKVStore | AztecAsyncKVStore>, getPersistentNoPathStore: () => Promise<AztecKVStore | AztecAsyncKVStore>, getEphemeralStore: () => Promise<AztecKVStore | AztecAsyncKVStore>): void;
|
|
3
|
-
//# sourceMappingURL=store_test_suite.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/store_test_suite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,iBAAiB,CAAC,EACnE,wBAAwB,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,iBAAiB,CAAC,EACzE,iBAAiB,EAAE,MAAM,OAAO,CAAC,YAAY,GAAG,iBAAiB,CAAC,QA6CnE"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { isSyncStore } from './utils.js';
|
|
3
|
-
export function describeAztecStore(testName, getPersistentStore, getPersistentNoPathStore, getEphemeralStore) {
|
|
4
|
-
describe(testName, ()=>{
|
|
5
|
-
async function get(store, singleton) {
|
|
6
|
-
return isSyncStore(store) ? singleton.get() : await singleton.getAsync();
|
|
7
|
-
}
|
|
8
|
-
const itForks = async (store)=>{
|
|
9
|
-
const singleton = store.openSingleton('singleton');
|
|
10
|
-
await singleton.set('foo');
|
|
11
|
-
const forkedStore = await store.fork();
|
|
12
|
-
const forkedSingleton = forkedStore.openSingleton('singleton');
|
|
13
|
-
expect(await get(store, singleton)).to.equal('foo');
|
|
14
|
-
await forkedSingleton.set('bar');
|
|
15
|
-
expect(await get(store, singleton)).to.equal('foo');
|
|
16
|
-
expect(await get(forkedStore, forkedSingleton)).to.equal('bar');
|
|
17
|
-
await forkedSingleton.delete();
|
|
18
|
-
expect(await get(store, singleton)).to.equal('foo');
|
|
19
|
-
await forkedStore.delete();
|
|
20
|
-
};
|
|
21
|
-
it('forks a persistent store', async ()=>{
|
|
22
|
-
const store = await getPersistentStore();
|
|
23
|
-
await itForks(store);
|
|
24
|
-
await store.delete();
|
|
25
|
-
});
|
|
26
|
-
it('forks a persistent store with no path', async ()=>{
|
|
27
|
-
const store = await getPersistentNoPathStore();
|
|
28
|
-
await itForks(store);
|
|
29
|
-
await store.delete();
|
|
30
|
-
});
|
|
31
|
-
it('forks an ephemeral store', async ()=>{
|
|
32
|
-
const store = await getEphemeralStore();
|
|
33
|
-
await itForks(store);
|
|
34
|
-
await store.delete();
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
|
|
3
|
-
import type { AztecAsyncSingleton, AztecSingleton } from './singleton.js';
|
|
4
|
-
import type { AztecAsyncKVStore, AztecKVStore } from './store.js';
|
|
5
|
-
import { isSyncStore } from './utils.js';
|
|
6
|
-
|
|
7
|
-
export function describeAztecStore(
|
|
8
|
-
testName: string,
|
|
9
|
-
getPersistentStore: () => Promise<AztecKVStore | AztecAsyncKVStore>,
|
|
10
|
-
getPersistentNoPathStore: () => Promise<AztecKVStore | AztecAsyncKVStore>,
|
|
11
|
-
getEphemeralStore: () => Promise<AztecKVStore | AztecAsyncKVStore>,
|
|
12
|
-
) {
|
|
13
|
-
describe(testName, () => {
|
|
14
|
-
async function get(
|
|
15
|
-
store: AztecKVStore | AztecAsyncKVStore,
|
|
16
|
-
singleton: AztecSingleton<string> | AztecAsyncSingleton<string>,
|
|
17
|
-
) {
|
|
18
|
-
return isSyncStore(store)
|
|
19
|
-
? (singleton as AztecSingleton<string>).get()
|
|
20
|
-
: await (singleton as AztecAsyncSingleton<string>).getAsync();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const itForks = async (store: AztecKVStore | AztecAsyncKVStore) => {
|
|
24
|
-
const singleton = store.openSingleton<string>('singleton');
|
|
25
|
-
await singleton.set('foo');
|
|
26
|
-
|
|
27
|
-
const forkedStore = await store.fork();
|
|
28
|
-
const forkedSingleton = forkedStore.openSingleton<string>('singleton');
|
|
29
|
-
expect(await get(store, singleton)).to.equal('foo');
|
|
30
|
-
await forkedSingleton.set('bar');
|
|
31
|
-
expect(await get(store, singleton)).to.equal('foo');
|
|
32
|
-
expect(await get(forkedStore, forkedSingleton)).to.equal('bar');
|
|
33
|
-
await forkedSingleton.delete();
|
|
34
|
-
expect(await get(store, singleton)).to.equal('foo');
|
|
35
|
-
await forkedStore.delete();
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
it('forks a persistent store', async () => {
|
|
39
|
-
const store = await getPersistentStore();
|
|
40
|
-
await itForks(store);
|
|
41
|
-
await store.delete();
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('forks a persistent store with no path', async () => {
|
|
45
|
-
const store = await getPersistentNoPathStore();
|
|
46
|
-
await itForks(store);
|
|
47
|
-
await store.delete();
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it('forks an ephemeral store', async () => {
|
|
51
|
-
const store = await getEphemeralStore();
|
|
52
|
-
await itForks(store);
|
|
53
|
-
await store.delete();
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
}
|