@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.
- package/LICENSE +373 -0
- package/README.md +331 -0
- package/dist/cjs/cache/account.d.ts +85 -0
- package/dist/cjs/cache/account.d.ts.map +1 -0
- package/dist/cjs/cache/account.js +252 -0
- package/dist/cjs/cache/account.js.map +1 -0
- package/dist/cjs/cache/cache.d.ts +23 -0
- package/dist/cjs/cache/cache.d.ts.map +1 -0
- package/dist/cjs/cache/cache.js +31 -0
- package/dist/cjs/cache/cache.js.map +1 -0
- package/dist/cjs/cache/caches.d.ts +19 -0
- package/dist/cjs/cache/caches.d.ts.map +1 -0
- package/dist/cjs/cache/caches.js +107 -0
- package/dist/cjs/cache/caches.js.map +1 -0
- package/dist/cjs/cache/code.d.ts +87 -0
- package/dist/cjs/cache/code.d.ts.map +1 -0
- package/dist/cjs/cache/code.js +258 -0
- package/dist/cjs/cache/code.js.map +1 -0
- package/dist/cjs/cache/index.d.ts +7 -0
- package/dist/cjs/cache/index.d.ts.map +1 -0
- package/dist/cjs/cache/index.js +23 -0
- package/dist/cjs/cache/index.js.map +1 -0
- package/dist/cjs/cache/originalStorageCache.d.ts +21 -0
- package/dist/cjs/cache/originalStorageCache.d.ts.map +1 -0
- package/dist/cjs/cache/originalStorageCache.js +52 -0
- package/dist/cjs/cache/originalStorageCache.js.map +1 -0
- package/dist/cjs/cache/storage.d.ts +101 -0
- package/dist/cjs/cache/storage.d.ts.map +1 -0
- package/dist/cjs/cache/storage.js +337 -0
- package/dist/cjs/cache/storage.js.map +1 -0
- package/dist/cjs/cache/types.d.ts +36 -0
- package/dist/cjs/cache/types.d.ts.map +1 -0
- package/dist/cjs/cache/types.js +8 -0
- package/dist/cjs/cache/types.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/merkleStateManager.d.ts +260 -0
- package/dist/cjs/merkleStateManager.d.ts.map +1 -0
- package/dist/cjs/merkleStateManager.js +616 -0
- package/dist/cjs/merkleStateManager.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/proof/index.d.ts +3 -0
- package/dist/cjs/proof/index.d.ts.map +1 -0
- package/dist/cjs/proof/index.js +19 -0
- package/dist/cjs/proof/index.js.map +1 -0
- package/dist/cjs/proof/merkle.d.ts +40 -0
- package/dist/cjs/proof/merkle.d.ts.map +1 -0
- package/dist/cjs/proof/merkle.js +182 -0
- package/dist/cjs/proof/merkle.js.map +1 -0
- package/dist/cjs/proof/rpc.d.ts +10 -0
- package/dist/cjs/proof/rpc.d.ts.map +1 -0
- package/dist/cjs/proof/rpc.js +20 -0
- package/dist/cjs/proof/rpc.js.map +1 -0
- package/dist/cjs/rpcStateManager.d.ts +162 -0
- package/dist/cjs/rpcStateManager.d.ts.map +1 -0
- package/dist/cjs/rpcStateManager.js +313 -0
- package/dist/cjs/rpcStateManager.js.map +1 -0
- package/dist/cjs/simpleStateManager.d.ts +54 -0
- package/dist/cjs/simpleStateManager.d.ts.map +1 -0
- package/dist/cjs/simpleStateManager.js +125 -0
- package/dist/cjs/simpleStateManager.js.map +1 -0
- package/dist/cjs/statefulBinaryTreeStateManager.d.ts +69 -0
- package/dist/cjs/statefulBinaryTreeStateManager.d.ts.map +1 -0
- package/dist/cjs/statefulBinaryTreeStateManager.js +576 -0
- package/dist/cjs/statefulBinaryTreeStateManager.js.map +1 -0
- package/dist/cjs/types.d.ts +92 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/util.d.ts +4 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +21 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/esm/cache/account.d.ts +85 -0
- package/dist/esm/cache/account.d.ts.map +1 -0
- package/dist/esm/cache/account.js +248 -0
- package/dist/esm/cache/account.js.map +1 -0
- package/dist/esm/cache/cache.d.ts +23 -0
- package/dist/esm/cache/cache.d.ts.map +1 -0
- package/dist/esm/cache/cache.js +27 -0
- package/dist/esm/cache/cache.js.map +1 -0
- package/dist/esm/cache/caches.d.ts +19 -0
- package/dist/esm/cache/caches.d.ts.map +1 -0
- package/dist/esm/cache/caches.js +103 -0
- package/dist/esm/cache/caches.js.map +1 -0
- package/dist/esm/cache/code.d.ts +87 -0
- package/dist/esm/cache/code.d.ts.map +1 -0
- package/dist/esm/cache/code.js +254 -0
- package/dist/esm/cache/code.js.map +1 -0
- package/dist/esm/cache/index.d.ts +7 -0
- package/dist/esm/cache/index.d.ts.map +1 -0
- package/dist/esm/cache/index.js +7 -0
- package/dist/esm/cache/index.js.map +1 -0
- package/dist/esm/cache/originalStorageCache.d.ts +21 -0
- package/dist/esm/cache/originalStorageCache.d.ts.map +1 -0
- package/dist/esm/cache/originalStorageCache.js +48 -0
- package/dist/esm/cache/originalStorageCache.js.map +1 -0
- package/dist/esm/cache/storage.d.ts +101 -0
- package/dist/esm/cache/storage.d.ts.map +1 -0
- package/dist/esm/cache/storage.js +333 -0
- package/dist/esm/cache/storage.js.map +1 -0
- package/dist/esm/cache/types.d.ts +36 -0
- package/dist/esm/cache/types.d.ts.map +1 -0
- package/dist/esm/cache/types.js +5 -0
- package/dist/esm/cache/types.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/merkleStateManager.d.ts +260 -0
- package/dist/esm/merkleStateManager.d.ts.map +1 -0
- package/dist/esm/merkleStateManager.js +612 -0
- package/dist/esm/merkleStateManager.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/proof/index.d.ts +3 -0
- package/dist/esm/proof/index.d.ts.map +1 -0
- package/dist/esm/proof/index.js +3 -0
- package/dist/esm/proof/index.js.map +1 -0
- package/dist/esm/proof/merkle.d.ts +40 -0
- package/dist/esm/proof/merkle.d.ts.map +1 -0
- package/dist/esm/proof/merkle.js +175 -0
- package/dist/esm/proof/merkle.js.map +1 -0
- package/dist/esm/proof/rpc.d.ts +10 -0
- package/dist/esm/proof/rpc.d.ts.map +1 -0
- package/dist/esm/proof/rpc.js +17 -0
- package/dist/esm/proof/rpc.js.map +1 -0
- package/dist/esm/rpcStateManager.d.ts +162 -0
- package/dist/esm/rpcStateManager.d.ts.map +1 -0
- package/dist/esm/rpcStateManager.js +308 -0
- package/dist/esm/rpcStateManager.js.map +1 -0
- package/dist/esm/simpleStateManager.d.ts +54 -0
- package/dist/esm/simpleStateManager.d.ts.map +1 -0
- package/dist/esm/simpleStateManager.js +121 -0
- package/dist/esm/simpleStateManager.js.map +1 -0
- package/dist/esm/statefulBinaryTreeStateManager.d.ts +69 -0
- package/dist/esm/statefulBinaryTreeStateManager.d.ts.map +1 -0
- package/dist/esm/statefulBinaryTreeStateManager.js +572 -0
- package/dist/esm/statefulBinaryTreeStateManager.js.map +1 -0
- package/dist/esm/types.d.ts +92 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/util.d.ts +4 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +18 -0
- package/dist/esm/util.js.map +1 -0
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
- package/package.json +74 -0
- package/src/cache/account.ts +277 -0
- package/src/cache/cache.ts +35 -0
- package/src/cache/caches.ts +125 -0
- package/src/cache/code.ts +277 -0
- package/src/cache/index.ts +6 -0
- package/src/cache/originalStorageCache.ts +57 -0
- package/src/cache/storage.ts +369 -0
- package/src/cache/types.ts +38 -0
- package/src/index.ts +7 -0
- package/src/merkleStateManager.ts +737 -0
- package/src/proof/index.ts +2 -0
- package/src/proof/merkle.ts +264 -0
- package/src/proof/rpc.ts +24 -0
- package/src/rpcStateManager.ts +381 -0
- package/src/simpleStateManager.ts +154 -0
- package/src/statefulBinaryTreeStateManager.ts +789 -0
- package/src/types.ts +103 -0
- 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
|
+
}
|