|
30 | 30 |
|
31 | 31 | logger = getlogger() |
32 | 32 |
|
| 33 | +MAX_FEE_OUTPUTS = 1 |
| 34 | + |
33 | 35 |
|
34 | 36 | class StaticFeesReqHandler(FeeReqHandler): |
35 | 37 | valid_txn_types = {SET_FEES, GET_FEES, FEE_TXN} |
@@ -95,6 +97,15 @@ def can_pay_fees(self, request): |
95 | 97 | self._get_deducted_fees_xfer(request, required_fees) |
96 | 98 | self.deducted_fees_xfer[request.key] = required_fees |
97 | 99 | elif required_fees: |
| 100 | + # We don't want to allow transfers on txn fees. So only one OUTPUT address can be used. |
| 101 | + # We could consider lock this down even more by requiring OUTPUT address to be one of the |
| 102 | + # INPUT address |
| 103 | + outputs = request.fees[1] |
| 104 | + if len(outputs) > MAX_FEE_OUTPUTS: |
| 105 | + raise InvalidClientRequest(request.identifier, |
| 106 | + request.reqId, |
| 107 | + "Only {} OUTPUT is allow for Transaction fees".format(MAX_FEE_OUTPUTS)) |
| 108 | + |
98 | 109 | self._get_deducted_fees_non_xfer(request, required_fees) |
99 | 110 |
|
100 | 111 | # TODO: Fix this to match signature of `FeeReqHandler` and extract |
@@ -144,12 +155,12 @@ def doStaticValidation(self, request: Request): |
144 | 155 | else: |
145 | 156 | super().doStaticValidation(request) |
146 | 157 |
|
147 | | - def validate(self, req: Request): |
148 | | - operation = req.operation |
| 158 | + def validate(self, request: Request): |
| 159 | + operation = request.operation |
149 | 160 | if operation[TXN_TYPE] == SET_FEES: |
150 | | - validate_multi_sig_txn(req, TRUSTEE, self.domain_state, self.MinSendersForFees) |
| 161 | + validate_multi_sig_txn(request, TRUSTEE, self.domain_state, self.MinSendersForFees) |
151 | 162 | else: |
152 | | - super().validate(req) |
| 163 | + super().validate(request) |
153 | 164 |
|
154 | 165 | def get_query_response(self, request: Request): |
155 | 166 | return self.query_handlers[request.operation[TXN_TYPE]](request) |
@@ -307,8 +318,8 @@ def _handle_incorrect_funds(sum_inputs, sum_outputs, expected_amount, required_f |
307 | 318 | raise InsufficientFundsError(request.identifier, request.reqId, error) |
308 | 319 | if sum_inputs > expected_amount: |
309 | 320 | error = 'Extra funds, sum of inputs is {} ' \ |
310 | | - 'but required is {} (sum of outputs: {}, ' \ |
311 | | - 'fees: {})'.format(sum_inputs, expected_amount, sum_outputs, required_fees) |
| 321 | + 'but required is: {} -- sum of outputs: {} ' \ |
| 322 | + '-- fees: {})'.format(sum_inputs, expected_amount, sum_outputs, required_fees) |
312 | 323 | raise ExtraFundsError(request.identifier, request.reqId, error) |
313 | 324 |
|
314 | 325 | @staticmethod |
|
0 commit comments