@warptoad/skinny-fat-imt-js 0.0.3 → 0.0.5

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
@@ -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,10 +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
- readonly cache: {
614
- [treeId: Hex]: CachedTree;
615
- };
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
+ }>;
616
628
  /** last known size per tree, with the block it was read at. See {@link getTreeSizeStorage}. */
617
629
  private sizes;
618
630
  contractAddress: Address;
@@ -669,12 +681,13 @@ export declare class Trees {
669
681
  }>;
670
682
  getContract(): Promise<ReadableContract>;
671
683
  getOldestSyncTreeId(treeIds: Hex[]): Hex;
672
- getOldestSyncBlock(treeIds: bigint[]): bigint;
684
+ getOldestSyncBlock(treeIds: bigint[], chainId: number): bigint;
673
685
  getTreeType(treeId: Hex, chainId: number): Promise<TREE_TYPE>;
674
686
  getLeavesStorage(treeId: Hex, chainId: number, startIndex: bigint, endIndex: bigint, blockNumber: bigint): Promise<readonly bigint[]>;
675
687
  getTreeSizeStorage(treeId: Hex, chainId: number, blockNumber: bigint): Promise<bigint>;
676
688
  getRootStorage(treeId: Hex, chainId: number, blockNumber: bigint): Promise<bigint>;
677
689
  initTree(treeId: Hex, chainId: number): Promise<CachedTree>;
690
+ private initTreeCached;
678
691
  }
679
692
  export declare function identifyTree(treeId: bigint, contract: AnyContract): Promise<TREE_TYPE>;
680
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":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAsB,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC;AAI1I,OAAO,EAAsD,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAQnH,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,EAKhB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAEvF,MAAM,MAAM,WAAW,GAAG;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;CACzD,CAAA;AAED,KAAK,kBAAkB,GAAG,SAAS;IAC/B,GAAG,OAAO,gBAAgB;IAC1B,GAAG,OAAO,aAAa;CAC1B,CAAC;AAEF,KAAK,gBAAgB,GAAG,SAAS;IAC7B,GAAG,OAAO,cAAc;IACxB,GAAG,OAAO,WAAW;IACrB,GAAG,OAAO,aAAa;CAC1B,CAAA;AAED,KAAK,WAAW,GAAG,SAAS,CAAC,GAAG,kBAAkB,EAAE,GAAG,gBAAgB,CAAC,CAAA;AAExE;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAG3G,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGD,CAAC;AAE/B,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAID,CAAC;AAE7B,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAChF,MAAM,MAAM,uBAAuB,GAAG,qBAAqB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;AAC9F,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AAE1F,MAAM,MAAM,2BAA2B,GAAG,qBAAqB,CAAC,OAAO,cAAc,EAAE,YAAY,CAAC,CAAC;AACrG,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,CAAC,OAAO,gBAAgB,EAAE,YAAY,CAAC,CAAC;AACzG,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,CAAC,OAAO,WAAW,EAAE,YAAY,CAAC,CAAC;AAC/F,MAAM,MAAM,0BAA0B,GAAG,qBAAqB,CAAC,OAAO,aAAa,EAAE,YAAY,CAAC,CAAC;AAEnG,eAAO,MAAM,UAAU;;;;;CAKiB,CAAC;AAOzC,oBAAY,SAAS;IACjB,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,cAAc,IAAA;IACd,YAAY,IAAA;IACZ,YAAY,IAAA;CACf;AAED,eAAO,MAAM,wBAAwB,EAAE,mBAAqE,CAAA;AAE5G,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEjH,qGAAqG;AACrG,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC,CAAA;AAEtG,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,CAAA;AAE/F;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAM9F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,GAAG,UAAU,CAE5F;AAED,qBAAa,KAAK;IACd,OAAO,CAAC,MAAM,CAAoC;IAElD;;;;OAIG;IACH,IAAI,KAAK,IAAI,QAAQ,CAAC;QAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,kBAAkB,CAAA;KAAE,CAAC,CAEpE;IAED,+FAA+F;IAC/F,OAAO,CAAC,KAAK,CAA+D;IAErE,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAG,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,mBAAmB,CAAC;IACrC,OAAO,CAAC,YAAY,CAAe;gBAEvB,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,sBAA2B;IAMzF,IAAI,CAAC,OAAO,GAAE,MAAM,EAAE,GAAG,SAAqB,EAAE,EAAE,YAAmB,EAAE,oBAA2B,EAAE,UAAU,EAAE,cAAsB,EAAE,gBAAwB,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAuB,EAAE,WAAW,EAAE,GAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAO;;;IA0Cxe;;;;;;;;OAQG;IACG,gBAAgB,CAClB,OAAO,GAAE,MAAM,EAAE,GAAG,SAAqB,EACzC,EAAE,SAAiB,EAAE,oBAA2B,EAAE,WAAW,EAAE,GAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACnJ,OAAO,CAAC;QAAE,CAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAA;KAAE,CAAC;IAsGzC;;;;;OAKG;YACW,iBAAiB;IAWzB,cAAc,CAAC,OAAO,GAAE,MAAM,EAAE,GAAG,SAAqB,EAAE,EAAE,WAAW,EAAE,oBAA2B,EAAE,UAAU,EAAE,SAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAuB,EAAE,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAO;;;IAsMhY,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAqB9C,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG;IAgBxC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM;IAK/C,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;IAIxC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAwBxG,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAwBpE,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAehE,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAInD,cAAc;CAY/B;AAED,wBAAsB,YAAY,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,WAAW,sBAwCxB;AAED,KAAK,SAAS,GAAG;IACb,eAAe,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,SAAS,EAAE;QAAE,CAAC,MAAM,EAAE,GAAG,GAAG,UAAU,CAAA;KAAE,CAAC;IACzC,SAAS,EAAE;QAAE,CAAC,MAAM,EAAE,GAAG,GAAG;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAC1J,CAAA;AAED,KAAK,cAAc,GAAG,oBAAoB,CAAC,aAAa,CAAC,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,eAAe,CAAC,CAAC,CAAA;AAClH,wBAAgB,cAAc,CAC1B,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EACxC,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAmC,EAAE,GAAE;IAAE,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,kBAmGhN"}
package/dist/Trees.js CHANGED
@@ -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
- cache = {};
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,18 +78,28 @@ 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.cache).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
  }
85
+ // TODO if fullNode mode is on but one treeType is event only, it breaks. But it should still try and only warn it is scanning more then 1 year of events if it actually needs to
74
86
  if (fullNodeMode) {
75
87
  syncedTrees = await this.syncTreesStorage(treeIds, { chunkSize: storageChunkSize, attemptFastSizeMatch, blockNumber });
76
88
  // syncing to a specific root is not possible with pure storage, so we sync with storage first
77
89
  // then syncTreesEvent will look for the root and try to trim off the leaves that happened after the root we want
78
90
  // in tree with only inserts this will work and will allows us to get any tree that is up to 1 year old
79
91
  // if there are updates or resets, currently syncTreesEvent will have to go down till it found all leaves
92
+ // TODO optimize the syncToRoot + fullNodeMode case. The storage read above already has every leaf
93
+ // at head, so the event pass only needs the update events between head and the NewRoot we want:
94
+ // replay those backwards onto the storage tree (and shrink it, which it already does) and stop at
95
+ // that NewRoot, instead of being free to walk all the way down to the deployment block.
96
+ // Until that lands, a caller after a specific root is better off with fullNodeMode: false.
97
+ // TODO
80
98
  if (syncToRoot !== undefined) {
81
- syncedTrees = await this.syncTreesEvent(treeIds, { blockNumber, attemptFastSizeMatch, syncToRoot, chunkSize: eventChunkSize, insertOnlyTree, autoDiscovery, hasRepeatedLeafs });
99
+ const someNotSynced = treeIds?.some((v) => syncedTrees[toHex(v)].tree.root !== syncToRoot);
100
+ if (someNotSynced) {
101
+ syncedTrees = await this.syncTreesEvent(treeIds, { blockNumber, attemptFastSizeMatch, syncToRoot, chunkSize: eventChunkSize, insertOnlyTree, autoDiscovery, hasRepeatedLeafs });
102
+ }
82
103
  }
83
104
  }
