@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
package/src/types.ts ADDED
@@ -0,0 +1,103 @@
1
+ import { type PrefixedHexString } from '@feelyourprotocol/util'
2
+
3
+ import type { BinaryTree } from '@feelyourprotocol/binarytree'
4
+ import type { Common } from '@feelyourprotocol/common'
5
+ import type { MerklePatriciaTrie } from '@feelyourprotocol/mpt'
6
+ import type { Caches } from './index.ts'
7
+ /**
8
+ * Basic state manager options (not to be used directly)
9
+ */
10
+ interface BaseStateManagerOpts {
11
+ /**
12
+ * The common to use
13
+ */
14
+ common?: Common
15
+ }
16
+
17
+ /**
18
+ * Options for constructing a {@link SimpleStateManager}.
19
+ */
20
+ export interface SimpleStateManagerOpts extends BaseStateManagerOpts {
21
+ // Keep this as an alias so that it might be able to extend in the future
22
+ }
23
+
24
+ export interface RPCStateManagerOpts extends BaseStateManagerOpts {
25
+ provider: string
26
+ blockTag: bigint | 'earliest'
27
+ }
28
+
29
+ /**
30
+ * Options for constructing a {@link StateManager}.
31
+ */
32
+ export interface MerkleStateManagerOpts extends BaseStateManagerOpts {
33
+ /**
34
+ * A {@link MerklePatriciaTrie} instance
35
+ */
36
+ trie?: MerklePatriciaTrie
37
+ /**
38
+ * Option to prefix codehashes in the database. This defaults to `true`.
39
+ * If this is disabled, note that it is possible to corrupt the trie, by deploying code
40
+ * which code is equal to the preimage of a trie-node.
41
+ * E.g. by putting the code `0x80` into the empty trie, will lead to a corrupted trie.
42
+ */
43
+ prefixCodeHashes?: boolean
44
+
45
+ /**
46
+ * Option to prefix the keys for the storage tries with the first 7 bytes from the
47
+ * associated account address. Activating this option gives a noticeable performance
48
+ * boost for storage DB reads when operating on larger tries.
49
+ *
50
+ * Note: Activating/deactivating this option causes continued state reads to be
51
+ * incompatible with existing databases.
52
+ *
53
+ * Default: false (for backwards compatibility reasons)
54
+ */
55
+ prefixStorageTrieKeys?: boolean
56
+
57
+ /**
58
+ * Options to enable and configure the use of a cache account, code and storage
59
+ * This can be useful for speeding up reads, especially when the trie is large.
60
+ * The cache is only used for reading from the trie and is not used for writing to the trie.
61
+ *
62
+ * Default: false
63
+ */
64
+ caches?: Caches
65
+ }
66
+
67
+ /**
68
+ * Options dictionary.
69
+ */
70
+ export interface StatelessVerkleStateManagerOpts extends BaseStateManagerOpts {
71
+ common: Common // Common required since it provides verkleCrypto through customCrypto
72
+ caches?: Caches
73
+ }
74
+
75
+ export interface StatefulBinaryTreeStateManagerOpts extends BaseStateManagerOpts {
76
+ hashFunction?: (data: Uint8Array) => Uint8Array
77
+ tree?: BinaryTree
78
+ caches?: Caches
79
+ }
80
+
81
+ export interface BinaryTreeState {
82
+ [key: PrefixedHexString]: PrefixedHexString | null
83
+ }
84
+
85
+ export interface EncodedBinaryTreeState {
86
+ [key: PrefixedHexString]: PrefixedHexString | null
87
+ }
88
+
89
+ export type StorageProof = {
90
+ key: PrefixedHexString
91
+ proof: PrefixedHexString[]
92
+ value: PrefixedHexString
93
+ }
94
+
95
+ export type Proof = {
96
+ address: PrefixedHexString
97
+ balance: PrefixedHexString
98
+ codeHash: PrefixedHexString
99
+ nonce: PrefixedHexString
100
+ storageHash: PrefixedHexString
101
+ accountProof: PrefixedHexString[]
102
+ storageProof: StorageProof[]
103
+ }
package/src/util.ts ADDED
@@ -0,0 +1,28 @@
1
+ import { Account, bytesToHex } from '@feelyourprotocol/util'
2
+
3
+ import type { AccountFields, StateManagerInterface } from '@feelyourprotocol/common'
4
+ import type { Address } from '@feelyourprotocol/util'
5
+
6
+ export async function modifyAccountFields(
7
+ stateManager: StateManagerInterface,
8
+ address: Address,
9
+ accountFields: AccountFields,
10
+ ): Promise<void> {
11
+ const account = (await stateManager.getAccount(address)) ?? new Account()
12
+
13
+ account.nonce = accountFields.nonce ?? account.nonce
14
+ account.balance = accountFields.balance ?? account.balance
15
+ account.storageRoot = accountFields.storageRoot ?? account.storageRoot
16
+ account.codeHash = accountFields.codeHash ?? account.codeHash
17
+ account.codeSize = accountFields.codeSize ?? account.codeSize
18
+ //@ts-expect-error -- Checking for an instantiated property that is not part of the interface
19
+ if (stateManager['_debug'] !== undefined) {
20
+ for (const [field, value] of Object.entries(accountFields)) {
21
+ //@ts-expect-error -- Accessing an instantiated property that is not part of the interface
22
+ stateManager['_debug'](
23
+ `modifyAccountFields address=${address.toString()} ${field}=${value instanceof Uint8Array ? bytesToHex(value) : value} `,
24
+ )
25
+ }
26
+ }
27
+ await stateManager.putAccount(address, account)
28
+ }