diff options
| author | Bitflash <btf01@proton.me> | 2026-07-31 16:37:13 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-31 16:37:13 -0300 |
| commit | 2d10bf257ffb177306b9cd10f7fc57f92d34b7e1 (patch) | |
| tree | 70577a961c626035d9d37af47af7f4c4b5fc1cc8 /src/walletcmd.cpp | |
| parent | 417bfed08ded5c6afaed25f4ef724b5629b13fae (diff) | |
wallet: stop paying the recipient the transaction fee on a fee retry (#74)
CreateTransaction kept the payee amount in nValue and then did
int64 nValueOut = nValue;
nValue += nFee;
with both lines inside the retry loop. The first pass is fine. When the fee
turns out to be too low the loop starts over, and on the second pass
nValueOut is read from an nValue that already carries the fee -- so the
recipient is sent the amount plus the fee, out of the sender's pocket, and
it compounds on every further retry.
Reachable, but it takes two things at once, which is why it has sat here:
the user must have set a transaction fee in Options (with the default of
zero, nValue += nFee adds nothing on the first pass and nothing is
corrupted), and the transaction must be big enough for GetMinFee to demand
more than that -- over 10 KB, so a wallet paying from many small inputs.
Keep nValue meaning what the payee asked for and carry nValue + nFee in a
separate nTotalValue, the way Bitcoin fixed it in 107d9e288.
Verified by building the same transaction on both versions, with a
synthetic wallet of 200 coins of 50, a configured fee of 0.05, and a
request of 5,000 that needs 101 inputs and 28 KB -- enough for GetMinFee to
demand 0.12 and force the retry:
before payee gets 5,000.05 change 49.83
after payee gets 5,000.00 change 49.88
Two other fixes from the same era were considered and left out. Satoshi's
CENT floor on the change output (496823249) exists to avoid a dust output
that his fee rules then penalised; this fee schedule has no such rule, so
adopting it would only donate sub-cent change to the miner. The
1-confirmation rule (a790fa46f) is a spending-policy change, not a bug fix,
and deserves its own decision.
Diffstat (limited to 'src/walletcmd.cpp')
0 files changed, 0 insertions, 0 deletions