diff --git a/packages/client/src/execution/vmexecution.ts b/packages/client/src/execution/vmexecution.ts index bc391dc897..07635aa376 100644 --- a/packages/client/src/execution/vmexecution.ts +++ b/packages/client/src/execution/vmexecution.ts @@ -166,17 +166,17 @@ export class VMExecution extends Execution { trie, prefixStorageTrieKeys: this.config.prefixStorageTrieKeys, caches: new Caches({ - accountCacheOpts: { + account: { deactivate: false, type: CacheType.LRU, size: this.config.accountCache, }, - storageCacheOpts: { + storage: { deactivate: false, type: CacheType.LRU, size: this.config.storageCache, }, - codeCacheOpts: { + code: { deactivate: false, type: CacheType.LRU, size: this.config.codeCache, diff --git a/packages/statemanager/src/cache/caches.ts b/packages/statemanager/src/cache/caches.ts index 80270eefca..5aedfb34de 100644 --- a/packages/statemanager/src/cache/caches.ts +++ b/packages/statemanager/src/cache/caches.ts @@ -14,23 +14,20 @@ export class Caches { constructor(opts: CachesStateManagerOpts = {}) { const accountSettings = { - deactivate: - (opts.accountCacheOpts?.deactivate === true || opts.accountCacheOpts?.size === 0) ?? false, - type: opts.accountCacheOpts?.type ?? CacheType.ORDERED_MAP, - size: opts.accountCacheOpts?.size ?? 100000, + deactivate: (opts.account?.deactivate === true || opts.account?.size === 0) ?? false, + type: opts.account?.type ?? CacheType.ORDERED_MAP, + size: opts.account?.size ?? 100000, } const storageSettings = { - deactivate: - (opts.storageCacheOpts?.deactivate === true || opts.storageCacheOpts?.size === 0) ?? false, - type: opts.storageCacheOpts?.type ?? CacheType.ORDERED_MAP, - size: opts.storageCacheOpts?.size ?? 20000, + deactivate: (opts.storage?.deactivate === true || opts.storage?.size === 0) ?? false, + type: opts.storage?.type ?? CacheType.ORDERED_MAP, + size: opts.storage?.size ?? 20000, } const codeSettings = { - deactivate: - (opts.codeCacheOpts?.deactivate === true || opts.codeCacheOpts?.size === 0) ?? false, - type: opts.codeCacheOpts?.type ?? CacheType.ORDERED_MAP, - size: opts.codeCacheOpts?.size ?? 20000, + deactivate: (opts.code?.deactivate === true || opts.code?.size === 0) ?? false, + type: opts.code?.type ?? CacheType.ORDERED_MAP, + size: opts.code?.size ?? 20000, } this.settings = { diff --git a/packages/statemanager/src/cache/types.ts b/packages/statemanager/src/cache/types.ts index 2208d109be..909e5c68dc 100644 --- a/packages/statemanager/src/cache/types.ts +++ b/packages/statemanager/src/cache/types.ts @@ -52,7 +52,7 @@ export interface CacheStateManagerOpts { } export interface CachesStateManagerOpts { - accountCacheOpts?: CacheStateManagerOpts - codeCacheOpts?: CacheStateManagerOpts - storageCacheOpts?: CacheStateManagerOpts + account?: CacheStateManagerOpts + code?: CacheStateManagerOpts + storage?: CacheStateManagerOpts } diff --git a/packages/statemanager/src/stateManager.ts b/packages/statemanager/src/stateManager.ts index 0115c69199..23af18d808 100644 --- a/packages/statemanager/src/stateManager.ts +++ b/packages/statemanager/src/stateManager.ts @@ -939,7 +939,11 @@ export class DefaultStateManager implements StateManagerInterface { trie, prefixStorageTrieKeys, prefixCodeHashes, - caches: new Caches({ accountCacheOpts, codeCacheOpts, storageCacheOpts }), + caches: new Caches({ + account: accountCacheOpts, + code: codeCacheOpts, + storage: storageCacheOpts, + }), }) } diff --git a/packages/statemanager/test/stateManager.account.spec.ts b/packages/statemanager/test/stateManager.account.spec.ts index ed2c4d18f9..11dd50a840 100644 --- a/packages/statemanager/test/stateManager.account.spec.ts +++ b/packages/statemanager/test/stateManager.account.spec.ts @@ -12,7 +12,9 @@ describe('StateManager -> General/Account', () => { { deactivate: false, size: 0 }, ]) { it(`should set the state root to empty`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) assert.ok(equalsBytes(stateManager['_trie'].root(), KECCAK256_RLP), 'it has default root') // commit some data to the trie @@ -32,7 +34,9 @@ describe('StateManager -> General/Account', () => { }) it(`should clear the cache when the state root is set`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const account = createAccountWithDefaults() @@ -75,7 +79,9 @@ describe('StateManager -> General/Account', () => { }) it('should put and get account, and add to the underlying cache if the account is not found', async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const account = createAccountWithDefaults() const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) @@ -94,7 +100,9 @@ describe('StateManager -> General/Account', () => { }) it(`should return undefined for a non-existent account`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const res = (await stateManager.getAccount(address)) === undefined @@ -103,7 +111,9 @@ describe('StateManager -> General/Account', () => { }) it(`should return undefined for an existent account`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const account = createAccountWithDefaults(BigInt(0x1), BigInt(0x1)) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) @@ -115,7 +125,9 @@ describe('StateManager -> General/Account', () => { }) it(`should modify account fields correctly`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const account = createAccountWithDefaults() const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) await stateManager.putAccount(address, account) diff --git a/packages/statemanager/test/stateManager.code.spec.ts b/packages/statemanager/test/stateManager.code.spec.ts index 023afef9d2..146464e7a0 100644 --- a/packages/statemanager/test/stateManager.code.spec.ts +++ b/packages/statemanager/test/stateManager.code.spec.ts @@ -31,8 +31,12 @@ describe('StateManager -> Code', () => { */ // Setup - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) - const codeStateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) + const codeStateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const address1 = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const account = createAccountWithDefaults() const key1 = hexToBytes(`0x${'00'.repeat(32)}`) @@ -87,7 +91,9 @@ describe('StateManager -> Code', () => { }) it(`should set and get code`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const code = hexToBytes( '0x73095e7baea6a6c7c4c2dfeb977efac326af552d873173095e7baea6a6c7c4c2dfeb977efac326af552d873157', @@ -105,7 +111,9 @@ describe('StateManager -> Code', () => { }) it(`should not get code if is not contract`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const raw: AccountData = { nonce: '0x0', @@ -118,7 +126,9 @@ describe('StateManager -> Code', () => { }) it(`should set empty code`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const raw: AccountData = { nonce: '0x0', @@ -133,7 +143,9 @@ describe('StateManager -> Code', () => { }) it(`should prefix codehashes by default`, async () => { - const stateManager = new DefaultStateManager({ caches: new Caches({ accountCacheOpts }) }) + const stateManager = new DefaultStateManager({ + caches: new Caches({ account: accountCacheOpts }), + }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const code = hexToBytes('0x80') await stateManager.putCode(address, code) diff --git a/packages/statemanager/test/stateManager.spec.ts b/packages/statemanager/test/stateManager.spec.ts index 5193adbdd5..2ec8bbb856 100644 --- a/packages/statemanager/test/stateManager.spec.ts +++ b/packages/statemanager/test/stateManager.spec.ts @@ -83,10 +83,10 @@ describe('StateManager -> General', () => { sm = new DefaultStateManager({ trie, caches: new Caches({ - accountCacheOpts: { + account: { type: CacheType.LRU, }, - storageCacheOpts: { + storage: { type: CacheType.LRU, }, }), diff --git a/packages/statemanager/test/stateManager.storage.spec.ts b/packages/statemanager/test/stateManager.storage.spec.ts index 32d4d3e11c..35a81336bb 100644 --- a/packages/statemanager/test/stateManager.storage.spec.ts +++ b/packages/statemanager/test/stateManager.storage.spec.ts @@ -26,7 +26,7 @@ describe('StateManager -> Storage', () => { it.skipIf(isBrowser() === true)(`should dump storage`, async () => { const stateManager = new DefaultStateManager({ prefixStorageTrieKeys, - caches: new Caches({ storageCacheOpts }), + caches: new Caches({ storage: storageCacheOpts }), }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const account = createAccountWithDefaults() @@ -45,7 +45,7 @@ describe('StateManager -> Storage', () => { it("should validate the key's length when modifying a contract's storage", async () => { const stateManager = new DefaultStateManager({ prefixStorageTrieKeys, - caches: new Caches({ storageCacheOpts }), + caches: new Caches({ storage: storageCacheOpts }), }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const account = createAccountWithDefaults() @@ -64,7 +64,7 @@ describe('StateManager -> Storage', () => { it("should validate the key's length when reading a contract's storage", async () => { const stateManager = new DefaultStateManager({ prefixStorageTrieKeys, - caches: new Caches({ storageCacheOpts }), + caches: new Caches({ storage: storageCacheOpts }), }) const address = new Address(hexToBytes('0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b')) const account = createAccountWithDefaults() @@ -83,7 +83,7 @@ describe('StateManager -> Storage', () => { it(`should throw on storage values larger than 32 bytes`, async () => { const stateManager = new DefaultStateManager({ prefixStorageTrieKeys, - caches: new Caches({ storageCacheOpts }), + caches: new Caches({ storage: storageCacheOpts }), }) const address = createZeroAddress() const account = createAccountWithDefaults() @@ -102,7 +102,7 @@ describe('StateManager -> Storage', () => { it(`should strip zeros of storage values`, async () => { const stateManager = new DefaultStateManager({ prefixStorageTrieKeys, - caches: new Caches({ storageCacheOpts }), + caches: new Caches({ storage: storageCacheOpts }), }) const address = createZeroAddress() const account = createAccountWithDefaults() @@ -135,7 +135,7 @@ describe('StateManager -> Storage', () => { for (const length of zeroLengths) { const stateManager = new DefaultStateManager({ prefixStorageTrieKeys, - caches: new Caches({ storageCacheOpts }), + caches: new Caches({ storage: storageCacheOpts }), }) const account = createAccountWithDefaults() await stateManager.putAccount(address, account) @@ -158,7 +158,7 @@ describe('StateManager -> Storage', () => { it(`should not strip trailing zeros`, async () => { const stateManager = new DefaultStateManager({ prefixStorageTrieKeys, - caches: new Caches({ storageCacheOpts }), + caches: new Caches({ storage: storageCacheOpts }), }) const address = createZeroAddress() const account = createAccountWithDefaults() diff --git a/packages/statemanager/test/statelessVerkleStateManager.spec.ts b/packages/statemanager/test/statelessVerkleStateManager.spec.ts index 6a4ff6e2a9..6fc153efae 100644 --- a/packages/statemanager/test/statelessVerkleStateManager.spec.ts +++ b/packages/statemanager/test/statelessVerkleStateManager.spec.ts @@ -149,10 +149,10 @@ describe('StatelessVerkleStateManager: Kaustinen Verkle Block', () => { it(`copy()`, async () => { const stateManager = new StatelessVerkleStateManager({ caches: new Caches({ - accountCacheOpts: { + account: { type: CacheType.ORDERED_MAP, }, - storageCacheOpts: { + storage: { type: CacheType.ORDERED_MAP, }, }),