private void transferValue(final MessageFrame frame) {
    final MutableAccount senderAccount = frame.getWorldUpdater().getSenderAccount(frame);

    // The yellow paper explicitly states that if the recipient account doesn't exist at this
    // point, it is created. Even if the value is zero we are still creating an account with 0x!
    final MutableAccount recipientAccount =
        frame.getWorldUpdater().getOrCreate(frame.getRecipientAddress());

    if (Objects.equals(frame.getValue(), Wei.ZERO)) {
      // This is only here for situations where you are calling a public address from a private
      // address. Without this guard clause we would attempt to get a mutable public address
      // which isn't possible from a private address and an error would be thrown.
      // If you are attempting to transfer value from a private address
      // to public address an error will be thrown.
      LOG.trace(
          "Message call from {} to {} has zero value: no fund transferred",
          frame.getSenderAddress(),
          frame.getRecipientAddress());
      return;
    }

    if (frame.getRecipientAddress().equals(frame.getSenderAddress())) {
      LOG.trace("Message call of {} to itself: no fund transferred", frame.getSenderAddress());
    } else {
      final Wei prevSenderBalance = senderAccount.decrementBalance(frame.getValue());
      final Wei prevRecipientBalance = recipientAccount.incrementBalance(frame.getValue());

      LOG.trace(
          "Transferred value {} for message call from {} ({} -> {}) to {} ({} -> {})",
          frame.getValue(),
          frame.getSenderAddress(),
          prevSenderBalance,
          senderAccount.getBalance(),
          frame.getRecipientAddress(),
          prevRecipientBalance,
          recipientAccount.getBalance());
    }
  }
Transfers the message call value from the sender to the recipient.

<p>Assumes that the transaction has been validated so that the sender has the required fund as
of the world state of this executor.
evm/src/main/java/org/hyperledger/besu/evm/processor/MessageCallProcessor.java