@Override
  public void runBenchmark(
      final PrintStream output, final Boolean attemptNative, final String fork) {

    EvmSpecVersion forkVersion = EvmSpecVersion.fromName(fork);

    if (forkVersion.compareTo(EvmSpecVersion.PRAGUE) < 0) {
      output.printf("EIP2537 is not available before Prague\n");
      return;
    }

    if (!AbstractBLS12PrecompiledContract.isAvailable()) {
      output.printf(
          "BLS12-381 not available on this platform %s %s %s\n",
          System.getProperty("os.name"),
          System.getProperty("os.version"),
          System.getProperty("os.arch"));
      return;
    }

    benchmarkG1Add(output);
    benchmarkG1MultiExp32Pairs(output);
    benchmarkMapFpToG1(output);
    benchmarkG2Add(output);
    benchmarkG2MultiExp32Pairs(output);
    benchmarkMapFp2ToG2(output);
    benchmarkBlsPairing(output);
  }
Benchmark BLS12-381 G1 and G2 MSM with default warmup and iterations
ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/benchmarks/BLS12Benchmark.java