Uh oh!
There was an error while loading. Please reload this page.
Replace wallet bump_fee command --send_all with new --shrink option - #45
Conversation
There was a problem hiding this comment.
Ah right. We could get the scriptpubkey from specifying the address. And it seems bdk internal doesn't care if the address belongs to us or not, while shrinking.
But I am thinking, doesn't this opens an attack vector in bdk wallet code?
For example I can construct a transaction to a merchant, with very low fee. He will see money coming into his wallet (as many doesn't wait for confirmations). Then half an hour later after leaving the shop, I can then bumpfee to reduce the merchant's output to 0.
The cost of this attack is basically zero, because the attacker will not loose any more money, than he already paid for. He has already spent his input and will get the change back.
Note: This behavior of not to decrease external recipient's amount is not enforced by the bitcoin protocol (it can't be). It is an wallet level feature. And I think wallets implementing bumpfee will need to account for that in their impls.
For reference, heres the doc for bumpfee behaviour of the Bitcoin Core wallet. It doesn't allow reducing external outputs, and if there isn't any change ouput in a tx, the wallet will proactively add one.
https://developer.bitcoin.org/reference/rpc/bumpfee.html
This where the change selection logic happens in bitcoin core wallet.
https://github.com/bitcoin/bitcoin/blob/927586990eb9bc8403a3831247847bdd3bf60423/src/wallet/feebumper.cpp#L176-L187
notmandatory
commented
Oct 11, 2021
There is logic in the existing For the purposed of this PR I think it's OK to allow bumping fees to external receivers even if there could be a missing case in the minimum fee logic, at least |
rajarshimaitra
commented
Oct 11, 2021
Sorry, I am not seeing how the minimum fee issue is relevant here. The issue is reducing external recipient's amount in RBF, which can be a potential bug. Min fee checking will always pass, if someone exploits this (the fee given will then be very high). bitcoindevkit/bdk_wallet#192 are also fee amount related issues which is orthogonal to this. |
notmandatory
commented
Oct 11, 2021
Ok I thought your concern was that Even so I think it's a valuable feature to be able to bump fee by reducing an external single recipients output for the case where you're sending to a different external wallet that you control. |
rajarshimaitra
commented
Oct 24, 2021
Yes that is correct. With this attack the attacker won't gain anything, although its a "zero cost micheif" opportunity, which I in my opinion should not be allowed. It's not a critical vulnerability, but an UI/UX gap. There's nothing in the bitcoin protocol itself to stop this from happening. So wallets need to care for it. That's my whole point. I agree with this current change for fixing the This PR is good to go and I think its a good substitution for bitcoindevkit/bdk#42. |
Although I see
|
Replace `wallet bump_fee` command `--send_all` with new `--shrink ADDRESS` option to reduce the output amount for the specified address to increase RBF transaction fee.
ef1e19f to
b0c78e0Comparenotmandatory
commented
Nov 1, 2021
Rebased to lastest |
Description
Replace
wallet bump_feecommand--send_allwith new--shrink ADDRESSoption to reduce the output amount for the specified address to increase RBF transaction fee.Notes to the reviewers
This new option is primarily needed when bumping the fee of a
send_alltransaction or any other transaction that doesn't have a change output that can be reduced to bump the fee on the new RBF transaction.Steps I used to test
https://mempool.space/testnet/tx/e35892843875e084f39c5285ee6f522764210351f78cd89305a49efbf4bfea48
Checklists
All Submissions:
cargo fmtandcargo clippybefore committingNew Features:
CHANGELOG.md