@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
|
@@ -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 @@
|
|
|
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"}
|
package/dist/cjs/util.js
ADDED
|
@@ -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"}
|