コード例 #1
0
ファイル: node.py プロジェクト: ashcherbakov/sovrin
 def getReplyFor(self, request):
     result = self.secondaryStorage.getReply(
         request.identifier,
         request.reqId,
         type=request.operation[TXN_TYPE])
     if result:
         if request.operation[TXN_TYPE] == ATTRIB:
             result = self.hashAttribTxn(result)
         return Reply(result)
     else:
         return None
コード例 #2
0
    def generateReply(self, ppTime: float, req: Request):
        operation = req.operation
        txnId = self.genTxnId(req.identifier, req.reqId)
        result = {TXN_ID: txnId, TXN_TIME: int(ppTime)}
        result.update(operation)
        result.update({
            f.IDENTIFIER.nm: req.identifier,
            f.REQ_ID.nm: req.reqId,
        })

        return Reply(result)
コード例 #3
0
ファイル: node.py プロジェクト: ashcherbakov/sovrin
 def processGetIssuerKeyReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(*request.key), frm)
     keys = self.graphStore.getIssuerKeys(request.operation[ORIGIN],
                                          request.operation[REF])
     result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
     result.update(request.operation)
     result[DATA] = json.dumps(keys, sort_keys=True)
     result.update({
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
     })
     self.transmitToClient(Reply(result), frm)
コード例 #4
0
 def storeTxnAndSendToClient(self, reply):
     """
     Does 4 things in following order
      1. Add reply to ledger.
      2. Send the reply to client.
      3. Add the reply to identity graph if needed.
      4. Add the reply to storage so it can be served later if the
      client requests it.
     """
     txnWithMerkleInfo = self.storeTxnInLedger(reply.result)
     self.sendReplyToClient(Reply(txnWithMerkleInfo))
     reply.result[F.seqNo.name] = txnWithMerkleInfo.get(F.seqNo.name)
     self.storeTxnInGraph(reply.result)
コード例 #5
0
ファイル: node.py プロジェクト: ashcherbakov/sovrin
 def processGetClaimDefReq(self, request: Request, frm: str):
     issuerNym = request.operation[TARGET_NYM]
     name = request.operation[DATA][NAME]
     version = request.operation[DATA][VERSION]
     claimDef = self.graphStore.getClaimDef(issuerNym, name, version)
     result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
     result.update(request.operation)
     result[DATA] = json.dumps(claimDef, sort_keys=True)
     result.update({
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
     })
     self.transmitToClient(Reply(result), frm)
コード例 #6
0
 def processGetNymReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(request.reqId), frm)
     nym = request.operation[TARGET_NYM]
     txn = self.graphStore.getAddNymTxn(nym)
     txnId = self.genTxnId(request.identifier, request.reqId)
     result = {
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
         DATA: json.dumps(txn) if txn else None,
         TXN_ID: txnId
     }
     result.update(request.operation)
     self.transmitToClient(Reply(result), frm)
コード例 #7
0
 def getReplyFor(self, request):
     typ = request.operation.get(TXN_TYPE)
     if typ in IDENTITY_TXN_TYPES:
         result = self.secondaryStorage.getReply(request.identifier,
                                                 request.reqId,
                                                 type=request.operation[TXN_TYPE])
         if result:
             if request.operation[TXN_TYPE] == ATTRIB:
                 result = self.hashAttribTxn(result)
             return Reply(result)
         else:
             return None
     if typ in CONFIG_TXN_TYPES:
         return self.getReplyFromLedger(self.configLedger, request)
コード例 #8
0
 def processGetNymReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(*request.key), frm)
     nym = request.operation[TARGET_NYM]
     txn = self.graphStore.getAddNymTxn(nym)
     txnId = self.genTxnId(request.identifier, request.reqId)
     # TODO: We should have a single JSON encoder which does the
     # encoding for us, like sorting by keys, handling datetime objects.
     result = {f.IDENTIFIER.nm: request.identifier,
               f.REQ_ID.nm: request.reqId,
               DATA: json.dumps(txn, sort_keys=True) if txn else None,
               TXN_ID: txnId
               }
     result.update(request.operation)
     self.transmitToClient(Reply(result), frm)
コード例 #9
0
 def processGetIssuerKeyReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(request.reqId), frm)
     keys = self.graphStore.getIssuerKeys(request.operation[ORIGIN],
                                          request.operation[REFERENCE])
     # attrNames = request.operation[RAW]
     # nym = request.operation[TARGET_NYM]
     # attrs = self.graphStore.getRawAttrs(nym, attrNames)
     result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
     result.update(request.operation)
     result[DATA] = json.dumps(keys)
     result.update({
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
     })
     self.transmitToClient(Reply(result), frm)
