code: def build_computation(self,
                            message: Message,
                            transaction: BaseOrSpoofTransaction) -> BaseComputation:
          
          transaction_context = self.vm_state.get_transaction_context(transaction)
          if message.is_create:
              is_collision = self.vm_state.has_code_or_nonce(
                  message.storage_address
              )
  
              if is_collision:
                  # The address of the newly created contract has *somehow* collided
                  # with an existing contract address.
                  computation = self.vm_state.get_computation(message, transaction_context)
                  computation._error = ContractCreationCollision(
                      "Address collision while creating contract: {0}".format(
                          encode_hex(message.storage_address),
                      )
                  )
                  self.vm_state.logger.debug2(
                      "Address collision while creating contract: %s",
                      encode_hex(message.storage_address),
                  )
              else:
                  computation = self.vm_state.get_computation(
                      message,
                      transaction_context,
                  ).apply_create_message()
          else:
              computation = self.vm_state.get_computation(
                  message,
                  transaction_context).apply_message()
  
          return computation
docs: Apply the message to the VM.