Skip to content

Commit

Permalink
make AuthorityProcessor & chain id for it optional
Browse files Browse the repository at this point in the history
Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net>
  • Loading branch information
daniellehrner committed Jul 17, 2024
1 parent f6bf975 commit 299f65f
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@
public class AuthorityProcessor {
private static final Logger LOG = LoggerFactory.getLogger(AuthorityProcessor.class);

private final BigInteger chainId;
private final Optional<BigInteger> maybeChainId;

public AuthorityProcessor(final BigInteger chainId) {
this.chainId = chainId;
public AuthorityProcessor(final Optional<BigInteger> maybeChainId) {
this.maybeChainId = maybeChainId;
}

public void addContractToAuthority(
Expand All @@ -53,9 +53,9 @@ public void addContractToAuthority(
authorityAddress -> {
LOG.trace("Set code authority: {}", authorityAddress);

if (!chainId.equals(BigInteger.ZERO)
if (maybeChainId.isPresent()
&& !payload.chainId().equals(BigInteger.ZERO)
&& !chainId.equals(payload.chainId())) {
&& !maybeChainId.get().equals(payload.chainId())) {
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,7 @@ public static ProtocolSpecBuilder atlantisDefinition(
false,
evmConfiguration.evmStackSize(),
feeMarket,
CoinbaseFeePriceCalculator.frontier(),
new AuthorityProcessor(chainId.orElse(BigInteger.ZERO))))
CoinbaseFeePriceCalculator.frontier()))
.name("Atlantis");
}

Expand Down Expand Up @@ -290,8 +289,7 @@ public static ProtocolSpecBuilder spiralDefinition(
true,
evmConfiguration.evmStackSize(),
feeMarket,
CoinbaseFeePriceCalculator.frontier(),
new AuthorityProcessor(chainId.orElse(BigInteger.ZERO))))
CoinbaseFeePriceCalculator.frontier()))
.name("Spiral");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,7 @@ public static ProtocolSpecBuilder frontierDefinition(final EvmConfiguration evmC
false,
evmConfiguration.evmStackSize(),
FeeMarket.legacy(),
CoinbaseFeePriceCalculator.frontier(),
new AuthorityProcessor(BigInteger.ZERO)))
CoinbaseFeePriceCalculator.frontier()))
.privateTransactionProcessorBuilder(
(transactionValidatorFactory,
contractCreationProcessor,
Expand Down Expand Up @@ -265,8 +264,7 @@ public static ProtocolSpecBuilder spuriousDragonDefinition(
false,
evmConfiguration.evmStackSize(),
feeMarket,
CoinbaseFeePriceCalculator.frontier(),
new AuthorityProcessor(chainId.orElse(BigInteger.ZERO))))
CoinbaseFeePriceCalculator.frontier()))
.name("SpuriousDragon");
}

Expand Down Expand Up @@ -427,8 +425,7 @@ static ProtocolSpecBuilder londonDefinition(
false,
evmConfiguration.evmStackSize(),
feeMarket,
CoinbaseFeePriceCalculator.eip1559(),
new AuthorityProcessor(chainId.orElse(BigInteger.ZERO))))
CoinbaseFeePriceCalculator.eip1559()))
.contractCreationProcessorBuilder(
evm ->
new ContractCreationProcessor(
Expand Down Expand Up @@ -528,8 +525,7 @@ static ProtocolSpecBuilder shanghaiDefinition(
true,
evmConfiguration.evmStackSize(),
feeMarket,
CoinbaseFeePriceCalculator.eip1559(),
new AuthorityProcessor(chainId.orElse(BigInteger.ZERO))))
CoinbaseFeePriceCalculator.eip1559()))
// Contract creation rules for EIP-3860 Limit and meter intitcode
.transactionValidatorFactoryBuilder(
(evm, gasLimitCalculator, feeMarket) ->
Expand Down Expand Up @@ -600,7 +596,7 @@ static ProtocolSpecBuilder cancunDefinition(
evmConfiguration.evmStackSize(),
feeMarket,
CoinbaseFeePriceCalculator.eip1559(),
new AuthorityProcessor(chainId.orElse(BigInteger.ZERO))))
new AuthorityProcessor(chainId)))
// change to check for max blob gas per block for EIP-4844
.transactionValidatorFactoryBuilder(
(evm, gasLimitCalculator, feeMarket) ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,30 @@ public class MainnetTransactionProcessor {
protected final FeeMarket feeMarket;
private final CoinbaseFeePriceCalculator coinbaseFeePriceCalculator;

private final AuthorityProcessor authorityProcessor;
private final Optional<AuthorityProcessor> maybeAuthorityProcessor;

public MainnetTransactionProcessor(
final GasCalculator gasCalculator,
final TransactionValidatorFactory transactionValidatorFactory,
final AbstractMessageProcessor contractCreationProcessor,
final AbstractMessageProcessor messageCallProcessor,
final boolean clearEmptyAccounts,
final boolean warmCoinbase,
final int maxStackSize,
final FeeMarket feeMarket,
final CoinbaseFeePriceCalculator coinbaseFeePriceCalculator) {
this(
gasCalculator,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor,
clearEmptyAccounts,
warmCoinbase,
maxStackSize,
feeMarket,
coinbaseFeePriceCalculator,
null);
}

public MainnetTransactionProcessor(
final GasCalculator gasCalculator,
Expand All @@ -93,7 +116,7 @@ public MainnetTransactionProcessor(
final int maxStackSize,
final FeeMarket feeMarket,
final CoinbaseFeePriceCalculator coinbaseFeePriceCalculator,
final AuthorityProcessor authorityProcessor) {
final AuthorityProcessor maybeAuthorityProcessor) {
this.gasCalculator = gasCalculator;
this.transactionValidatorFactory = transactionValidatorFactory;
this.contractCreationProcessor = contractCreationProcessor;
Expand All @@ -103,7 +126,7 @@ public MainnetTransactionProcessor(
this.maxStackSize = maxStackSize;
this.feeMarket = feeMarket;
this.coinbaseFeePriceCalculator = coinbaseFeePriceCalculator;
this.authorityProcessor = authorityProcessor;
this.maybeAuthorityProcessor = Optional.ofNullable(maybeAuthorityProcessor);
}

/**
Expand Down Expand Up @@ -386,7 +409,13 @@ public TransactionProcessingResult processTransaction(
commonMessageFrameBuilder.versionedHashes(
Optional.of(transaction.getVersionedHashes().get().stream().toList()));
} else if (transaction.getAuthorizationList().isPresent()) {
authorityProcessor.addContractToAuthority(worldUpdater, authorizedCodeService, transaction);
if (maybeAuthorityProcessor.isEmpty()) {
throw new RuntimeException("Authority processor is required for 7702 transactions");
}

maybeAuthorityProcessor
.get()
.addContractToAuthority(worldUpdater, authorizedCodeService, transaction);
addressList.addAll(authorizedCodeService.getAuthorities());
} else {
commonMessageFrameBuilder.versionedHashes(Optional.empty());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ MainnetTransactionProcessor createTransactionProcessor(final boolean warmCoinbas
MAX_STACK_SIZE,
FeeMarket.legacy(),
CoinbaseFeePriceCalculator.frontier(),
new AuthorityProcessor(BigInteger.ONE));
new AuthorityProcessor(Optional.of(BigInteger.ONE)));
}

@Test
Expand Down

0 comments on commit 299f65f

Please sign in to comment.