コード例 #10
0
ファイル: node.py プロジェクト: ashcherbakov/sovrin
 def processGetAttrsReq(self, request: Request, frm: str):
     self.transmitToClient(RequestAck(*request.key), frm)
     attrName = request.operation[RAW]
     nym = request.operation[TARGET_NYM]
     attrWithSeqNo = self.graphStore.getRawAttrs(nym, attrName)
     result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
     if attrWithSeqNo:
         attr = {attrName: attrWithSeqNo[attrName][0]}
         result[DATA] = json.dumps(attr, sort_keys=True)
         result[F.seqNo.name] = attrWithSeqNo[attrName][1]
     result.update(request.operation)
     result.update({
         f.IDENTIFIER.nm: request.identifier,
         f.REQ_ID.nm: request.reqId,
     })
     self.transmitToClient(Reply(result), frm)
コード例 #11
0
ファイル: node.py プロジェクト: jamesmonaghan/sovrin-node
 def storeTxnAndSendToClient(self, reply):
     """
     Does 4 things in following order
      1. Add reply to ledger.
      2. Send the reply to client.
      3. Add the reply to identity graph if needed.
      4. Add the reply to storage so it can be served later if the
      client requests it.
     """
     result = reply.result
     txnWithMerkleInfo = self.storeTxnInLedger(result)
     if result[TXN_TYPE] == NODE_UPGRADE:
         logger.info('{} processed {}'.format(self, NODE_UPGRADE))
         # Returning since NODE_UPGRADE is not sent to client and neither
         # goes in graph
         return
     self.sendReplyToClient(Reply(txnWithMerkleInfo),
                            (result[f.IDENTIFIER.nm], result[f.REQ_ID.nm]))
     reply.result[F.seqNo.name] = txnWithMerkleInfo.get(F.seqNo.name)
     self.storeTxnInGraph(reply.result)
コード例 #12
0
ファイル: node.py プロジェクト: ashcherbakov/sovrin
 def processGetTxnReq(self, request: Request, frm: str):
     nym = request.operation[TARGET_NYM]
     origin = request.identifier
     if nym != origin:
         # TODO not sure this is correct; why does it matter?
         msg = "You can only receive transactions for yourself"
         self.transmitToClient(RequestNack(*request.key, msg), frm)
     else:
         self.transmitToClient(RequestAck(*request.key), frm)
         data = request.operation.get(DATA)
         addNymTxn = self.graphStore.getAddNymTxn(origin)
         txnIds = [addNymTxn[TXN_ID], ] + self.graphStore. \
             getAddAttributeTxnIds(origin)
         # If sending transactions to a user then should send user's
         # sponsor creation transaction also
         if addNymTxn.get(ROLE) == USER:
             sponsorNymTxn = self.graphStore.getAddNymTxn(
                 addNymTxn.get(f.IDENTIFIER.nm))
             txnIds = [
                 sponsorNymTxn[TXN_ID],
             ] + txnIds
         # TODO: Remove this log statement
         logger.debug("{} getting replies for {}".format(self, txnIds))
         result = self.secondaryStorage.getReplies(*txnIds, seqNo=data)
         txns = sorted(list(result.values()), key=itemgetter(F.seqNo.name))
         lastTxn = str(txns[-1][F.seqNo.name]) if len(txns) > 0 else data
         result = {TXN_ID: self.genTxnId(request.identifier, request.reqId)}
         result.update(request.operation)
         # TODO: We should have a single JSON encoder which does the
         # encoding for us, like sorting by keys, handling datetime objects.
         result[DATA] = json.dumps({
             LAST_TXN: lastTxn,
             TXNS: txns
         },
                                   default=dateTimeEncoding,
                                   sort_keys=True)
         result.update({
             f.IDENTIFIER.nm: request.identifier,
             f.REQ_ID.nm: request.reqId,
         })
         self.transmitToClient(Reply(result), frm)
コード例 #13
0
ファイル: pool_manager.py プロジェクト: qyynuaa/plenum
 def getReplyFor(self, request):
     txn = self.ledger.get(identifier=request.identifier,
                           reqId=request.reqId)
     if txn:
         txn.update(self.ledger.merkleInfo(txn.get(F.seqNo.name)))
         return Reply(txn)
コード例 #14
0
 def getReplyFor(self, request):
     result = self.secondaryStorage.getReply(
         request.identifier,
         request.reqId,
         type=request.operation[TXN_TYPE])
     return Reply(result) if result else None