@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 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/cache/storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C;;;;GAIG;AACH,KAAK,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,CAAA;AAC9D,KAAK,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAE9C,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAAA;IACxD,gBAAgB,EAAE,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAAA;IAEjE;;;;;;;;OAQG;IACH,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,CAAK;gBAEvC,IAAI,EAAE,SAAS;IAkB3B,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAuBrD;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IA+B/D;;;;;;;OAOG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS;IAoB9D;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IA0B5C;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASpC;;;OAGG;IACH,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,EAAE;IAmCnD;;OAEG;IACH,MAAM,IAAI,IAAI;IAuCd;;OAEG;IACH,MAAM,IAAI,IAAI;IA6Bd;;;OAGG;IACH,UAAU,IAAI,IAAI;IAQlB;;;OAGG;IACH,IAAI;IAQJ;;;OAGG;IACH,KAAK,CAAC,KAAK,UAAO;;;;;;;IAelB;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS;CASpD"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { EthereumJSErrorWithoutCode, bytesToUnprefixedHex, hexToBytes } 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 StorageCache 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
|
+
if (this.DEBUG) {
|
|
31
|
+
this._debug = debugDefault('statemanager:cache:storage');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
_saveCachePreState(addressHex, keyHex) {
|
|
35
|
+
const addressStoragePreState = this._diffCache[this._checkpoints].get(addressHex);
|
|
36
|
+
const diffStorageMap = addressStoragePreState ?? new Map();
|
|
37
|
+
if (!diffStorageMap.has(keyHex)) {
|
|
38
|
+
let oldStorageMap;
|
|
39
|
+
let oldStorage = undefined;
|
|
40
|
+
if (this._lruCache) {
|
|
41
|
+
oldStorageMap = this._lruCache.get(addressHex);
|
|
42
|
+
if (oldStorageMap) {
|
|
43
|
+
oldStorage = oldStorageMap.get(keyHex);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
oldStorageMap = this._orderedMapCache.getElementByKey(addressHex);
|
|
48
|
+
if (oldStorageMap) {
|
|
49
|
+
oldStorage = oldStorageMap.get(keyHex);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
diffStorageMap.set(keyHex, oldStorage);
|
|
53
|
+
this._diffCache[this._checkpoints].set(addressHex, diffStorageMap);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Puts storage value to cache under address_key cache key.
|
|
58
|
+
* @param address - Account address
|
|
59
|
+
* @param key - Storage key
|
|
60
|
+
* @param val - RLP-encoded storage value
|
|
61
|
+
*/
|
|
62
|
+
put(address, key, value) {
|
|
63
|
+
// Using deprecated bytesToUnprefixedHex for performance: used as Map keys for cache lookups.
|
|
64
|
+
const addressHex = bytesToUnprefixedHex(address.bytes);
|
|
65
|
+
const keyHex = bytesToUnprefixedHex(key);
|
|
66
|
+
this._saveCachePreState(addressHex, keyHex);
|
|
67
|
+
if (this.DEBUG) {
|
|
68
|
+
this._debug(`Put storage for ${addressHex}: ${keyHex} -> ${value !== undefined ? bytesToUnprefixedHex(value) : ''}`);
|
|
69
|
+
}
|
|
70
|
+
if (this._lruCache) {
|
|
71
|
+
let storageMap = this._lruCache.get(addressHex);
|
|
72
|
+
if (!storageMap) {
|
|
73
|
+
storageMap = new Map();
|
|
74
|
+
}
|
|
75
|
+
storageMap.set(keyHex, value);
|
|
76
|
+
this._lruCache.set(addressHex, storageMap);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
let storageMap = this._orderedMapCache.getElementByKey(addressHex);
|
|
80
|
+
if (!storageMap) {
|
|
81
|
+
storageMap = new Map();
|
|
82
|
+
}
|
|
83
|
+
storageMap.set(keyHex, value);
|
|
84
|
+
this._orderedMapCache.setElement(addressHex, storageMap);
|
|
85
|
+
}
|
|
86
|
+
this._stats.writes += 1;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Returns the queried slot as the RLP encoded storage value
|
|
90
|
+
* hexToBytes('0x80'): slot is known to be empty
|
|
91
|
+
* undefined: slot is not in cache
|
|
92
|
+
* @param address - Address of account
|
|
93
|
+
* @param key - Storage key
|
|
94
|
+
* @returns Storage value or undefined
|
|
95
|
+
*/
|
|
96
|
+
get(address, key) {
|
|
97
|
+
const addressHex = bytesToUnprefixedHex(address.bytes);
|
|
98
|
+
const keyHex = bytesToUnprefixedHex(key);
|
|
99
|
+
if (this.DEBUG) {
|
|
100
|
+
this._debug(`Get storage for ${addressHex}`);
|
|
101
|
+
}
|
|
102
|
+
let storageMap;
|
|
103
|
+
if (this._lruCache) {
|
|
104
|
+
storageMap = this._lruCache.get(addressHex);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
storageMap = this._orderedMapCache.getElementByKey(addressHex);
|
|
108
|
+
}
|
|
109
|
+
this._stats.reads += 1;
|
|
110
|
+
if (storageMap) {
|
|
111
|
+
this._stats.hits += 1;
|
|
112
|
+
return storageMap.get(keyHex);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Marks storage key for address as deleted in cache.
|
|
117
|
+
* @param address - Address
|
|
118
|
+
* @param key - Storage key
|
|
119
|
+
*/
|
|
120
|
+
del(address, key) {
|
|
121
|
+
const addressHex = bytesToUnprefixedHex(address.bytes);
|
|
122
|
+
const keyHex = bytesToUnprefixedHex(key);
|
|
123
|
+
this._saveCachePreState(addressHex, keyHex);
|
|
124
|
+
if (this.DEBUG) {
|
|
125
|
+
this._debug(`Delete storage for ${addressHex}: ${keyHex}`);
|
|
126
|
+
}
|
|
127
|
+
if (this._lruCache) {
|
|
128
|
+
let storageMap = this._lruCache.get(addressHex);
|
|
129
|
+
if (!storageMap) {
|
|
130
|
+
storageMap = new Map();
|
|
131
|
+
}
|
|
132
|
+
storageMap.set(keyHex, hexToBytes('0x80'));
|
|
133
|
+
this._lruCache.set(addressHex, storageMap);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
let storageMap = this._orderedMapCache.getElementByKey(addressHex);
|
|
137
|
+
if (!storageMap) {
|
|
138
|
+
storageMap = new Map();
|
|
139
|
+
}
|
|
140
|
+
storageMap.set(keyHex, hexToBytes('0x80'));
|
|
141
|
+
this._orderedMapCache.setElement(addressHex, storageMap);
|
|
142
|
+
}
|
|
143
|
+
this._stats.deletions += 1;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Deletes all storage slots for address from the cache
|
|
147
|
+
* @param address
|
|
148
|
+
*/
|
|
149
|
+
clearStorage(address) {
|
|
150
|
+
const addressHex = bytesToUnprefixedHex(address.bytes);
|
|
151
|
+
if (this._lruCache) {
|
|
152
|
+
this._lruCache.set(addressHex, new Map());
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this._orderedMapCache.setElement(addressHex, new Map());
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Flushes cache by returning storage slots that have been modified
|
|
160
|
+
* or deleted and resetting the diff cache (at checkpoint height).
|
|
161
|
+
*/
|
|
162
|
+
flush() {
|
|
163
|
+
if (this.DEBUG) {
|
|
164
|
+
this._debug(`Flushing cache on checkpoint ${this._checkpoints}`);
|
|
165
|
+
}
|
|
166
|
+
const diffMap = this._diffCache[this._checkpoints];
|
|
167
|
+
const items = [];
|
|
168
|
+
for (const entry of diffMap.entries()) {
|
|
169
|
+
const addressHex = entry[0];
|
|
170
|
+
const diffStorageMap = entry[1];
|
|
171
|
+
let storageMap;
|
|
172
|
+
if (this._lruCache) {
|
|
173
|
+
storageMap = this._lruCache.get(addressHex);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
storageMap = this._orderedMapCache.getElementByKey(addressHex);
|
|
177
|
+
}
|
|
178
|
+
if (storageMap !== undefined) {
|
|
179
|
+
for (const entry of diffStorageMap.entries()) {
|
|
180
|
+
const keyHex = entry[0];
|
|
181
|
+
const value = storageMap.get(keyHex);
|
|
182
|
+
items.push([addressHex, keyHex, value]);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
throw EthereumJSErrorWithoutCode('internal error: storage cache map for account should be defined');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
this._diffCache[this._checkpoints] = new Map();
|
|
190
|
+
return items;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Revert changes to cache last checkpoint (no effect on trie).
|
|
194
|
+
*/
|
|
195
|
+
revert() {
|
|
196
|
+
this._checkpoints -= 1;
|
|
197
|
+
if (this.DEBUG) {
|
|
198
|
+
this._debug(`Revert to checkpoint ${this._checkpoints}`);
|
|
199
|
+
}
|
|
200
|
+
const diffMap = this._diffCache.pop();
|
|
201
|
+
for (const entry of diffMap.entries()) {
|
|
202
|
+
const addressHex = entry[0];
|
|
203
|
+
const diffStorageMap = entry[1];
|
|
204
|
+
for (const entry of diffStorageMap.entries()) {
|
|
205
|
+
const keyHex = entry[0];
|
|
206
|
+
const value = entry[1];
|
|
207
|
+
if (this._lruCache) {
|
|
208
|
+
const storageMap = this._lruCache.get(addressHex) ?? new Map();
|
|
209
|
+
if (value === undefined) {
|
|
210
|
+
// Value is known not to be in the cache before
|
|
211
|
+
// -> delete from cache
|
|
212
|
+
storageMap.delete(keyHex);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
// Value is known to be in the cache before
|
|
216
|
+
// (being either some storage value or the RLP-encoded empty Uint8Array)
|
|
217
|
+
storageMap.set(keyHex, value);
|
|
218
|
+
}
|
|
219
|
+
this._lruCache.set(addressHex, storageMap);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const storageMap = this._orderedMapCache.getElementByKey(addressHex) ?? new Map();
|
|
223
|
+
if (!value) {
|
|
224
|
+
storageMap.delete(keyHex);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
storageMap.set(keyHex, value);
|
|
228
|
+
}
|
|
229
|
+
this._orderedMapCache.setElement(addressHex, storageMap);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Commits to current state of cache (no effect on trie).
|
|
236
|
+
*/
|
|
237
|
+
commit() {
|
|
238
|
+
this._checkpoints -= 1;
|
|
239
|
+
if (this.DEBUG) {
|
|
240
|
+
this._debug(`Commit to checkpoint ${this._checkpoints}`);
|
|
241
|
+
}
|
|
242
|
+
const higherHeightDiffMap = this._diffCache.pop();
|
|
243
|
+
const lowerHeightDiffMap = this._diffCache[this._checkpoints];
|
|
244
|
+
// Go through diffMap from the pre-commit checkpoint height.
|
|
245
|
+
// 1. Iterate through all state pre states
|
|
246
|
+
// 2. If state pre-state is not in the new (lower) height diff map, take pre commit pre state value
|
|
247
|
+
// 3. If state is in new map, take this one, since this supersedes subsequent changes
|
|
248
|
+
for (const entry of higherHeightDiffMap.entries()) {
|
|
249
|
+
const addressHex = entry[0];
|
|
250
|
+
const higherHeightStorageDiff = entry[1];
|
|
251
|
+
const lowerHeightStorageDiff = lowerHeightDiffMap.get(addressHex) ?? new Map();
|
|
252
|
+
for (const entry of higherHeightStorageDiff.entries()) {
|
|
253
|
+
const keyHex = entry[0];
|
|
254
|
+
if (!lowerHeightStorageDiff.has(keyHex)) {
|
|
255
|
+
const elem = entry[1];
|
|
256
|
+
lowerHeightStorageDiff.set(keyHex, elem);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
lowerHeightDiffMap.set(addressHex, lowerHeightStorageDiff);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Marks current state of cache as checkpoint, which can
|
|
264
|
+
* later on be reverted or committed.
|
|
265
|
+
*/
|
|
266
|
+
checkpoint() {
|
|
267
|
+
this._checkpoints += 1;
|
|
268
|
+
if (this.DEBUG) {
|
|
269
|
+
this._debug(`New checkpoint ${this._checkpoints}`);
|
|
270
|
+
}
|
|
271
|
+
this._diffCache.push(new Map());
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Returns the size of the cache
|
|
275
|
+
* @returns
|
|
276
|
+
*/
|
|
277
|
+
size() {
|
|
278
|
+
if (this._lruCache) {
|
|
279
|
+
return this._lruCache.size;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
return this._orderedMapCache.size();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Returns a dict with cache stats
|
|
287
|
+
* @param reset
|
|
288
|
+
*/
|
|
289
|
+
stats(reset = true) {
|
|
290
|
+
const stats = { ...this._stats };
|
|
291
|
+
stats.size = this.size();
|
|
292
|
+
if (reset) {
|
|
293
|
+
this._stats = {
|
|
294
|
+
size: 0,
|
|
295
|
+
reads: 0,
|
|
296
|
+
hits: 0,
|
|
297
|
+
writes: 0,
|
|
298
|
+
deletions: 0,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
return stats;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Clears cache.
|
|
305
|
+
*/
|
|
306
|
+
clear() {
|
|
307
|
+
if (this.DEBUG) {
|
|
308
|
+
this._debug(`Clear cache`);
|
|
309
|
+
}
|
|
310
|
+
if (this._lruCache) {
|
|
311
|
+
this._lruCache.clear();
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
this._orderedMapCache.clear();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Dumps the RLP-encoded storage values for an `account` specified by `address`.
|
|
319
|
+
* @param address - The address of the `account` to return storage for
|
|
320
|
+
* @returns {StorageCacheMap | undefined} - The storage values for the `account` or undefined if the `account` is not in the cache
|
|
321
|
+
*/
|
|
322
|
+
dump(address) {
|
|
323
|
+
let storageMap;
|
|
324
|
+
if (this._lruCache) {
|
|
325
|
+
storageMap = this._lruCache.get(bytesToUnprefixedHex(address.bytes));
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
storageMap = this._orderedMapCache?.getElementByKey(bytesToUnprefixedHex(address.bytes));
|
|
329
|
+
}
|
|
330
|
+
return storageMap;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/cache/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type CacheType = (typeof CacheType)[keyof typeof CacheType];
|
|
2
|
+
export declare const CacheType: {
|
|
3
|
+
readonly LRU: "lru";
|
|
4
|
+
readonly ORDERED_MAP: "ordered_map";
|
|
5
|
+
};
|
|
6
|
+
export interface CacheOpts {
|
|
7
|
+
/**
|
|
8
|
+
* Size of the cache (only for LRU cache)
|
|
9
|
+
*
|
|
10
|
+
* Default: 100000 (account cache) / 20000 (storage cache) / 20000 (code cache)
|
|
11
|
+
*
|
|
12
|
+
* Note: the cache/trie interplay mechanism is designed in a way that
|
|
13
|
+
* the theoretical number of max modified accounts between two flush operations
|
|
14
|
+
* should be smaller than the cache size, otherwise the cache will "forget" the
|
|
15
|
+
* old modifications resulting in an incomplete set of trie-flushed accounts.
|
|
16
|
+
*/
|
|
17
|
+
size: number;
|
|
18
|
+
/**
|
|
19
|
+
* Cache type to use.
|
|
20
|
+
*
|
|
21
|
+
* Available options:
|
|
22
|
+
*
|
|
23
|
+
* ORDERED_MAP: Cache with no fixed upper bound and dynamic allocation,
|
|
24
|
+
* use for dynamic setups like testing or similar.
|
|
25
|
+
*
|
|
26
|
+
* LRU: LRU cache with pre-allocation of memory and a fixed size.
|
|
27
|
+
* Use for larger and more persistent caches.
|
|
28
|
+
*/
|
|
29
|
+
type: CacheType;
|
|
30
|
+
}
|
|
31
|
+
export interface CachesStateManagerOpts {
|
|
32
|
+
account?: Partial<CacheOpts>;
|
|
33
|
+
code?: Partial<CacheOpts>;
|
|
34
|
+
storage?: Partial<CacheOpts>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AAElE,eAAO,MAAM,SAAS;;;CAGZ,CAAA;AAEV,MAAM,WAAW,SAAS;IACxB;;;;;;;;;OASG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;;;;OAUG;IACH,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cache/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,WAAW,EAAE,aAAa;CAClB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './cache/index.ts';
|
|
2
|
+
export * from './merkleStateManager.ts';
|
|
3
|
+
export * from './proof/index.ts';
|
|
4
|
+
export * from './rpcStateManager.ts';
|
|
5
|
+
export * from './simpleStateManager.ts';
|
|
6
|
+
export * from './statefulBinaryTreeStateManager.ts';
|
|
7
|
+
export * from './types.ts';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qCAAqC,CAAA;AACnD,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./cache/index.js";
|
|
2
|
+
export * from "./merkleStateManager.js";
|
|
3
|
+
export * from "./proof/index.js";
|
|
4
|
+
export * from "./rpcStateManager.js";
|
|
5
|
+
export * from "./simpleStateManager.js";
|
|
6
|
+
export * from "./statefulBinaryTreeStateManager.js";
|
|
7
|
+
export * from "./types.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qCAAqC,CAAA;AACnD,cAAc,YAAY,CAAA"}
|