code: def canForward(self, request: Request):
          
  
          if self.requests.forwarded(request):
              return 'already forwarded'
  
          # If not enough Propagates, don't bother comparing
          if not self.quorums.propagate.is_reached(self.requests.votes(request)):
              return 'not finalised'
  
          req = self.requests.req_with_acceptable_quorum(request,
                                                         self.quorums.propagate)
          if req:
              self.requests.set_finalised(req)
              return None
          else:
              return 'not finalised'
docs: Determine whether to forward client REQUESTs to replicas, based on the
          following logic:
  
          - If exactly f+1 PROPAGATE requests are received, then forward.
          - If less than f+1 of requests then probably there's no consensus on the
              REQUEST, don't forward.
          - If more than f+1 then already forwarded to replicas, don't forward
  
          Even if the node hasn't received the client REQUEST itself, if it has
          received enough number of PROPAGATE messages for the same, the REQUEST
          can be forwarded.
  
          :param request: the client REQUEST