public static EVMExecutor evm(
      final EvmSpecVersion fork,
      final BigInteger chainId,
      final EvmConfiguration evmConfiguration) {
    return switch (fork) {
      case FRONTIER -> frontier(evmConfiguration);
      case HOMESTEAD -> homestead(evmConfiguration);
      case TANGERINE_WHISTLE -> tangerineWhistle(evmConfiguration);
      case SPURIOUS_DRAGON -> spuriousDragon(evmConfiguration);
      case BYZANTIUM -> byzantium(evmConfiguration);
      case CONSTANTINOPLE -> constantinople(evmConfiguration);
      case PETERSBURG -> petersburg(evmConfiguration);
      case ISTANBUL -> istanbul(chainId, evmConfiguration);
      case BERLIN -> berlin(chainId, evmConfiguration);
      case LONDON -> london(chainId, evmConfiguration);
      case PARIS -> paris(chainId, evmConfiguration);
      case SHANGHAI -> shanghai(chainId, evmConfiguration);
      case CANCUN -> cancun(chainId, evmConfiguration);
      case CANCUN_EOF -> cancunEOF(chainId, evmConfiguration);
      case PRAGUE -> prague(chainId, evmConfiguration);
      case OSAKA -> osaka(chainId, evmConfiguration);
      case AMSTERDAM -> amsterdam(chainId, evmConfiguration);
      case BOGOTA -> bogota(chainId, evmConfiguration);
      case POLIS -> polis(chainId, evmConfiguration);
      case BANGKOK -> bangkok(chainId, evmConfiguration);
      case FUTURE_EIPS -> futureEips(chainId, evmConfiguration);
      case EXPERIMENTAL_EIPS -> experimentalEips(chainId, evmConfiguration);
    };
  }
Create an EVM at the specified version and chain ID

@param fork the EVM spec version to use
@param chainId the chain ID to use
@param evmConfiguration system configuration options.
@return executor builder
evm/src/main/java/org/hyperledger/besu/evm/fluent/EVMExecutor.java