@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,92 @@
1
+ import { type PrefixedHexString } from '@feelyourprotocol/util';
2
+ import type { BinaryTree } from '@feelyourprotocol/binarytree';
3
+ import type { Common } from '@feelyourprotocol/common';
4
+ import type { MerklePatriciaTrie } from '@feelyourprotocol/mpt';
5
+ import type { Caches } from './index.ts';
6
+ /**
7
+ * Basic state manager options (not to be used directly)
8
+ */
9
+ interface BaseStateManagerOpts {
10
+ /**
11
+ * The common to use
12
+ */
13
+ common?: Common;
14
+ }
15
+ /**
16
+ * Options for constructing a {@link SimpleStateManager}.
17
+ */
18
+ export interface SimpleStateManagerOpts extends BaseStateManagerOpts {
19
+ }
20
+ export interface RPCStateManagerOpts extends BaseStateManagerOpts {
21
+ provider: string;
22
+ blockTag: bigint | 'earliest';
23
+ }
24
+ /**
25
+ * Options for constructing a {@link StateManager}.
26
+ */
27
+ export interface MerkleStateManagerOpts extends BaseStateManagerOpts {
28
+ /**
29
+ * A {@link MerklePatriciaTrie} instance
30
+ */
31
+ trie?: MerklePatriciaTrie;
32
+ /**
33
+ * Option to prefix codehashes in the database. This defaults to `true`.
34
+ * If this is disabled, note that it is possible to corrupt the trie, by deploying code
35
+ * which code is equal to the preimage of a trie-node.
36
+ * E.g. by putting the code `0x80` into the empty trie, will lead to a corrupted trie.
37
+ */
38
+ prefixCodeHashes?: boolean;
39
+ /**
40
+ * Option to prefix the keys for the storage tries with the first 7 bytes from the
41
+ * associated account address. Activating this option gives a noticeable performance
42
+ * boost for storage DB reads when operating on larger tries.
43
+ *
44
+ * Note: Activating/deactivating this option causes continued state reads to be
45
+ * incompatible with existing databases.
46
+ *
47
+ * Default: false (for backwards compatibility reasons)
48
+ */
49
+ prefixStorageTrieKeys?: boolean;
50
+ /**
51
+ * Options to enable and configure the use of a cache account, code and storage
52
+ * This can be useful for speeding up reads, especially when the trie is large.
53
+ * The cache is only used for reading from the trie and is not used for writing to the trie.
54
+ *
55
+ * Default: false
56
+ */
57
+ caches?: Caches;
58
+ }
59
+ /**
60
+ * Options dictionary.
61
+ */
62
+ export interface StatelessVerkleStateManagerOpts extends BaseStateManagerOpts {
63
+ common: Common;
64
+ caches?: Caches;
65
+ }
66
+ export interface StatefulBinaryTreeStateManagerOpts extends BaseStateManagerOpts {
67
+ hashFunction?: (data: Uint8Array) => Uint8Array;
68
+ tree?: BinaryTree;
69
+ caches?: Caches;
70
+ }
71
+ export interface BinaryTreeState {
72
+ [key: PrefixedHexString]: PrefixedHexString | null;
73
+ }
74
+ export interface EncodedBinaryTreeState {
75
+ [key: PrefixedHexString]: PrefixedHexString | null;
76
+ }
77
+ export type StorageProof = {
78
+ key: PrefixedHexString;
79
+ proof: PrefixedHexString[];
80
+ value: PrefixedHexString;
81
+ };
82
+ export type Proof = {
83
+ address: PrefixedHexString;
84
+ balance: PrefixedHexString;
85
+ codeHash: PrefixedHexString;
86
+ nonce: PrefixedHexString;
87
+ storageHash: PrefixedHexString;
88
+ accountProof: PrefixedHexString[];
89
+ storageProof: StorageProof[];
90
+ };
91
+ export {};
92
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC;;GAEG;AACH,UAAU,oBAAoB;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;CAEnE;AAED,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC/D,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE;;OAEG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAE/B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,+BAAgC,SAAQ,oBAAoB;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kCAAmC,SAAQ,oBAAoB;IAC9E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAA;IAC/C,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,IAAI,CAAA;CACnD;AAED,MAAM,WAAW,sBAAsB;IACrC,CAAC,GAAG,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,IAAI,CAAA;CACnD;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,iBAAiB,CAAA;IACtB,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,KAAK,EAAE,iBAAiB,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,OAAO,EAAE,iBAAiB,CAAA;IAC1B,OAAO,EAAE,iBAAiB,CAAA;IAC1B,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,KAAK,EAAE,iBAAiB,CAAA;IACxB,WAAW,EAAE,iBAAiB,CAAA;IAC9B,YAAY,EAAE,iBAAiB,EAAE,CAAA;IACjC,YAAY,EAAE,YAAY,EAAE,CAAA;CAC7B,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { AccountFields, StateManagerInterface } from '@feelyourprotocol/common';
2
+ import type { Address } from '@feelyourprotocol/util';
3
+ export declare function modifyAccountFields(stateManager: StateManagerInterface, address: Address, accountFields: AccountFields): Promise<void>;
4
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE/C,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,qBAAqB,EACnC,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modifyAccountFields = modifyAccountFields;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ async function modifyAccountFields(stateManager, address, accountFields) {
6
+ const account = (await stateManager.getAccount(address)) ?? new util_1.Account();
7
+ account.nonce = accountFields.nonce ?? account.nonce;
8
+ account.balance = accountFields.balance ?? account.balance;
9
+ account.storageRoot = accountFields.storageRoot ?? account.storageRoot;
10
+ account.codeHash = accountFields.codeHash ?? account.codeHash;
11
+ account.codeSize = accountFields.codeSize ?? account.codeSize;
12
+ //@ts-expect-error -- Checking for an instantiated property that is not part of the interface
13
+ if (stateManager['_debug'] !== undefined) {
14
+ for (const [field, value] of Object.entries(accountFields)) {
15
+ //@ts-expect-error -- Accessing an instantiated property that is not part of the interface
16
+ stateManager['_debug'](`modifyAccountFields address=${address.toString()} ${field}=${value instanceof Uint8Array ? (0, util_1.bytesToHex)(value) : value} `);
17
+ }
18
+ }
19
+ await stateManager.putAccount(address, account);
20
+ }
21
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;AAKA,kDAsBC;AA3BD,2CAAsD;AAK/C,KAAK,UAAU,mBAAmB,CACvC,YAAmC,EACnC,OAAgB,EAChB,aAA4B;IAE5B,MAAM,OAAO,GAAG,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,cAAO,EAAE,CAAA;IAEzE,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAA;IACpD,OAAO,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAA;IAC1D,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAA;IACtE,OAAO,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAA;IAC7D,OAAO,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAA;IAC7D,6FAA6F;IAC7F,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3D,0FAA0F;YAC1F,YAAY,CAAC,QAAQ,CAAC,CACpB,+BAA+B,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,IAAA,iBAAU,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CACzH,CAAA;QACH,CAAC;IACH,CAAC;IACD,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { OrderedMap } from '@js-sdsl/ordered-map';
2
+ import { LRUCache } from 'lru-cache';
3
+ import { Cache } from './cache.ts';
4
+ import type { Account, Address } from '@feelyourprotocol/util';
5
+ import type { CacheOpts } from './types.ts';
6
+ /**
7
+ * account: undefined
8
+ *
9
+ * Account is known to not exist in the trie
10
+ */
11
+ type AccountCacheElement = {
12
+ accountRLP: Uint8Array | undefined;
13
+ };
14
+ export declare class AccountCache extends Cache {
15
+ _lruCache: LRUCache<string, AccountCacheElement> | undefined;
16
+ _orderedMapCache: OrderedMap<string, AccountCacheElement> | undefined;
17
+ /**
18
+ * Diff cache collecting the state of the cache
19
+ * at the beginning of checkpoint height
20
+ * (respectively: before a first modification)
21
+ *
22
+ * If the whole cache element is undefined (in contrast
23
+ * to the account), the element didn't exist in the cache
24
+ * before.
25
+ */
26
+ _diffCache: Map<string, AccountCacheElement | undefined>[];
27
+ constructor(opts: CacheOpts);
28
+ _saveCachePreState(cacheKeyHex: string): void;
29
+ /**
30
+ * Puts account to cache under its address.
31
+ * @param address - Address of account
32
+ * @param account - Account or undefined if account doesn't exist in the trie
33
+ */
34
+ put(address: Address, account: Account | undefined, couldBePartialAccount?: boolean): void;
35
+ /**
36
+ * Returns the queried account or undefined if account doesn't exist
37
+ * @param address - Address of account
38
+ */
39
+ get(address: Address): AccountCacheElement | undefined;
40
+ /**
41
+ * Marks address as deleted in cache.
42
+ * @param address - Address
43
+ */
44
+ del(address: Address): void;
45
+ /**
46
+ * Flushes cache by returning accounts that have been modified
47
+ * or deleted and resetting the diff cache (at checkpoint height).
48
+ */
49
+ flush(): [string, AccountCacheElement][];
50
+ /**
51
+ * Revert changes to cache last checkpoint (no effect on trie).
52
+ */
53
+ revert(): void;
54
+ /**
55
+ * Commits to current state of cache (no effect on trie).
56
+ */
57
+ commit(): void;
58
+ /**
59
+ * Marks current state of cache as checkpoint, which can
60
+ * later on be reverted or committed.
61
+ */
62
+ checkpoint(): void;
63
+ /**
64
+ * Returns the size of the cache
65
+ * @returns
66
+ */
67
+ size(): number;
68
+ /**
69
+ * Returns a dict with cache stats
70
+ * @param reset
71
+ */
72
+ stats(reset?: boolean): {
73
+ size: number;
74
+ reads: number;
75
+ hits: number;
76
+ writes: number;
77
+ deletions: number;
78
+ };
79
+ /**
80
+ * Clears cache.
81
+ */
82
+ clear(): void;
83
+ }
84
+ export {};
85
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/cache/account.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,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C;;;;GAIG;AACH,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,UAAU,GAAG,SAAS,CAAA;CACnC,CAAA;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,SAAS,CAAA;IAC5D,gBAAgB,EAAE,UAAU,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,SAAS,CAAA;IAErE;;;;;;;;OAQG;IACH,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC,EAAE,CAAK;gBACnD,IAAI,EAAE,SAAS;IAe3B,kBAAkB,CAAC,WAAW,EAAE,MAAM;IAatC;;;;OAIG;IACH,GAAG,CACD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,qBAAqB,GAAE,OAAe,GACrC,IAAI;IAwBP;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS;IAoBtD;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAoB3B;;;OAGG;IACH,KAAK,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE;IA0BxC;;OAEG;IACH,MAAM,IAAI,IAAI;IAyBd;;OAEG;IACH,MAAM,IAAI,IAAI;IAgBd;;;OAGG;IACH,UAAU,IAAI,IAAI;IAQlB;;;OAGG;IACH,IAAI;IAQJ;;;OAGG;IACH,KAAK,CAAC,KAAK,UAAO;;;;;;;IAelB;;OAEG;IACH,KAAK,IAAI,IAAI;CAUd"}
@@ -0,0 +1,248 @@
1
+ import { bytesToUnprefixedHex } from '@feelyourprotocol/util';
2
+ import { OrderedMap } from '@js-sdsl/ordered-map';
3
+ import debugDefault from 'debug';
4
+ import { LRUCache } from 'lru-cache';
5
+ import { Cache } from "./cache.js";
6
+ import { CacheType } from "./types.js";
7
+ export class AccountCache extends Cache {
8
+ constructor(opts) {
9
+ super();
10
+ /**
11
+ * Diff cache collecting the state of the cache
12
+ * at the beginning of checkpoint height
13
+ * (respectively: before a first modification)
14
+ *
15
+ * If the whole cache element is undefined (in contrast
16
+ * to the account), the element didn't exist in the cache
17
+ * before.
18
+ */
19
+ this._diffCache = [];
20
+ if (opts.type === CacheType.LRU) {
21
+ this._lruCache = new LRUCache({
22
+ max: opts.size,
23
+ updateAgeOnGet: true,
24
+ });
25
+ }
26
+ else {
27
+ this._orderedMapCache = new OrderedMap();
28
+ }
29
+ this._diffCache.push(new Map());
30
+ this._debug = debugDefault('statemanager:cache:account');
31
+ }
32
+ _saveCachePreState(cacheKeyHex) {
33
+ const diffMap = this._diffCache[this._checkpoints];
34
+ if (!diffMap.has(cacheKeyHex)) {
35
+ let oldElem;
36
+ if (this._lruCache) {
37
+ oldElem = this._lruCache.get(cacheKeyHex);
38
+ }
39
+ else {
40
+ oldElem = this._orderedMapCache.getElementByKey(cacheKeyHex);
41
+ }
42
+ diffMap.set(cacheKeyHex, oldElem);
43
+ }
44
+ }
45
+ /**
46
+ * Puts account to cache under its address.
47
+ * @param address - Address of account
48
+ * @param account - Account or undefined if account doesn't exist in the trie
49
+ */
50
+ put(address, account, couldBePartialAccount = false) {
51
+ // Using deprecated bytesToUnprefixedHex for performance: used as Map keys for cache lookups.
52
+ const addressHex = bytesToUnprefixedHex(address.bytes);
53
+ this._saveCachePreState(addressHex);
54
+ const elem = {
55
+ accountRLP: account !== undefined
56
+ ? couldBePartialAccount
57
+ ? account.serializeWithPartialInfo()
58
+ : account.serialize()
59
+ : undefined,
60
+ };
61
+ if (this.DEBUG) {
62
+ this._debug(`Put account ${addressHex}`);
63
+ }
64
+ if (this._lruCache) {
65
+ this._lruCache.set(addressHex, elem);
66
+ }
67
+ else {
68
+ this._orderedMapCache.setElement(addressHex, elem);
69
+ }
70
+ this._stats.writes += 1;
71
+ }
72
+ /**
73
+ * Returns the queried account or undefined if account doesn't exist
74
+ * @param address - Address of account
75
+ */
76
+ get(address) {
77
+ // Using deprecated bytesToUnprefixedHex for performance: used as Map keys for cache lookups.
78
+ const addressHex = bytesToUnprefixedHex(address.bytes);
79
+ if (this.DEBUG) {
80
+ this._debug(`Get account ${addressHex}`);
81
+ }
82
+ let elem;
83
+ if (this._lruCache) {
84
+ elem = this._lruCache.get(addressHex);
85
+ }
86
+ else {
87
+ elem = this._orderedMapCache.getElementByKey(addressHex);
88
+ }
89
+ this._stats.reads += 1;
90
+ if (elem) {
91
+ this._stats.hits += 1;
92
+ }
93
+ return elem;
94
+ }
95
+ /**
96
+ * Marks address as deleted in cache.
97
+ * @param address - Address
98
+ */
99
+ del(address) {
100
+ // Using deprecated bytesToUnprefixedHex for performance: used as Map keys for cache lookups.
101
+ const addressHex = bytesToUnprefixedHex(address.bytes);
102
+ this._saveCachePreState(addressHex);
103
+ if (this.DEBUG) {
104
+ this._debug(`Delete account ${addressHex}`);
105
+ }
106
+ if (this._lruCache) {
107
+ this._lruCache.set(addressHex, {
108
+ accountRLP: undefined,
109
+ });
110
+ }
111
+ else {
112
+ this._orderedMapCache.setElement(addressHex, {
113
+ accountRLP: undefined,
114
+ });
115
+ }
116
+ this._stats.deletions += 1;
117
+ }
118
+ /**
119
+ * Flushes cache by returning accounts that have been modified
120
+ * or deleted and resetting the diff cache (at checkpoint height).
121
+ */
122
+ flush() {
123
+ if (this.DEBUG) {
124
+ this._debug(`Flushing cache on checkpoint ${this._checkpoints}`);
125
+ }
126
+ const diffMap = this._diffCache[this._checkpoints];
127
+ const items = [];
128
+ for (const entry of diffMap.entries()) {
129
+ const cacheKeyHex = entry[0];
130
+ let elem;
131
+ if (this._lruCache) {
132
+ elem = this._lruCache.get(cacheKeyHex);
133
+ }
134
+ else {
135
+ elem = this._orderedMapCache.getElementByKey(cacheKeyHex);
136
+ }
137
+ if (elem !== undefined) {
138
+ items.push([cacheKeyHex, elem]);
139
+ }
140
+ }
141
+ this._diffCache[this._checkpoints] = new Map();
142
+ return items;
143
+ }
144
+ /**
145
+ * Revert changes to cache last checkpoint (no effect on trie).
146
+ */
147
+ revert() {
148
+ this._checkpoints -= 1;
149
+ if (this.DEBUG) {
150
+ this._debug(`Revert to checkpoint ${this._checkpoints}`);
151
+ }
152
+ const diffMap = this._diffCache.pop();
153
+ for (const entry of diffMap.entries()) {
154
+ const addressHex = entry[0];
155
+ const elem = entry[1];
156
+ if (elem === undefined) {
157
+ if (this._lruCache) {
158
+ this._lruCache.delete(addressHex);
159
+ }
160
+ else {
161
+ this._orderedMapCache.eraseElementByKey(addressHex);
162
+ }
163
+ }
164
+ else {
165
+ if (this._lruCache) {
166
+ this._lruCache.set(addressHex, elem);
167
+ }
168
+ else {
169
+ this._orderedMapCache.setElement(addressHex, elem);
170
+ }
171
+ }
172
+ }
173
+ }
174
+ /**
175
+ * Commits to current state of cache (no effect on trie).
176
+ */
177
+ commit() {
178
+ this._checkpoints -= 1;
179
+ if (this.DEBUG) {
180
+ this._debug(`Commit to checkpoint ${this._checkpoints}`);
181
+ }
182
+ const diffMap = this._diffCache.pop();
183
+ for (const entry of diffMap.entries()) {
184
+ const addressHex = entry[0];
185
+ const oldEntry = this._diffCache[this._checkpoints].has(addressHex);
186
+ if (!oldEntry) {
187
+ const elem = entry[1];
188
+ this._diffCache[this._checkpoints].set(addressHex, elem);
189
+ }
190
+ }
191
+ }
192
+ /**
193
+ * Marks current state of cache as checkpoint, which can
194
+ * later on be reverted or committed.
195
+ */
196
+ checkpoint() {
197
+ this._checkpoints += 1;
198
+ if (this.DEBUG) {
199
+ this._debug(`New checkpoint ${this._checkpoints}`);
200
+ }
201
+ this._diffCache.push(new Map());
202
+ }
203
+ /**
204
+ * Returns the size of the cache
205
+ * @returns
206
+ */
207
+ size() {
208
+ if (this._lruCache) {
209
+ return this._lruCache.size;
210
+ }
211
+ else {
212
+ return this._orderedMapCache.size();
213
+ }
214
+ }
215
+ /**
216
+ * Returns a dict with cache stats
217
+ * @param reset
218
+ */
219
+ stats(reset = true) {
220
+ const stats = { ...this._stats };
221
+ stats.size = this.size();
222
+ if (reset) {
223
+ this._stats = {
224
+ size: 0,
225
+ reads: 0,
226
+ hits: 0,
227
+ writes: 0,
228
+ deletions: 0,
229
+ };
230
+ }
231
+ return stats;
232
+ }
233
+ /**
234
+ * Clears cache.
235
+ */
236
+ clear() {
237
+ if (this.DEBUG) {
238
+ this._debug(`Clear cache`);
239
+ }
240
+ if (this._lruCache) {
241
+ this._lruCache.clear();
242
+ }
243
+ else {
244
+ this._orderedMapCache.clear();
245
+ }
246
+ }
247
+ }
248
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/cache/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Debugger } from 'debug';
2
+ export declare class Cache {
3
+ _debug: Debugger;
4
+ _checkpoints: number;
5
+ _stats: {
6
+ size: number;
7
+ reads: number;
8
+ hits: number;
9
+ writes: number;
10
+ deletions: number;
11
+ };
12
+ /**
13
+ * StateManager cache is run in DEBUG mode (default: false)
14
+ * Taken from DEBUG environment variable
15
+ *
16
+ * Safeguards on debug() calls are added for
17
+ * performance reasons to avoid string literal evaluation
18
+ * @hidden
19
+ */
20
+ protected readonly DEBUG: boolean;
21
+ constructor();
22
+ }
23
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/cache/cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAErC,qBAAa,KAAK;IAChB,MAAM,EAAE,QAAQ,CAAA;IAEhB,YAAY,SAAI;IAEhB,MAAM;;;;;;MAML;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAQ;;CAQ1C"}
@@ -0,0 +1,27 @@
1
+ import { isDebugEnabled } from '@feelyourprotocol/util';
2
+ import debugDefault from 'debug';
3
+ export class Cache {
4
+ constructor() {
5
+ this._checkpoints = 0;
6
+ this._stats = {
7
+ size: 0,
8
+ reads: 0,
9
+ hits: 0,
10
+ writes: 0,
11
+ deletions: 0,
12
+ };
13
+ /**
14
+ * StateManager cache is run in DEBUG mode (default: false)
15
+ * Taken from DEBUG environment variable
16
+ *
17
+ * Safeguards on debug() calls are added for
18
+ * performance reasons to avoid string literal evaluation
19
+ * @hidden
20
+ */
21
+ this.DEBUG = false;
22
+ // Skip DEBUG calls unless 'ethjs' included in environmental DEBUG variables
23
+ this.DEBUG = isDebugEnabled('ethjs');
24
+ this._debug = debugDefault('statemanager:cache');
25
+ }
26
+ }
27
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/cache/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,YAAY,MAAM,OAAO,CAAA;AAIhC,MAAM,OAAO,KAAK;IAuBhB;QApBA,iBAAY,GAAG,CAAC,CAAA;QAEhB,WAAM,GAAG;YACP,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;SACb,CAAA;QAED;;;;;;;WAOG;QACgB,UAAK,GAAY,KAAK,CAAA;QAGvC,4EAA4E;QAC5E,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QAEpC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAA;IAClD,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { AccountCache } from './account.ts';
2
+ import { CodeCache } from './code.ts';
3
+ import { StorageCache } from './storage.ts';
4
+ import { type CacheOpts, type CachesStateManagerOpts } from './types.ts';
5
+ import type { Address } from '@feelyourprotocol/util';
6
+ export declare class Caches {
7
+ account?: AccountCache;
8
+ code?: CodeCache;
9
+ storage?: StorageCache;
10
+ settings: Record<'account' | 'code' | 'storage', CacheOpts>;
11
+ constructor(opts?: CachesStateManagerOpts);
12
+ checkpoint(): void;
13
+ clear(): void;
14
+ commit(): void;
15
+ deleteAccount(address: Address): void;
16
+ shallowCopy(downlevelCaches: boolean): Caches | undefined;
17
+ revert(): void;
18
+ }
19
+ //# sourceMappingURL=caches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caches.d.ts","sourceRoot":"","sources":["../../../src/cache/caches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,KAAK,SAAS,EAAa,KAAK,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE/C,qBAAa,MAAM;IACjB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB,QAAQ,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,GAAG,SAAS,EAAE,SAAS,CAAC,CAAA;gBAE/C,IAAI,GAAE,sBAA2B;IA4C7C,UAAU;IAMV,KAAK;IAML,MAAM;IAMN,aAAa,CAAC,OAAO,EAAE,OAAO;IAM9B,WAAW,CAAC,eAAe,EAAE,OAAO;IAqCpC,MAAM;CAKP"}