Пример #1
0
 def deduct_fees(self, request, cons_time, ledger_id, seq_no, txn):
     txn_type = request.operation[TXN_TYPE]
     fees_key = "{}#{}".format(txn_type, seq_no)
     if txn_type != XFER_PUBLIC and FeesAuthorizer.has_fees(request):
         inputs, outputs, signatures = getattr(request, f.FEES.nm)
         # This is correct since FEES is changed from config ledger whose
         # transactions have no fees
         fees = FeesAuthorizer.calculate_fees_from_req(
             self.utxo_cache, request)
         sigs = {i[ADDRESS]: s for i, s in zip(inputs, signatures)}
         txn = {
             OPERATION: {
                 TXN_TYPE: FEE_TXN,
                 INPUTS: inputs,
                 OUTPUTS: outputs,
                 REF: self.get_ref_for_txn_fees(ledger_id, seq_no),
                 FEES: fees,
             },
             f.SIGS.nm: sigs,
             f.REQ_ID.nm: get_req_id(txn),
             f.PROTOCOL_VERSION.nm: 2,
         }
         txn = reqToTxn(txn)
         self.token_ledger.append_txns_metadata([txn], txn_time=cons_time)
         _, txns = self.token_ledger.appendTxns(
             [TokenReqHandler.transform_txn_for_ledger(txn)])
         self.updateState(txns)
         self.fee_txns_in_current_batch += 1
         self.deducted_fees[fees_key] = fees
         return txn
Пример #2
0
 def apply_request(self, request: Request, batch_ts, prev_result):
     txn_type = request.operation[TXN_TYPE]
     seq_no = get_seq_no(prev_result)
     cons_time = get_txn_time(prev_result)
     if FeesAuthorizer.has_fees(request):
         inputs, outputs, signatures = getattr(request, f.FEES.nm)
         # This is correct since FEES is changed from config ledger whose
         # transactions have no fees
         fees = FeesAuthorizer.calculate_fees_from_req(
             self.utxo_cache, request)
         sigs = {i[ADDRESS]: s for i, s in zip(inputs, signatures)}
         txn = {
             OPERATION: {
                 TXN_TYPE: FEE_TXN,
                 INPUTS: inputs,
                 OUTPUTS: outputs,
                 REF: self._get_ref_for_txn_fees(seq_no),
                 FEES: fees,
             },
             f.SIGS.nm: sigs,
             f.REQ_ID.nm: get_req_id(prev_result),
             f.PROTOCOL_VERSION.nm: 2,
         }
         txn = reqToTxn(txn)
         self.token_ledger.append_txns_metadata([txn], txn_time=cons_time)
         _, txns = self.token_ledger.appendTxns([txn])
         self.update_token_state(txn, request)
         self._fees_tracker.fees_in_current_batch += 1
         self._fees_tracker.add_deducted_fees(txn_type, seq_no, fees)
     return None, None, prev_result