def doDynamicValidation(self, request: Request):
        """
        State based validation
        """
        self.execute_hook(NodeHooks.PRE_DYNAMIC_VALIDATION, request=request)

        # Digest validation
        ledger_id, seq_no = self.seqNoDB.get_by_payload_digest(request.payload_digest)
        if ledger_id is not None and seq_no is not None:
            raise SuspiciousPrePrepare('Trying to order already ordered request')

        ledger = self.getLedger(self.ledger_id_for_request(request))
        for txn in ledger.uncommittedTxns:
            if get_payload_digest(txn) == request.payload_digest:
                raise SuspiciousPrePrepare('Trying to order already ordered request')

        operation = request.operation
        req_handler = self.get_req_handler(txn_type=operation[TXN_TYPE])
        req_handler.validate(request)

        self.execute_hook(NodeHooks.POST_DYNAMIC_VALIDATION, request=request)