12

Replace-by-fee means transactions spending the same coin to the same addresses are not considered double-spends by the network and are still relayed, as long as they pay a higher fee than the preceding transaction. Example: Alice pays Bob with a coin worth 1 BTC, sending 0.5 BTC to Bob, 0.49995 BTC to herself as change, and 0.00005 BTC to fees. Alice sees ...


11

If worried about the original closing transaction having too high of fees: The signed closing transaction that you're worried about (with too high of fees) has not yet been broadcast to the network, so no harm no foul (yet). If the two parties are cooperative, they can just agree to sign a new transaction with lower fees and broadcast that to close out ...


11

Transaction pinning happens when: I broadcast a transaction that signals opt-in RBF the transaction does not get confirmed because the feerate is too low someone else broadcasts a new (child) transaction spending one of the outputs of my transaction I now can't bump the fee on the transaction unless I include a fee greater than that of the combined original ...


7

In addition to Mark S.'s answer, since Bitcoin Core 0.12 there actually is an expiration in the mempool, which evicts unconfirmed transactions after N hours, where N is set by -mempoolexpiry, and defaults to 72 hours. This is not a reliable feature, as wallets (and really, anyone) can rebroadcast the transaction, but helps keeping the mempool fresh.


6

Replace-by-fee (RBF) transactions all have a sequence number that is below MAX - 1. If the payment a merchant receives comes from a transaction that has such a sequence number, the merchant can either wait for the transaction to be included in a block, or ignore the payment altogether. Ignoring the payment is fraught with other complications, however, ...


6

All three proposals attempt to solve the same problem, the issue of stuck transactions. Due to the behavior of Bitcoin Core with respect to double spends (they are silently dropped, and not relayed), it is impossible to spend outputs that you've used in an existing transaction. Typically this is a good thing, but there are a few cases where a user may have ...


5

If you're creating a version 2 transaction with the disable flag not set, then by definition the whole nSequence value will be less than 0xFFFFFFFE (because it will be at most 0x7FFFFFFF). This implies that a transaction with an active relative locktime will always be replacable according to BIP125. This is intentional. Nonreplacable transactions attempt ...


5

From BIP-125 Opt-in Full Replace-by-Fee Signaling: This policy specifies two ways a transaction can signal that it is replaceable. Explicit signaling: A transaction is considered to have opted in to allowing replacement of itself if any of its inputs have an nSequence number less than (0xffffffff - 1). Inherited signaling: Transactions ...


5

Right now, for the most part, Bitcoin miners follow a First-Seen-Safe rule: If 2 conflicting transactions show up in the mempool, the miner sticks with the one it saw first. Replace-By-Fee would enable miners to remove transactions from the mempool based on which transaction pays the higher fee. This is problematic because it enables fraud. If I pay a ...


5

Skimming the source code, I found the following reasons for a transaction to be removed from the mempool: It was included in a block A conflicting transaction (i.e. one which spent at least one of the same inputs) was included in a block Expired: it has been in the mempool longer than the time specified by -mempoolexpiry (default 336 hours) The memory pool ...


5

Disrespecting it would require them modifying their software, which has ongoing administrative costs. Otherwise, there any incentive within the system to behave otherwise. Willfully not taking income maximizing transactions isn't an incentive compatible behavior.


5

Why didn't the RBF specification include additional constraints on the replacing transaction, such as that it would need to contain the same outputs (with at least the original output amounts) as the transaction being replaced? Because it is not as effective to do this. What you describe is known as First Seen Safe RBF (FSS-RBF). However this imposes ...


4

No wallet currently supports creating replaceable transactions conveniently. To work around this, you can manually create raw transactions from scratch. The following are suggested instructions for use with bitcoin-cli. To create a replaceable transaction. You can use "createrawtransaction" to manually add inputs and mark the "nsequence" field to a value ...


4

According to bitcoin core version 0.12.0 release notes: It is now possible to replace transactions in the transaction memory pool of Bitcoin Core 0.12 nodes. Transaction replacement can be disabled with a new command line option, -mempoolreplacement=0. Note that the wallet in Bitcoin Core 0.12 does not yet have support for creating transactions that would ...


4

What restrictions are placed on RBF in the deployed "opt-in RBF" variant? BIP-125: Opt-in Full Replace-by-Fee (RBF) Signaling specifies how to declare transactions replaceable until they are confirmed in a block. Replaceability is indicated via the sequence number field which appears in each transaction input. A transaction is replaceable if at ...


