private void executePrecompile(
      final PrecompiledContract contract,
      final MessageFrame frame,
      final OperationTracer operationTracer) {
    final long gasRequirement = contract.gasRequirement(frame.getInputData());
    if (frame.getRemainingGas() < gasRequirement) {
      frame.setExceptionalHaltReason(Optional.of(ExceptionalHaltReason.INSUFFICIENT_GAS));
      frame.setState(MessageFrame.State.EXCEPTIONAL_HALT);
      operationTracer.tracePrecompileCall(frame, gasRequirement, null);
    } else {
      frame.decrementRemainingGas(gasRequirement);
      final PrecompiledContract.PrecompileContractResult result =
          contract.computePrecompile(frame.getInputData(), frame);
      operationTracer.tracePrecompileCall(frame, gasRequirement, result.output());
      if (result.isRefundGas()) {
        frame.incrementRemainingGas(gasRequirement);
      }
      if (frame.getState() == MessageFrame.State.REVERT) {
        frame.setRevertReason(result.output());
      } else {
        frame.setOutputData(result.output());
      }
      frame.setState(result.state());
      frame.setExceptionalHaltReason(result.haltReason());
    }
  }
Executes this message call knowing that it is a call to the provided pre-compiled contract.

@param contract The contract this is a message call to.
evm/src/main/java/org/hyperledger/besu/evm/processor/MessageCallProcessor.java