Пример #1
0
    def get_result(self, request: Request):
        ledger_id = request.operation.get(f.LEDGER_ID.nm, DOMAIN_LEDGER_ID)
        db = self.database_manager.get_database(ledger_id)
        if db is None:
            return RequestNack(request.identifier, request.reqId,
                               'Invalid ledger id {}'.format(ledger_id))

        seq_no = request.operation.get(DATA)

        try:
            txn = self.node.getReplyFromLedger(db.ledger, seq_no)
        except KeyError:
            txn = None

        if txn is None:
            logger.debug("{} can not handle GET_TXN request: ledger doesn't "
                         "have txn with seqNo={}".format(self, str(seq_no)))

        result = {
            f.IDENTIFIER.nm: request.identifier,
            f.REQ_ID.nm: request.reqId,
            TXN_TYPE: request.operation[TXN_TYPE],
            DATA: None
        }

        if txn:
            result[DATA] = txn.result
            result[f.SEQ_NO.nm] = get_seq_no(txn.result)

        return Reply(result)
Пример #2
0
    def get_result(self, request: Request):
        ledger_id = request.operation.get(f.LEDGER_ID.nm, DOMAIN_LEDGER_ID)
        db = self.database_manager.get_database(ledger_id)
        if db is None:
            return RequestNack(request.identifier, request.reqId,
                               'Invalid ledger id {}'.format(ledger_id))

        seq_no = request.operation.get(DATA)

        multi_sig = None

        try:
            txn = self.node.getReplyFromLedger(db.ledger, seq_no, write=False)
            audit_ledger = self.database_manager.get_ledger(AUDIT_LEDGER_ID)
            audit_seq_no = audit_ledger.size
            state_root = None
            for seq_no in reversed(range(1, audit_seq_no + 1)):
                audit_txn = audit_ledger.getBySeqNo(seq_no)
                state_root = audit_txn[TXN_PAYLOAD][DATA][AUDIT_TXN_STATE_ROOT].get(ledger_id, None)
                if state_root:
                    break
            if state_root is not None:
                multi_sig = self.database_manager.bls_store.get(state_root)
        except KeyError:
            txn = None

        if txn is None:
            logger.debug(
                "{} can not handle GET_TXN request: ledger doesn't "
                "have txn with seqNo={}".format(self, str(seq_no)))

        result = {
            f.IDENTIFIER.nm: request.identifier,
            f.REQ_ID.nm: request.reqId,
            TXN_TYPE: request.operation[TXN_TYPE],
            DATA: None,
        }

        if multi_sig:
            result[STATE_PROOF] = {
                MULTI_SIGNATURE: multi_sig.as_dict()
            }

        if txn:
            result[DATA] = txn.result
            result[f.SEQ_NO.nm] = get_seq_no(txn.result)

        return result
Пример #3
0
 def get_result(self, request: Request):
     handler = self.request_handlers.get(request.operation[TXN_TYPE], None)
     if handler is None:
         return RequestNack(request.identifier, request.reqId)
     return handler.get_result(request)
Пример #4
0
 def nackReq(self, req, frm):
     self.transmitToClient(RequestNack(*req.key, "testing"), frm)