4

TL;DR: It seems that Bitcoin Wallet for Android incorrectly labels nLockTime transactions as OptInRBF due to a bug in bitcoinj. The issue has been reported. You don't need to do anything. Apparently, Bitcoin Wallet for Android recognized your transaction as OptInRBF (as pointed out by the code you found). The warning you are seeing was only added to the ...


4

The answer to this question is: no, inherited signaling is not currently implemented in Bitcoin Core as described in BIP 125. In May 2021, Antoine Riard discovered the missing implementation could be exploited in the context of the Lightning Network "pinning attacks against second-stage HTLCs" as well as other contexts: https://lists....


4

Bitcoin Core will happily spend RBF marked inputs it doesn't avoid them much less prohibit them. Perhaps you're being confused by the fact that it will not spend an unconfirmed input created by a third party? Or maybe you have spendzeroconfchange set off or only have long-chain unspents?


4

Such a transaction is standard and would relay. However neither the Bitcoin Core wallet (via the bumpfee command) nor the Electrum wallet (via the GUI) would create such transaction. More information about fee bumping in the Bitcoin Core wallet can be found here.


3

The only other relevance of the nSequence field is as relative locktime (in version 2 transactions); see BIP 68. If you do use relative locktime, they will determine the value of nSequence. If you don't use that feature, any nSequence lower than 0xfffffffe will do. In BIP125, there is no need for strictly increasing nSequence versions. instead, the ...


3

Maybe this answer came a bit too late, but lets give it a try. Let me start by citing A. Narayanan et alter Bitcoin and Cryptocurrency Technologies book: Since 2013, there has been interest in changing the default policy to replace-by-fee (RBF) whereby nodes will replace a pending transaction in their pool if they hear a conflicting transaction which ...


3

I faced a similar issue and found this reddit post quite helpful. I'm not a bitcoin expert but I will write an answer describing what I think is happening, since there are no other answers yet. When you sent the first low-fee tx, it got propagated fine to the network but remained unconfirmed. When you opened the Electrum wallet a few hours later, this ...


3

As I answered in another question, Electrum Bitcoin Wallet has the feature. I've confirmed that mac client worked. It seems that Android app has the same feature. https://electrum.org/#download Which clients offer a way to replace unconfirmed transactions?


3

RBF Tools by Peter Todd This page contains ..tools to test out replace-by-fee functionality. You'll need a local node with the replace-by-fee patch. E.g. To double spend ./double-spend.py <address> <amount> To just increase fee ./bump-fee.py <txid> etc.


3

The newest version of bitcoin core 0.12 introduced a feature called replace by fee. This can be used to issue a transaction with a higher fee spending coins that have not yet been picked up in a block. This can be used to send funds in a stuck transaction to a new address and the hope is that by including a fee this will get picked up by the miners faster ...


3

Answer reposted from: How does first seen replace by fee work? Right now, for the most part, Bitcoin miners follow a First-Seen-Safe rule: If 2 conflicting transactions show up in the mempool, the miner sticks with the one it saw first. Replace-By-Fee would enable miners to remove transactions from the mempool based on which transaction pays the higher fee....


3

I could broadcast a second transaction that has the same inputs but a higher fee, without marking the original transaction as replaceable. Default node behaviour is to accept the first-seen transaction into the node's mempool. So your second transaction that spends the same inputs would likely be dropped by most nodes, and thus it would be less reliably ...


3

It's been over six years and I've done entirely too little research to state the below with confidence, but what I can roughly piece together quickly between cursory research and from what I remember: There was a big debate about the merits of RBF since at least 2013, when Peter Todd and John Dillon provided a Full RBF patch. Gavin Andresen described it as ...


2

After 6 years, Now I want to tell you what is Replace by Fee :) This feature was proposed in BIP125 and implemented in Bitcoin Core 0.12.0. In simple words, by enabling (Replace By Fee) RBF in a transaction, if a transaction doesn't get mined, it can be resent by the sender with a higher mining fee with keeping the input data of the UTXO(Unspent ...


2

As far as I know other than bitcoin core API's (as renlord suggested) the only wallet that conveniently supports the functionality is GreenAddress


Only top voted, non community-wiki answers of a minimum length are eligible