Exemple #1
0
    def check_tx_requirements(self, transactions):
        """ check if given transactions contain required fields """
        valid = True
        valid_txs, invalid_txs = [], []
        for tx in transactions:
            tx_header = tx['header']
            if not tx_header['transaction_type']:
                valid = False
            elif not tx_header['transaction_id']:
                valid = False
            elif not tx_header['transaction_ts']:
                valid = False
            elif not tx_header['owner']:
                valid = False
            elif not self.check_tx_sig_existence(tx):
                valid = False
            elif not valid_transaction_sig(tx):
                valid = False

            if valid:
                valid_txs.append(tx)
            else:
                invalid_txs.append(tx)
                valid = True

        return valid_txs, invalid_txs
    def check_tx_requirements(self, transactions):
        """ check if given transactions contain required fields """
        valid = True
        valid_txs, invalid_txs = [], []
        for tx in transactions:
            tx_header = tx['header']
            if not tx_header['transaction_type']:
                valid = False
            elif not tx_header['transaction_id']:
                valid = False
            elif not tx_header['transaction_ts']:
                valid = False
            elif not tx_header['owner']:
                valid = False
            elif not self.check_tx_sig_existence(tx):
                valid = False
            elif not valid_transaction_sig(tx):
                valid = False

            if valid:
                valid_txs.append(tx)
            else:
                invalid_txs.append(tx)
                valid = True

        return valid_txs, invalid_txs
    def test_valid_transaction_sig(self):
        """ testing crypto valid_transaction_sig """
        transaction = TRANSACTION.copy()

        # sign transaction (tested prior to this call)
        test_transaction = crypto.sign_transaction(SIGNATORY, PRIVATE_KEY, PUBLIC_KEY, transaction)
        # testing signature validation
        sig_validation = crypto.valid_transaction_sig(test_transaction)

        # check if valid_transaction_sig returned true
        self.assertTrue(sig_validation, True)
Exemple #4
0
    def test_valid_transaction_sig(self):
        """ testing crypto valid_transaction_sig """
        transaction = TRANSACTION.copy()

        # sign transaction (tested prior to this call)
        test_transaction = crypto.sign_transaction(SIGNATORY, PRIVATE_KEY,
                                                   PUBLIC_KEY, transaction)
        # testing signature validation
        sig_validation = crypto.valid_transaction_sig(test_transaction)

        # check if valid_transaction_sig returned true
        self.assertTrue(sig_validation, True)
    def post(self):
        txn = self.request.body
        log = self.application.log
        log.debug("Parsing JSON")

        try:
            txn = tornado.escape.json_decode(txn)
            txn["header"]["transaction_id"] = str(uuid.uuid4())
            txn["header"]["transaction_ts"] = int(time.time())
        except:
            log.error("Failed to parse JSON.  Details: " +
                      str(sys.exc_info()[1]))
            self.clear()
            self.set_txn_status(log, 400)
            self.write(
                format_error("invalid input",
                             "ERROR:  Failed to parse JSON\n"))
            return

        try:
            log.info("Validating the transaction")
            if not valid_vestal_transaction(txn):
                return False

            if valid_transaction_sig(txn):
                log.info("Signing the transaction")
                txn = sign_transaction("transaction-service",
                                       self.application.private_key,
                                       self.application.public_key, txn)

                tx_dao.insert_transaction(txn)
                self.set_header("Content-Type", "application/json")
                self.set_txn_status(log, 201)
                self.write(
                    json.dumps(
                        {"transaction_id": txn["header"]["transaction_id"]}))
                return
            else:  # TODO: add status function accepts status code number and status string
                self.set_txn_status(log, 400)
                return
        except:
            log.error(str(sys.exc_info()))
            self.clear()
            self.set_txn_status(log, 500)
            self.write(format_error("validation", str(sys.exc_info()[1])))
    def post(self):
        txn = self.request.body
        log = self.application.log
        log.debug("Parsing JSON")

        try:
            txn = tornado.escape.json_decode(txn)
            txn["header"]["transaction_id"] = str(uuid.uuid4())
            txn["header"]["transaction_ts"] = int(time.time())
        except:
            log.error("Failed to parse JSON.  Details: " + str(sys.exc_info()[1]))
            self.clear()
            self.set_txn_status(log, 400)
            self.write(format_error("invalid input", "ERROR: malformed json\nDocumentation for transaction format can be found at \nhttps://github.com/dragonchain/dragonchain/blob/master/docs/transaction.md"))
            return

        try:
            log.info("Validating the transaction")
            if not valid_vestal_transaction(txn):
                return False

            if valid_transaction_sig(txn):
                log.info("Signing the transaction")
                txn = sign_transaction("transaction-service",
                                       self.application.private_key,
                                       self.application.public_key, txn)

                tx_dao.insert_transaction(txn)
                self.set_header("Content-Type", "application/json")
                self.set_txn_status(log, 201)
                self.write(json.dumps({
                    "transaction_id": txn["header"]["transaction_id"]
                }))
                return
            else:  # TODO: add status function accepts status code number and status string
                self.set_txn_status(log, 400)
                return
        except:
            log.error(str(sys.exc_info()))
            self.clear()
            self.set_txn_status(log, 500)
            self.write(format_error("validation", str(sys.exc_info()[1])))