diff --git a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java index 3cfb0366cb..293d038d98 100644 --- a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java +++ b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java @@ -195,7 +195,7 @@ public class MergeCoordinator implements MergeMiningCoordinator, BadChainListene .whenComplete( (bestBlock, throwable) -> { if (throwable != null) { - LOG.warn("something went wrong creating block", throwable); + LOG.debug("something went wrong creating block", throwable); } else { final var resultBest = validateBlock(bestBlock); if (resultBest.blockProcessingOutputs.isPresent()) { diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java index e94d34f2c2..e650fdd208 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPool.java @@ -40,6 +40,7 @@ import org.hyperledger.besu.ethereum.mainnet.TransactionValidationParams; import org.hyperledger.besu.ethereum.mainnet.ValidationResult; import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket; import org.hyperledger.besu.ethereum.transaction.TransactionInvalidReason; +import org.hyperledger.besu.ethereum.trie.MerkleTrieException; import org.hyperledger.besu.evm.account.Account; import org.hyperledger.besu.metrics.BesuMetricCategory; import org.hyperledger.besu.plugin.data.TransactionType; @@ -279,10 +280,17 @@ public class TransactionPool implements BlockAddedObserver { .getMutable(chainHeadBlockHeader.getStateRoot(), chainHeadBlockHeader.getHash(), false) .map( worldState -> { - final Account senderAccount = worldState.get(transaction.getSender()); - return getTransactionValidator() - .validateForSender( - transaction, senderAccount, TransactionValidationParams.transactionPool()); + try { + final Account senderAccount = worldState.get(transaction.getSender()); + return getTransactionValidator() + .validateForSender( + transaction, senderAccount, TransactionValidationParams.transactionPool()); + } catch (MerkleTrieException ex) { + LOG.debug( + "MerkleTrieException while validating transaction for sender {}", + transaction.getSender()); + return ValidationResult.invalid(CHAIN_HEAD_WORLD_STATE_NOT_AVAILABLE); + } }) .orElseGet(() -> ValidationResult.invalid(CHAIN_HEAD_WORLD_STATE_NOT_AVAILABLE)); }