code: def processPrepare(self, prepare: Prepare, sender: str) -> None:
          
          key = (prepare.viewNo, prepare.ppSeqNo)
          self.logger.debug("{} received PREPARE{} from {}".format(self, key, sender))
  
          # TODO move this try/except up higher
          try:
              if self.validatePrepare(prepare, sender):
                  self.addToPrepares(prepare, sender)
                  self.stats.inc(TPCStat.PrepareRcvd)
                  self.logger.debug("{} processed incoming PREPARE {}".format(
                      self, (prepare.viewNo, prepare.ppSeqNo)))
              else:
                  # TODO let's have isValidPrepare throw an exception that gets
                  # handled and possibly logged higher
                  self.logger.trace("{} cannot process incoming PREPARE".format(self))
          except SuspiciousNode as ex:
              self.report_suspicious_node(ex)
docs: Validate and process the PREPARE specified.
          If validation is successful, create a COMMIT and broadcast it.
  
          :param prepare: a PREPARE msg
          :param sender: name of the node that sent the PREPARE