1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-22 22:38:08 +00:00

fix(core): Improve rounding of CoinJoin fees by deferring division.

This commit is contained in:
Andrew Kozlik 2022-10-25 16:26:04 +02:00 committed by Andrew Kozlik
parent 0bd9314bb9
commit 0d042421c3

View File

@ -473,19 +473,25 @@ class CoinJoinApprover(Approver):
if not self._verify_coinjoin_request(tx_info):
raise wire.DataError("Invalid signature in CoinJoin request.")
max_fee_per_vbyte = self.authorization.params.max_fee_per_kvbyte / 1000
coordination_fee_rate = min(
self.request.fee_rate, self.authorization.params.max_coordinator_fee_rate
) / pow(10, FEE_RATE_DECIMALS + 2)
# The mining fee of the transaction as a whole.
mining_fee = self.total_in - self.total_out
# The maximum mining fee that the user should be paying.
our_max_mining_fee = max_fee_per_vbyte * self.our_weight.get_virtual_size()
our_max_mining_fee = (
self.authorization.params.max_fee_per_kvbyte
* self.our_weight.get_virtual_size()
/ 1000
)
# The coordination fee for the user's inputs.
our_coordination_fee = coordination_fee_rate * self.coordination_fee_base
our_coordination_fee = (
min(
self.request.fee_rate,
self.authorization.params.max_coordinator_fee_rate,
)
* self.coordination_fee_base
/ pow(10, FEE_RATE_DECIMALS + 2)
)
# Total fees that the user is paying.
our_fees = self.total_in - self.external_in - self.change_out