-
Notifications
You must be signed in to change notification settings - Fork 65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Replace wallet bump_fee
command --send_all
with new --shrink
option
#45
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
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 |
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#256 are also fee amount related issues which is orthogonal to this. |
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. |
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 #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
b0c78e0
Compare
Rebased to lastest |
Description
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.Notes to the reviewers
This new option is primarily needed when bumping the fee of a
send_all
transaction 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 fmt
andcargo clippy
before committingNew Features:
CHANGELOG.md