MiniWallet allows to create padded transactions that are equal or slightly above a certain target_weight
(first introduced in PR #25379, commit 1d6b438ef0ccd05e1522ac38b44f847c1d93e72f), which can be useful especially for mempool-related tests, e.g. for policy limit checks or scenarios to trigger mempool eviction. Currently the target_weight
parameter doesn’t play together with fee_rate
though, as the fee calculation is incorrectly based on the tx vsize before the padding output is added, so the fee-rate is consequently far off. This means users are forced to pass an absolute fee, which can be quite inconvenient and leads to lots of duplicated “calculate absolute fee from fee-rate and vsize” code with the pattern fee = (feerate / 1000) * (weight // 4)
on the call-sites.
This PR first improves the tx padding itself to be more accurate, adds a functional test for it, and fixes the fee_rate
treatment for the {create,send}_self_transfer
methods. (Next step would be to enable this also for the _self_transfer_multi
methods, but those currently don’t even offer a fee_rate
parameter). Finally, the ability to pass both target_weight
and fee_rate
is used in the mempool_limit.py
functional test. There might be more use-cases in other tests, that could be done in a follow-up.