@@ -85,18 +85,22 @@ public Optional<byte[]> findStorageByBlockTimestamp(
85
85
private Optional <byte []> findStorageBatch (final EntityId contractId , final byte [] key ) {
86
86
final var contractSlotsCache = ((CaffeineCache ) this .contractSlotsCache .get (
87
87
contractId , () -> cacheManagerSlotsPerContract .getCache (contractId .toString ())));
88
+ final var wrappedKey = ByteBuffer .wrap (key );
88
89
// Cached slot keys for contract, whose slot values are not present in the contractStateCache
89
- contractSlotsCache .putIfAbsent (ByteBuffer .wrap (key ), EMPTY_VALUE );
90
- final var cachedSlots = contractSlotsCache .getNativeCache ().asMap ().keySet ();
91
-
92
- final var contractSlotValues = contractStateRepository .findStorageBatch (
93
- contractId .getId (),
94
- cachedSlots .stream ()
95
- .map (slot -> ((ByteBuffer ) slot ).array ())
96
- .toList ()
97
- );
98
- boolean isKeyEvictedFromCache =
99
- !cachedSlots .contains (ByteBuffer .wrap (key ).array ());
90
+ contractSlotsCache .putIfAbsent (wrappedKey , EMPTY_VALUE );
91
+ final var cachedSlotKeys = contractSlotsCache .getNativeCache ().asMap ().keySet ();
92
+
93
+ final var cachedSlots = new ArrayList <byte []>(cachedSlotKeys .size ());
94
+ boolean isKeyEvictedFromCache = true ;
95
+
96
+ for (var slot : cachedSlotKeys ) {
97
+ cachedSlots .add (((ByteBuffer ) slot ).array ());
98
+ if (wrappedKey .equals (slot )) {
99
+ isKeyEvictedFromCache = false ;
100
+ }
101
+ }
102
+
103
+ final var contractSlotValues = contractStateRepository .findStorageBatch (contractId .getId (), cachedSlots );
100
104
byte [] cachedValue = null ;
101
105
102
106
for (final var contractSlotValue : contractSlotValues ) {
0 commit comments