code: def canOrder(self, commit: Commit) -> Tuple[bool, Optional[str]]:
          
          quorum = self.quorums.commit.value
          if not self.commits.hasQuorum(commit, quorum):
              return False, "no quorum ({}): {} commits where f is {}". \
                  format(quorum, commit, self.f)
  
          key = (commit.viewNo, commit.ppSeqNo)
          if self.has_already_ordered(*key):
              return False, "already ordered"
  
          if commit.ppSeqNo > 1 and not self.all_prev_ordered(commit):
              viewNo, ppSeqNo = commit.viewNo, commit.ppSeqNo
              if viewNo not in self.stashed_out_of_order_commits:
                  self.stashed_out_of_order_commits[viewNo] = {}
              self.stashed_out_of_order_commits[viewNo][ppSeqNo] = commit
              self.startRepeating(self.process_stashed_out_of_order_commits,
                                  self.config.PROCESS_STASHED_OUT_OF_ORDER_COMMITS_INTERVAL)
              return False, "stashing {} since out of order". \
                  format(commit)
  
          return True, None
docs: Return whether the specified commitRequest can be returned to the node.
  
          Decision criteria:
  
          - If have got just n-f Commit requests then return request to node
          - If less than n-f of commit requests then probably don't have
              consensus on the request; don't return request to node
          - If more than n-f then already returned to node; don't return request
              to node
  
          :param commit: the COMMIT