@feelyourprotocol/statemanager 8141.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +331 -0
  3. package/dist/cjs/cache/account.d.ts +85 -0
  4. package/dist/cjs/cache/account.d.ts.map +1 -0
  5. package/dist/cjs/cache/account.js +252 -0
  6. package/dist/cjs/cache/account.js.map +1 -0
  7. package/dist/cjs/cache/cache.d.ts +23 -0
  8. package/dist/cjs/cache/cache.d.ts.map +1 -0
  9. package/dist/cjs/cache/cache.js +31 -0
  10. package/dist/cjs/cache/cache.js.map +1 -0
  11. package/dist/cjs/cache/caches.d.ts +19 -0
  12. package/dist/cjs/cache/caches.d.ts.map +1 -0
  13. package/dist/cjs/cache/caches.js +107 -0
  14. package/dist/cjs/cache/caches.js.map +1 -0
  15. package/dist/cjs/cache/code.d.ts +87 -0
  16. package/dist/cjs/cache/code.d.ts.map +1 -0
  17. package/dist/cjs/cache/code.js +258 -0
  18. package/dist/cjs/cache/code.js.map +1 -0
  19. package/dist/cjs/cache/index.d.ts +7 -0
  20. package/dist/cjs/cache/index.d.ts.map +1 -0
  21. package/dist/cjs/cache/index.js +23 -0
  22. package/dist/cjs/cache/index.js.map +1 -0
  23. package/dist/cjs/cache/originalStorageCache.d.ts +21 -0
  24. package/dist/cjs/cache/originalStorageCache.d.ts.map +1 -0
  25. package/dist/cjs/cache/originalStorageCache.js +52 -0
  26. package/dist/cjs/cache/originalStorageCache.js.map +1 -0
  27. package/dist/cjs/cache/storage.d.ts +101 -0
  28. package/dist/cjs/cache/storage.d.ts.map +1 -0
  29. package/dist/cjs/cache/storage.js +337 -0
  30. package/dist/cjs/cache/storage.js.map +1 -0
  31. package/dist/cjs/cache/types.d.ts +36 -0
  32. package/dist/cjs/cache/types.d.ts.map +1 -0
  33. package/dist/cjs/cache/types.js +8 -0
  34. package/dist/cjs/cache/types.js.map +1 -0
  35. package/dist/cjs/index.d.ts +8 -0
  36. package/dist/cjs/index.d.ts.map +1 -0
  37. package/dist/cjs/index.js +24 -0
  38. package/dist/cjs/index.js.map +1 -0
  39. package/dist/cjs/merkleStateManager.d.ts +260 -0
  40. package/dist/cjs/merkleStateManager.d.ts.map +1 -0
  41. package/dist/cjs/merkleStateManager.js +616 -0
  42. package/dist/cjs/merkleStateManager.js.map +1 -0
  43. package/dist/cjs/package.json +3 -0
  44. package/dist/cjs/proof/index.d.ts +3 -0
  45. package/dist/cjs/proof/index.d.ts.map +1 -0
  46. package/dist/cjs/proof/index.js +19 -0
  47. package/dist/cjs/proof/index.js.map +1 -0
  48. package/dist/cjs/proof/merkle.d.ts +40 -0
  49. package/dist/cjs/proof/merkle.d.ts.map +1 -0
  50. package/dist/cjs/proof/merkle.js +182 -0
  51. package/dist/cjs/proof/merkle.js.map +1 -0
  52. package/dist/cjs/proof/rpc.d.ts +10 -0
  53. package/dist/cjs/proof/rpc.d.ts.map +1 -0
  54. package/dist/cjs/proof/rpc.js +20 -0
  55. package/dist/cjs/proof/rpc.js.map +1 -0
  56. package/dist/cjs/rpcStateManager.d.ts +162 -0
  57. package/dist/cjs/rpcStateManager.d.ts.map +1 -0
  58. package/dist/cjs/rpcStateManager.js +313 -0
  59. package/dist/cjs/rpcStateManager.js.map +1 -0
  60. package/dist/cjs/simpleStateManager.d.ts +54 -0
  61. package/dist/cjs/simpleStateManager.d.ts.map +1 -0
  62. package/dist/cjs/simpleStateManager.js +125 -0
  63. package/dist/cjs/simpleStateManager.js.map +1 -0
  64. package/dist/cjs/statefulBinaryTreeStateManager.d.ts +69 -0
  65. package/dist/cjs/statefulBinaryTreeStateManager.d.ts.map +1 -0
  66. package/dist/cjs/statefulBinaryTreeStateManager.js +576 -0
  67. package/dist/cjs/statefulBinaryTreeStateManager.js.map +1 -0
  68. package/dist/cjs/types.d.ts +92 -0
  69. package/dist/cjs/types.d.ts.map +1 -0
  70. package/dist/cjs/types.js +3 -0
  71. package/dist/cjs/types.js.map +1 -0
  72. package/dist/cjs/util.d.ts +4 -0
  73. package/dist/cjs/util.d.ts.map +1 -0
  74. package/dist/cjs/util.js +21 -0
  75. package/dist/cjs/util.js.map +1 -0
  76. package/dist/esm/cache/account.d.ts +85 -0
  77. package/dist/esm/cache/account.d.ts.map +1 -0
  78. package/dist/esm/cache/account.js +248 -0
  79. package/dist/esm/cache/account.js.map +1 -0
  80. package/dist/esm/cache/cache.d.ts +23 -0
  81. package/dist/esm/cache/cache.d.ts.map +1 -0
  82. package/dist/esm/cache/cache.js +27 -0
  83. package/dist/esm/cache/cache.js.map +1 -0
  84. package/dist/esm/cache/caches.d.ts +19 -0
  85. package/dist/esm/cache/caches.d.ts.map +1 -0
  86. package/dist/esm/cache/caches.js +103 -0
  87. package/dist/esm/cache/caches.js.map +1 -0
  88. package/dist/esm/cache/code.d.ts +87 -0
  89. package/dist/esm/cache/code.d.ts.map +1 -0
  90. package/dist/esm/cache/code.js +254 -0
  91. package/dist/esm/cache/code.js.map +1 -0
  92. package/dist/esm/cache/index.d.ts +7 -0
  93. package/dist/esm/cache/index.d.ts.map +1 -0
  94. package/dist/esm/cache/index.js +7 -0
  95. package/dist/esm/cache/index.js.map +1 -0
  96. package/dist/esm/cache/originalStorageCache.d.ts +21 -0
  97. package/dist/esm/cache/originalStorageCache.d.ts.map +1 -0
  98. package/dist/esm/cache/originalStorageCache.js +48 -0
  99. package/dist/esm/cache/originalStorageCache.js.map +1 -0
  100. package/dist/esm/cache/storage.d.ts +101 -0
  101. package/dist/esm/cache/storage.d.ts.map +1 -0
  102. package/dist/esm/cache/storage.js +333 -0
  103. package/dist/esm/cache/storage.js.map +1 -0
  104. package/dist/esm/cache/types.d.ts +36 -0
  105. package/dist/esm/cache/types.d.ts.map +1 -0
  106. package/dist/esm/cache/types.js +5 -0
  107. package/dist/esm/cache/types.js.map +1 -0
  108. package/dist/esm/index.d.ts +8 -0
  109. package/dist/esm/index.d.ts.map +1 -0
  110. package/dist/esm/index.js +8 -0
  111. package/dist/esm/index.js.map +1 -0
  112. package/dist/esm/merkleStateManager.d.ts +260 -0
  113. package/dist/esm/merkleStateManager.d.ts.map +1 -0
  114. package/dist/esm/merkleStateManager.js +612 -0
  115. package/dist/esm/merkleStateManager.js.map +1 -0
  116. package/dist/esm/package.json +3 -0
  117. package/dist/esm/proof/index.d.ts +3 -0
  118. package/dist/esm/proof/index.d.ts.map +1 -0
  119. package/dist/esm/proof/index.js +3 -0
  120. package/dist/esm/proof/index.js.map +1 -0
  121. package/dist/esm/proof/merkle.d.ts +40 -0
  122. package/dist/esm/proof/merkle.d.ts.map +1 -0
  123. package/dist/esm/proof/merkle.js +175 -0
  124. package/dist/esm/proof/merkle.js.map +1 -0
  125. package/dist/esm/proof/rpc.d.ts +10 -0
  126. package/dist/esm/proof/rpc.d.ts.map +1 -0
  127. package/dist/esm/proof/rpc.js +17 -0
  128. package/dist/esm/proof/rpc.js.map +1 -0
  129. package/dist/esm/rpcStateManager.d.ts +162 -0
  130. package/dist/esm/rpcStateManager.d.ts.map +1 -0
  131. package/dist/esm/rpcStateManager.js +308 -0
  132. package/dist/esm/rpcStateManager.js.map +1 -0
  133. package/dist/esm/simpleStateManager.d.ts +54 -0
  134. package/dist/esm/simpleStateManager.d.ts.map +1 -0
  135. package/dist/esm/simpleStateManager.js +121 -0
  136. package/dist/esm/simpleStateManager.js.map +1 -0
  137. package/dist/esm/statefulBinaryTreeStateManager.d.ts +69 -0
  138. package/dist/esm/statefulBinaryTreeStateManager.d.ts.map +1 -0
  139. package/dist/esm/statefulBinaryTreeStateManager.js +572 -0
  140. package/dist/esm/statefulBinaryTreeStateManager.js.map +1 -0
  141. package/dist/esm/types.d.ts +92 -0
  142. package/dist/esm/types.d.ts.map +1 -0
  143. package/dist/esm/types.js +2 -0
  144. package/dist/esm/types.js.map +1 -0
  145. package/dist/esm/util.d.ts +4 -0
  146. package/dist/esm/util.d.ts.map +1 -0
  147. package/dist/esm/util.js +18 -0
  148. package/dist/esm/util.js.map +1 -0
  149. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  150. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  151. package/package.json +74 -0
  152. package/src/cache/account.ts +277 -0
  153. package/src/cache/cache.ts +35 -0
  154. package/src/cache/caches.ts +125 -0
  155. package/src/cache/code.ts +277 -0
  156. package/src/cache/index.ts +6 -0
  157. package/src/cache/originalStorageCache.ts +57 -0
  158. package/src/cache/storage.ts +369 -0
  159. package/src/cache/types.ts +38 -0
  160. package/src/index.ts +7 -0
  161. package/src/merkleStateManager.ts +737 -0
  162. package/src/proof/index.ts +2 -0
  163. package/src/proof/merkle.ts +264 -0
  164. package/src/proof/rpc.ts +24 -0
  165. package/src/rpcStateManager.ts +381 -0
  166. package/src/simpleStateManager.ts +154 -0
  167. package/src/statefulBinaryTreeStateManager.ts +789 -0
  168. package/src/types.ts +103 -0
  169. package/src/util.ts +28 -0
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OriginalStorageCache = void 0;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ /**
6
+ * Helper class to cache original storage values (so values already being present in
7
+ * the pre-state of a call), mainly for correct gas cost calculation in EVM/VM.
8
+ *
9
+ * TODO: Usage of this class is very implicit through the injected `getStorage()`
10
+ * method bound to the calling state manager. It should be examined if there are alternative
11
+ * designs being more transparent and direct along the next breaking release round.
12
+ *
13
+ */
14
+ class OriginalStorageCache {
15
+ constructor(getStorage) {
16
+ this.map = new Map();
17
+ this.getStorage = getStorage;
18
+ }
19
+ async get(address, key) {
20
+ // Using deprecated bytesToUnprefixedHex for performance: used as Map keys for cache lookups.
21
+ const addressHex = (0, util_1.bytesToUnprefixedHex)(address.bytes);
22
+ const map = this.map.get(addressHex);
23
+ if (map !== undefined) {
24
+ const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
25
+ const value = map.get(keyHex);
26
+ if (value !== undefined) {
27
+ return value;
28
+ }
29
+ }
30
+ const value = await this.getStorage(address, key);
31
+ this.put(address, key, value);
32
+ return value;
33
+ }
34
+ put(address, key, value) {
35
+ // Using deprecated bytesToUnprefixedHex for performance: used as Map keys for cache lookups.
36
+ const addressHex = (0, util_1.bytesToUnprefixedHex)(address.bytes);
37
+ let map = this.map.get(addressHex);
38
+ if (map === undefined) {
39
+ map = new Map();
40
+ this.map.set(addressHex, map);
41
+ }
42
+ const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
43
+ if (map.has(keyHex) === false) {
44
+ map.set(keyHex, value);
45
+ }
46
+ }
47
+ clear() {
48
+ this.map = new Map();
49
+ }
50
+ }
51
+ exports.OriginalStorageCache = OriginalStorageCache;
52
+ //# sourceMappingURL=originalStorageCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"originalStorageCache.js","sourceRoot":"","sources":["../../../src/cache/originalStorageCache.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AAMvD;;;;;;;;GAQG;AACH,MAAa,oBAAoB;IAG/B,YAAY,UAAsB;QAChC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAgB,EAAE,GAAe;QACzC,6FAA6F;QAC7F,MAAM,UAAU,GAAG,IAAA,2BAAoB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACpC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;YACxC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACjD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,OAAgB,EAAE,GAAe,EAAE,KAAiB;QACtD,6FAA6F;QAC7F,MAAM,UAAU,GAAG,IAAA,2BAAoB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACtD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;YACf,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;QACxC,IAAI,GAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;YAC/B,GAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;IACtB,CAAC;CACF;AAzCD,oDAyCC"}
@@ -0,0 +1,101 @@
1
+ import { OrderedMap } from '@js-sdsl/ordered-map';
2
+ import { LRUCache } from 'lru-cache';
3
+ import { Cache } from './cache.ts';
4
+ import type { Address } from '@feelyourprotocol/util';
5
+ import type { CacheOpts } from './types.ts';
6
+ /**
7
+ * key -> storage mapping
8
+ *
9
+ * undefined: storage value is known not to exist in the cache
10
+ */
11
+ type DiffStorageCacheMap = Map<string, Uint8Array | undefined>;
12
+ type StorageCacheMap = Map<string, Uint8Array>;
13
+ export declare class StorageCache extends Cache {
14
+ _lruCache: LRUCache<string, StorageCacheMap> | undefined;
15
+ _orderedMapCache: OrderedMap<string, StorageCacheMap> | undefined;
16
+ /**
17
+ * Diff cache collecting the state of the cache
18
+ * at the beginning of checkpoint height
19
+ * (respectively: before a first modification)
20
+ *
21
+ * If the whole cache element is undefined (in contrast
22
+ * to the account), the element didn't exist in the cache
23
+ * before.
24
+ */
25
+ _diffCache: Map<string, DiffStorageCacheMap>[];
26
+ constructor(opts: CacheOpts);
27
+ _saveCachePreState(addressHex: string, keyHex: string): void;
28
+ /**
29
+ * Puts storage value to cache under address_key cache key.
30
+ * @param address - Account address
31
+ * @param key - Storage key
32
+ * @param val - RLP-encoded storage value
33
+ */
34
+ put(address: Address, key: Uint8Array, value: Uint8Array): void;
35
+ /**
36
+ * Returns the queried slot as the RLP encoded storage value
37
+ * hexToBytes('0x80'): slot is known to be empty
38
+ * undefined: slot is not in cache
39
+ * @param address - Address of account
40
+ * @param key - Storage key
41
+ * @returns Storage value or undefined
42
+ */
43
+ get(address: Address, key: Uint8Array): Uint8Array | undefined;
44
+ /**
45
+ * Marks storage key for address as deleted in cache.
46
+ * @param address - Address
47
+ * @param key - Storage key
48
+ */
49
+ del(address: Address, key: Uint8Array): void;
50
+ /**
51
+ * Deletes all storage slots for address from the cache
52
+ * @param address
53
+ */
54
+ clearStorage(address: Address): void;
55
+ /**
56
+ * Flushes cache by returning storage slots that have been modified
57
+ * or deleted and resetting the diff cache (at checkpoint height).
58
+ */
59
+ flush(): [string, string, Uint8Array | undefined][];
60
+ /**
61
+ * Revert changes to cache last checkpoint (no effect on trie).
62
+ */
63
+ revert(): void;
64
+ /**
65
+ * Commits to current state of cache (no effect on trie).
66
+ */
67
+ commit(): void;
68
+ /**
69
+ * Marks current state of cache as checkpoint, which can
70
+ * later on be reverted or committed.
71
+ */
72
+ checkpoint(): void;
73
+ /**
74
+ * Returns the size of the cache
75
+ * @returns
76
+ */
77
+ size(): number;
78
+ /**
79
+ * Returns a dict with cache stats
80
+ * @param reset
81
+ */
82
+ stats(reset?: boolean): {
83
+ size: number;
84
+ reads: number;
85
+ hits: number;
86
+ writes: number;
87
+ deletions: number;
88
+ };
89
+ /**
90
+ * Clears cache.
91
+ */
92
+ clear(): void;
93
+ /**
94
+ * Dumps the RLP-encoded storage values for an `account` specified by `address`.
95
+ * @param address - The address of the `account` to return storage for
96
+ * @returns {StorageCacheMap | undefined} - The storage values for the `account` or undefined if the `account` is not in the cache
97
+ */
98
+ dump(address: Address): StorageCacheMap | undefined;
99
+ }
100
+ export {};
101
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/cache/storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C;;;;GAIG;AACH,KAAK,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,CAAA;AAC9D,KAAK,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAE9C,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAAA;IACxD,gBAAgB,EAAE,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAAA;IAEjE;;;;;;;;OAQG;IACH,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,CAAK;gBAEvC,IAAI,EAAE,SAAS;IAkB3B,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAuBrD;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IA+B/D;;;;;;;OAOG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS;IAoB9D;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IA0B5C;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASpC;;;OAGG;IACH,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,EAAE;IAmCnD;;OAEG;IACH,MAAM,IAAI,IAAI;IAuCd;;OAEG;IACH,MAAM,IAAI,IAAI;IA6Bd;;;OAGG;IACH,UAAU,IAAI,IAAI;IAQlB;;;OAGG;IACH,IAAI;IAQJ;;;OAGG;IACH,KAAK,CAAC,KAAK,UAAO;;;;;;;IAelB;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS;CASpD"}
@@ -0,0 +1,337 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageCache = void 0;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const ordered_map_1 = require("@js-sdsl/ordered-map");
6
+ const debug_1 = require("debug");
7
+ const lru_cache_1 = require("lru-cache");
8
+ const cache_ts_1 = require("./cache.js");
9
+ const types_ts_1 = require("./types.js");
10
+ class StorageCache extends cache_ts_1.Cache {
11
+ constructor(opts) {
12
+ super();
13
+ /**
14
+ * Diff cache collecting the state of the cache
15
+ * at the beginning of checkpoint height
16
+ * (respectively: before a first modification)
17
+ *
18
+ * If the whole cache element is undefined (in contrast
19
+ * to the account), the element didn't exist in the cache
20
+ * before.
21
+ */
22
+ this._diffCache = [];
23
+ if (opts.type === types_ts_1.CacheType.LRU) {
24
+ this._lruCache = new lru_cache_1.LRUCache({
25
+ max: opts.size,
26
+ updateAgeOnGet: true,
27
+ });
28
+ }
29
+ else {
30
+ this._orderedMapCache = new ordered_map_1.OrderedMap();
31
+ }
32
+ this._diffCache.push(new Map());
33
+ if (this.DEBUG) {
34
+ this._debug = (0, debug_1.default)('statemanager:cache:storage');
35
+ }
36
+ }
37
+ _saveCachePreState(addressHex, keyHex) {
38
+ const addressStoragePreState = this._diffCache[this._checkpoints].get(addressHex);
39
+ const diffStorageMap = addressStoragePreState ?? new Map();
40
+ if (!diffStorageMap.has(keyHex)) {
41
+ let oldStorageMap;
42
+ let oldStorage = undefined;
43
+ if (this._lruCache) {
44
+ oldStorageMap = this._lruCache.get(addressHex);
45
+ if (oldStorageMap) {
46
+ oldStorage = oldStorageMap.get(keyHex);
47
+ }
48
+ }
49
+ else {
50
+ oldStorageMap = this._orderedMapCache.getElementByKey(addressHex);
51
+ if (oldStorageMap) {
52
+ oldStorage = oldStorageMap.get(keyHex);
53
+ }
54
+ }
55
+ diffStorageMap.set(keyHex, oldStorage);
56
+ this._diffCache[this._checkpoints].set(addressHex, diffStorageMap);
57
+ }
58
+ }
59
+ /**
60
+ * Puts storage value to cache under address_key cache key.
61
+ * @param address - Account address
62
+ * @param key - Storage key
63
+ * @param val - RLP-encoded storage value
64
+ */
65
+ put(address, key, value) {
66
+ // Using deprecated bytesToUnprefixedHex for performance: used as Map keys for cache lookups.
67
+ const addressHex = (0, util_1.bytesToUnprefixedHex)(address.bytes);
68
+ const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
69
+ this._saveCachePreState(addressHex, keyHex);
70
+ if (this.DEBUG) {
71
+ this._debug(`Put storage for ${addressHex}: ${keyHex} -> ${value !== undefined ? (0, util_1.bytesToUnprefixedHex)(value) : ''}`);
72
+ }
73
+ if (this._lruCache) {
74
+ let storageMap = this._lruCache.get(addressHex);
75
+ if (!storageMap) {
76
+ storageMap = new Map();
77
+ }
78
+ storageMap.set(keyHex, value);
79
+ this._lruCache.set(addressHex, storageMap);
80
+ }
81
+ else {
82
+ let storageMap = this._orderedMapCache.getElementByKey(addressHex);
83
+ if (!storageMap) {
84
+ storageMap = new Map();
85
+ }
86
+ storageMap.set(keyHex, value);
87
+ this._orderedMapCache.setElement(addressHex, storageMap);
88
+ }
89
+ this._stats.writes += 1;
90
+ }
91
+ /**
92
+ * Returns the queried slot as the RLP encoded storage value
93
+ * hexToBytes('0x80'): slot is known to be empty
94
+ * undefined: slot is not in cache
95
+ * @param address - Address of account
96
+ * @param key - Storage key
97
+ * @returns Storage value or undefined
98
+ */
99
+ get(address, key) {
100
+ const addressHex = (0, util_1.bytesToUnprefixedHex)(address.bytes);
101
+ const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
102
+ if (this.DEBUG) {
103
+ this._debug(`Get storage for ${addressHex}`);
104
+ }
105
+ let storageMap;
106
+ if (this._lruCache) {
107
+ storageMap = this._lruCache.get(addressHex);
108
+ }
109
+ else {
110
+ storageMap = this._orderedMapCache.getElementByKey(addressHex);
111
+ }
112
+ this._stats.reads += 1;
113
+ if (storageMap) {
114
+ this._stats.hits += 1;
115
+ return storageMap.get(keyHex);
116
+ }
117
+ }
118
+ /**
119
+ * Marks storage key for address as deleted in cache.
120
+ * @param address - Address
121
+ * @param key - Storage key
122
+ */
123
+ del(address, key) {
124
+ const addressHex = (0, util_1.bytesToUnprefixedHex)(address.bytes);
125
+ const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
126
+ this._saveCachePreState(addressHex, keyHex);
127
+ if (this.DEBUG) {
128
+ this._debug(`Delete storage for ${addressHex}: ${keyHex}`);
129
+ }
130
+ if (this._lruCache) {
131
+ let storageMap = this._lruCache.get(addressHex);
132
+ if (!storageMap) {
133
+ storageMap = new Map();
134
+ }
135
+ storageMap.set(keyHex, (0, util_1.hexToBytes)('0x80'));
136
+ this._lruCache.set(addressHex, storageMap);
137
+ }
138
+ else {
139
+ let storageMap = this._orderedMapCache.getElementByKey(addressHex);
140
+ if (!storageMap) {
141
+ storageMap = new Map();
142
+ }
143
+ storageMap.set(keyHex, (0, util_1.hexToBytes)('0x80'));
144
+ this._orderedMapCache.setElement(addressHex, storageMap);
145
+ }
146
+ this._stats.deletions += 1;
147
+ }
148
+ /**
149
+ * Deletes all storage slots for address from the cache
150
+ * @param address
151
+ */
152
+ clearStorage(address) {
153
+ const addressHex = (0, util_1.bytesToUnprefixedHex)(address.bytes);
154
+ if (this._lruCache) {
155
+ this._lruCache.set(addressHex, new Map());
156
+ }
157
+ else {
158
+ this._orderedMapCache.setElement(addressHex, new Map());
159
+ }
160
+ }
161
+ /**
162
+ * Flushes cache by returning storage slots that have been modified
163
+ * or deleted and resetting the diff cache (at checkpoint height).
164
+ */
165
+ flush() {
166
+ if (this.DEBUG) {
167
+ this._debug(`Flushing cache on checkpoint ${this._checkpoints}`);
168
+ }
169
+ const diffMap = this._diffCache[this._checkpoints];
170
+ const items = [];
171
+ for (const entry of diffMap.entries()) {
172
+ const addressHex = entry[0];
173
+ const diffStorageMap = entry[1];
174
+ let storageMap;
175
+ if (this._lruCache) {
176
+ storageMap = this._lruCache.get(addressHex);
177
+ }
178
+ else {
179
+ storageMap = this._orderedMapCache.getElementByKey(addressHex);
180
+ }
181
+ if (storageMap !== undefined) {
182
+ for (const entry of diffStorageMap.entries()) {
183
+ const keyHex = entry[0];
184
+ const value = storageMap.get(keyHex);
185
+ items.push([addressHex, keyHex, value]);
186
+ }
187
+ }
188
+ else {
189
+ throw (0, util_1.EthereumJSErrorWithoutCode)('internal error: storage cache map for account should be defined');
190
+ }
191
+ }
192
+ this._diffCache[this._checkpoints] = new Map();
193
+ return items;
194
+ }
195
+ /**
196
+ * Revert changes to cache last checkpoint (no effect on trie).
197
+ */
198
+ revert() {
199
+ this._checkpoints -= 1;
200
+ if (this.DEBUG) {
201
+ this._debug(`Revert to checkpoint ${this._checkpoints}`);
202
+ }
203
+ const diffMap = this._diffCache.pop();
204
+ for (const entry of diffMap.entries()) {
205
+ const addressHex = entry[0];
206
+ const diffStorageMap = entry[1];
207
+ for (const entry of diffStorageMap.entries()) {
208
+ const keyHex = entry[0];
209
+ const value = entry[1];
210
+ if (this._lruCache) {
211
+ const storageMap = this._lruCache.get(addressHex) ?? new Map();
212
+ if (value === undefined) {
213
+ // Value is known not to be in the cache before
214
+ // -> delete from cache
215
+ storageMap.delete(keyHex);
216
+ }
217
+ else {
218
+ // Value is known to be in the cache before
219
+ // (being either some storage value or the RLP-encoded empty Uint8Array)
220
+ storageMap.set(keyHex, value);
221
+ }
222
+ this._lruCache.set(addressHex, storageMap);
223
+ }
224
+ else {
225
+ const storageMap = this._orderedMapCache.getElementByKey(addressHex) ?? new Map();
226
+ if (!value) {
227
+ storageMap.delete(keyHex);
228
+ }
229
+ else {
230
+ storageMap.set(keyHex, value);
231
+ }
232
+ this._orderedMapCache.setElement(addressHex, storageMap);
233
+ }
234
+ }
235
+ }
236
+ }
237
+ /**
238
+ * Commits to current state of cache (no effect on trie).
239
+ */
240
+ commit() {
241
+ this._checkpoints -= 1;
242
+ if (this.DEBUG) {
243
+ this._debug(`Commit to checkpoint ${this._checkpoints}`);
244
+ }
245
+ const higherHeightDiffMap = this._diffCache.pop();
246
+ const lowerHeightDiffMap = this._diffCache[this._checkpoints];
247
+ // Go through diffMap from the pre-commit checkpoint height.
248
+ // 1. Iterate through all state pre states
249
+ // 2. If state pre-state is not in the new (lower) height diff map, take pre commit pre state value
250
+ // 3. If state is in new map, take this one, since this supersedes subsequent changes
251
+ for (const entry of higherHeightDiffMap.entries()) {
252
+ const addressHex = entry[0];
253
+ const higherHeightStorageDiff = entry[1];
254
+ const lowerHeightStorageDiff = lowerHeightDiffMap.get(addressHex) ?? new Map();
255
+ for (const entry of higherHeightStorageDiff.entries()) {
256
+ const keyHex = entry[0];
257
+ if (!lowerHeightStorageDiff.has(keyHex)) {
258
+ const elem = entry[1];
259
+ lowerHeightStorageDiff.set(keyHex, elem);
260
+ }
261
+ }
262
+ lowerHeightDiffMap.set(addressHex, lowerHeightStorageDiff);
263
+ }
264
+ }
265
+ /**
266
+ * Marks current state of cache as checkpoint, which can
267
+ * later on be reverted or committed.
268
+ */
269
+ checkpoint() {
270
+ this._checkpoints += 1;
271
+ if (this.DEBUG) {
272
+ this._debug(`New checkpoint ${this._checkpoints}`);
273
+ }
274
+ this._diffCache.push(new Map());
275
+ }
276
+ /**
277
+ * Returns the size of the cache
278
+ * @returns
279
+ */
280
+ size() {
281
+ if (this._lruCache) {
282
+ return this._lruCache.size;
283
+ }
284
+ else {
285
+ return this._orderedMapCache.size();
286
+ }
287
+ }
288
+ /**
289
+ * Returns a dict with cache stats
290
+ * @param reset
291
+ */
292
+ stats(reset = true) {
293
+ const stats = { ...this._stats };
294
+ stats.size = this.size();
295
+ if (reset) {
296
+ this._stats = {
297
+ size: 0,
298
+ reads: 0,
299
+ hits: 0,
300
+ writes: 0,
301
+ deletions: 0,
302
+ };
303
+ }
304
+ return stats;
305
+ }
306
+ /**
307
+ * Clears cache.
308
+ */
309
+ clear() {
310
+ if (this.DEBUG) {
311
+ this._debug(`Clear cache`);
312
+ }
313
+ if (this._lruCache) {
314
+ this._lruCache.clear();
315
+ }
316
+ else {
317
+ this._orderedMapCache.clear();
318
+ }
319
+ }
320
+ /**
321
+ * Dumps the RLP-encoded storage values for an `account` specified by `address`.
322
+ * @param address - The address of the `account` to return storage for
323
+ * @returns {StorageCacheMap | undefined} - The storage values for the `account` or undefined if the `account` is not in the cache
324
+ */
325
+ dump(address) {
326
+ let storageMap;
327
+ if (this._lruCache) {
328
+ storageMap = this._lruCache.get((0, util_1.bytesToUnprefixedHex)(address.bytes));
329
+ }
330
+ else {
331
+ storageMap = this._orderedMapCache?.getElementByKey((0, util_1.bytesToUnprefixedHex)(address.bytes));
332
+ }
333
+ return storageMap;
334
+ }
335
+ }
336
+ exports.StorageCache = StorageCache;
337
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/cache/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export type CacheType = (typeof CacheType)[keyof typeof CacheType];
2
+ export declare const CacheType: {
3
+ readonly LRU: "lru";
4
+ readonly ORDERED_MAP: "ordered_map";
5
+ };
6
+ export interface CacheOpts {
7
+ /**
8
+ * Size of the cache (only for LRU cache)
9
+ *
10
+ * Default: 100000 (account cache) / 20000 (storage cache) / 20000 (code cache)
11
+ *
12
+ * Note: the cache/trie interplay mechanism is designed in a way that
13
+ * the theoretical number of max modified accounts between two flush operations
14
+ * should be smaller than the cache size, otherwise the cache will "forget" the
15
+ * old modifications resulting in an incomplete set of trie-flushed accounts.
16
+ */
17
+ size: number;
18
+ /**
19
+ * Cache type to use.
20
+ *
21
+ * Available options:
22
+ *
23
+ * ORDERED_MAP: Cache with no fixed upper bound and dynamic allocation,
24
+ * use for dynamic setups like testing or similar.
25
+ *
26
+ * LRU: LRU cache with pre-allocation of memory and a fixed size.
27
+ * Use for larger and more persistent caches.
28
+ */
29
+ type: CacheType;
30
+ }
31
+ export interface CachesStateManagerOpts {
32
+ account?: Partial<CacheOpts>;
33
+ code?: Partial<CacheOpts>;
34
+ storage?: Partial<CacheOpts>;
35
+ }
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AAElE,eAAO,MAAM,SAAS;;;CAGZ,CAAA;AAEV,MAAM,WAAW,SAAS;IACxB;;;;;;;;;OASG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;;;;OAUG;IACH,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;CAC7B"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CacheType = void 0;
4
+ exports.CacheType = {
5
+ LRU: 'lru',
6
+ ORDERED_MAP: 'ordered_map',
7
+ };
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":";;;AAEa,QAAA,SAAS,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,WAAW,EAAE,aAAa;CAClB,CAAA"}
@@ -0,0 +1,8 @@
1
+ export * from './cache/index.ts';
2
+ export * from './merkleStateManager.ts';
3
+ export * from './proof/index.ts';
4
+ export * from './rpcStateManager.ts';
5
+ export * from './simpleStateManager.ts';
6
+ export * from './statefulBinaryTreeStateManager.ts';
7
+ export * from './types.ts';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qCAAqC,CAAA;AACnD,cAAc,YAAY,CAAA"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cache/index.js"), exports);
18
+ __exportStar(require("./merkleStateManager.js"), exports);
19
+ __exportStar(require("./proof/index.js"), exports);
20
+ __exportStar(require("./rpcStateManager.js"), exports);
21
+ __exportStar(require("./simpleStateManager.js"), exports);
22
+ __exportStar(require("./statefulBinaryTreeStateManager.js"), exports);
23
+ __exportStar(require("./types.js"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,0DAAuC;AACvC,mDAAgC;AAChC,uDAAoC;AACpC,0DAAuC;AACvC,sEAAmD;AACnD,6CAA0B"}