diff --git a/bindings/napi/pubkeys.zig b/bindings/napi/pubkeys.zig index c458ea1f7..e65813520 100644 --- a/bindings/napi/pubkeys.zig +++ b/bindings/napi/pubkeys.zig @@ -32,6 +32,13 @@ pub const State = struct { self.index2pubkey.deinit(allocator); self.initialized = false; } + + pub fn reset(self: *State) !void { + if (!self.initialized) return; + + self.pubkey2index.clearRetainingCapacity(); + self.index2pubkey.shrinkRetainingCapacity(0); + } }; pub var state: State = .{}; @@ -152,6 +159,11 @@ pub fn load(file_path: js.String) !void { state.initialized = true; } +/// JS: pubkeys.reset() +pub fn reset() !void { + try state.reset(); +} + /// JS: pubkeys.getIndex(pubkeyBytes) → number | null pub fn getIndex(pubkey: js.Uint8Array) !js.Value { if (!state.initialized) return error.PubkeyIndexNotInitialized; diff --git a/bindings/src/pubkeys.d.ts b/bindings/src/pubkeys.d.ts index 988e0eec1..ad94b9eec 100644 --- a/bindings/src/pubkeys.d.ts +++ b/bindings/src/pubkeys.d.ts @@ -15,6 +15,8 @@ export interface PubkeyCache { readonly size: number; /** Load cache from a PKIX file (clears JS-level cache) */ load(filepath: string): void; + /** Clear native and JS-level cache contents */ + reset(): void; /** Save cache to a PKIX file */ save(filepath: string): void; /** Pre-allocate native capacity */ diff --git a/bindings/src/pubkeys.js b/bindings/src/pubkeys.js index 1887282f5..0590d6544 100644 --- a/bindings/src/pubkeys.js +++ b/bindings/src/pubkeys.js @@ -49,6 +49,11 @@ export const pubkeyCache = { native.load(filepath); }, + reset() { + pkCache.clear(); + native.reset(); + }, + save(filepath) { native.save(filepath); }, diff --git a/bindings/test/pubkeys.test.ts b/bindings/test/pubkeys.test.ts index 940e81d49..b24ad8989 100644 --- a/bindings/test/pubkeys.test.ts +++ b/bindings/test/pubkeys.test.ts @@ -90,4 +90,16 @@ describe("pubkeys", () => { const after = pubkeyCache.get(0); expect(before).not.toBe(after); }); + + it("reset clears native and JS-level cache", () => { + const before = pubkeyCache.get(0); + expect(before).toBeDefined(); + expect(pubkeyCache.getIndex(keypairs[0].pubkeyBytes)).toBeDefined(); + + pubkeyCache.reset(); + + expect(pubkeyCache.size).toBe(0); + expect(pubkeyCache.get(0)).toBeUndefined(); + expect(pubkeyCache.getIndex(keypairs[0].pubkeyBytes)).toBeNull(); + }); }); diff --git a/package.json b/package.json index 03758864a..aac6b3ca3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@chainsafe/lodestar-z", - "version": "0.1.2-rc.9", + "version": "0.1.2-rc.10", "description": "Lodestar-z NAPI bindings", "files": [ "bindings/src/",