84
105
  else {
@@ -97,7 +118,7 @@ export class Trees {
97
118
  */
98
119
  async syncTreesStorage(treeIds = undefined, { chunkSize = 2000n, attemptFastSizeMatch = true, blockNumber } = {}) {
99
120
  // default syncs all previously synced trees
100
- treeIds ??= Object.keys(this.cache).map((v) => BigInt(v));
121
+ treeIds ??= Object.keys(this._cache).map((v) => BigInt(v));
101
122
  if (treeIds.length === 0) {
102
123
  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
124
  }
@@ -106,10 +127,10 @@ export class Trees {
106
127
  }
107
128
  const treeIdsHex = treeIds.map((id) => toHex(id));
108
129
  const chainId = await this.publicClient.getChainId();
109
- const cachedTrees = treeIdsHex.filter((id) => this.cache[id] !== undefined && this.cache[id].tree.size > 0);
110
- if (attemptFastSizeMatch === false && cachedTrees.length > 0) {
111
- 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
- }
130
+ const cachedTrees = treeIdsHex.filter((id) => this._cache[id] !== undefined && this._cache[id].tree.size > 0);
131
+ // if (attemptFastSizeMatch === false && cachedTrees.length > 0) {
132
+ // 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.`)
133
+ // }
113
134
  const identifiedTreesEnt = await Promise.all(treeIdsHex.map(async (id) => [id, await this.getTreeType(id, chainId)]));
114
135
  const unsupportedTypes = [TREE_TYPE.NO_INTERFACE, TREE_TYPE.UNKNOWN, TREE_TYPE.SKINNY_EVENT];
115
136
  const unsupportedTrees = identifiedTreesEnt.filter(([id, type]) => unsupportedTypes.includes(type));
@@ -123,9 +144,11 @@ export class Trees {
123
144
  blockNumber ??= (await this.publicClient.getBlock({ blockTag: "safe" })).number;
124
145
  const syncedTrees = {};
125
146
  for (const treeId of treeIdsHex) {
147
+ // we could check early if cache.root === onchainRoot
148
+ // but not doing it yet because that only really saves one rpc call from the getTreeSizeStorage
126
149
  const targetSize = await this.getTreeSizeStorage(treeId, chainId, blockNumber);
127
150
  const onchainRoot = await this.getRootStorage(treeId, chainId, blockNumber);
128
- const cached = this.cache[treeId];
151
+ const cached = this._cache[treeId];
129
152
  const cacheSize = BigInt(cached ? cached.tree.size : 0);
130
153
  let tree = undefined;
131
154
  // leaves the attempt below already read from the contract, covering [readFrom, targetSize).
@@ -175,19 +198,19 @@ export class Trees {
175
198
  if ((tree.root ?? 0n) !== onchainRoot) {
176
199
  // every leaf came straight from the contract at this block, so this is not a stale
177
200
  // cache. Drop what's cached for this tree, the attempt above may have grown it.
178
- delete this.cache[treeId];
201
+ delete this._cache[treeId];
179
202
  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
203
  }
181
204
  }
182
- this.cache[treeId] = {
205
+ this._cache[treeId] = {
183
206
  tree: tree,
184
- type: this.cache[treeId].type, // getTreeType() above put every treeId in the cache
207
+ type: this._cache[treeId].type, // getTreeType() above put every treeId in the cache
185
208
  lastSynced: blockNumber,
186
209
  // attemptFastSizeMatch is a guess this sync made, not something it learned about the tree,
187
210
  // so whatever is known about updates stays as it was
188
- insertOnlyTree: this.cache[treeId].insertOnlyTree
211
+ insertOnlyTree: this._cache[treeId].insertOnlyTree
189
212
  };
190
- syncedTrees[treeId] = this.cache[treeId];
213
+ syncedTrees[treeId] = copyCachedTree(this._cache[treeId], this.hashFunc);
191
214
  }
192
215
  return syncedTrees;
193
216
  }
@@ -227,38 +250,62 @@ export class Trees {
227
250
  // in discovery we go all the way down, if treeIds are provided, we go down till all them are synced
228
251
  // 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
252
  // 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
- const oldestBlock = discoverAllIds || syncToRoot !== undefined ? BigInt(getDeploymentBlock(chainId)) : this.getOldestSyncBlock(treeIds);
231
- const syncState = { treeCache: this.cache, treeState: {}, lastBlockSynced: newestBlock, unsyncedIds: new Set(treeIds.map((id) => toHex(id))) };
253
+ const oldestBlock = discoverAllIds || syncToRoot !== undefined ? BigInt(getDeploymentBlock(chainId)) : this.getOldestSyncBlock(treeIds, chainId);
254
+ const syncState = { treeCache: this._cache, treeState: {}, lastBlockSynced: newestBlock, unsyncedIds: new Set(treeIds.map((id) => toHex(id))) };
255
+ // check if something is already synced in cache, so we don't waste time looking for a NewRoot tx
256
+ for (const id of syncState.unsyncedIds) {
257
+ const cachedTree = syncState.treeCache[id] && syncState.treeCache[id];
258
+ // TODO we can also support this if we instead look for that NewRoot event instead of eth_Call lookup, but then we need to store the block number of the last NewRoot event we found in the cached tree, so we can O(1) find `NewRoot event at block: X`
259
+ const hasGetRoot = cachedTree && [TREE_TYPE.UNKNOWN, TREE_TYPE.NO_INTERFACE].includes(cachedTree.type) === false;
260
+ if (hasGetRoot) {
261
+ const expectedRoot = syncToRoot ?? await this.getRootStorage(id, chainId, newestBlock);
262
+ if (syncState.treeCache[id] && syncState.treeCache[id].tree.root === expectedRoot) {
263
+ syncState.unsyncedIds.delete(id);
264
+ // not "syncingToRoot"? or lastSynced is more recent then "newestBlock". Keep lastSynced
265
+ cachedTree.lastSynced = syncToRoot !== undefined || cachedTree.lastSynced > newestBlock ? cachedTree.lastSynced : newestBlock;
266
+ syncState.treeState[id] = {
267
+ expectedRoot: expectedRoot,
268
+ tree: syncState.treeCache[id].tree,
269
+ leaves: [],
270
+ count: 0n,
271
+ targetSize: BigInt(syncState.treeCache[id].tree.size),
272
+ lastSynced: cachedTree.lastSynced
273
+ };
274
+ }
275
+ }
276
+ }
232
277
  const insertEvents = hasRepeatedLeafs ? ["NewLeaf", "RepeatedLeafs"] : ["NewLeaf"];
233
278
  const leafEvents = insertOnlyTree ? insertEvents : ["UpdatedLeaf", ...insertEvents];
234
- do {
235
- const foundAllRoots = syncState.unsyncedIds.size === 0 && syncToRoot === undefined && discoverAllIds == false;
236
- await queryMultiEventsInChunks({
237
- publicClient: this.publicClient,
238
- contract: await this.getContract(),
239
- eventNames: foundAllRoots ? leafEvents : ["NewRoot", ...leafEvents],
240
- // only our treeIds. treeId is the 1st indexed param of NewRoot, an array means "any of these"
241
- sharedEventFilterArgs: discoverAllIds ? undefined : { treeId: [...syncState.unsyncedIds].map((id) => BigInt(id)) },
242
- firstBlock: oldestBlock,
243
- lastBlock: syncState.lastBlockSynced,
244
- reverseOrder: true,
245
- maxEvents: Infinity,
246
- chunkSize: chunkSize,
247
- // if we need all treeIds?
248
- postQueryFilter: getEventFilter(oldestBlock, syncState, { hashFunc: this.hashFunc, attemptFastSizeMatch: attemptFastSizeMatch, autoDiscover: discoverAllIds, syncToRoot: syncToRoot })
249
- });
250
- } while (syncState.unsyncedIds.size > 0 && syncState.lastBlockSynced > oldestBlock);
279
+ if (discoverAllIds || syncState.unsyncedIds.size > 0) {
280
+ do {
281
+ const foundAllRoots = syncState.unsyncedIds.size === 0 && syncToRoot === undefined && discoverAllIds == false;
282
+ await queryMultiEventsInChunks({
283
+ publicClient: this.publicClient,
284
+ contract: await this.getContract(),
285
+ eventNames: foundAllRoots ? leafEvents : ["NewRoot", ...leafEvents],
286
+ // only our treeIds. treeId is the 1st indexed param of NewRoot, an array means "any of these"
287
+ sharedEventFilterArgs: discoverAllIds ? undefined : { treeId: [...syncState.unsyncedIds].map((id) => BigInt(id)) },
288
+ firstBlock: oldestBlock,
289
+ lastBlock: syncState.lastBlockSynced,
290
+ reverseOrder: true,
291
+ maxEvents: Infinity,
292
+ chunkSize: chunkSize,
293
+ // if we need all treeIds?
294
+ postQueryFilter: getEventFilter(oldestBlock, syncState, { hashFunc: this.hashFunc, attemptFastSizeMatch: attemptFastSizeMatch, autoDiscover: discoverAllIds, syncToRoot: syncToRoot })
295
+ });
296
+ } while (syncState.unsyncedIds.size > 0 && syncState.lastBlockSynced > oldestBlock);
297
+ }
251
298
  // cache the tree, or update the new/updated leafs of an existing cache tree.
252
299
  const syncedTrees = {};
253
300
  const allTreeIds = new Set([...treeIds.map((id) => toHex(id)), ...Object.keys(syncState.treeState)]);
254
301
  for (const treeId of allTreeIds) {
255
302
  const newSyncState = syncState.treeState[treeId];
256
- const cacheTree = this.cache[treeId];
303
+ const cacheTree = this._cache[treeId];
257
304
  const isNotOld = cacheTree === undefined
258
305
  || (newSyncState !== undefined && newSyncState.lastSynced >= cacheTree.lastSynced);
259
306
  // no-op, no new state and no rollback (syncToRoot on old root can be used to go back to a older root)
260
307
  if (isNotOld === false && syncToRoot === undefined) {
261
- syncedTrees[treeId] = cacheTree;
308
+ syncedTrees[treeId] = copyCachedTree(cacheTree, this.hashFunc);
262
309
  continue;
263
310
  }
264
311
  const canMerge = newSyncState !== undefined && cacheTree !== undefined && isNotOld
@@ -293,8 +340,8 @@ export class Trees {
293
340
  };
294
341
  }
295
342
  else if (canMerge) {
296
- // @notice mutates the cached tree in place, so `synced` *is* the cache entry and the
297
- // isNotOld check below can no longer keep it out. See canMerge above.
343
+ // @notice merges into a copy, never cacheTree.tree itself. otherwise a throw at the root check below.
344
+ // can leave the cache with a invalid tree
298
345
  const updatedIndexes = [];
299
346
  const updatedLeaves = [];
300
347
  const newLeafs = [];
@@ -307,12 +354,19 @@ export class Trees {
307
354
  newLeafs.push(leaf);
308
355
  }
309
356
  });
310
- cacheTree.tree.updateMany(updatedIndexes, updatedLeaves);
357
+ const merged = copyTree(cacheTree.tree, this.hashFunc);
358
+ if (updatedIndexes.length > 0) {
359
+ merged.updateMany(updatedIndexes, updatedLeaves);
360
+ }
311
361
  if (newLeafs.length > 0) {
312
- cacheTree.tree.insertMany(newLeafs);
362
+ merged.insertMany(newLeafs);
313
363
  }
314
- cacheTree.lastSynced = newSyncState.lastSynced;
315
- synced = cacheTree;
364
+ synced = {
365
+ tree: merged,
366
+ type: cacheTree.type,
367
+ lastSynced: newSyncState.lastSynced,
368
+ insertOnlyTree: cacheTree.insertOnlyTree
369
+ };
316
370
  }
317
371
  else {
318
372
  // cached tree does not exist or synced tree is smaller and newSyncState.leaves is complete
@@ -330,9 +384,9 @@ export class Trees {
330
384
  // a sync may only ever move the cache forward. A syncToRoot rollback is handed to the
331
385
  // caller, but the cache keeps the newer tree it already had.
332
386
  if (isNotOld) {
333
- this.cache[treeId] = synced;
387
+ this._cache[treeId] = synced;
334
388
  }
335
- syncedTrees[treeId] = synced;
389
+ syncedTrees[treeId] = copyCachedTree(synced, this.hashFunc);
336
390
  }
337
391
  if (syncToRoot !== undefined) {
338
392
  const allTreeIds = Object.keys(syncedTrees);
@@ -377,7 +431,7 @@ export class Trees {
377
431
  let oldest = treeIds[0];
378
432
  let oldestBlock = 2n ** 256n; // Infinity replacement
379
433
  for (const id of treeIds) {
380
- const tree = this.cache[id];
434
+ const tree = this._cache[id];
381
435
  if (tree === undefined) {
382
436
  return id;
383
437
  }
@@ -388,19 +442,19 @@ export class Trees {
388
442
  }
389
443
  return oldest;
390
444
  }
391
- getOldestSyncBlock(treeIds) {
392
- const oldestTree = this.cache[this.getOldestSyncTreeId(treeIds.map((id) => toHex(id)))];
393
- return oldestTree ? oldestTree.lastSynced : 0n;
445
+ getOldestSyncBlock(treeIds, chainId) {
446
+ const oldestTree = this._cache[this.getOldestSyncTreeId(treeIds.map((id) => toHex(id)))];
447
+ return oldestTree ? oldestTree.lastSynced : BigInt(DEPLOY_BLOCK[chainId]);
394
448
  }
395
449
  async getTreeType(treeId, chainId) {
396
- return (await this.initTree(treeId, chainId)).type;
450
+ return (await this.initTreeCached(treeId, chainId)).type;
397
451
  }
398
452
  async getLeavesStorage(treeId, chainId, startIndex, endIndex, blockNumber) {
399
453
  const size = await this.getTreeSizeStorage(treeId, chainId, blockNumber);
400
454
  if (startIndex > endIndex || endIndex > size) {
401
455
  throw new Error(`Leaf range [${startIndex}, ${endIndex}) is out of range for treeId:${treeId}, which holds ${size} leaves at block:${blockNumber}.`);
402
456
  }
403
- const treeType = (await this.initTree(treeId, chainId)).type;
457
+ const treeType = (await this.initTreeCached(treeId, chainId)).type;
404
458
  const contract = await this.getContract();
405
459
  switch (treeType) {
406
460
  case TREE_TYPE.SKINNY_STORAGE:
@@ -423,7 +477,7 @@ export class Trees {
423
477
  if (cachedSize !== undefined && cachedSize.blockNumber === blockNumber) {
424
478
  return cachedSize.size;
425
479
  }
426
- const treeType = (await this.initTree(treeId, chainId)).type;
480
+ const treeType = (await this.initTreeCached(treeId, chainId)).type;
427
481
  const contract = await this.getContract();
428
482
  let size;
429
483
  switch (treeType) {
@@ -442,7 +496,7 @@ export class Trees {
442
496
  return size;
443
497
  }
444
498
  async getRootStorage(treeId, chainId, blockNumber) {
445
- const treeType = (await this.initTree(treeId, chainId)).type;
499
+ const treeType = (await this.initTreeCached(treeId, chainId)).type;
446
500
  const contract = await this.getContract();
447
501
  switch (treeType) {
448
502
  case TREE_TYPE.SKINNY_STORAGE:
@@ -456,16 +510,19 @@ export class Trees {
456
510
  }
457
511
  }
458
512
  async initTree(treeId, chainId) {
459
- if (this.cache[treeId]) {
460
- return this.cache[treeId];
513
+ return copyCachedTree(await this.initTreeCached(treeId, chainId), this.hashFunc);
514
+ }
515
+ async initTreeCached(treeId, chainId) {
516
+ if (this._cache[treeId]) {
517
+ return this._cache[treeId];
461
518
  }
462
519
  const treeType = await identifyTree(BigInt(treeId), await this.getContract());
463
- this.cache[treeId] = {
520
+ this._cache[treeId] = {
464
521
  tree: new LeanIMT(this.hashFunc),
465
522
  type: treeType,
466
523
  lastSynced: BigInt(getDeploymentBlock(chainId))
467
524
  };
468
- return this.cache[treeId];
525
+ return this._cache[treeId];
469
526
  }
470
527
  }
471
528
  export async function identifyTree(treeId, contract) {
@@ -524,7 +581,7 @@ export function getEventFilter(firstBlock, syncState, { autoDiscover, syncToRoot
524
581
  const trimmedTree = new LeanIMT(hashFunc, trimmed);
525
582
  const endTime = performance.now();
526
583
  if (event.args.root === trimmedTree.root) {
527
- console.log(`success full trim on treeId: ${treeId}`);
584
+ //console.log(`success full trim on treeId: ${treeId}`)
528
585
  syncState.treeState[treeId] = {
529
586
  leaves: [],
530
587
  count: 0n,
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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"eventScanning.d.ts","sourceRoot":"","sources":["../src/eventScanning.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventScanning.d.ts","sourceRoot":"","sources":["../src/eventScanning.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,GAAG,EACH,QAAQ,EACR,YAAY,EACZ,2BAA2B,EAC3B,OAAO,EACP,iBAAiB,EACjB,GAAG,EAEH,YAAY,EACf,MAAM,MAAM,CAAA;AAEb;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAE7C;AAED;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,SAAS,SAAS,QAAQ,IAC3C,SAAS,SAAS,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;AAGrF,MAAM,MAAM,oBAAoB,CAAC,SAAS,SAAS,QAAQ,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;AAGtO,KAAK,mBAAmB,CAAC,MAAM,IAC3B,CAAC,MAAM,SAAS,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,aAAa,KAAK,IAAI,GACjG,aAAa,GACb,KAAK,CAAC;AAEZ,KAAK,YAAY,CAAC,SAAS,SAAS,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAExG;;;GAGG;AACH,KAAK,YAAY,CAAC,SAAS,SAAS,QAAQ,IACxC;IAAC,YAAY,CAAC,SAAS,CAAC;CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtG;;;GAGG;AACH,KAAK,kBAAkB,CAAC,SAAS,SAAS,QAAQ,IAC9C,mBAAmB,CAAC,SAAS,SAAS,QAAQ,GAAG;IAAE,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,MAAM,CAAA;CAAE,GAC1H,MAAM,GAAG,MAAM,GACf,KAAK,CAAC;AAEZ,KAAK,kBAAkB,CAAC,SAAS,SAAS,QAAQ,EAAE,KAAK,SAAS,MAAM,IACpE,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAEtD,KAAK,cAAc,CAAC,SAAS,SAAS,QAAQ,EAAE,KAAK,SAAS,MAAM,IAChE;IAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC;CAAC,SAAS,CAAC,KAAK,CAAC,GACpD,OAAO,GACP,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,MAAM,MAAM,GACzD,MAAM,SAAS,YAAY,GAAG,2BAA2B,CAAC,MAAM,CAAC,GAAG,KAAK,GACzE,KAAK,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAAC,SAAS,SAAS,QAAQ,IAAI;KAC3D,KAAK,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,EACvC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,GAChC,SAAS,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,GAC3C,IAAI,GACJ,SAAS;CACd,CAAC;AAcF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACpC,KAAK,CAAC,IAAI,SAAS,GAAG,EACtB,KAAK,CAAC,UAAU,SAAS,MAAM,EAC/B,SAAS,SAAS,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACrF,EACE,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAe,EACf,SAAS,EACT,YAAoB,EACpB,SAAoB,EACpB,SAAkB,EAClB,eAAe,GAClB,EAAE;IACC,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;IAC1C,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;CACrD,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAsBjC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,wBAAwB,CAC1C,KAAK,CAAC,IAAI,SAAS,GAAG,EACtB,KAAK,CAAC,UAAU,SAAS,MAAM,EAC/B,SAAS,SAAS,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACrF,EACE,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,UAAe,EACf,SAAS,EACT,YAAoB,EACpB,SAAoB,EACpB,SAAkB,EAClB,eAAe,GAClB,EAAE;IACC,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;IAC1C,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;IAClC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;CACrD,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAuCjC"}
@@ -227,7 +227,7 @@ async function scanInChunks({ publicClient, queryChunk, firstBlock, lastBlock, r
227
227
  }
228
228
  allEvents = allEvents.slice(-maxEvents);
229
229
  if (done || allEvents.length >= maxEvents) {
230
- console.log(`stopped scanning at chunk ${index}/${numIters - 1}`);
230
+ //console.log(`stopped scanning at chunk ${index}/${numIters-1}`);
231
231
  break;
232
232
  }
233
233
  ;
@@ -242,7 +242,7 @@ async function scanInChunks({ publicClient, queryChunk, firstBlock, lastBlock, r
242
242
  }
243
243
  allEvents = allEvents.slice(0, maxEvents);
244
244
  if (done || allEvents.length >= maxEvents) {
245
- console.log(`stopped scanning at chunk ${index}/${numIters - 1}`);
245
+ //console.log(`stopped scanning at chunk ${index}/${numIters-1}`);
246
246
  break;
247
247
  }
248
248
  ;
@@ -1 +1 @@
1
- {"version":3,"file":"eventScanning.js","sourceRoot":"","sources":["../src/eventScanning.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventScanning.js","sourceRoot":"","sources":["../src/eventScanning.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.3",
3
+ "version": "0.0.5",
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
@@ -99,6 +99,11 @@ export const LeanIMTHashFuncPoseidon2: LeanIMTHashFunction = (a: bigint, b: bigi
99
99
 
100
100
  export type CachedTree = { tree: LeanIMT<bigint>, type: TREE_TYPE, lastSynced: bigint, insertOnlyTree?: boolean }
101
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
+
102
107
  /**
103
108
  * A detached LeanIMT holding the same leaves *and* internal nodes as `tree`, so it can be grown
104
109
  * without touching the original. Copies the nodes rather than replaying the leaves on purpose:
@@ -113,8 +118,22 @@ export function copyTree(tree: LeanIMT<bigint>, hashFunc: LeanIMTHashFunction):
113
118
  return copy
114
119
  }
115
120
 
121
+ export function copyCachedTree(cached: CachedTree, hashFunc: LeanIMTHashFunction): CachedTree {
122
+ return { ...cached, tree: copyTree(cached.tree, hashFunc) }
123
+ }
124
+
116
125
  export class Trees {
117
- readonly cache: { [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
+
118
137
  /** last known size per tree, with the block it was read at. See {@link getTreeSizeStorage}. */
119
138
  private sizes: { [treeId: Hex]: { blockNumber: bigint, size: bigint } } = {}
120
139
 
@@ -134,8 +153,9 @@ export class Trees {
134
153
 
135
154
  // fullNode mode syncs all cached trees, non fullNode mode will auto discover them, so left empty
136
155
  const treeIdsNotSet = treeIds === undefined || treeIds.length === 0;
137
- treeIds = treeIdsNotSet ? fullNodeMode ? (Object.keys(this.cache) as Hex[]).map((v) => BigInt(v)) : [] : treeIds
156
+ treeIds = treeIdsNotSet ? fullNodeMode ? (Object.keys(this._cache) as Hex[]).map((v) => BigInt(v)) : [] : treeIds
138
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})\``) }
158
+ // TODO if fullNode mode is on but one treeType is event only, it breaks. But it should still try and only warn it is scanning more then 1 year of events if it actually needs to
139
159
  if (fullNodeMode) {
140
160
  syncedTrees = await this.syncTreesStorage(
141
161
  treeIds,
@@ -145,11 +165,21 @@ export class Trees {
145
165
  // then syncTreesEvent will look for the root and try to trim off the leaves that happened after the root we want
146
166
  // in tree with only inserts this will work and will allows us to get any tree that is up to 1 year old
147
167
  // if there are updates or resets, currently syncTreesEvent will have to go down till it found all leaves
168
+ // TODO optimize the syncToRoot + fullNodeMode case. The storage read above already has every leaf
169
+ // at head, so the event pass only needs the update events between head and the NewRoot we want:
170
+ // replay those backwards onto the storage tree (and shrink it, which it already does) and stop at
171
+ // that NewRoot, instead of being free to walk all the way down to the deployment block.
172
+ // Until that lands, a caller after a specific root is better off with fullNodeMode: false.
173
+ // TODO
174
+
148
175
  if (syncToRoot !== undefined) {
149
- syncedTrees = await this.syncTreesEvent(
150
- treeIds,
151
- {blockNumber, attemptFastSizeMatch, syncToRoot, chunkSize: eventChunkSize, insertOnlyTree, autoDiscovery, hasRepeatedLeafs }
152
- )
176
+ const someNotSynced = treeIds?.some((v) => syncedTrees[toHex(v)].tree.root !== syncToRoot);
177
+ if (someNotSynced) {
178
+ syncedTrees = await this.syncTreesEvent(
179
+ treeIds,
180
+ { blockNumber, attemptFastSizeMatch, syncToRoot, chunkSize: eventChunkSize, insertOnlyTree, autoDiscovery, hasRepeatedLeafs }
181
+ )
182
+ }
153
183
  }
154
184
  } else {
155
185
  syncedTrees = await this.syncTreesEvent(
@@ -174,7 +204,7 @@ export class Trees {
174
204
  { chunkSize = 2000n, attemptFastSizeMatch = true, blockNumber }: { attemptFastSizeMatch?: boolean, chunkSize?: bigint, blockNumber?: bigint } = {}
175
205
  ): Promise<{ [treeId: Hex]: CachedTree }> {
176
206
  // default syncs all previously synced trees
177
- treeIds ??= (Object.keys(this.cache) as Hex[]).map((v) => BigInt(v));
207
+ treeIds ??= (Object.keys(this._cache) as Hex[]).map((v) => BigInt(v));
178
208
  if (treeIds.length === 0) {
179
209
  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.`)
180
210
  }
@@ -184,10 +214,10 @@ export class Trees {
184
214
  const treeIdsHex = treeIds.map((id) => toHex(id));
185
215
 
186
216
  const chainId = await this.publicClient.getChainId();
187
- const cachedTrees = treeIdsHex.filter((id) => this.cache[id] !== undefined && this.cache[id].tree.size > 0)
188
- if (attemptFastSizeMatch === false && cachedTrees.length > 0) {
189
- 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.`)
190
- }
217
+ const cachedTrees = treeIdsHex.filter((id) => this._cache[id] !== undefined && this._cache[id].tree.size > 0)
218
+ // if (attemptFastSizeMatch === false && cachedTrees.length > 0) {
219
+ // 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.`)
220
+ // }
191
221
  const identifiedTreesEnt = await Promise.all(treeIdsHex.map(async (id) => [id, await this.getTreeType(id, chainId)])) as [Hex, TREE_TYPE][]
192
222
  const unsupportedTypes = [TREE_TYPE.NO_INTERFACE, TREE_TYPE.UNKNOWN, TREE_TYPE.SKINNY_EVENT]
193
223
  const unsupportedTrees = identifiedTreesEnt.filter(([id, type]) => unsupportedTypes.includes(type))
@@ -202,9 +232,11 @@ export class Trees {
202
232
  blockNumber ??= (await this.publicClient.getBlock({ blockTag: "safe" })).number
203
233
  const syncedTrees: { [treeId: Hex]: CachedTree } = {}
204
234
  for (const treeId of treeIdsHex) {
235
+ // we could check early if cache.root === onchainRoot
236
+ // but not doing it yet because that only really saves one rpc call from the getTreeSizeStorage
205
237
  const targetSize = await this.getTreeSizeStorage(treeId, chainId, blockNumber)
206
238
  const onchainRoot = await this.getRootStorage(treeId, chainId, blockNumber)
207
- const cached = this.cache[treeId]
239
+ const cached = this._cache[treeId]
208
240
  const cacheSize = BigInt(cached ? cached.tree.size : 0)
209
241
 
210
242
  let tree: LeanIMT<bigint> | undefined = undefined
@@ -254,20 +286,20 @@ export class Trees {
254
286
  if ((tree.root ?? 0n) !== onchainRoot) {
255
287
  // every leaf came straight from the contract at this block, so this is not a stale
256
288
  // cache. Drop what's cached for this tree, the attempt above may have grown it.
257
- delete this.cache[treeId]
289
+ delete this._cache[treeId]
258
290
  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.`)
259
291
  }
260
292
  }
261
293
 
262
- this.cache[treeId] = {
294
+ this._cache[treeId] = {
263
295
  tree: tree,
264
- type: this.cache[treeId].type, // getTreeType() above put every treeId in the cache
296
+ type: this._cache[treeId].type, // getTreeType() above put every treeId in the cache
265
297
  lastSynced: blockNumber,
266
298
  // attemptFastSizeMatch is a guess this sync made, not something it learned about the tree,
267
299
  // so whatever is known about updates stays as it was
268
- insertOnlyTree: this.cache[treeId].insertOnlyTree
300
+ insertOnlyTree: this._cache[treeId].insertOnlyTree
269
301
  }
270
- syncedTrees[treeId] = this.cache[treeId]
302
+ syncedTrees[treeId] = copyCachedTree(this._cache[treeId], this.hashFunc)
271
303
  }
272
304
  return syncedTrees
273
305
  }
@@ -289,7 +321,7 @@ export class Trees {
289
321
  return leaves
290
322
  }
291
323
 
292
- async syncTreesEvent(treeIds: bigint[] | undefined = undefined, {blockNumber, attemptFastSizeMatch = true, syncToRoot, chunkSize = 2000n, insertOnlyTree, autoDiscovery, hasRepeatedLeafs = true }: {blockNumber?:bigint, attemptFastSizeMatch?: boolean, syncToRoot?: bigint, chunkSize?: bigint, hasRepeatedLeafs?: boolean, insertOnlyTree?: boolean, autoDiscovery?: boolean | undefined } = {}) {
324
+ async syncTreesEvent(treeIds: bigint[] | undefined = undefined, { blockNumber, attemptFastSizeMatch = true, syncToRoot, chunkSize = 2000n, insertOnlyTree, autoDiscovery, hasRepeatedLeafs = true }: { blockNumber?: bigint, attemptFastSizeMatch?: boolean, syncToRoot?: bigint, chunkSize?: bigint, hasRepeatedLeafs?: boolean, insertOnlyTree?: boolean, autoDiscovery?: boolean | undefined } = {}) {
293
325
  treeIds ??= [];
294
326
  if (treeIds.length !== 0 && autoDiscovery === true) {
295
327
  throw new Error(`TreeIds where provided while autoDiscovery=true. Either turn off autoDiscovery to only sync those specific ids or set treeIds=undefined to automatically discover and sync all treeId.`)
@@ -312,43 +344,69 @@ export class Trees {
312
344
  // in discovery we go all the way down, if treeIds are provided, we go down till all them are synced
313
345
  // 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
314
346
  // 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
315
- const oldestBlock = discoverAllIds || syncToRoot !== undefined ? BigInt(getDeploymentBlock(chainId)) : this.getOldestSyncBlock(treeIds)
316
-
317
- const syncState: SyncState = { treeCache: this.cache, treeState: {}, lastBlockSynced: newestBlock, unsyncedIds: new Set(treeIds.map((id) => toHex(id))) }
347
+ const oldestBlock = discoverAllIds || syncToRoot !== undefined ? BigInt(getDeploymentBlock(chainId)) : this.getOldestSyncBlock(treeIds, chainId)
348
+
349
+ const syncState: SyncState = { treeCache: this._cache, treeState: {}, lastBlockSynced: newestBlock, unsyncedIds: new Set(treeIds.map((id) => toHex(id))) }
350
+
351
+ // check if something is already synced in cache, so we don't waste time looking for a NewRoot tx
352
+ for (const id of syncState.unsyncedIds) {
353
+ const cachedTree = syncState.treeCache[id] && syncState.treeCache[id];
354
+ // TODO we can also support this if we instead look for that NewRoot event instead of eth_Call lookup, but then we need to store the block number of the last NewRoot event we found in the cached tree, so we can O(1) find `NewRoot event at block: X`
355
+ const hasGetRoot = cachedTree && [TREE_TYPE.UNKNOWN, TREE_TYPE.NO_INTERFACE].includes(cachedTree.type) === false
356
+ if (hasGetRoot) {
357
+ const expectedRoot = syncToRoot ?? await this.getRootStorage(id, chainId, newestBlock);
358
+ if (syncState.treeCache[id] && syncState.treeCache[id].tree.root === expectedRoot) {
359
+ syncState.unsyncedIds.delete(id)
360
+ // not "syncingToRoot"? or lastSynced is more recent then "newestBlock". Keep lastSynced
361
+ cachedTree.lastSynced = syncToRoot !== undefined || cachedTree.lastSynced > newestBlock ? cachedTree.lastSynced : newestBlock
362
+ syncState.treeState[id] = {
363
+ expectedRoot: expectedRoot,
364
+ tree: syncState.treeCache[id].tree,
365
+ leaves: [],
366
+ count: 0n,
367
+ targetSize: BigInt(syncState.treeCache[id].tree.size),
368
+ lastSynced: cachedTree.lastSynced
318
369
 
370
+ }
371
+ }
372
+ }
373
+ }
319
374
  const insertEvents = hasRepeatedLeafs ? ["NewLeaf", "RepeatedLeafs"] as const : ["NewLeaf"] as const;
320
375
  const leafEvents = insertOnlyTree ? insertEvents : ["UpdatedLeaf", ...insertEvents] as const
321
- do {
322
- const foundAllRoots = syncState.unsyncedIds.size === 0 && syncToRoot === undefined && discoverAllIds == false
323
- await queryMultiEventsInChunks({
324
- publicClient: this.publicClient,
325
- contract: await this.getContract(),
326
- eventNames: foundAllRoots ? leafEvents : ["NewRoot", ...leafEvents],
327
- // only our treeIds. treeId is the 1st indexed param of NewRoot, an array means "any of these"
328
- sharedEventFilterArgs: discoverAllIds ? undefined : { treeId: [...syncState.unsyncedIds].map((id) => BigInt(id)) },
329
- firstBlock: oldestBlock,
330
- lastBlock: syncState.lastBlockSynced,
331
- reverseOrder: true,
332
- maxEvents: Infinity,
333
- chunkSize: chunkSize,
334
- // if we need all treeIds?
335
- postQueryFilter: getEventFilter(oldestBlock, syncState, { hashFunc: this.hashFunc, attemptFastSizeMatch: attemptFastSizeMatch, autoDiscover: discoverAllIds, syncToRoot: syncToRoot })
336
- })
337
- } while (syncState.unsyncedIds.size > 0 && syncState.lastBlockSynced > oldestBlock)
376
+ if (discoverAllIds || syncState.unsyncedIds.size > 0) {
377
+ do {
378
+ const foundAllRoots = syncState.unsyncedIds.size === 0 && syncToRoot === undefined && discoverAllIds == false
379
+ await queryMultiEventsInChunks({
380
+ publicClient: this.publicClient,
381
+ contract: await this.getContract(),
382
+ eventNames: foundAllRoots ? leafEvents : ["NewRoot", ...leafEvents],
383
+ // only our treeIds. treeId is the 1st indexed param of NewRoot, an array means "any of these"
384
+ sharedEventFilterArgs: discoverAllIds ? undefined : { treeId: [...syncState.unsyncedIds].map((id) => BigInt(id)) },
385
+ firstBlock: oldestBlock,
386
+ lastBlock: syncState.lastBlockSynced,
387
+ reverseOrder: true,
388
+ maxEvents: Infinity,
389
+ chunkSize: chunkSize,
390
+ // if we need all treeIds?
391
+ postQueryFilter: getEventFilter(oldestBlock, syncState, { hashFunc: this.hashFunc, attemptFastSizeMatch: attemptFastSizeMatch, autoDiscover: discoverAllIds, syncToRoot: syncToRoot })
392
+ })
393
+ } while (syncState.unsyncedIds.size > 0 && syncState.lastBlockSynced > oldestBlock)
394
+ }
395
+
338
396
 
339
397
  // cache the tree, or update the new/updated leafs of an existing cache tree.
340
398
  const syncedTrees: { [treeId: Hex]: CachedTree } = {}
341
399
  const allTreeIds = new Set([...treeIds.map((id) => toHex(id)), ...Object.keys(syncState.treeState) as Hex[]])
342
400
  for (const treeId of allTreeIds) {
343
401
  const newSyncState = syncState.treeState[treeId]
344
- const cacheTree = this.cache[treeId];
402
+ const cacheTree = this._cache[treeId];
345
403
 
346
404
  const isNotOld = cacheTree === undefined
347
405
  || (newSyncState !== undefined && newSyncState.lastSynced >= cacheTree.lastSynced)
348
406
 
349
407
  // no-op, no new state and no rollback (syncToRoot on old root can be used to go back to a older root)
350
408
  if (isNotOld === false && syncToRoot === undefined) {
351
- syncedTrees[treeId] = cacheTree
409
+ syncedTrees[treeId] = copyCachedTree(cacheTree, this.hashFunc)
352
410
  continue
353
411
  }
354
412
 
@@ -388,8 +446,8 @@ export class Trees {
388
446
  insertOnlyTree: cacheTree!.insertOnlyTree
389
447
  }
390
448
  } else if (canMerge) {
391
- // @notice mutates the cached tree in place, so `synced` *is* the cache entry and the
392
- // isNotOld check below can no longer keep it out. See canMerge above.
449
+ // @notice merges into a copy, never cacheTree.tree itself. otherwise a throw at the root check below.
450
+ // can leave the cache with a invalid tree
393
451
  const updatedIndexes: number[] = [];
394
452
  const updatedLeaves: bigint[] = [];
395
453
  const newLeafs: bigint[] = [];
@@ -401,13 +459,20 @@ export class Trees {
401
459
  newLeafs.push(leaf)
402
460
  }
403
461
  })
404
- cacheTree.tree.updateMany(updatedIndexes, updatedLeaves)
462
+ const merged = copyTree(cacheTree.tree, this.hashFunc)
463
+ if (updatedIndexes.length > 0) {
464
+ merged.updateMany(updatedIndexes, updatedLeaves)
465
+ }
405
466
  if (newLeafs.length > 0) {
406
- cacheTree.tree.insertMany(newLeafs)
467
+ merged.insertMany(newLeafs)
407
468
  }
408
469
 
409
- cacheTree.lastSynced = newSyncState.lastSynced
410
- synced = cacheTree
470
+ synced = {
471
+ tree: merged,
472
+ type: cacheTree.type,
473
+ lastSynced: newSyncState.lastSynced,
474
+ insertOnlyTree: cacheTree.insertOnlyTree
475
+ }
411
476
  } else {
412
477
  // cached tree does not exist or synced tree is smaller and newSyncState.leaves is complete
413
478
  synced = {
@@ -426,9 +491,10 @@ export class Trees {
426
491
  // a sync may only ever move the cache forward. A syncToRoot rollback is handed to the
427
492
  // caller, but the cache keeps the newer tree it already had.
428
493
  if (isNotOld) {
429
- this.cache[treeId] = synced
494
+ this._cache[treeId] = synced
430
495
  }
431
- syncedTrees[treeId] = synced;
496
+
497
+ syncedTrees[treeId] = copyCachedTree(synced, this.hashFunc);
432
498
  }
433
499
 
434
500
  if (syncToRoot !== undefined) {
@@ -478,7 +544,7 @@ export class Trees {
478
544
  let oldest = treeIds[0];
479
545
  let oldestBlock = 2n ** 256n; // Infinity replacement
480
546
  for (const id of treeIds) {
481
- const tree = this.cache[id]
547
+ const tree = this._cache[id]
482
548
  if (tree === undefined) {
483
549
  return id
484
550
  }
@@ -490,13 +556,13 @@ export class Trees {
490
556
  return oldest
491
557
  }
492
558
 
493
- getOldestSyncBlock(treeIds: bigint[]) {
494
- const oldestTree = this.cache[this.getOldestSyncTreeId(treeIds.map((id) => toHex(id)))]
495
- return oldestTree ? oldestTree.lastSynced : 0n
559
+ getOldestSyncBlock(treeIds: bigint[], chainId: number) {
560
+ const oldestTree = this._cache[this.getOldestSyncTreeId(treeIds.map((id) => toHex(id)))]
561
+ return oldestTree ? oldestTree.lastSynced : BigInt(DEPLOY_BLOCK[chainId])
496
562
  }
497
563
 
498
564
  async getTreeType(treeId: Hex, chainId: number) {
499
- return (await this.initTree(treeId, chainId)).type
565
+ return (await this.initTreeCached(treeId, chainId)).type
500
566
  }
501
567
 
502
568
  async getLeavesStorage(treeId: Hex, chainId: number, startIndex: bigint, endIndex: bigint, blockNumber: bigint) {
@@ -504,7 +570,7 @@ export class Trees {
504
570
  if (startIndex > endIndex || endIndex > size) {
505
571
  throw new Error(`Leaf range [${startIndex}, ${endIndex}) is out of range for treeId:${treeId}, which holds ${size} leaves at block:${blockNumber}.`)
506
572
  }
507
- const treeType = (await this.initTree(treeId, chainId)).type
573
+ const treeType = (await this.initTreeCached(treeId, chainId)).type
508
574
  const contract = await this.getContract()
509
575
  switch (treeType) {
510
576
  case TREE_TYPE.SKINNY_STORAGE:
@@ -528,7 +594,7 @@ export class Trees {
528
594
  if (cachedSize !== undefined && cachedSize.blockNumber === blockNumber) {
529
595
  return cachedSize.size
530
596
  }
531
- const treeType = (await this.initTree(treeId, chainId)).type
597
+ const treeType = (await this.initTreeCached(treeId, chainId)).type
532
598
  const contract = await this.getContract()
533
599
  let size: bigint
534
600
  switch (treeType) {
@@ -548,7 +614,7 @@ export class Trees {
548
614
  }
549
615
 
550
616
  async getRootStorage(treeId: Hex, chainId: number, blockNumber: bigint) {
551
- const treeType = (await this.initTree(treeId, chainId)).type
617
+ const treeType = (await this.initTreeCached(treeId, chainId)).type
552
618
  const contract = await this.getContract()
553
619
  switch (treeType) {
554
620
  case TREE_TYPE.SKINNY_STORAGE:
@@ -562,17 +628,21 @@ export class Trees {
562
628
  }
563
629
  }
564
630
 
565
- async initTree(treeId: Hex, chainId: number) {
566
- if (this.cache[treeId]) {
567
- return this.cache[treeId]
631
+ async initTree(treeId: Hex, chainId: number): Promise<CachedTree> {
632
+ return copyCachedTree(await this.initTreeCached(treeId, chainId), this.hashFunc)
633
+ }
634
+
635
+ private async initTreeCached(treeId: Hex, chainId: number): Promise<CachedTree> {
636
+ if (this._cache[treeId]) {
637
+ return this._cache[treeId]
568
638
  }
569
639
  const treeType = await identifyTree(BigInt(treeId), await this.getContract());
570
- this.cache[treeId] = {
640
+ this._cache[treeId] = {
571
641
  tree: new LeanIMT(this.hashFunc),
572
642
  type: treeType,
573
643
  lastSynced: BigInt(getDeploymentBlock(chainId))
574
644
  }
575
- return this.cache[treeId]
645
+ return this._cache[treeId]
576
646
  }
577
647
  }
578
648
 
@@ -649,7 +719,7 @@ export function getEventFilter(
649
719
  const trimmedTree = new LeanIMT(hashFunc, trimmed);
650
720
  const endTime = performance.now();
651
721
  if (event.args.root === trimmedTree.root) {
652
- console.log(`success full trim on treeId: ${treeId}`)
722
+ //console.log(`success full trim on treeId: ${treeId}`)
653
723
  syncState.treeState[treeId] = {
654
724
  leaves: [],
655
725
  count: 0n,
@@ -26,13 +26,13 @@ export type EventLog<TAbiEvent extends AbiEvent> =
26
26
  TAbiEvent extends AbiEvent ? Log<bigint, number, false, TAbiEvent, true> : never;
27
27
 
28
28
 
29
- export type PostQueryEventFilter<TAbiEvent extends AbiEvent> = (allEvents: EventLog<TAbiEvent>[], newChunkEvents: EventLog<TAbiEvent>[],firstBlock:bigint, lastBlock:bigint) => [result:EventLog<TAbiEvent>[],quitEarly:boolean]
29
+ export type PostQueryEventFilter<TAbiEvent extends AbiEvent> = (allEvents: EventLog<TAbiEvent>[], newChunkEvents: EventLog<TAbiEvent>[], firstBlock: bigint, lastBlock: bigint) => [result: EventLog<TAbiEvent>[], quitEarly: boolean]
30
30
 
31
31
 
32
32
  type UnionToIntersection<TUnion> =
33
33
  (TUnion extends unknown ? (arg: TUnion) => void : never) extends (arg: infer TIntersection) => void
34
- ? TIntersection
35
- : never;
34
+ ? TIntersection
35
+ : never;
36
36
 
37
37
  type IndexedInput<TAbiEvent extends AbiEvent> = Extract<TAbiEvent['inputs'][number], { indexed: true }>;
38
38
 
@@ -49,18 +49,18 @@ type IndexedNames<TAbiEvent extends AbiEvent> =
49
49
  */
50
50
  type SharedIndexedNames<TAbiEvent extends AbiEvent> =
51
51
  UnionToIntersection<TAbiEvent extends AbiEvent ? { names: IndexedNames<TAbiEvent> } : never> extends { names: infer TNames }
52
- ? TNames & string
53
- : never;
52
+ ? TNames & string
53
+ : never;
54
54
 
55
55
  type IndexedInputByName<TAbiEvent extends AbiEvent, TName extends string> =
56
56
  Extract<IndexedInput<TAbiEvent>, { name: TName }>;
57
57
 
58
58
  type SharedArgValue<TAbiEvent extends AbiEvent, TName extends string> =
59
59
  [IndexedInputByName<TAbiEvent, TName>] extends [never]
60
- ? unknown
61
- : IndexedInputByName<TAbiEvent, TName> extends infer TInput
62
- ? TInput extends AbiParameter ? AbiParameterToPrimitiveType<TInput> : never
63
- : never;
60
+ ? unknown
61
+ : IndexedInputByName<TAbiEvent, TName> extends infer TInput
62
+ ? TInput extends AbiParameter ? AbiParameterToPrimitiveType<TInput> : never
63
+ : never;
64
64
 
65
65
  /**
66
66
  * Filter on indexed params that all queried events share. A value may be a single value or an
@@ -68,10 +68,10 @@ type SharedArgValue<TAbiEvent extends AbiEvent, TName extends string> =
68
68
  */
69
69
  export type SharedEventFilterArgs<TAbiEvent extends AbiEvent> = {
70
70
  [TName in SharedIndexedNames<TAbiEvent>]?:
71
- | SharedArgValue<TAbiEvent, TName>
72
- | readonly SharedArgValue<TAbiEvent, TName>[]
73
- | null
74
- | undefined
71
+ | SharedArgValue<TAbiEvent, TName>
72
+ | readonly SharedArgValue<TAbiEvent, TName>[]
73
+ | null
74
+ | undefined
75
75
  };
76
76
 
77
77
  /**
@@ -109,9 +109,9 @@ function getEventAbis<TAbiEvent extends AbiEvent>(abi: Abi, eventName: string):
109
109
  * @returns {Promise<EventLog<TAbiEvent>[]>} Array of event logs, earliest to latest.
110
110
  */
111
111
  export async function queryEventInChunks<
112
- const TAbi extends Abi,
113
- const TEventName extends string,
114
- TAbiEvent extends AbiEvent = Extract<TAbi[number], AbiEvent & { name: TEventName }>
112
+ const TAbi extends Abi,
113
+ const TEventName extends string,
114
+ TAbiEvent extends AbiEvent = Extract<TAbi[number], AbiEvent & { name: TEventName }>
115
115
  >({
116
116
  publicClient,
117
117
  contract,
@@ -128,12 +128,12 @@ export async function queryEventInChunks<
128
128
  contract: { address: Address; abi: TAbi };
129
129
  eventName: TEventName;
130
130
  eventFilterArgs?: GetLogsParameters<TAbiEvent>['args'];
131
- firstBlock?:bigint;
131
+ firstBlock?: bigint;
132
132
  lastBlock?: bigint;
133
133
  reverseOrder?: boolean;
134
134
  maxEvents?: number;
135
135
  chunkSize?: bigint;
136
- postQueryFilter?:PostQueryEventFilter<TAbiEvent>;
136
+ postQueryFilter?: PostQueryEventFilter<TAbiEvent>;
137
137
  }): Promise<EventLog<TAbiEvent>[]> {
138
138
  const address = contract.address;
139
139
 
@@ -182,9 +182,9 @@ export async function queryEventInChunks<
182
182
  * @returns {Promise<EventLog<TAbiEvent>[]>} Array of logs of all requested events mixed together, earliest to latest.
183
183
  */
184
184
  export async function queryMultiEventsInChunks<
185
- const TAbi extends Abi,
186
- const TEventName extends string,
187
- TAbiEvent extends AbiEvent = Extract<TAbi[number], AbiEvent & { name: TEventName }>
185
+ const TAbi extends Abi,
186
+ const TEventName extends string,
187
+ TAbiEvent extends AbiEvent = Extract<TAbi[number], AbiEvent & { name: TEventName }>
188
188
  >({
189
189
  publicClient,
190
190
  contract,
@@ -201,12 +201,12 @@ export async function queryMultiEventsInChunks<
201
201
  contract: { address: Address; abi: TAbi };
202
202
  eventNames: readonly TEventName[];
203
203
  sharedEventFilterArgs?: SharedEventFilterArgs<TAbiEvent>;
204
- firstBlock?:bigint;
204
+ firstBlock?: bigint;
205
205
  lastBlock?: bigint;
206
206
  reverseOrder?: boolean;
207
207
  maxEvents?: number;
208
208
  chunkSize?: bigint;
209
- postQueryFilter?:PostQueryEventFilter<TAbiEvent>;
209
+ postQueryFilter?: PostQueryEventFilter<TAbiEvent>;
210
210
  }): Promise<EventLog<TAbiEvent>[]> {
211
211
  const address = contract.address;
212
212
  const abi = contract.abi;
@@ -376,9 +376,9 @@ async function scanInChunks<TAbiEvent extends AbiEvent>({
376
376
  let allEvents: EventLog<TAbiEvent>[] = [];
377
377
  let done = false;
378
378
 
379
- const scanLogic = async (index: bigint):Promise<[EventLog<TAbiEvent>[], bigint, bigint]> => {
379
+ const scanLogic = async (index: bigint): Promise<[EventLog<TAbiEvent>[], bigint, bigint]> => {
380
380
  const start = firstBlock + index * chunkSize;
381
- const stop = minBigInt(start + chunkSize - 1n, lastBlock);
381
+ const stop = minBigInt(start + chunkSize - 1n, lastBlock);
382
382
  return [(await queryChunk(start, stop)), start, stop];
383
383
  };
384
384
 
@@ -393,11 +393,11 @@ async function scanInChunks<TAbiEvent extends AbiEvent>({
393
393
  }
394
394
  allEvents = allEvents.slice(-maxEvents);
395
395
  if (done || allEvents.length >= maxEvents) {
396
- console.log(`stopped scanning at chunk ${index}/${numIters-1}`);
396
+ //console.log(`stopped scanning at chunk ${index}/${numIters-1}`);
397
397
  break
398
398
  };
399
399
  }
400
-
400
+
401
401
  } else {
402
402
  for (let index = 0n; index < BigInt(numIters); index++) {
403
403
  const [events, firstBlock, lastBlock] = await scanLogic(index);
@@ -406,7 +406,10 @@ async function scanInChunks<TAbiEvent extends AbiEvent>({
406
406
  [allEvents, done] = postQueryFilter(allEvents, events, firstBlock, lastBlock)
407
407
  }
408
408
  allEvents = allEvents.slice(0, maxEvents);
409
- if (done || allEvents.length >= maxEvents) {console.log(`stopped scanning at chunk ${index}/${numIters-1}`);break};
409
+ if (done || allEvents.length >= maxEvents) {
410
+ //console.log(`stopped scanning at chunk ${index}/${numIters-1}`);
411
+ break
412
+ };
410
413
  }
411
414
  }
412
415