@aztec/kv-store 0.63.1 → 0.65.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.
- package/dest/interfaces/store.d.ts +3 -1
- package/dest/interfaces/store.d.ts.map +1 -1
- package/dest/lmdb/store.d.ts +4 -1
- package/dest/lmdb/store.d.ts.map +1 -1
- package/dest/lmdb/store.js +39 -6
- package/dest/stores/index.d.ts +2 -0
- package/dest/stores/index.d.ts.map +1 -0
- package/dest/stores/index.js +2 -0
- package/dest/stores/l2_tips_store.d.ts +13 -0
- package/dest/stores/l2_tips_store.d.ts.map +1 -0
- package/dest/stores/l2_tips_store.js +51 -0
- package/package.json +6 -3
- package/src/interfaces/store.ts +1 -1
- package/src/lmdb/store.ts +43 -6
- package/src/stores/index.ts +1 -0
- package/src/stores/l2_tips_store.ts +69 -0
|
@@ -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;IAEvB;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAE9B;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,YAAY,IAAI;QAAE,
|
|
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;IAE9B;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,YAAY,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/E"}
|
package/dest/lmdb/store.d.ts
CHANGED
|
@@ -85,7 +85,10 @@ export declare class AztecLmdbStore implements AztecKVStore {
|
|
|
85
85
|
/** Deletes this store and removes the database files from disk */
|
|
86
86
|
delete(): Promise<void>;
|
|
87
87
|
estimateSize(): {
|
|
88
|
-
|
|
88
|
+
mappingSize: number;
|
|
89
|
+
actualSize: number;
|
|
90
|
+
numItems: number;
|
|
89
91
|
};
|
|
92
|
+
private estimateSubDBSize;
|
|
90
93
|
}
|
|
91
94
|
//# 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,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;;aAMC,WAAW,EAAE,OAAO;IAAE,OAAO,CAAC,IAAI,CAAC;gBAAzE,MAAM,EAAE,YAAY,EAAkB,WAAW,EAAE,OAAO,EAAU,IAAI,CAAC,oBAAQ;IAgB7F;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,SAAkB,EAAE,4BAA4B;IACzD,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAA2C,GAC7C,cAAc;IAUjB;;;OAGG;IACG,IAAI;IAYV;;;;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;IAMX;;OAEG;IACG,IAAI;IAMV;;OAEG;IACG,KAAK;IAMX,kEAAkE;IAC5D,MAAM;IASZ,YAAY,IAAI;QAAE,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAIA,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;;aAMC,WAAW,EAAE,OAAO;IAAE,OAAO,CAAC,IAAI,CAAC;gBAAzE,MAAM,EAAE,YAAY,EAAkB,WAAW,EAAE,OAAO,EAAU,IAAI,CAAC,oBAAQ;IAgB7F;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,SAAkB,EAAE,4BAA4B;IACzD,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAA2C,GAC7C,cAAc;IAUjB;;;OAGG;IACG,IAAI;IAYV;;;;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;IAMX;;OAEG;IACG,IAAI;IAMV;;OAEG;IACG,KAAK;IAMX,kEAAkE;IAC5D,MAAM;IASZ,YAAY,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAiB7E,OAAO,CAAC,iBAAiB;CA+B1B"}
|
package/dest/lmdb/store.js
CHANGED
|
@@ -157,16 +157,49 @@ export class AztecLmdbStore {
|
|
|
157
157
|
}
|
|
158
158
|
estimateSize() {
|
|
159
159
|
const stats = __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").getStats();
|
|
160
|
-
//
|
|
161
|
-
// since the database is mmap'd, this is a good estimate of the size of the database for now.
|
|
160
|
+
// The 'mapSize' is the total amount of virtual address space allocated to the DB (effectively the maximum possible size)
|
|
162
161
|
// http://www.lmdb.tech/doc/group__mdb.html#a4bde3c8b676457342cba2fe27aed5fbd
|
|
162
|
+
let mapSize = 0;
|
|
163
163
|
if ('mapSize' in stats && typeof stats.mapSize === 'number') {
|
|
164
|
-
|
|
164
|
+
mapSize = stats.mapSize;
|
|
165
165
|
}
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
const dataResult = this.estimateSubDBSize(__classPrivateFieldGet(this, _AztecLmdbStore_data, "f"));
|
|
167
|
+
const multiResult = this.estimateSubDBSize(__classPrivateFieldGet(this, _AztecLmdbStore_multiMapData, "f"));
|
|
168
|
+
return {
|
|
169
|
+
mappingSize: mapSize,
|
|
170
|
+
actualSize: dataResult.actualSize + multiResult.actualSize,
|
|
171
|
+
numItems: dataResult.numItems + multiResult.numItems,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
estimateSubDBSize(db) {
|
|
175
|
+
const stats = db.getStats();
|
|
176
|
+
let branchPages = 0;
|
|
177
|
+
let leafPages = 0;
|
|
178
|
+
let overflowPages = 0;
|
|
179
|
+
let pageSize = 0;
|
|
180
|
+
let totalSize = 0;
|
|
181
|
+
let numItems = 0;
|
|
182
|
+
// This is the total number of key/value pairs present in the DB
|
|
183
|
+
if ('entryCount' in stats && typeof stats.entryCount === 'number') {
|
|
184
|
+
numItems = stats.entryCount;
|
|
185
|
+
}
|
|
186
|
+
// The closest value we can get to the actual size of the database is the number of consumed pages * the page size
|
|
187
|
+
if ('treeBranchPageCount' in stats &&
|
|
188
|
+
typeof stats.treeBranchPageCount === 'number' &&
|
|
189
|
+
'treeLeafPageCount' in stats &&
|
|
190
|
+
typeof stats.treeLeafPageCount === 'number' &&
|
|
191
|
+
'overflowPages' in stats &&
|
|
192
|
+
typeof stats.overflowPages === 'number' &&
|
|
193
|
+
'pageSize' in stats &&
|
|
194
|
+
typeof stats.pageSize === 'number') {
|
|
195
|
+
branchPages = stats.treeBranchPageCount;
|
|
196
|
+
leafPages = stats.treeLeafPageCount;
|
|
197
|
+
overflowPages = stats.overflowPages;
|
|
198
|
+
pageSize = stats.pageSize;
|
|
199
|
+
totalSize = (branchPages + leafPages + overflowPages) * pageSize;
|
|
168
200
|
}
|
|
201
|
+
return { actualSize: totalSize, numItems };
|
|
169
202
|
}
|
|
170
203
|
}
|
|
171
204
|
_AztecLmdbStore_rootDb = new WeakMap(), _AztecLmdbStore_data = new WeakMap(), _AztecLmdbStore_multiMapData = new WeakMap(), _AztecLmdbStore_log = new WeakMap();
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUE4QyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVFyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQU16QixZQUFZLE1BQW9CLEVBQWtCLFdBQW9CLEVBQVUsSUFBYTtRQUEzQyxnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUFVLFNBQUksR0FBSixJQUFJLENBQVM7UUFMN0YseUNBQXNCO1FBQ3RCLHVDQUE4QjtRQUM5QiwrQ0FBc0M7UUFDdEMsOEJBQU8saUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBQztRQUc5Qyx1QkFBQSxJQUFJLDBCQUFXLE1BQU0sTUFBQSxDQUFDO1FBRXRCLG1DQUFtQztRQUNuQyx1QkFBQSxJQUFJLHdCQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type L2BlockStreamEvent, type L2BlockStreamEventHandler, type L2BlockStreamLocalDataProvider, type L2Tips } from '@aztec/circuit-types';
|
|
2
|
+
import { type AztecKVStore } from '../interfaces/store.js';
|
|
3
|
+
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
4
|
+
export declare class L2TipsStore implements L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider {
|
|
5
|
+
private readonly l2TipsStore;
|
|
6
|
+
private readonly l2BlockHashesStore;
|
|
7
|
+
constructor(store: AztecKVStore, namespace: string);
|
|
8
|
+
getL2BlockHash(number: number): Promise<string | undefined>;
|
|
9
|
+
getL2Tips(): Promise<L2Tips>;
|
|
10
|
+
private getL2Tip;
|
|
11
|
+
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=l2_tips_store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l2_tips_store.d.ts","sourceRoot":"","sources":["../../src/stores/l2_tips_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EAEnC,KAAK,MAAM,EACZ,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,oEAAoE;AACpE,qBAAa,WAAY,YAAW,yBAAyB,EAAE,8BAA8B;IAC3F,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;gBAElD,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;IAK3C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI3D,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAQnC,OAAO,CAAC,QAAQ;IAYH,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB9E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
2
|
+
export class L2TipsStore {
|
|
3
|
+
constructor(store, namespace) {
|
|
4
|
+
this.l2TipsStore = store.openMap([namespace, 'l2_tips'].join('_'));
|
|
5
|
+
this.l2BlockHashesStore = store.openMap([namespace, 'l2_block_hashes'].join('_'));
|
|
6
|
+
}
|
|
7
|
+
getL2BlockHash(number) {
|
|
8
|
+
return Promise.resolve(this.l2BlockHashesStore.get(number));
|
|
9
|
+
}
|
|
10
|
+
getL2Tips() {
|
|
11
|
+
return Promise.resolve({
|
|
12
|
+
latest: this.getL2Tip('latest'),
|
|
13
|
+
finalized: this.getL2Tip('finalized'),
|
|
14
|
+
proven: this.getL2Tip('proven'),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
getL2Tip(tag) {
|
|
18
|
+
const blockNumber = this.l2TipsStore.get(tag);
|
|
19
|
+
if (blockNumber === undefined || blockNumber === 0) {
|
|
20
|
+
return { number: 0, hash: undefined };
|
|
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 { number: blockNumber, hash: blockHash };
|
|
27
|
+
}
|
|
28
|
+
async handleBlockStreamEvent(event) {
|
|
29
|
+
switch (event.type) {
|
|
30
|
+
case 'blocks-added':
|
|
31
|
+
await this.l2TipsStore.set('latest', event.blocks.at(-1).number);
|
|
32
|
+
for (const block of event.blocks) {
|
|
33
|
+
await this.l2BlockHashesStore.set(block.number, block.header.hash().toString());
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
case 'chain-pruned':
|
|
37
|
+
await this.l2TipsStore.set('latest', event.blockNumber);
|
|
38
|
+
break;
|
|
39
|
+
case 'chain-proven':
|
|
40
|
+
await this.l2TipsStore.set('proven', event.blockNumber);
|
|
41
|
+
break;
|
|
42
|
+
case 'chain-finalized':
|
|
43
|
+
await this.l2TipsStore.set('finalized', event.blockNumber);
|
|
44
|
+
for (const key of this.l2BlockHashesStore.keys({ end: event.blockNumber })) {
|
|
45
|
+
await this.l2BlockHashesStore.delete(key);
|
|
46
|
+
}
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZXMvbDJfdGlwc19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFBWSxLQUFtQixFQUFFLFNBQWlCO1FBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBYztRQUNsQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxRQUFRLENBQUMsR0FBZTtRQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxJQUFJLFdBQVcsS0FBSyxTQUFTLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUF5QjtRQUMzRCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLGNBQWM7Z0JBQ2pCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xFLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssY0FBYztnQkFDakIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNO1lBQ1IsS0FBSyxjQUFjO2dCQUNqQixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELE1BQU07WUFDUixLQUFLLGlCQUFpQjtnQkFDcEIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMzRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDM0UsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO2dCQUNELE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/kv-store",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.65.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/interfaces/index.js",
|
|
7
7
|
"./lmdb": "./dest/lmdb/index.js",
|
|
8
8
|
"./utils": "./dest/utils.js",
|
|
9
|
+
"./stores": "./dest/stores/index.js",
|
|
9
10
|
"./config": "./dest/config.js"
|
|
10
11
|
},
|
|
11
12
|
"scripts": {
|
|
@@ -56,11 +57,13 @@
|
|
|
56
57
|
]
|
|
57
58
|
},
|
|
58
59
|
"dependencies": {
|
|
59
|
-
"@aztec/
|
|
60
|
-
"@aztec/
|
|
60
|
+
"@aztec/circuit-types": "0.65.0",
|
|
61
|
+
"@aztec/ethereum": "0.65.0",
|
|
62
|
+
"@aztec/foundation": "0.65.0",
|
|
61
63
|
"lmdb": "^3.0.6"
|
|
62
64
|
},
|
|
63
65
|
"devDependencies": {
|
|
66
|
+
"@aztec/circuits.js": "workspace:^",
|
|
64
67
|
"@jest/globals": "^29.5.0",
|
|
65
68
|
"@types/jest": "^29.5.0",
|
|
66
69
|
"@types/node": "^18.7.23",
|
package/src/interfaces/store.ts
CHANGED
package/src/lmdb/store.ts
CHANGED
|
@@ -182,15 +182,52 @@ export class AztecLmdbStore implements AztecKVStore {
|
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
estimateSize(): {
|
|
185
|
+
estimateSize(): { mappingSize: number; actualSize: number; numItems: number } {
|
|
186
186
|
const stats = this.#rootDb.getStats();
|
|
187
|
-
//
|
|
188
|
-
// since the database is mmap'd, this is a good estimate of the size of the database for now.
|
|
187
|
+
// The 'mapSize' is the total amount of virtual address space allocated to the DB (effectively the maximum possible size)
|
|
189
188
|
// http://www.lmdb.tech/doc/group__mdb.html#a4bde3c8b676457342cba2fe27aed5fbd
|
|
189
|
+
let mapSize = 0;
|
|
190
190
|
if ('mapSize' in stats && typeof stats.mapSize === 'number') {
|
|
191
|
-
|
|
192
|
-
} else {
|
|
193
|
-
return { bytes: 0 };
|
|
191
|
+
mapSize = stats.mapSize;
|
|
194
192
|
}
|
|
193
|
+
const dataResult = this.estimateSubDBSize(this.#data);
|
|
194
|
+
const multiResult = this.estimateSubDBSize(this.#multiMapData);
|
|
195
|
+
return {
|
|
196
|
+
mappingSize: mapSize,
|
|
197
|
+
actualSize: dataResult.actualSize + multiResult.actualSize,
|
|
198
|
+
numItems: dataResult.numItems + multiResult.numItems,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private estimateSubDBSize(db: Database<unknown, Key>): { actualSize: number; numItems: number } {
|
|
203
|
+
const stats = db.getStats();
|
|
204
|
+
let branchPages = 0;
|
|
205
|
+
let leafPages = 0;
|
|
206
|
+
let overflowPages = 0;
|
|
207
|
+
let pageSize = 0;
|
|
208
|
+
let totalSize = 0;
|
|
209
|
+
let numItems = 0;
|
|
210
|
+
// This is the total number of key/value pairs present in the DB
|
|
211
|
+
if ('entryCount' in stats && typeof stats.entryCount === 'number') {
|
|
212
|
+
numItems = stats.entryCount;
|
|
213
|
+
}
|
|
214
|
+
// The closest value we can get to the actual size of the database is the number of consumed pages * the page size
|
|
215
|
+
if (
|
|
216
|
+
'treeBranchPageCount' in stats &&
|
|
217
|
+
typeof stats.treeBranchPageCount === 'number' &&
|
|
218
|
+
'treeLeafPageCount' in stats &&
|
|
219
|
+
typeof stats.treeLeafPageCount === 'number' &&
|
|
220
|
+
'overflowPages' in stats &&
|
|
221
|
+
typeof stats.overflowPages === 'number' &&
|
|
222
|
+
'pageSize' in stats &&
|
|
223
|
+
typeof stats.pageSize === 'number'
|
|
224
|
+
) {
|
|
225
|
+
branchPages = stats.treeBranchPageCount;
|
|
226
|
+
leafPages = stats.treeLeafPageCount;
|
|
227
|
+
overflowPages = stats.overflowPages;
|
|
228
|
+
pageSize = stats.pageSize;
|
|
229
|
+
totalSize = (branchPages + leafPages + overflowPages) * pageSize;
|
|
230
|
+
}
|
|
231
|
+
return { actualSize: totalSize, numItems };
|
|
195
232
|
}
|
|
196
233
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './l2_tips_store.js';
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type L2BlockId,
|
|
3
|
+
type L2BlockStreamEvent,
|
|
4
|
+
type L2BlockStreamEventHandler,
|
|
5
|
+
type L2BlockStreamLocalDataProvider,
|
|
6
|
+
type L2BlockTag,
|
|
7
|
+
type L2Tips,
|
|
8
|
+
} from '@aztec/circuit-types';
|
|
9
|
+
|
|
10
|
+
import { type AztecMap } from '../interfaces/map.js';
|
|
11
|
+
import { type AztecKVStore } from '../interfaces/store.js';
|
|
12
|
+
|
|
13
|
+
/** Stores currently synced L2 tips and unfinalized block hashes. */
|
|
14
|
+
export class L2TipsStore implements L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider {
|
|
15
|
+
private readonly l2TipsStore: AztecMap<L2BlockTag, number>;
|
|
16
|
+
private readonly l2BlockHashesStore: AztecMap<number, string>;
|
|
17
|
+
|
|
18
|
+
constructor(store: AztecKVStore, namespace: string) {
|
|
19
|
+
this.l2TipsStore = store.openMap([namespace, 'l2_tips'].join('_'));
|
|
20
|
+
this.l2BlockHashesStore = store.openMap([namespace, 'l2_block_hashes'].join('_'));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public getL2BlockHash(number: number): Promise<string | undefined> {
|
|
24
|
+
return Promise.resolve(this.l2BlockHashesStore.get(number));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public getL2Tips(): Promise<L2Tips> {
|
|
28
|
+
return Promise.resolve({
|
|
29
|
+
latest: this.getL2Tip('latest'),
|
|
30
|
+
finalized: this.getL2Tip('finalized'),
|
|
31
|
+
proven: this.getL2Tip('proven'),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private getL2Tip(tag: L2BlockTag): L2BlockId {
|
|
36
|
+
const blockNumber = this.l2TipsStore.get(tag);
|
|
37
|
+
if (blockNumber === undefined || blockNumber === 0) {
|
|
38
|
+
return { number: 0, hash: undefined };
|
|
39
|
+
}
|
|
40
|
+
const blockHash = this.l2BlockHashesStore.get(blockNumber);
|
|
41
|
+
if (!blockHash) {
|
|
42
|
+
throw new Error(`Block hash not found for block number ${blockNumber}`);
|
|
43
|
+
}
|
|
44
|
+
return { number: blockNumber, hash: blockHash };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
|
|
48
|
+
switch (event.type) {
|
|
49
|
+
case 'blocks-added':
|
|
50
|
+
await this.l2TipsStore.set('latest', event.blocks.at(-1)!.number);
|
|
51
|
+
for (const block of event.blocks) {
|
|
52
|
+
await this.l2BlockHashesStore.set(block.number, block.header.hash().toString());
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case 'chain-pruned':
|
|
56
|
+
await this.l2TipsStore.set('latest', event.blockNumber);
|
|
57
|
+
break;
|
|
58
|
+
case 'chain-proven':
|
|
59
|
+
await this.l2TipsStore.set('proven', event.blockNumber);
|
|
60
|
+
break;
|
|
61
|
+
case 'chain-finalized':
|
|
62
|
+
await this.l2TipsStore.set('finalized', event.blockNumber);
|
|
63
|
+
for (const key of this.l2BlockHashesStore.keys({ end: event.blockNumber })) {
|
|
64
|
+
await this.l2BlockHashesStore.delete(key);
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|