From d862160b4a7d1d3afecd697465d08c942716c650 Mon Sep 17 00:00:00 2001 From: Karim TAAM Date: Fri, 10 Feb 2023 13:37:53 +0100 Subject: [PATCH] add link to persisted worldstate storage Signed-off-by: Karim TAAM --- .../besu/ethereum/bonsai/AbstractTrieLogManager.java | 7 +++---- .../ethereum/bonsai/BonsaiInMemoryWorldState.java | 8 +++++++- .../ethereum/bonsai/BonsaiPersistedWorldState.java | 11 +++++++++-- .../besu/ethereum/bonsai/TrieLogManager.java | 1 + 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/AbstractTrieLogManager.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/AbstractTrieLogManager.java index 6c6cb872d7c..de2ad89f8f9 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/AbstractTrieLogManager.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/AbstractTrieLogManager.java @@ -58,6 +58,7 @@ public abstract class AbstractTrieLogManager @Override public synchronized void saveTrieLog( final BonsaiWorldStateArchive worldStateArchive, + final BonsaiWorldStateKeyValueStorage worldStateKeyValueStorage, final BonsaiWorldStateUpdater localUpdater, final Hash forWorldStateRootHash, final BlockHeader forBlockHeader, @@ -66,7 +67,7 @@ public synchronized void saveTrieLog( // if it's only in memory we need to save it // for example, in case of reorg we don't replace a trielog layer if (rootWorldStateStorage.getTrieLog(forBlockHeader.getHash()).isEmpty()) { - final BonsaiUpdater stateUpdater = forWorldState.getWorldStateStorage().updater(); + final BonsaiUpdater stateUpdater = worldStateKeyValueStorage.updater(); boolean success = false; try { final TrieLogLayer trieLog = @@ -105,9 +106,7 @@ TrieLogLayer prepareTrieLog( debugLambda(LOG, "Adding layered world state for {}", blockHeader::toLogString); final TrieLogLayer trieLog = localUpdater.generateTrieLog(blockHeader.getBlockHash()); trieLog.freeze(); - BonsaiPersistedWorldState copy = (BonsaiPersistedWorldState) forWorldState.copy(); - copy.updater = forWorldState.updater.copy(); - addCachedLayer(blockHeader, worldStateRootHash, trieLog, worldStateArchive, copy); + addCachedLayer(blockHeader, worldStateRootHash, trieLog, worldStateArchive, forWorldState); scrubCachedLayers(blockHeader.getNumber()); return trieLog; } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiInMemoryWorldState.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiInMemoryWorldState.java index 7c0c2e74ec3..82e5d41b1cc 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiInMemoryWorldState.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiInMemoryWorldState.java @@ -167,7 +167,13 @@ public void persist(final BlockHeader blockHeader) { final Hash newWorldStateRootHash = rootHash(localUpdater); archive .getTrieLogManager() - .saveTrieLog(archive, localUpdater, newWorldStateRootHash, blockHeader, this); + .saveTrieLog( + archive, + worldStateStorage, + localUpdater, + newWorldStateRootHash, + blockHeader, + (BonsaiPersistedWorldState) this.copy()); worldStateRootHash = newWorldStateRootHash; worldStateBlockHash = blockHeader.getBlockHash(); isPersisted = true; diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiPersistedWorldState.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiPersistedWorldState.java index c38bd735062..f51eed5e3a8 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiPersistedWorldState.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/BonsaiPersistedWorldState.java @@ -53,7 +53,7 @@ public class BonsaiPersistedWorldState implements MutableWorldState, BonsaiWorld protected final BonsaiWorldStateKeyValueStorage worldStateStorage; protected final BonsaiWorldStateArchive archive; - protected BonsaiWorldStateUpdater updater; + protected final BonsaiWorldStateUpdater updater; protected Hash worldStateRootHash; protected Hash worldStateBlockHash; @@ -319,11 +319,18 @@ public void persist(final BlockHeader blockHeader) { + " calculated " + newWorldStateRootHash.toHexString()); } + saveTrieLog = () -> archive .getTrieLogManager() - .saveTrieLog(archive, localUpdater, newWorldStateRootHash, blockHeader, this); + .saveTrieLog( + archive, + worldStateStorage, + localUpdater, + newWorldStateRootHash, + blockHeader, + this); stateUpdater .getTrieBranchStorageTransaction() diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/TrieLogManager.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/TrieLogManager.java index 31720cc73b0..9ba462f11df 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/TrieLogManager.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/bonsai/TrieLogManager.java @@ -25,6 +25,7 @@ public interface TrieLogManager { void saveTrieLog( final BonsaiWorldStateArchive worldStateArchive, + final BonsaiWorldStateKeyValueStorage worldStateKeyValueStorage, final BonsaiWorldStateUpdater localUpdater, final Hash forWorldStateRootHash, final BlockHeader forBlockHeader,