private MutableWorldState getWorldState(final BlockHeader header, final boolean isPersisting) {
    final WorldStateQueryParams worldStateQueryParams =
        WorldStateQueryParams.newBuilder()
            .withBlockHeader(header)
            .withShouldWorldStateUpdateHead(isPersisting)
            .build();
    return worldStateArchive
        .getWorldState(worldStateQueryParams)
        .orElseThrow(
            () ->
                new IllegalArgumentException(
                    "World state not available for block number (block hash): "
                        + header.toLogString()));
  }
This method is experimental and should be used with caution. Simulate the processing of a block
given a header, a list of transactions, and blockOverrides and persist the WorldState

@param blockNumber the block number
@param transactions the transactions to include in the block
@param blockOverrides block overrides for the block
@param stateOverrides state overrides of the block
@return the PluginBlockSimulationResult
app/src/main/java/org/hyperledger/besu/services/BlockSimulatorServiceImpl.java