Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor get mutable methods of the worldtstate provider #8113

Merged
merged 15 commits into from
Jan 27, 2025
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import static org.hyperledger.besu.ethereum.mainnet.PrivateStateUtils.KEY_IS_PERSISTING_PRIVATE_STATE;
import static org.hyperledger.besu.ethereum.mainnet.PrivateStateUtils.KEY_PRIVATE_METADATA_UPDATER;
import static org.hyperledger.besu.ethereum.mainnet.PrivateStateUtils.KEY_TRANSACTION_HASH;
import static org.hyperledger.besu.ethereum.trie.diffbased.common.provider.WorldStateQueryParams.withStateRootAndBlockHashAndUpdateNodeHead;
import static org.hyperledger.besu.ethereum.trie.diffbased.common.provider.WorldStateQueryParams.withStateRootAndUpdateNodeHead;

import org.hyperledger.besu.datatypes.Hash;
import org.hyperledger.besu.enclave.Enclave;
Expand Down Expand Up @@ -157,9 +157,7 @@ public PrecompileContractResult computePrecompile(
privateStateRootResolver.resolveLastStateRoot(privacyGroupId, privateMetadataUpdater);

final MutableWorldState disposablePrivateState =
privateWorldStateArchive
.getWorldState(withStateRootAndBlockHashAndUpdateNodeHead(lastRootHash, null))
.get();
privateWorldStateArchive.getWorldState(withStateRootAndUpdateNodeHead(lastRootHash)).get();

final WorldUpdater privateWorldStateUpdater = disposablePrivateState.updater();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
*/
package org.hyperledger.besu.ethereum.mainnet.precompiles.privacy;

import static org.hyperledger.besu.ethereum.trie.diffbased.common.provider.WorldStateQueryParams.withStateRootAndBlockHashAndUpdateNodeHead;
import static org.hyperledger.besu.ethereum.trie.diffbased.common.provider.WorldStateQueryParams.withStateRootAndUpdateNodeHead;

import org.hyperledger.besu.datatypes.Hash;
import org.hyperledger.besu.ethereum.core.MutableWorldState;
Expand Down Expand Up @@ -83,9 +83,7 @@ public PrecompileContractResult computePrecompile(
privateStateRootResolver.resolveLastStateRoot(privacyGroupId, privateMetadataUpdater);

final MutableWorldState disposablePrivateState =
privateWorldStateArchive
.getWorldState(withStateRootAndBlockHashAndUpdateNodeHead(lastRootHash, null))
.get();
privateWorldStateArchive.getWorldState(withStateRootAndUpdateNodeHead(lastRootHash)).get();

final WorldUpdater privateWorldStateUpdater = disposablePrivateState.updater();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import static org.hyperledger.besu.ethereum.mainnet.PrivateStateUtils.KEY_PRIVATE_METADATA_UPDATER;
import static org.hyperledger.besu.ethereum.mainnet.PrivateStateUtils.KEY_TRANSACTION_HASH;
import static org.hyperledger.besu.ethereum.privacy.PrivateStateRootResolver.EMPTY_ROOT_HASH;
import static org.hyperledger.besu.ethereum.trie.diffbased.common.provider.WorldStateQueryParams.withStateRootAndBlockHashAndUpdateNodeHead;
import static org.hyperledger.besu.ethereum.trie.diffbased.common.provider.WorldStateQueryParams.withStateRootAndUpdateNodeHead;

import org.hyperledger.besu.datatypes.Address;
import org.hyperledger.besu.datatypes.Hash;
Expand Down Expand Up @@ -173,9 +173,7 @@ public PrecompileContractResult computePrecompile(
privateStateRootResolver.resolveLastStateRoot(privacyGroupId, privateMetadataUpdater);

final MutableWorldState disposablePrivateState =
privateWorldStateArchive
.getWorldState(withStateRootAndBlockHashAndUpdateNodeHead(lastRootHash, null))
.get();
privateWorldStateArchive.getWorldState(withStateRootAndUpdateNodeHead(lastRootHash)).get();

final WorldUpdater privateWorldStateUpdater = disposablePrivateState.updater();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
package org.hyperledger.besu.ethereum.privacy;

import static org.hyperledger.besu.ethereum.privacy.PrivateStateRootResolver.EMPTY_ROOT_HASH;
import static org.hyperledger.besu.ethereum.trie.diffbased.common.provider.WorldStateQueryParams.withStateRootAndBlockHashAndUpdateNodeHead;
import static org.hyperledger.besu.ethereum.trie.diffbased.common.provider.WorldStateQueryParams.withStateRootAndUpdateNodeHead;

import org.hyperledger.besu.datatypes.Address;
import org.hyperledger.besu.datatypes.Hash;
Expand Down Expand Up @@ -127,7 +127,7 @@ public BlockProcessingResult processBlock(

final MutableWorldState disposablePrivateState =
privateWorldStateArchive
.getWorldState(withStateRootAndBlockHashAndUpdateNodeHead(lastRootHash, null))
.getWorldState(withStateRootAndUpdateNodeHead(lastRootHash))
.get();
final WorldUpdater privateWorldStateUpdater = disposablePrivateState.updater();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import org.hyperledger.besu.ethereum.trie.diffbased.bonsai.worldview.BonsaiWorldState;
import org.hyperledger.besu.ethereum.trie.diffbased.common.provider.DiffBasedWorldStateProvider;
import org.hyperledger.besu.ethereum.trie.diffbased.common.trielog.TrieLogManager;
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.WorldStateSharedConfig;
import org.hyperledger.besu.ethereum.trie.patricia.StoredMerklePatriciaTrie;
import org.hyperledger.besu.evm.internal.EvmConfiguration;
import org.hyperledger.besu.plugin.ServiceManager;
Expand Down Expand Up @@ -60,7 +59,7 @@ public BonsaiWorldStateProvider(
this.worldStateHealerSupplier = worldStateHealerSupplier;
provideCachedWorldStorageManager(
new BonsaiCachedWorldStorageManager(
this, worldStateKeyValueStorage, this::cloneBonsaiWorldStateConfig));
this, worldStateKeyValueStorage, worldStateSharedConfig));
loadHeadWorldState(
new BonsaiWorldState(
this, worldStateKeyValueStorage, evmConfiguration, worldStateSharedConfig));
Expand Down Expand Up @@ -154,10 +153,6 @@ public void prepareStateHealing(final Address address, final Bytes location) {
getBonsaiWorldStateKeyValueStorage().downgradeToPartialFlatDbMode();
}

private WorldStateSharedConfig cloneBonsaiWorldStateConfig() {
return WorldStateSharedConfig.newBuilder(worldStateSharedConfig).build();
}

@Override
public void heal(final Optional<Address> maybeAccountToRepair, final Bytes location) {
worldStateHealerSupplier.get().heal(maybeAccountToRepair, location);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,13 @@
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.WorldStateSharedConfig;
import org.hyperledger.besu.evm.internal.EvmConfiguration;

import java.util.function.Supplier;

public class BonsaiCachedWorldStorageManager extends DiffBasedCachedWorldStorageManager {

public BonsaiCachedWorldStorageManager(
final BonsaiWorldStateProvider archive,
final DiffBasedWorldStateKeyValueStorage worldStateKeyValueStorage,
final Supplier<WorldStateSharedConfig> worldStateSharedConfigSupplier) {
super(archive, worldStateKeyValueStorage, worldStateSharedConfigSupplier);
final WorldStateSharedConfig worldStateSharedConfig) {
super(archive, worldStateKeyValueStorage, worldStateSharedConfig);
}

@Override
Expand All @@ -46,7 +44,7 @@ public DiffBasedWorldState createWorldState(
(BonsaiWorldStateProvider) archive,
(BonsaiWorldStateKeyValueStorage) worldStateKeyValueStorage,
evmConfiguration,
worldStateSharedConfigSupplier.get());
WorldStateSharedConfig.newBuilder(worldStateSharedConfig).build());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public NoOpBonsaiCachedWorldStorageManager(
super(
null,
bonsaiWorldStateKeyValueStorage,
WorldStateSharedConfig::createStatefulConfigWithTrie);
WorldStateSharedConfig.createStatefulConfigWithTrie());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import org.hyperledger.besu.ethereum.trie.diffbased.common.trielog.TrieLogManager;
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.DiffBasedWorldState;
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.WorldStateSharedConfig;
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.WorldStateStorageConfig;
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.accumulator.DiffBasedWorldStateUpdateAccumulator;
import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.accumulator.preload.StorageConsumingMap;
import org.hyperledger.besu.ethereum.trie.patricia.StoredMerklePatriciaTrie;
Expand Down Expand Up @@ -67,14 +66,14 @@ public BonsaiWorldState(
final BonsaiWorldStateProvider archive,
final BonsaiWorldStateKeyValueStorage worldStateKeyValueStorage,
final EvmConfiguration evmConfiguration,
final WorldStateSharedConfig worldStateSpec) {
final WorldStateSharedConfig worldStateConfig) {
this(
worldStateKeyValueStorage,
archive.getCachedMerkleTrieLoader(),
archive.getCachedWorldStorageManager(),
archive.getTrieLogManager(),
evmConfiguration,
worldStateSpec);
worldStateConfig);
}

public BonsaiWorldState(
Expand All @@ -86,7 +85,7 @@ public BonsaiWorldState(
worldState.cachedWorldStorageManager,
worldState.trieLogManager,
worldState.accumulator.getEvmConfiguration(),
WorldStateSharedConfig.newBuilder(worldState.worldStateSpec).build());
WorldStateSharedConfig.newBuilder(worldState.worldStateConfig).build());
}

public BonsaiWorldState(
Expand All @@ -95,8 +94,8 @@ public BonsaiWorldState(
final DiffBasedCachedWorldStorageManager cachedWorldStorageManager,
final TrieLogManager trieLogManager,
final EvmConfiguration evmConfiguration,
final WorldStateSharedConfig worldStateSpec) {
super(worldStateKeyValueStorage, cachedWorldStorageManager, trieLogManager, worldStateSpec);
final WorldStateSharedConfig worldStateConfig) {
super(worldStateKeyValueStorage, cachedWorldStorageManager, trieLogManager, worldStateConfig);
this.bonsaiCachedMerkleTrieLoader = bonsaiCachedMerkleTrieLoader;
this.worldStateKeyValueStorage = worldStateKeyValueStorage;
this.setAccumulator(
Expand Down Expand Up @@ -302,7 +301,7 @@ private void updateAccountStorageState(
writeStorageTrieNode(
bonsaiUpdater, updatedAddressHash, location, key, value)));
// only use storage root of the trie when trie is enabled
if (!worldStateSpec.isTrieDisabled()) {
if (!worldStateConfig.isTrieDisabled()) {
final Hash newStorageRoot = Hash.wrap(storageTrie.getRootHash());
accountUpdated.setStorageRoot(newStorageRoot);
}
Expand Down Expand Up @@ -446,14 +445,13 @@ public Map<Bytes32, Bytes> getAllAccountStorage(final Address address, final Has

@Override
public MutableWorldState freeze() {
this.worldStateStorageSpec =
WorldStateStorageConfig.newBuilder(worldStateStorageSpec).setFrozen(true).build();
this.isStorageFrozen = true;
this.worldStateKeyValueStorage = new BonsaiWorldStateLayerStorage(getWorldStateStorage());
return this;
}

private MerkleTrie<Bytes, Bytes> createTrie(final NodeLoader nodeLoader, final Bytes32 rootHash) {
if (worldStateSpec.isTrieDisabled()) {
if (worldStateConfig.isTrieDisabled()) {
return new NoOpMerkleTrie<>();
} else {
return new StoredMerklePatriciaTrie<>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.function.Supplier;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
Expand All @@ -50,7 +49,7 @@ public abstract class DiffBasedCachedWorldStorageManager implements StorageSubsc
LoggerFactory.getLogger(DiffBasedCachedWorldStorageManager.class);
private final DiffBasedWorldStateProvider archive;
private final EvmConfiguration evmConfiguration;
protected final Supplier<WorldStateSharedConfig> worldStateSharedConfigSupplier;
protected final WorldStateSharedConfig worldStateSharedConfig;
private final Cache<Hash, BlockHeader> stateRootToBlockHeaderCache =
Caffeine.newBuilder()
.maximumSize(RETAINED_LAYERS)
Expand All @@ -65,25 +64,25 @@ private DiffBasedCachedWorldStorageManager(
final DiffBasedWorldStateKeyValueStorage worldStateKeyValueStorage,
final Map<Bytes32, DiffBasedCachedWorldView> cachedWorldStatesByHash,
final EvmConfiguration evmConfiguration,
final Supplier<WorldStateSharedConfig> worldStateSharedConfigSupplier) {
final WorldStateSharedConfig worldStateSharedConfig) {
worldStateKeyValueStorage.subscribe(this);
this.rootWorldStateStorage = worldStateKeyValueStorage;
this.cachedWorldStatesByHash = cachedWorldStatesByHash;
this.archive = archive;
this.evmConfiguration = evmConfiguration;
this.worldStateSharedConfigSupplier = worldStateSharedConfigSupplier;
this.worldStateSharedConfig = worldStateSharedConfig;
}

public DiffBasedCachedWorldStorageManager(
final DiffBasedWorldStateProvider archive,
final DiffBasedWorldStateKeyValueStorage worldStateKeyValueStorage,
final Supplier<WorldStateSharedConfig> worldStateSharedConfigSupplier) {
final WorldStateSharedConfig worldStateSharedConfig) {
this(
archive,
worldStateKeyValueStorage,
new ConcurrentHashMap<>(),
EvmConfiguration.DEFAULT,
worldStateSharedConfigSupplier);
worldStateSharedConfig);
}

public synchronized void addCachedLayer(
Expand All @@ -94,7 +93,7 @@ public synchronized void addCachedLayer(
Optional.ofNullable(this.cachedWorldStatesByHash.get(blockHeader.getBlockHash()));
if (cachedDiffBasedWorldView.isPresent()) {
// only replace if it is a layered storage
if (forWorldState.isHeadModifyingWorldState()
if (forWorldState.isModifyingHeadWorldState()
&& cachedDiffBasedWorldView.get().getWorldStateStorage()
instanceof DiffBasedLayeredWorldStateKeyValueStorage) {
LOG.atDebug()
Expand All @@ -113,7 +112,7 @@ public synchronized void addCachedLayer(
.addArgument(blockHeader::toLogString)
.addArgument(worldStateRootHash::toShortHexString)
.log();
if (forWorldState.isHeadModifyingWorldState()) {
if (forWorldState.isModifyingHeadWorldState()) {
cachedWorldStatesByHash.put(
blockHeader.getHash(),
new DiffBasedCachedWorldView(
Expand Down
Loading