Skip to content

Commit

Permalink
Adapt to latest Besu code
Browse files Browse the repository at this point in the history
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
  • Loading branch information
fab-10 committed Feb 4, 2025
1 parent c204c4c commit 00d785e
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 57 deletions.
14 changes: 0 additions & 14 deletions acceptance-tests/src/test/resources/logback.xml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import org.hyperledger.besu.plugin.data.TransactionSelectionResult;
import org.hyperledger.besu.plugin.services.txselection.AbstractStatefulPluginTransactionSelector;
import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager;
import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager.DuplicableLongState;
import org.hyperledger.besu.plugin.services.txselection.TransactionEvaluationContext;

/**
Expand All @@ -34,16 +33,13 @@
*/
@Slf4j
public class MaxBlockCallDataTransactionSelector
extends AbstractStatefulPluginTransactionSelector<DuplicableLongState> {
extends AbstractStatefulPluginTransactionSelector<Long> {

private final int maxBlockCallDataSize;

// private final PendingSelectionState<Integer> pendingCumulativeBlockCallDataSize =
// new PendingSelectionState<>(0);

public MaxBlockCallDataTransactionSelector(
final SelectorsStateManager stateManager, final int maxBlockCallDataSize) {
super(stateManager, new DuplicableLongState(0L));
super(stateManager, 0L, SelectorsStateManager.StateDuplicator::duplicateLong);
this.maxBlockCallDataSize = maxBlockCallDataSize;
}

Expand All @@ -62,8 +58,7 @@ public TransactionSelectionResult evaluateTransactionPreProcessing(
final Transaction transaction = evaluationContext.getPendingTransaction().getTransaction();
final int transactionCallDataSize = transaction.getPayload().size();

final var selectorState = getWorkingState();
final var stateCumulativeBlockCallDataSize = selectorState.get();
final var stateCumulativeBlockCallDataSize = getWorkingState();

final long newCumulativeBlockCallDataSize =
Math.addExact(stateCumulativeBlockCallDataSize, transactionCallDataSize);
Expand All @@ -85,8 +80,6 @@ public TransactionSelectionResult evaluateTransactionPreProcessing(
.addArgument(newCumulativeBlockCallDataSize)
.log();

selectorState.set(newCumulativeBlockCallDataSize);

return SELECTED;
}

Expand All @@ -101,7 +94,13 @@ public TransactionSelectionResult evaluateTransactionPreProcessing(
public TransactionSelectionResult evaluateTransactionPostProcessing(
final TransactionEvaluationContext<? extends PendingTransaction> evaluationContext,
final TransactionProcessingResult processingResult) {
// Evaluation done in pre-processing, no action needed here.
final long newCumulativeBlockCallDataSize =
Math.addExact(
getWorkingState(),
evaluationContext.getPendingTransaction().getTransaction().getPayload().size());

setWorkingState(newCumulativeBlockCallDataSize);

return SELECTED;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import org.hyperledger.besu.plugin.data.TransactionSelectionResult;
import org.hyperledger.besu.plugin.services.txselection.AbstractStatefulPluginTransactionSelector;
import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager;
import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager.DuplicableLongState;
import org.hyperledger.besu.plugin.services.txselection.TransactionEvaluationContext;

/**
Expand All @@ -36,13 +35,13 @@
*/
@Slf4j
public class MaxBlockGasTransactionSelector
extends AbstractStatefulPluginTransactionSelector<DuplicableLongState> {
extends AbstractStatefulPluginTransactionSelector<Long> {

private final long maxGasPerBlock;

public MaxBlockGasTransactionSelector(
final SelectorsStateManager selectorsStateManager, final long maxGasPerBlock) {
super(selectorsStateManager, new DuplicableLongState(0L));
super(selectorsStateManager, 0L, SelectorsStateManager.StateDuplicator::duplicateLong);
this.maxGasPerBlock = maxGasPerBlock;
}

Expand Down Expand Up @@ -76,8 +75,7 @@ public TransactionSelectionResult evaluateTransactionPostProcessing(
return TX_GAS_EXCEEDS_USER_MAX_BLOCK_GAS;
}

final var selectorState = getWorkingState();
final var stateCumulativeBlockGasUsed = selectorState.get();
final var stateCumulativeBlockGasUsed = getWorkingState();

final long newCumulativeBlockGasUsed =
Math.addExact(stateCumulativeBlockGasUsed, gasUsedByTransaction);
Expand All @@ -94,7 +92,7 @@ public TransactionSelectionResult evaluateTransactionPostProcessing(
return TX_TOO_LARGE_FOR_REMAINING_USER_GAS;
}

selectorState.set(newCumulativeBlockGasUsed);
setWorkingState(newCumulativeBlockGasUsed);

return SELECTED;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
import org.hyperledger.besu.plugin.services.tracer.BlockAwareOperationTracer;
import org.hyperledger.besu.plugin.services.txselection.AbstractStatefulPluginTransactionSelector;
import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager;
import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager.DuplicableState;
import org.hyperledger.besu.plugin.services.txselection.TransactionEvaluationContext;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
Expand All @@ -57,8 +56,7 @@
*/
@Slf4j
public class TraceLineLimitTransactionSelector
extends AbstractStatefulPluginTransactionSelector<
TraceLineLimitTransactionSelector.DuplicableLineLimitMap> {
extends AbstractStatefulPluginTransactionSelector<Map<String, Integer>> {
private static final Marker BLOCK_LINE_COUNT_MARKER = MarkerFactory.getMarker("BLOCK_LINE_COUNT");
@VisibleForTesting protected static Set<Hash> overLineCountLimitCache = new LinkedHashSet<>();
private final ZkTracer zkTracer;
Expand All @@ -77,9 +75,8 @@ public TraceLineLimitTransactionSelector(
final LineaTracerConfiguration tracerConfiguration) {
super(
stateManager,
new DuplicableLineLimitMap(
moduleLimits.keySet().stream()
.collect(Collectors.toMap(Function.identity(), unused -> 0))));
moduleLimits.keySet().stream().collect(Collectors.toMap(Function.identity(), unused -> 0)),
Map::copyOf);
if (l1L2BridgeConfiguration.isEmpty()) {
log.error("L1L2 bridge settings have not been defined.");
System.exit(1);
Expand Down Expand Up @@ -143,8 +140,7 @@ public TransactionSelectionResult evaluateTransactionPostProcessing(
final TransactionEvaluationContext<? extends PendingTransaction> evaluationContext,
final TransactionProcessingResult processingResult) {

final var selectorState = getWorkingState();
final var stateLineLimitMap = selectorState.get();
final var stateLineLimitMap = getWorkingState();

// check that we are not exceeding line number for any module
final Map<String, Integer> currCumulatedLineCount = zkTracer.getModulesLineCount();
Expand Down Expand Up @@ -185,7 +181,7 @@ public TransactionSelectionResult evaluateTransactionPostProcessing(
break;
}

selectorState.set(currCumulatedLineCount);
setWorkingState(currCumulatedLineCount);

return SELECTED;
}
Expand Down Expand Up @@ -242,23 +238,15 @@ public void traceEndBlock(final BlockHeader blockHeader, final BlockBody blockBo
.addKeyValue(
"traceCounts",
() ->
getCommitedState().get().entrySet().stream()
getCommitedState().entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.map(e -> '"' + e.getKey() + "\":" + e.getValue())
.collect(Collectors.joining(",")))
.log();
}
}

static class DuplicableLineLimitMap extends DuplicableState<Map<String, Integer>> {

public DuplicableLineLimitMap(final Map<String, Integer> map) {
super(map);
}

@Override
protected DuplicableState<Map<String, Integer>> deepCopy() {
return new DuplicableLineLimitMap(Map.copyOf(get()));
}
private static Map<String, Integer> duplicateState(final Map<String, Integer> state) {
return Map.copyOf(state);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,18 +92,21 @@ public void shouldNotSelectAdditionalTransactionOnceBlockIsFull() {
private void verifyTransactionSelection(
final PluginTransactionSelector selector,
final TestTransactionEvaluationContext evaluationContext,
final TransactionSelectionResult expectedSelectionResult) {
var selectionResult = selector.evaluateTransactionPreProcessing(evaluationContext);
assertThat(selectionResult).isEqualTo(expectedSelectionResult);
notifySelector(selector, evaluationContext, selectionResult);
final TransactionSelectionResult expectedPreProcessedResult) {
final var preProcessedResult = selector.evaluateTransactionPreProcessing(evaluationContext);
assertThat(preProcessedResult).isEqualTo(expectedPreProcessedResult);
final var processingResult = mock(TransactionProcessingResult.class);
selector.evaluateTransactionPostProcessing(evaluationContext, processingResult);
notifySelector(selector, evaluationContext, preProcessedResult, processingResult);
}

private void notifySelector(
final PluginTransactionSelector selector,
final TestTransactionEvaluationContext evaluationContext,
final TransactionSelectionResult selectionResult) {
final TransactionSelectionResult selectionResult,
final TransactionProcessingResult processingResult) {
if (selectionResult.equals(SELECTED)) {
selector.onTransactionSelected(evaluationContext, mock(TransactionProcessingResult.class));
selector.onTransactionSelected(evaluationContext, processingResult);
} else {
selector.onTransactionNotSelected(evaluationContext, selectionResult);
}
Expand Down

0 comments on commit 00d785e

Please sign in to comment.