def _validate_fees_can_pay(self, request, inputs, outputs, required_fees): """ Calculate and verify that inputs and outputs for fees can both be paid and change is properly specified This function ASSUMES that validation of the fees for the request has already been done. :param request: :param required_fees: :return: """ try: sum_inputs = self.utxo_cache.sum_inputs(inputs, is_committed=False) except UTXOError as ex: raise InvalidFundsError(request.identifier, request.reqId, "{}".format(ex)) except Exception as ex: error = 'Exception {} while processing inputs/outputs'.format(ex) raise UnauthorizedClientRequest(request.identifier, request.reqId, error) else: change_amount = sum([a[AMOUNT] for a in outputs]) expected_amount = change_amount + required_fees TokenStaticHelper.validate_given_inputs_outputs( sum_inputs, change_amount, expected_amount, request, 'fees: {}'.format(required_fees))
def sum_inputs(utxo_cache: UTXOCache, request: Request, is_committed=False) -> int: try: inputs = request.operation[INPUTS] return utxo_cache.sum_inputs(inputs, is_committed=is_committed) except UTXOError as ex: raise InvalidFundsError(request.identifier, request.reqId, '{}'.format(ex))
def _get_deducted_fees_non_xfer(self, request, required_fees): if not self.has_fees(request): error = 'fees not present or improperly formed' raise UnauthorizedClientRequest(request.identifier, request.reqId, error) else: try: sum_inputs = self.utxo_cache.sum_inputs(request.fees[0], is_committed=False) except UTXOError as ex: raise InvalidFundsError(request.identifier, request.reqId, "{}".format(ex)) else: change_amount = sum([a[AMOUNT] for a in self.get_change_for_fees(request)]) expected_amount = change_amount + required_fees TokenReqHandler.validate_given_inputs_outputs(sum_inputs, change_amount, expected_amount, request, 'fees: {}'.format(required_fees))
def _validate_fees_can_pay(self, request, required_fees): """ Calculate and verify that inputs and outputs for fees can both be paid and change is properly specified This function ASSUMES that validation of the fees for the request has already been done. :param request: :param required_fees: :return: """ try: sum_inputs = self.utxo_cache.sum_inputs(request.fees[0], is_committed=False) except UTXOError as ex: raise InvalidFundsError(request.identifier, request.reqId, "{}".format(ex)) else: change_amount = sum( [a[AMOUNT] for a in self.get_change_for_fees(request)]) expected_amount = change_amount + required_fees TokenReqHandler.validate_given_inputs_outputs( sum_inputs, change_amount, expected_amount, request, 'fees: {}'.format(required_fees))