@Override
  public OperationResult execute(final MessageFrame frame, final EVM evm) {
    // manual check because some reads won't come until the "complete" step.
    if (frame.stackSize() < getStackItemsConsumed()) {
      return UNDERFLOW_RESPONSE;
    }

    final Address to = to(frame);
    final boolean accountIsWarm = frame.warmUpAddress(to) || gasCalculator().isPrecompile(to);
    long cost = cost(frame, accountIsWarm);
    if (frame.getRemainingGas() < cost) {
      return new OperationResult(cost, ExceptionalHaltReason.INSUFFICIENT_GAS);
    }

    final Account contract = frame.getWorldUpdater().get(to);
    cost = clampedAdd(cost, gasCalculator().calculateCodeDelegationResolutionGas(frame, contract));
    if (frame.getRemainingGas() < cost) {
      return new OperationResult(cost, ExceptionalHaltReason.INSUFFICIENT_GAS);
    }
    frame.decrementRemainingGas(cost);

    frame.clearReturnData();

    final Account account = frame.getWorldUpdater().get(frame.getRecipientAddress());
    final Wei balance = account == null ? Wei.ZERO : account.getBalance();

    // If the call is sending more value than the account has or the message frame is too deep
    // return a failed call
    if (value(frame).compareTo(balance) > 0 || frame.getDepth() >= 1024) {
      frame.expandMemory(inputDataOffset(frame), inputDataLength(frame));
      frame.expandMemory(outputDataOffset(frame), outputDataLength(frame));
      // For the following, we either increment the gas or return zero, so we don't get double
      // charged. If we return zero then the traces don't have the right per-opcode cost.
      frame.incrementRemainingGas(gasAvailableForChildCall(frame) + cost);
      frame.popStackItems(getStackItemsConsumed());
      frame.pushStackItem(LEGACY_FAILURE_STACK_ITEM);
      return new OperationResult(cost, null);
    }

    final Bytes inputData = frame.readMutableMemory(inputDataOffset(frame), inputDataLength(frame));

    final Code code = getCode(evm, frame, contract);

    // invalid code results in a quick exit
    if (!code.isValid()) {
      return new OperationResult(cost, ExceptionalHaltReason.INVALID_CODE, 0);
    }

    MessageFrame.builder()
        .parentMessageFrame(frame)
        .type(MessageFrame.Type.MESSAGE_CALL)
        .initialGas(gasAvailableForChildCall(frame))
        .address(address(frame))
        .contract(to)
        .inputData(inputData)
        .sender(sender(frame))
        .value(value(frame))
        .apparentValue(apparentValue(frame))
        .code(code)
        .isStatic(isStatic(frame))
        .completer(child -> complete(frame, child))
        .build();
    // see note in stack depth check about incrementing cost
    frame.incrementRemainingGas(cost);

    frame.setState(MessageFrame.State.CODE_SUSPENDED);
    return new OperationResult(cost, null, 0);
  }
Returns whether the child message call is a delegate call.

@return {@code true} if the child message call is a delegate call; otherwise {@code false}
evm/src/main/java/org/hyperledger/besu/evm/operation/AbstractCallOperation.java