@aztec/kv-store 0.47.1 → 0.48.0

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.
@@ -50,5 +50,9 @@ export interface AztecKVStore {
50
50
  * Clears the store
51
51
  */
52
52
  clear(): Promise<void>;
53
+ /**
54
+ * Forks the store.
55
+ */
56
+ fork(): Promise<AztecKVStore>;
53
57
  }
54
58
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E;;;;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;CACxB"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E;;;;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,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CAC/B"}
@@ -10,7 +10,8 @@ import { type AztecKVStore } from '../interfaces/store.js';
10
10
  */
11
11
  export declare class AztecLmdbStore implements AztecKVStore {
12
12
  #private;
13
- constructor(rootDb: RootDatabase);
13
+ readonly isEphemeral: boolean;
14
+ constructor(rootDb: RootDatabase, isEphemeral: boolean);
14
15
  /**
15
16
  * Creates a new AztecKVStore backed by LMDB. The path to the database is optional. If not provided,
16
17
  * the database will be stored in a temporary location and be deleted when the process exists.
@@ -25,6 +26,11 @@ export declare class AztecLmdbStore implements AztecKVStore {
25
26
  * @returns The store
26
27
  */
27
28
  static open(path?: string, ephemeral?: boolean, log?: import("@aztec/foundation/log").Logger): AztecLmdbStore;
29
+ /**
30
+ * Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
31
+ * @returns A new AztecLmdbStore.
32
+ */
33
+ fork(): Promise<AztecLmdbStore>;
28
34
  /**
29
35
  * Creates a new AztecMap in the store.
30
36
  * @param name - Name of the map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAExE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY;;gBAKrC,MAAM,EAAE,YAAY;IAgBhC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAA2C,GAC7C,cAAc;IASjB;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAInE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI7D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7E,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAI9F;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAIzC;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAIjD;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACG,KAAK;CAGZ"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAIxE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY;;aAKC,WAAW,EAAE,OAAO;gBAA1D,MAAM,EAAE,YAAY,EAAkB,WAAW,EAAE,OAAO;IAgBtE;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAA2C,GAC7C,cAAc;IAMjB;;;OAGG;IACG,IAAI;IAOV;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAInE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI7D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7E,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAI9F;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAIzC;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAIjD;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACG,KAAK;CAGZ"}
@@ -1,7 +1,10 @@
1
1
  var _AztecLmdbStore_rootDb, _AztecLmdbStore_data, _AztecLmdbStore_multiMapData;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { createDebugLogger } from '@aztec/foundation/log';
4
+ import { mkdtemp } from 'fs/promises';
4
5
  import { open } from 'lmdb';
6
+ import { tmpdir } from 'os';
7
+ import { join } from 'path';
5
8
  import { LmdbAztecArray } from './array.js';
6
9
  import { LmdbAztecCounter } from './counter.js';
7
10
  import { LmdbAztecMap } from './map.js';
@@ -11,7 +14,8 @@ import { LmdbAztecSingleton } from './singleton.js';
11
14
  * A key-value store backed by LMDB.
12
15
  */
13
16
  export class AztecLmdbStore {
14
- constructor(rootDb) {
17
+ constructor(rootDb, isEphemeral) {
18
+ this.isEphemeral = isEphemeral;
15
19
  _AztecLmdbStore_rootDb.set(this, void 0);
16
20
  _AztecLmdbStore_data.set(this, void 0);
17
21
  _AztecLmdbStore_multiMapData.set(this, void 0);
@@ -42,11 +46,18 @@ export class AztecLmdbStore {
42
46
  */
43
47
  static open(path, ephemeral = false, log = createDebugLogger('aztec:kv-store:lmdb')) {
44
48
  log.info(`Opening LMDB database at ${path || 'temporary location'}`);
45
- const rootDb = open({
46
- path,
47
- noSync: ephemeral,
48
- });
49
- return new AztecLmdbStore(rootDb);
49
+ const rootDb = open({ path, noSync: ephemeral });
50
+ return new AztecLmdbStore(rootDb, ephemeral);
51
+ }
52
+ /**
53
+ * Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
54
+ * @returns A new AztecLmdbStore.
55
+ */
56
+ async fork() {
57
+ const forkPath = join(await mkdtemp(join(tmpdir(), 'aztec-store-fork-')), 'root.mdb');
58
+ await __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").backup(forkPath, false);
59
+ const forkDb = open(forkPath, { noSync: this.isEphemeral });
60
+ return new AztecLmdbStore(forkDb, this.isEphemeral);
50
61
  }
51
62
  /**
52
63
  * Creates a new AztecMap in the store.
@@ -107,4 +118,4 @@ export class AztecLmdbStore {
107
118
  }
108
119
  }
109
120
  _AztecLmdbStore_rootDb = new WeakMap(), _AztecLmdbStore_data = new WeakMap(), _AztecLmdbStore_multiMapData = new WeakMap();
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBOEMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRDs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQVksTUFBb0I7UUFKaEMseUNBQXNCO1FBQ3RCLHVDQUE4QjtRQUM5QiwrQ0FBc0M7UUFHcEMsdUJBQUEsSUFBSSwwQkFBVyxNQUFNLE1BQUEsQ0FBQztRQUV0QixtQ0FBbUM7UUFDbkMsdUJBQUEsSUFBSSx3QkFBUyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNqQyxRQUFRLEVBQUUsU0FBUztZQUNuQixXQUFXLEVBQUUsZ0JBQWdCO1NBQzlCLENBQUMsTUFBQSxDQUFDO1FBRUgsdUJBQUEsSUFBSSxnQ0FBaUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDbEQsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxNQUFBLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFhLEVBQ2IsWUFBcUIsS0FBSyxFQUMxQixHQUFHLEdBQUcsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFFOUMsR0FBRyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSTtZQUNKLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQStCLElBQVk7UUFDaEQsT0FBTyxJQUFJLFlBQVksQ0FBQyx1QkFBQSxJQUFJLDRCQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQTRCLElBQVk7UUFDN0MsT0FBTyxJQUFJLFlBQVksQ0FBQyx1QkFBQSxJQUFJLDRCQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQStCLElBQVk7UUFDckQsT0FBTyxJQUFJLFlBQVksQ0FBQyx1QkFBQSxJQUFJLG9DQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFdBQVcsQ0FBcUQsSUFBWTtRQUMxRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsdUJBQUEsSUFBSSw0QkFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFJLElBQVk7UUFDdkIsT0FBTyxJQUFJLGNBQWMsQ0FBQyx1QkFBQSxJQUFJLDRCQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUksSUFBWTtRQUMzQixPQUFPLElBQUksa0JBQWtCLENBQUMsdUJBQUEsSUFBSSw0QkFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFJLFFBQWlCO1FBQzlCLE9BQU8sdUJBQUEsSUFBSSw4QkFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sdUJBQUEsSUFBSSw4QkFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRiJ9
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUE4QyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQztBQUM1QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUTVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRDs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQVksTUFBb0IsRUFBa0IsV0FBb0I7UUFBcEIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFKdEUseUNBQXNCO1FBQ3RCLHVDQUE4QjtRQUM5QiwrQ0FBc0M7UUFHcEMsdUJBQUEsSUFBSSwwQkFBVyxNQUFNLE1BQUEsQ0FBQztRQUV0QixtQ0FBbUM7UUFDbkMsdUJBQUEsSUFBSSx3QkFBUyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNqQyxRQUFRLEVBQUUsU0FBUztZQUNuQixXQUFXLEVBQUUsZ0JBQWdCO1NBQzlCLENBQUMsTUFBQSxDQUFDO1FBRUgsdUJBQUEsSUFBSSxnQ0FBaUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDbEQsUUFBUSxFQUFFLGdCQUFn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
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC7C,aAAa,EAAE,UAAU,EACzB,GAAG,GAAE,MAA4C,2BAGlD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,YAAY,EAC7D,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,UAAU,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAe,GAAG,YAAY,CAErE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC7C,aAAa,EAAE,UAAU,EACzB,GAAG,GAAE,MAA4C,2BASlD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,YAAY,EAC7D,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,UAAU,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAe,GAAG,YAAY,CAErE"}
package/dest/utils.js CHANGED
@@ -1,7 +1,13 @@
1
1
  import { createDebugLogger } from '@aztec/foundation/log';
2
2
  import { AztecLmdbStore } from './lmdb/store.js';
3
3
  export function createStore(config, rollupAddress, log = createDebugLogger('aztec:kv-store')) {
4
- return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false, log), rollupAddress, log);
4
+ if (config.dataDirectory) {
5
+ log.info(`Using data directory: ${config.dataDirectory}`);
6
+ }
7
+ else {
8
+ log.info('Using ephemeral data directory');
9
+ }
10
+ return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false), rollupAddress, log);
5
11
  }
6
12
  /**
7
13
  * Clears the store if the rollup address does not match the one stored in the database.
@@ -11,6 +17,9 @@ export function createStore(config, rollupAddress, log = createDebugLogger('azte
11
17
  * @returns A promise that resolves when the store is cleared, or rejects if the rollup address does not match
12
18
  */
13
19
  export async function initStoreForRollup(store, rollupAddress, log) {
20
+ if (!rollupAddress) {
21
+ throw new Error('Rollup address is required');
22
+ }
14
23
  const rollupAddressValue = store.openSingleton('rollupAddress');
15
24
  const rollupAddressString = rollupAddress.toString();
16
25
  const storedRollupAddressString = rollupAddressValue.get();
@@ -29,4 +38,4 @@ export async function initStoreForRollup(store, rollupAddress, log) {
29
38
  export function openTmpStore(ephemeral = false) {
30
39
  return AztecLmdbStore.open(undefined, ephemeral);
31
40
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQTZDLEVBQzdDLGFBQXlCLEVBQ3pCLE1BQWMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7SUFFakQsT0FBTyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsS0FBUSxFQUNSLGFBQXlCLEVBQ3pCLEdBQVk7SUFFWixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQXFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JELE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFM0QsSUFBSSxPQUFPLHlCQUF5QixLQUFLLFdBQVcsSUFBSSx5QkFBeUIsS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFHLEdBQUcsRUFBRSxJQUFJLENBQ1AscUNBQXFDLGFBQWEsV0FBVyxrQkFBa0IsK0JBQStCLENBQy9HLENBQUM7UUFFRixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxZQUFxQixLQUFLO0lBQ3JELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbkQsQ0FBQyJ9
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQTZDLEVBQzdDLGFBQXlCLEVBQ3pCLE1BQWMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7SUFFakQsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE9BQU8sa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsS0FBUSxFQUNSLGFBQXlCLEVBQ3pCLEdBQVk7SUFFWixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQXFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JELE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFM0QsSUFBSSxPQUFPLHlCQUF5QixLQUFLLFdBQVcsSUFBSSx5QkFBeUIsS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFHLEdBQUcsRUFBRSxJQUFJLENBQ1AscUNBQXFDLGFBQWEsV0FBVyxrQkFBa0IsK0JBQStCLENBQy9HLENBQUM7UUFFRixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxZQUFxQixLQUFLO0lBQ3JELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbkQsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/kv-store",
3
- "version": "0.47.1",
3
+ "version": "0.48.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/interfaces/index.js",
@@ -52,7 +52,7 @@
52
52
  ]
53
53
  },
54
54
  "dependencies": {
55
- "@aztec/foundation": "0.47.1",
55
+ "@aztec/foundation": "0.48.0",
56
56
  "lmdb": "^3.0.6"
57
57
  },
58
58
  "devDependencies": {
@@ -58,4 +58,9 @@ export interface AztecKVStore {
58
58
  * Clears the store
59
59
  */
60
60
  clear(): Promise<void>;
61
+
62
+ /**
63
+ * Forks the store.
64
+ */
65
+ fork(): Promise<AztecKVStore>;
61
66
  }
package/src/lmdb/store.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { createDebugLogger } from '@aztec/foundation/log';
2
2
 
3
+ import { mkdtemp } from 'fs/promises';
3
4
  import { type Database, type Key, type RootDatabase, open } from 'lmdb';
5
+ import { tmpdir } from 'os';
6
+ import { join } from 'path';
4
7
 
5
8
  import { type AztecArray } from '../interfaces/array.js';
6
9
  import { type AztecCounter } from '../interfaces/counter.js';
@@ -22,7 +25,7 @@ export class AztecLmdbStore implements AztecKVStore {
22
25
  #data: Database<unknown, Key>;
23
26
  #multiMapData: Database<unknown, Key>;
24
27
 
25
- constructor(rootDb: RootDatabase) {
28
+ constructor(rootDb: RootDatabase, public readonly isEphemeral: boolean) {
26
29
  this.#rootDb = rootDb;
27
30
 
28
31
  // big bucket to store all the data
@@ -57,11 +60,19 @@ export class AztecLmdbStore implements AztecKVStore {
57
60
  log = createDebugLogger('aztec:kv-store:lmdb'),
58
61
  ): AztecLmdbStore {
59
62
  log.info(`Opening LMDB database at ${path || 'temporary location'}`);
60
- const rootDb = open({
61
- path,
62
- noSync: ephemeral,
63
- });
64
- return new AztecLmdbStore(rootDb);
63
+ const rootDb = open({ path, noSync: ephemeral });
64
+ return new AztecLmdbStore(rootDb, ephemeral);
65
+ }
66
+
67
+ /**
68
+ * Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
69
+ * @returns A new AztecLmdbStore.
70
+ */
71
+ async fork() {
72
+ const forkPath = join(await mkdtemp(join(tmpdir(), 'aztec-store-fork-')), 'root.mdb');
73
+ await this.#rootDb.backup(forkPath, false);
74
+ const forkDb = open(forkPath, { noSync: this.isEphemeral });
75
+ return new AztecLmdbStore(forkDb, this.isEphemeral);
65
76
  }
66
77
 
67
78
  /**
package/src/utils.ts CHANGED
@@ -9,7 +9,13 @@ export function createStore(
9
9
  rollupAddress: EthAddress,
10
10
  log: Logger = createDebugLogger('aztec:kv-store'),
11
11
  ) {
12
- return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false, log), rollupAddress, log);
12
+ if (config.dataDirectory) {
13
+ log.info(`Using data directory: ${config.dataDirectory}`);
14
+ } else {
15
+ log.info('Using ephemeral data directory');
16
+ }
17
+
18
+ return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false), rollupAddress, log);
13
19
  }
14
20
 
15
21
  /**
@@ -24,6 +30,9 @@ export async function initStoreForRollup<T extends AztecKVStore>(
24
30
  rollupAddress: EthAddress,
25
31
  log?: Logger,
26
32
  ): Promise<T> {
33
+ if (!rollupAddress) {
34
+ throw new Error('Rollup address is required');
35
+ }
27
36
  const rollupAddressValue = store.openSingleton<ReturnType<EthAddress['toString']>>('rollupAddress');
28
37
  const rollupAddressString = rollupAddress.toString();
29
38
  const storedRollupAddressString = rollupAddressValue.get();