@warptoad/skinny-fat-imt-js 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Trees.d.ts CHANGED
@@ -23,7 +23,7 @@ type ReadableAbi = readonly [...ReadableStorageAbi, ...ReadableEventAbi];
23
23
  * AbiEvent, not a whole abi, and this is the exact same thing `queryEventInChunks` infers for
24
24
  * `eventName`, so filters typed with it line up with the query they're passed to.
25
25
  */
26
- type ReadableEvent<TName extends string> = Extract<ReadableAbi[number], AbiEvent & {
26
+ export type ReadableEvent<TName extends string> = Extract<ReadableAbi[number], AbiEvent & {
27
27
  name: TName;
28
28
  }>;
29
29
  export declare const readableStorageAbi: [{
@@ -587,7 +587,7 @@ export declare const ERC165_IDS: {
587
587
  readonly fatEvent: `0x${string}`;
588
588
  readonly fatStorage: `0x${string}`;
589
589
  };
590
- declare enum TREE_TYPE {
590
+ export declare enum TREE_TYPE {
591
591
  UNKNOWN = 0,
592
592
  FAT_STORAGE = 1,
593
593
  FAT_EVENT = 2,
@@ -602,6 +602,11 @@ export type CachedTree = {
602
602
  lastSynced: bigint;
603
603
  insertOnlyTree?: boolean;
604
604
  };
605
+ /** A {@link LeanIMT} without the four methods that mutate it. `leaves` already hands back a copy. */
606
+ export type ReadonlyLeanIMT = Omit<LeanIMT<bigint>, "insert" | "insertMany" | "update" | "updateMany">;
607
+ export type ReadonlyCachedTree = Readonly<Omit<CachedTree, "tree"> & {
608
+ tree: ReadonlyLeanIMT;
609
+ }>;
605
610
  /**
606
611
  * A detached LeanIMT holding the same leaves *and* internal nodes as `tree`, so it can be grown
607
612
  * without touching the original. Copies the nodes rather than replaying the leaves on purpose:
@@ -609,8 +614,17 @@ export type CachedTree = {
609
614
  * growing a cached tree is trying to avoid. This is array copies only, no hashing.
610
615
  */
611
616
  export declare function copyTree(tree: LeanIMT<bigint>, hashFunc: LeanIMTHashFunction): LeanIMT<bigint>;
617
+ export declare function copyCachedTree(cached: CachedTree, hashFunc: LeanIMTHashFunction): CachedTree;
612
618
  export declare class Trees {
613
- private trees;
619
+ private _cache;
620
+ /**
621
+ * The trees this instance has synced, keyed by treeId. Read only: growing one of these behind the
622
+ * lib's back leaves it claiming a `lastSynced` its leaves don't match, and the next sync merges
623
+ * into it as if it were the state at that block. {@link copyCachedTree} gives you one to keep.
624
+ */
625
+ get cache(): Readonly<{
626
+ readonly [treeId: Hex]: ReadonlyCachedTree;
627
+ }>;
614
628
  /** last known size per tree, with the block it was read at. See {@link getTreeSizeStorage}. */
615
629
  private sizes;
616
630
  contractAddress: Address;
@@ -673,6 +687,7 @@ export declare class Trees {
673
687
  getTreeSizeStorage(treeId: Hex, chainId: number, blockNumber: bigint): Promise<bigint>;
674
688
  getRootStorage(treeId: Hex, chainId: number, blockNumber: bigint): Promise<bigint>;
675
689
  initTree(treeId: Hex, chainId: number): Promise<CachedTree>;
690
+ private initTreeCached;
676
691
  }
677
692
  export declare function identifyTree(treeId: bigint, contract: AnyContract): Promise<TREE_TYPE>;
678
693
  type SyncState = {
@@ -1 +1 @@
1
- {"version":3,"file":"Trees.d.ts","sourceRoot":"","sources":["../src/Trees.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Trees.d.ts","sourceRoot":"","sources":["../src/Trees.ts"],"names":[],"mappings":"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"}
package/dist/Trees.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { LeanIMT } from "@zk-kit/lean-imt";
2
2
  import { poseidon2Hash } from "@zkpassport/poseidon2";
3
3
  import { getContract, toHex } from "viem";
4
- import { getInterfaceId, detectSupportedInterfaces, supportsInterface } from "./interfaceId.js";
5
- import { minBigInt, queryEventInChunks, queryMultiEventsInChunks } from "./eventScanning.js";
4
+ import { getInterfaceId, supportsInterface } from "./interfaceId.js";
5
+ import { minBigInt, queryMultiEventsInChunks } from "./eventScanning.js";
6
6
  // ABIs baked out of the hardhat artifacts by `scripts/genAbis.mjs` — `as const` tuples, so viem
7
7
  // infers exactly what the generated `*$Type["abi"]` used to give us, without the published
8
8
  // typings depending on hardhat. Regenerate with `pnpm compile`.
@@ -27,7 +27,7 @@ export const ERC165_IDS = {
27
27
  fatEvent: getInterfaceId(iFatEventAbi),
28
28
  fatStorage: getInterfaceId(iFatStorageAbi, [iFatEventAbi]),
29
29
  };
30
- var TREE_TYPE;
30
+ export var TREE_TYPE;
31
31
  (function (TREE_TYPE) {
32
32
  TREE_TYPE[TREE_TYPE["UNKNOWN"] = 0] = "UNKNOWN";
33
33
  TREE_TYPE[TREE_TYPE["FAT_STORAGE"] = 1] = "FAT_STORAGE";
@@ -50,8 +50,19 @@ export function copyTree(tree, hashFunc) {
50
50
  copy._nodes = nodes.map((level) => level.slice());
51
51
  return copy;
52
52
  }
53
+ export function copyCachedTree(cached, hashFunc) {
54
+ return { ...cached, tree: copyTree(cached.tree, hashFunc) };
55
+ }
53
56
  export class Trees {
54
- trees = {};
57
+ _cache = {};
58
+ /**
59
+ * The trees this instance has synced, keyed by treeId. Read only: growing one of these behind the
60
+ * lib's back leaves it claiming a `lastSynced` its leaves don't match, and the next sync merges
61
+ * into it as if it were the state at that block. {@link copyCachedTree} gives you one to keep.
62
+ */
63
+ get cache() {
64
+ return this._cache;
65
+ }
55
66
  /** last known size per tree, with the block it was read at. See {@link getTreeSizeStorage}. */
56
67
  sizes = {};
57
68
  contractAddress;
@@ -67,7 +78,7 @@ export class Trees {
67
78
  let syncedTrees;
68
79
  // fullNode mode syncs all cached trees, non fullNode mode will auto discover them, so left empty
69
80
  const treeIdsNotSet = treeIds === undefined || treeIds.length === 0;
70
- treeIds = treeIdsNotSet ? fullNodeMode ? Object.keys(this.trees).map((v) => BigInt(v)) : [] : treeIds;
81
+ treeIds = treeIdsNotSet ? fullNodeMode ? Object.keys(this._cache).map((v) => BigInt(v)) : [] : treeIds;
71
82
  if (autoDiscovery && fullNodeMode) {
72
83
  throw new Error(`auto treeId discovery not supported in fullNodeMode, please provide treeIds to sync. Or turn off fullNodeMode: \`Trees.sync([],{fullNodeMode:false})\``);
73
84
  }
@@ -97,7 +108,7 @@ export class Trees {
97
108
  */
98
109
  async syncTreesStorage(treeIds = undefined, { chunkSize = 2000n, attemptFastSizeMatch = true, blockNumber } = {}) {
99
110
  // default syncs all previously synced trees
100
- treeIds ??= Object.keys(this.trees).map((v) => BigInt(v));
111
+ treeIds ??= Object.keys(this._cache).map((v) => BigInt(v));
101
112
  if (treeIds.length === 0) {
102
113
  throw new Error(`Nothing to sync. No treeIds in cache and no treeIds provided. Please specify which treeIds to sync. SyncTreesStorage cant automatically find them. If you don't know the treeIds, use syncTreesEvent or maybe the contract using the skinny/fat-imt library if it can provide the treeId.`);
103
114
  }
@@ -106,7 +117,7 @@ export class Trees {
106
117
  }
107
118
  const treeIdsHex = treeIds.map((id) => toHex(id));
108
119
  const chainId = await this.publicClient.getChainId();
109
- const cachedTrees = treeIdsHex.filter((id) => this.trees[id] !== undefined && this.trees[id].tree.size > 0);
120
+ const cachedTrees = treeIdsHex.filter((id) => this._cache[id] !== undefined && this._cache[id].tree.size > 0);
110
121
  if (attemptFastSizeMatch === false && cachedTrees.length > 0) {
111
122
  console.warn(`treeIds:${cachedTrees} where found in cache from a previous sync. But attemptFastSizeMatch=false so this cache is not tried and every leaf is read again. The attempt is checked against the onchain root, so it can't cache a wrong tree, it only costs a re-read when it doesn't hold.`);
112
123
  }
@@ -125,7 +136,7 @@ export class Trees {
125
136
  for (const treeId of treeIdsHex) {
126
137
  const targetSize = await this.getTreeSizeStorage(treeId, chainId, blockNumber);
127
138
  const onchainRoot = await this.getRootStorage(treeId, chainId, blockNumber);
128
- const cached = this.trees[treeId];
139
+ const cached = this._cache[treeId];
129
140
  const cacheSize = BigInt(cached ? cached.tree.size : 0);
130
141
  let tree = undefined;
131
142
  // leaves the attempt below already read from the contract, covering [readFrom, targetSize).
@@ -175,19 +186,19 @@ export class Trees {
175
186
  if ((tree.root ?? 0n) !== onchainRoot) {
176
187
  // every leaf came straight from the contract at this block, so this is not a stale
177
188
  // cache. Drop what's cached for this tree, the attempt above may have grown it.
178
- delete this.trees[treeId];
189
+ delete this._cache[treeId];
179
190
  throw new Error(`Synced treeId:${treeId} to root:${tree.root ?? 0n} at block:${blockNumber}, but the contract reports root:${onchainRoot} for it. Its leaves and its root disagree, so one of the two reads is not what this lib expects.`);
180
191
  }
181
192
  }
182
- this.trees[treeId] = {
193
+ this._cache[treeId] = {
183
194
  tree: tree,
184
- type: this.trees[treeId].type, // getTreeType() above put every treeId in the cache
195
+ type: this._cache[treeId].type, // getTreeType() above put every treeId in the cache
185
196
  lastSynced: blockNumber,
186
197
  // attemptFastSizeMatch is a guess this sync made, not something it learned about the tree,
187
198
  // so whatever is known about updates stays as it was
188
- insertOnlyTree: this.trees[treeId].insertOnlyTree
199
+ insertOnlyTree: this._cache[treeId].insertOnlyTree
189
200
  };
190
- syncedTrees[treeId] = this.trees[treeId];
201
+ syncedTrees[treeId] = copyCachedTree(this._cache[treeId], this.hashFunc);
191
202
  }
192
203
  return syncedTrees;
193
204
  }
@@ -228,7 +239,7 @@ export class Trees {
228
239
  // if all of them are synced before, we don't sync all leaves, just those who happened after the most out of date tree was synced at
229
240
  // when looking for a specific root we need to also go down to the lowest block since the root might be older then the last sync
230
241
  const oldestBlock = discoverAllIds || syncToRoot !== undefined ? BigInt(getDeploymentBlock(chainId)) : this.getOldestSyncBlock(treeIds);
231
- const syncState = { treeCache: this.trees, treeState: {}, lastBlockSynced: newestBlock, unsyncedIds: new Set(treeIds.map((id) => toHex(id))) };
242
+ const syncState = { treeCache: this._cache, treeState: {}, lastBlockSynced: newestBlock, unsyncedIds: new Set(treeIds.map((id) => toHex(id))) };
232
243
  const insertEvents = hasRepeatedLeafs ? ["NewLeaf", "RepeatedLeafs"] : ["NewLeaf"];
233
244
  const leafEvents = insertOnlyTree ? insertEvents : ["UpdatedLeaf", ...insertEvents];
234
245
  do {
@@ -253,12 +264,12 @@ export class Trees {
253
264
  const allTreeIds = new Set([...treeIds.map((id) => toHex(id)), ...Object.keys(syncState.treeState)]);
254
265
  for (const treeId of allTreeIds) {
255
266
  const newSyncState = syncState.treeState[treeId];
256
- const cacheTree = this.trees[treeId];
267
+ const cacheTree = this._cache[treeId];
257
268
  const isNotOld = cacheTree === undefined
258
269
  || (newSyncState !== undefined && newSyncState.lastSynced >= cacheTree.lastSynced);
259
270
  // no-op, no new state and no rollback (syncToRoot on old root can be used to go back to a older root)
260
271
  if (isNotOld === false && syncToRoot === undefined) {
261
- syncedTrees[treeId] = cacheTree;
272
+ syncedTrees[treeId] = copyCachedTree(cacheTree, this.hashFunc);
262
273
  continue;
263
274
  }
264
275
  const canMerge = newSyncState !== undefined && cacheTree !== undefined && isNotOld
@@ -330,9 +341,9 @@ export class Trees {
330
341
  // a sync may only ever move the cache forward. A syncToRoot rollback is handed to the
331
342
  // caller, but the cache keeps the newer tree it already had.
332
343
  if (isNotOld) {
333
- this.trees[treeId] = synced;
344
+ this._cache[treeId] = synced;
334
345
  }
335
- syncedTrees[treeId] = synced;
346
+ syncedTrees[treeId] = copyCachedTree(synced, this.hashFunc);
336
347
  }
337
348
  if (syncToRoot !== undefined) {
338
349
  const allTreeIds = Object.keys(syncedTrees);
@@ -377,7 +388,7 @@ export class Trees {
377
388
  let oldest = treeIds[0];
378
389
  let oldestBlock = 2n ** 256n; // Infinity replacement
379
390
  for (const id of treeIds) {
380
- const tree = this.trees[id];
391
+ const tree = this._cache[id];
381
392
  if (tree === undefined) {
382
393
  return id;
383
394
  }
@@ -389,18 +400,18 @@ export class Trees {
389
400
  return oldest;
390
401
  }
391
402
  getOldestSyncBlock(treeIds) {
392
- const oldestTree = this.trees[this.getOldestSyncTreeId(treeIds.map((id) => toHex(id)))];
403
+ const oldestTree = this._cache[this.getOldestSyncTreeId(treeIds.map((id) => toHex(id)))];
393
404
  return oldestTree ? oldestTree.lastSynced : 0n;
394
405
  }
395
406
  async getTreeType(treeId, chainId) {
396
- return (await this.initTree(treeId, chainId)).type;
407
+ return (await this.initTreeCached(treeId, chainId)).type;
397
408
  }
398
409
  async getLeavesStorage(treeId, chainId, startIndex, endIndex, blockNumber) {
399
410
  const size = await this.getTreeSizeStorage(treeId, chainId, blockNumber);
400
411
  if (startIndex > endIndex || endIndex > size) {
401
412
  throw new Error(`Leaf range [${startIndex}, ${endIndex}) is out of range for treeId:${treeId}, which holds ${size} leaves at block:${blockNumber}.`);
402
413
  }
403
- const treeType = (await this.initTree(treeId, chainId)).type;
414
+ const treeType = (await this.initTreeCached(treeId, chainId)).type;
404
415
  const contract = await this.getContract();
405
416
  switch (treeType) {
406
417
  case TREE_TYPE.SKINNY_STORAGE:
@@ -423,7 +434,7 @@ export class Trees {
423
434
  if (cachedSize !== undefined && cachedSize.blockNumber === blockNumber) {
424
435
  return cachedSize.size;
425
436
  }
426
- const treeType = (await this.initTree(treeId, chainId)).type;
437
+ const treeType = (await this.initTreeCached(treeId, chainId)).type;
427
438
  const contract = await this.getContract();
428
439
  let size;
429
440
  switch (treeType) {
@@ -442,7 +453,7 @@ export class Trees {
442
453
  return size;
443
454
  }
444
455
  async getRootStorage(treeId, chainId, blockNumber) {
445
- const treeType = (await this.initTree(treeId, chainId)).type;
456
+ const treeType = (await this.initTreeCached(treeId, chainId)).type;
446
457
  const contract = await this.getContract();
447
458
  switch (treeType) {
448
459
  case TREE_TYPE.SKINNY_STORAGE:
@@ -456,16 +467,19 @@ export class Trees {
456
467
  }
457
468
  }
458
469
  async initTree(treeId, chainId) {
459
- if (this.trees[treeId]) {
460
- return this.trees[treeId];
470
+ return copyCachedTree(await this.initTreeCached(treeId, chainId), this.hashFunc);
471
+ }
472
+ async initTreeCached(treeId, chainId) {
473
+ if (this._cache[treeId]) {
474
+ return this._cache[treeId];
461
475
  }
462
476
  const treeType = await identifyTree(BigInt(treeId), await this.getContract());
463
- this.trees[treeId] = {
477
+ this._cache[treeId] = {
464
478
  tree: new LeanIMT(this.hashFunc),
465
479
  type: treeType,
466
480
  lastSynced: BigInt(getDeploymentBlock(chainId))
467
481
  };
468
- return this.trees[treeId];
482
+ return this._cache[treeId];
469
483
  }
470
484
  }
471
485
  export async function identifyTree(treeId, contract) {
package/dist/Trees.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Trees.js","sourceRoot":"","sources":["../src/Trees.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Trees.js","sourceRoot":"","sources":["../src/Trees.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@warptoad/skinny-fat-imt-js",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "js library counter part of skinny-fat-imt contracts, used to sync the onchain tree client side",
5
5
  "license": "MIT",
6
6
  "author": "warptoad",
package/src/Trees.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { LeanIMT, type LeanIMTHashFunction } from "@zk-kit/lean-imt";
2
2
  import { poseidon2Hash } from "@zkpassport/poseidon2";
3
- import { getContract, toHex, type Abi, type AbiEvent, type Address, type GetContractReturnType, type Hex, type Log, type PublicClient, type WalletClient } from "viem";
3
+ import { getContract, toHex, type Abi, type AbiEvent, type Address, type GetContractReturnType, type Hex, type PublicClient } from "viem";
4
4
 
5
- import { getInterfaceId, detectSupportedInterfaces, supportsInterface } from "./interfaceId.js";
5
+ import { getInterfaceId, supportsInterface } from "./interfaceId.js";
6
6
 
7
- import { minBigInt, queryEventInChunks, queryMultiEventsInChunks, type EventLog, type PostQueryEventFilter } from "./eventScanning.js";
7
+ import { minBigInt, queryMultiEventsInChunks, type EventLog, type PostQueryEventFilter } from "./eventScanning.js";
8
8
 
9
9
  // ABIs baked out of the hardhat artifacts by `scripts/genAbis.mjs` — `as const` tuples, so viem
10
10
  // infers exactly what the generated `*$Type["abi"]` used to give us, without the published
@@ -51,7 +51,7 @@ type ReadableAbi = readonly [...ReadableStorageAbi, ...ReadableEventAbi]
51
51
  * AbiEvent, not a whole abi, and this is the exact same thing `queryEventInChunks` infers for
52
52
  * `eventName`, so filters typed with it line up with the query they're passed to.
53
53
  */
54
- type ReadableEvent<TName extends string> = Extract<ReadableAbi[number], AbiEvent & { name: TName }>;
54
+ export type ReadableEvent<TName extends string> = Extract<ReadableAbi[number], AbiEvent & { name: TName }>;
55
55
 
56
56
 
57
57
  export const readableStorageAbi = [
@@ -86,12 +86,7 @@ type IStorageSupport = {
86
86
  storage: boolean | undefined;
87
87
  };
88
88
 
89
- type IFamilySupport = {
90
- skinny: IStorageSupport;
91
- fat: IStorageSupport;
92
- };
93
-
94
- enum TREE_TYPE {
89
+ export enum TREE_TYPE {
95
90
  UNKNOWN,
96
91
  FAT_STORAGE,
97
92
  FAT_EVENT,
@@ -104,6 +99,11 @@ export const LeanIMTHashFuncPoseidon2: LeanIMTHashFunction = (a: bigint, b: bigi
104
99
 
105
100
  export type CachedTree = { tree: LeanIMT<bigint>, type: TREE_TYPE, lastSynced: bigint, insertOnlyTree?: boolean }
106
101
 
102
+ /** A {@link LeanIMT} without the four methods that mutate it. `leaves` already hands back a copy. */
103
+ export type ReadonlyLeanIMT = Omit<LeanIMT<bigint>, "insert" | "insertMany" | "update" | "updateMany">
104
+
105
+ export type ReadonlyCachedTree = Readonly<Omit<CachedTree, "tree"> & { tree: ReadonlyLeanIMT }>
106
+
107
107
  /**
108
108
  * A detached LeanIMT holding the same leaves *and* internal nodes as `tree`, so it can be grown
109
109
  * without touching the original. Copies the nodes rather than replaying the leaves on purpose:
@@ -118,8 +118,22 @@ export function copyTree(tree: LeanIMT<bigint>, hashFunc: LeanIMTHashFunction):
118
118
  return copy
119
119
  }
120
120
 
121
+ export function copyCachedTree(cached: CachedTree, hashFunc: LeanIMTHashFunction): CachedTree {
122
+ return { ...cached, tree: copyTree(cached.tree, hashFunc) }
123
+ }
124
+
121
125
  export class Trees {
122
- private trees: { [treeId: Hex]: CachedTree } = {}
126
+ private _cache: { [treeId: Hex]: CachedTree } = {}
127
+
128
+ /**
129
+ * The trees this instance has synced, keyed by treeId. Read only: growing one of these behind the
130
+ * lib's back leaves it claiming a `lastSynced` its leaves don't match, and the next sync merges
131
+ * into it as if it were the state at that block. {@link copyCachedTree} gives you one to keep.
132
+ */
133
+ get cache(): Readonly<{ readonly [treeId: Hex]: ReadonlyCachedTree }> {
134
+ return this._cache
135
+ }
136
+
123
137
  /** last known size per tree, with the block it was read at. See {@link getTreeSizeStorage}. */
124
138
  private sizes: { [treeId: Hex]: { blockNumber: bigint, size: bigint } } = {}
125
139
 
@@ -139,7 +153,7 @@ export class Trees {
139
153
 
140
154
  // fullNode mode syncs all cached trees, non fullNode mode will auto discover them, so left empty
141
155
  const treeIdsNotSet = treeIds === undefined || treeIds.length === 0;
142
- treeIds = treeIdsNotSet ? fullNodeMode ? (Object.keys(this.trees) as Hex[]).map((v) => BigInt(v)) : [] : treeIds
156
+ treeIds = treeIdsNotSet ? fullNodeMode ? (Object.keys(this._cache) as Hex[]).map((v) => BigInt(v)) : [] : treeIds
143
157
  if (autoDiscovery && fullNodeMode) { throw new Error(`auto treeId discovery not supported in fullNodeMode, please provide treeIds to sync. Or turn off fullNodeMode: \`Trees.sync([],{fullNodeMode:false})\``) }
144
158
  if (fullNodeMode) {
145
159
  syncedTrees = await this.syncTreesStorage(
@@ -179,7 +193,7 @@ export class Trees {
179
193
  { chunkSize = 2000n, attemptFastSizeMatch = true, blockNumber }: { attemptFastSizeMatch?: boolean, chunkSize?: bigint, blockNumber?: bigint } = {}
180
194
  ): Promise<{ [treeId: Hex]: CachedTree }> {
181
195
  // default syncs all previously synced trees
182
- treeIds ??= (Object.keys(this.trees) as Hex[]).map((v) => BigInt(v));
196
+ treeIds ??= (Object.keys(this._cache) as Hex[]).map((v) => BigInt(v));
183
197
  if (treeIds.length === 0) {
184
198
  throw new Error(`Nothing to sync. No treeIds in cache and no treeIds provided. Please specify which treeIds to sync. SyncTreesStorage cant automatically find them. If you don't know the treeIds, use syncTreesEvent or maybe the contract using the skinny/fat-imt library if it can provide the treeId.`)
185
199
  }
@@ -189,7 +203,7 @@ export class Trees {
189
203
  const treeIdsHex = treeIds.map((id) => toHex(id));
190
204
 
191
205
  const chainId = await this.publicClient.getChainId();
192
- const cachedTrees = treeIdsHex.filter((id) => this.trees[id] !== undefined && this.trees[id].tree.size > 0)
206
+ const cachedTrees = treeIdsHex.filter((id) => this._cache[id] !== undefined && this._cache[id].tree.size > 0)
193
207
  if (attemptFastSizeMatch === false && cachedTrees.length > 0) {
194
208
  console.warn(`treeIds:${cachedTrees} where found in cache from a previous sync. But attemptFastSizeMatch=false so this cache is not tried and every leaf is read again. The attempt is checked against the onchain root, so it can't cache a wrong tree, it only costs a re-read when it doesn't hold.`)
195
209
  }
@@ -209,7 +223,7 @@ export class Trees {
209
223
  for (const treeId of treeIdsHex) {
210
224
  const targetSize = await this.getTreeSizeStorage(treeId, chainId, blockNumber)
211
225
  const onchainRoot = await this.getRootStorage(treeId, chainId, blockNumber)
212
- const cached = this.trees[treeId]
226
+ const cached = this._cache[treeId]
213
227
  const cacheSize = BigInt(cached ? cached.tree.size : 0)
214
228
 
215
229
  let tree: LeanIMT<bigint> | undefined = undefined
@@ -259,20 +273,20 @@ export class Trees {
259
273
  if ((tree.root ?? 0n) !== onchainRoot) {
260
274
  // every leaf came straight from the contract at this block, so this is not a stale
261
275
  // cache. Drop what's cached for this tree, the attempt above may have grown it.
262
- delete this.trees[treeId]
276
+ delete this._cache[treeId]
263
277
  throw new Error(`Synced treeId:${treeId} to root:${tree.root ?? 0n} at block:${blockNumber}, but the contract reports root:${onchainRoot} for it. Its leaves and its root disagree, so one of the two reads is not what this lib expects.`)
264
278
  }
265
279
  }
266
280
 
267
- this.trees[treeId] = {
281
+ this._cache[treeId] = {
268
282
  tree: tree,
269
- type: this.trees[treeId].type, // getTreeType() above put every treeId in the cache
283
+ type: this._cache[treeId].type, // getTreeType() above put every treeId in the cache
270
284
  lastSynced: blockNumber,
271
285
  // attemptFastSizeMatch is a guess this sync made, not something it learned about the tree,
272
286
  // so whatever is known about updates stays as it was
273
- insertOnlyTree: this.trees[treeId].insertOnlyTree
287
+ insertOnlyTree: this._cache[treeId].insertOnlyTree
274
288
  }
275
- syncedTrees[treeId] = this.trees[treeId]
289
+ syncedTrees[treeId] = copyCachedTree(this._cache[treeId], this.hashFunc)
276
290
  }
277
291
  return syncedTrees
278
292
  }
@@ -319,7 +333,7 @@ export class Trees {
319
333
  // when looking for a specific root we need to also go down to the lowest block since the root might be older then the last sync
320
334
  const oldestBlock = discoverAllIds || syncToRoot !== undefined ? BigInt(getDeploymentBlock(chainId)) : this.getOldestSyncBlock(treeIds)
321
335
 
322
- const syncState: SyncState = { treeCache: this.trees, treeState: {}, lastBlockSynced: newestBlock, unsyncedIds: new Set(treeIds.map((id) => toHex(id))) }
336
+ const syncState: SyncState = { treeCache: this._cache, treeState: {}, lastBlockSynced: newestBlock, unsyncedIds: new Set(treeIds.map((id) => toHex(id))) }
323
337
 
324
338
  const insertEvents = hasRepeatedLeafs ? ["NewLeaf", "RepeatedLeafs"] as const : ["NewLeaf"] as const;
325
339
  const leafEvents = insertOnlyTree ? insertEvents : ["UpdatedLeaf", ...insertEvents] as const
@@ -346,14 +360,14 @@ export class Trees {
346
360
  const allTreeIds = new Set([...treeIds.map((id) => toHex(id)), ...Object.keys(syncState.treeState) as Hex[]])
347
361
  for (const treeId of allTreeIds) {
348
362
  const newSyncState = syncState.treeState[treeId]
349
- const cacheTree = this.trees[treeId];
363
+ const cacheTree = this._cache[treeId];
350
364
 
351
365
  const isNotOld = cacheTree === undefined
352
366
  || (newSyncState !== undefined && newSyncState.lastSynced >= cacheTree.lastSynced)
353
367
 
354
368
  // no-op, no new state and no rollback (syncToRoot on old root can be used to go back to a older root)
355
369
  if (isNotOld === false && syncToRoot === undefined) {
356
- syncedTrees[treeId] = cacheTree
370
+ syncedTrees[treeId] = copyCachedTree(cacheTree, this.hashFunc)
357
371
  continue
358
372
  }
359
373
 
@@ -431,9 +445,10 @@ export class Trees {
431
445
  // a sync may only ever move the cache forward. A syncToRoot rollback is handed to the
432
446
  // caller, but the cache keeps the newer tree it already had.
433
447
  if (isNotOld) {
434
- this.trees[treeId] = synced
448
+ this._cache[treeId] = synced
435
449
  }
436
- syncedTrees[treeId] = synced;
450
+
451
+ syncedTrees[treeId] = copyCachedTree(synced, this.hashFunc);
437
452
  }
438
453
 
439
454
  if (syncToRoot !== undefined) {
@@ -483,7 +498,7 @@ export class Trees {
483
498
  let oldest = treeIds[0];
484
499
  let oldestBlock = 2n ** 256n; // Infinity replacement
485
500
  for (const id of treeIds) {
486
- const tree = this.trees[id]
501
+ const tree = this._cache[id]
487
502
  if (tree === undefined) {
488
503
  return id
489
504
  }
@@ -496,12 +511,12 @@ export class Trees {
496
511
  }
497
512
 
498
513
  getOldestSyncBlock(treeIds: bigint[]) {
499
- const oldestTree = this.trees[this.getOldestSyncTreeId(treeIds.map((id) => toHex(id)))]
514
+ const oldestTree = this._cache[this.getOldestSyncTreeId(treeIds.map((id) => toHex(id)))]
500
515
  return oldestTree ? oldestTree.lastSynced : 0n
501
516
  }
502
517
 
503
518
  async getTreeType(treeId: Hex, chainId: number) {
504
- return (await this.initTree(treeId, chainId)).type
519
+ return (await this.initTreeCached(treeId, chainId)).type
505
520
  }
506
521
 
507
522
  async getLeavesStorage(treeId: Hex, chainId: number, startIndex: bigint, endIndex: bigint, blockNumber: bigint) {
@@ -509,7 +524,7 @@ export class Trees {
509
524
  if (startIndex > endIndex || endIndex > size) {
510
525
  throw new Error(`Leaf range [${startIndex}, ${endIndex}) is out of range for treeId:${treeId}, which holds ${size} leaves at block:${blockNumber}.`)
511
526
  }
512
- const treeType = (await this.initTree(treeId, chainId)).type
527
+ const treeType = (await this.initTreeCached(treeId, chainId)).type
513
528
  const contract = await this.getContract()
514
529
  switch (treeType) {
515
530
  case TREE_TYPE.SKINNY_STORAGE:
@@ -533,7 +548,7 @@ export class Trees {
533
548
  if (cachedSize !== undefined && cachedSize.blockNumber === blockNumber) {
534
549
  return cachedSize.size
535
550
  }
536
- const treeType = (await this.initTree(treeId, chainId)).type
551
+ const treeType = (await this.initTreeCached(treeId, chainId)).type
537
552
  const contract = await this.getContract()
538
553
  let size: bigint
539
554
  switch (treeType) {
@@ -553,7 +568,7 @@ export class Trees {
553
568
  }
554
569
 
555
570
  async getRootStorage(treeId: Hex, chainId: number, blockNumber: bigint) {
556
- const treeType = (await this.initTree(treeId, chainId)).type
571
+ const treeType = (await this.initTreeCached(treeId, chainId)).type
557
572
  const contract = await this.getContract()
558
573
  switch (treeType) {
559
574
  case TREE_TYPE.SKINNY_STORAGE:
@@ -567,17 +582,21 @@ export class Trees {
567
582
  }
568
583
  }
569
584
 
570
- async initTree(treeId: Hex, chainId: number) {
571
- if (this.trees[treeId]) {
572
- return this.trees[treeId]
585
+ async initTree(treeId: Hex, chainId: number): Promise<CachedTree> {
586
+ return copyCachedTree(await this.initTreeCached(treeId, chainId), this.hashFunc)
587
+ }
588
+
589
+ private async initTreeCached(treeId: Hex, chainId: number): Promise<CachedTree> {
590
+ if (this._cache[treeId]) {
591
+ return this._cache[treeId]
573
592
  }
574
593
  const treeType = await identifyTree(BigInt(treeId), await this.getContract());
575
- this.trees[treeId] = {
594
+ this._cache[treeId] = {
576
595
  tree: new LeanIMT(this.hashFunc),
577
596
  type: treeType,
578
597
  lastSynced: BigInt(getDeploymentBlock(chainId))
579
598
  }
580
- return this.trees[treeId]
599
+ return this._cache[treeId]
581
600
  }
582
601
  }
583
602