public MessageFrame build() {
      validate();

      WorldUpdater updater;
      boolean newStatic;
      TxValues newTxValues;

      if (parentMessageFrame == null) {
        newTxValues =
            new TxValues(
                blockHashLookup,
                maxStackSize,
                UndoSet.of(new BytesTrieSet<>(Address.SIZE)),
                UndoTable.of(HashBasedTable.create()),
                originator,
                gasPrice,
                blobGasPrice,
                blockValues,
                new ArrayDeque<>(),
                miningBeneficiary,
                versionedHashes,
                UndoTable.of(HashBasedTable.create()),
                UndoSet.of(new BytesTrieSet<>(Address.SIZE)),
                UndoSet.of(new BytesTrieSet<>(Address.SIZE)),
                new UndoScalar<>(0L));
        updater = worldUpdater;
        newStatic = isStatic;
      } else {
        newTxValues = parentMessageFrame.txValues;
        updater = parentMessageFrame.getWorldUpdater().updater();
        newStatic = isStatic || parentMessageFrame.isStatic;
        parentMessageFrame.warmUpAddress(contract);
      }

      MessageFrame messageFrame =
          new MessageFrame(
              type,
              updater,
              initialGas,
              address,
              contract,
              inputData,
              sender,
              value,
              apparentValue,
              code,
              newStatic,
              completer,
              contextVariables == null ? Map.of() : contextVariables,
              reason,
              newTxValues);
      newTxValues.messageFrameStack().addFirst(messageFrame);
      messageFrame.warmUpAddress(sender);
      messageFrame.warmUpAddress(contract);
      for (Address a : accessListWarmAddresses) {
        messageFrame.warmUpAddress(a);
      }
      for (var e : accessListWarmStorage.entries()) {
        messageFrame.warmUpStorage(e.getKey(), e.getValue());
      }
      return messageFrame;
    }
Build MessageFrame.

@return instance of MessageFrame
evm/src/main/java/org/hyperledger/besu/evm/frame/MessageFrame.java