Skip to content

Commit 6a4d7dd

Browse files
hardingjnewbery
authored andcommitted
Compat: re-order RBF and segwit
1 parent a6816e4 commit 6a4d7dd

File tree

4 files changed

+398
-396
lines changed

4 files changed

+398
-396
lines changed
Lines changed: 3 additions & 354 deletions
Original file line numberDiff line numberDiff line change
@@ -1,359 +1,8 @@
11
![{{tool.name|escape_once}}]({{tool.logo}}){:.third-party-logo}{:title="{{tool.name}}"}
22

33
{:.center}
4-
[Replace-by-Fee](#rbf) \| [Segwit](#segwit)
4+
[Segwit](#segwit) \| [Replace-by-Fee](#rbf)
55

6-
## Replace-by-Fee (RBF) {#rbf}
6+
{% include templates/compatibility/segwit.md %}
77

8-
{% assign tested = tool.rbf.tested. %}
9-
**Tested**: {% if tested.version != "n/a" %} *version {{tested.version}}* {% endif %} on *{{tested.platforms}}*
10-
11-
**Tested on**: *{{tested.date}}*
12-
13-
**What is Replace-by-Fee (RBF)?** An unconfirmed transaction can be replaced by another version of the
14-
same transaction that spends the same inputs. Most full nodes support
15-
this if the earlier transaction enables [BIP125](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki) signaling and the
16-
replacement transaction increases the amount of fee paid. In terms of
17-
block chain space used, this is the most efficient form of fee bumping.
18-
19-
### Receiving support
20-
21-
<div markdown="1" class="compat-list">
22-
23-
{:id="receive-notification"}
24-
{% assign rbf = tool.rbf.features. %}
25-
{% case rbf.receive.notification %}
26-
{% when "true" %}{:.feature-yes}
27-
- **Notification notes RBF**<br>
28-
Notification of incoming transaction notes that the transaction signals RBF.
29-
{% when "false" %}{:.feature-no}
30-
- **Notification does not note RBF**<br>
31-
Notification of incoming transaction does not note that the transaction signals RBF.
32-
{% when "na" %}{:.feature-neutral}
33-
- **No notification**<br>
34-
There are no incoming transaction notifications for this service.
35-
{% when "untested" %}{:.feature-neutral}
36-
- **Not tested: Does transaction notification show whether transaction signals RBF?**<br>
37-
We either didn’t test this or could not appropriately determine the results.
38-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
39-
{% endcase %}
40-
41-
{:id="receive-list"}
42-
{% case rbf.receive.list %}
43-
{% when "true" %}{:.feature-yes}
44-
- **Received transaction labeled replaceable in list**<br>
45-
Visually indicates that an incoming transaction has signaled RBF.
46-
{% when "false" %}{:.feature-no}
47-
- **Received transaction not labeled replaceable in list**<br>
48-
Does not visually indicate that an incoming transaction has signaled RBF.
49-
{% when "na" %}{:.feature-neutral}
50-
- **This services does not handle incoming transactions**<br>
51-
Does not support incoming transactions.
52-
{% when "untested" %}{:.feature-neutral}
53-
- **Not tested: Does transaction list show whether received transactions signal RBF?**<br>
54-
We either didn’t test this or could not appropriately determine the results.
55-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
56-
{% endcase %}
57-
58-
{:id="receive-details"}
59-
{% case rbf.receive.details %}
60-
{% when "true" %}{:.feature-yes}
61-
- **Received transaction labeled replaceable in transaction details**<br>
62-
Visually indicates that a received transaction has signaled RBF when viewing the transaction details.
63-
{% when "false" %}{:.feature-no}
64-
- **Received transaction not labeled replaceable in transaction details**<br>
65-
Does not visually indicate that a received transaction has signaled RBF when viewing the transaction details.
66-
{% when "na" %}{:.feature-neutral}
67-
- **Does not show transaction details**<br>
68-
Does not show transaction details natively. Usually this means the service links to a block explorer for transaction details.
69-
{% when "untested" %}{:.feature-neutral}
70-
- **Not tested: Does transaction details page show whether received transaction signals RBF?**<br>
71-
We either didn’t test this or could not appropriately determine the results.
72-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
73-
{% endcase %}
74-
75-
{:id="receive-replaced"}
76-
{% if rbf.receive.shows_replaced_version == "true" and rbf.receive.shows_original_version == "true" %}
77-
{:.feature-yes}
78-
- **Shows replacement and original transactions**<br>
79-
Both the original transaction and replacement transaction(s) are shown in the
80-
transaction list.
81-
{% elsif rbf.receive.shows_replaced_version == "na" or
82-
rbf.receive.shows_original_version == "na" %}
83-
{:.feature-neutral}
84-
- **No transaction list**<br>
85-
Does not support listing of transactions.
86-
{% elsif rbf.receive.shows_replaced_version == "untested" or
87-
rbf.receive.shows_original_version == "untested" %}
88-
{:.feature-neutral}
89-
- **Not tested: Are replacement and original received transactions displayed?**<br>
90-
We either didn’t test this or could not appropriately determine the results.
91-
{% elsif rbf.receive.shows_replaced_version == "true" %}
92-
{:.feature-yes}
93-
- **Shows replacement transaction only**<br>
94-
Only the replacement transaction is shown in the transaction list. No original
95-
transaction is shown.
96-
{% elsif rbf.receive.shows_original_version == "true" %}
97-
{:.feature-no}
98-
- **Shows original transaction only**<br>
99-
Only the original transaction is shown in transaction list. Replacement transactions
100-
are not shown.
101-
{% elsif rbf.receive.shows_original_version == "false" and rbf.receive.shows_replaced_version == "false" %}
102-
{:.feature-no}
103-
- **No unconfirmed transactions**<br>
104-
Neither the original nor replacement transactions are shown in the
105-
transaction list. Unconfirmed transactions are probably not supported.
106-
{% else %} {% include ERROR_42_UNEXPECTED_VALUE %}
107-
{% endif %}
108-
109-
</div>{% comment %}<!-- end: compat-list -->{% endcomment %}
110-
111-
### Sending support
112-
113-
<div markdown="1" class="compat-list">
114-
115-
{:id="send-signals_bip125"}
116-
{% case rbf.send.signals_bip125 %}
117-
{% when "true" %}{:.feature-yes}
118-
- **Signals BIP125 replacability when sending transactions**<br>
119-
Allows sending of BIP125 opt-in-RBF transactions in the interface.
120-
{% when "false" %}{:.feature-no}
121-
- **Does not signal BIP125 replacability when sending transactions**<br>
122-
Does not allow sending of BIP125 opt-in-RBF transactions in the interface.
123-
{% when "na" %}{:.feature-neutral}
124-
- **Does not send transactions**<br>
125-
Does not support sending of any transactions.
126-
{% when "untested" %}{:.feature-neutral}
127-
- **Not tested: Can sent transactions signal RBF?**<br>
128-
We either didn’t test this or could not appropriately determine the results.
129-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
130-
{% endcase %}
131-
132-
{:id="send-list"}
133-
{% case rbf.send.list %}
134-
{% when "true" %}{:.feature-yes}
135-
- **Sent transaction labeled replaceable in list**<br>
136-
Visually indicates that an outgoing transaction has signaled RBF.
137-
{% when "false" %}{:.feature-no}
138-
- **Sent transaction not labeled replaceable in list**<br>
139-
Does not visually indicate that an outgoing transaction has signaled RBF.
140-
{% when "na" %}{:.feature-neutral}
141-
- **No transaction list**<br>
142-
Does not show a transaction list natively.
143-
{% when "untested" %}{:.feature-neutral}
144-
- **Not tested: Does transaction list show whether sent transactions signal RBF?**<br>
145-
We were not able to test this because sending a BIP125 signaling transaction
146-
is not supported.
147-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
148-
{% endcase %}
149-
150-
{:id="send-details"}
151-
{% case rbf.send.details %}
152-
{% when "true" %}{:.feature-yes}
153-
- **Sent transaction labeled replaceable in transaction details**<br>
154-
Visually indicates that a sent transaction has signaled RBF when viewing the transaction details.
155-
{% when "false" %}{:.feature-no}
156-
- **Sent transaction not labeled replaceable in transaction details**<br>
157-
Does not visually indicate that a sent transaction has signaled RBF when viewing the transaction details.
158-
{% when "na" %}{:.feature-neutral}
159-
- **Does not show transaction details**<br>
160-
Does not show transaction details natively. Usually this means the service links to a block explorer for transaction details.
161-
{% when "untested" %}{:.feature-neutral}
162-
- **Not tested: Does transaction details page show whether received transaction signals RBF?**<br>
163-
We were not able to test this because sending a BIP125 signaling transaction
164-
is not supported.
165-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
166-
{% endcase %}
167-
168-
{:id="send-replaced"}
169-
{% if rbf.send.shows_replaced_version == "true" and rbf.send.shows_original_version == "true" %}
170-
{:.feature-yes}
171-
- **Shows replacement and original transactions**<br>
172-
Both the original transaction and replacement transactions are shown in the
173-
transaction list.
174-
{% elsif rbf.send.shows_replaced_version == "na" or
175-
rbf.send.shows_original_version == "na" %}
176-
{:.feature-neutral}
177-
- **No replacements in transaction list**<br>
178-
Because no transaction replacement is possible, we could not test whether
179-
original or replacement sent transactions are shown after replacement.
180-
{% elsif rbf.send.shows_replaced_version == "untested" or
181-
rbf.send.shows_original_version == "untested" %}
182-
{:.feature-neutral}
183-
- **Not tested: Are replacement and original sent transactions displayed?**<br>
184-
We were not able to test this because sending a BIP125 signaling transaction
185-
is not supported.
186-
{% elsif rbf.send.shows_replaced_version == "true" %}
187-
{:.feature-yes}
188-
- **Shows replacement transaction only**<br>
189-
Only the replacement transaction is shown in the transaction list. No original
190-
transaction is shown.
191-
{% elsif rbf.send.shows_original_version == "true" %}
192-
{:.feature-no}
193-
- **Shows original transaction only**<br>
194-
Only the original transaction shown in transaction list. Replacement transactions are
195-
not shown.
196-
{% elsif rbf.send.shows_original_version == "false" and rbf.send.shows_replaced_version == "false" %}
197-
{:.feature-no}
198-
- **No unconfirmed transactions**<br>
199-
Neither the original nor replacement transactions are shown in the
200-
transaction list. Unconfirmed transactions are probably not supported.
201-
{% else %} {% include ERROR_42_UNEXPECTED_VALUE %}
202-
{% endif %}
203-
204-
</div>{% comment %}<!-- end: compat-list -->{% endcomment %}
205-
206-
### Usability
207-
208-
{% include functions/compat-gallery.md examples=tool.rbf.examples %}
209-
210-
## Segwit Addresses {#segwit}
211-
212-
Transactions that spend bitcoins secured by segregated witness (segwit) use less
213-
block weight than equivalent non-segwit (legacy) transactions, allowing
214-
segwit transactions to pay less total fee to achieve the same feerate as legacy transactions.
215-
216-
{% if tool.segwit %}
217-
218-
{% assign tested = tool.segwit.tested. %}
219-
**Tested**: {% if tested.version != "n/a" %} *version {{tested.version}}* {% endif %} on *{{tested.platforms}}*
220-
221-
**Tested on**: *{{tested.date}}*
222-
223-
### Receive support
224-
225-
<div markdown="1" class="compat-list">
226-
227-
{% assign segwit = tool.segwit.features. %}
228-
{:id="segwit-receive-p2sh_wrapped"}
229-
{% case segwit.receive.p2sh_wrapped %}
230-
{% when "true" %}{:.feature-yes}
231-
- **Allows receiving to P2SH-wrapped segwit**<br>
232-
Allows the generation of P2SH-wrapped (either P2WPKH or P2WSH) segwit receiving addresses.
233-
{% when "false" %}{:.feature-no}
234-
- **Does not allow receiving to P2SH-wrapped segwit**<br>
235-
Does not allow the generation of P2SH-wrapped (either P2WPKH or P2WSH) segwit receiving addresses.
236-
{% when "na" %}{:.feature-neutral}
237-
- **No receiving capabilities**<br>
238-
There are no receiving capabilities for this service.
239-
{% when "untested" %}{:.feature-neutral}
240-
- **Not tested: Can P2SH-wrapped segwit transaction outputs be received?**<br>
241-
We either didn’t test this or could not appropriately determine the results.
242-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
243-
{% endcase %}
244-
245-
{:id="segwit-receive-bech32"}
246-
{% case segwit.receive.bech32 %}
247-
{% when "true" %}{:.feature-yes}
248-
- **Allows receiving to bech32 segwit addresses**<br>
249-
Allows the generation of bech32 native (either P2WPKH or P2WSH) segwit receiving addresses.
250-
{% when "false" %}{:.feature-no}
251-
- **Does not allow receiving to bech32 segwit addresses**<br>
252-
Does not allow the generation of bech32 native (either P2WPKH or P2WSH) segwit receiving addresses.
253-
{% when "na" %}{:.feature-neutral}
254-
- **No receiving capabilities**<br>
255-
There are no receiving capabilities for this service.
256-
{% when "untested" %}{:.feature-neutral}
257-
- **Not tested: Can bech32 segwit transaction outputs be received?**<br>
258-
We either didn’t test this or could not appropriately determine the results.
259-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
260-
{% endcase %}
261-
262-
{:id="segwit-receive-default"}
263-
{% case segwit.receive.default %}
264-
{% when "p2pkh" %}{:.feature-no}
265-
- **Default receiving address is P2PKH**<br>
266-
This service generates legacy P2PKH receiving addresses by default.
267-
{% when "p2sh" %}{:.feature-no}
268-
- **Default receiving address is P2SH**<br>
269-
This service generates P2SH (not P2SH-wrapped segwit) receiving addresses by
270-
default.
271-
{% when "p2sh_wrapped" %}{:.feature-yes}
272-
- **Default receiving address is P2SH-wrapped P2WPKH**<br>
273-
This service generates P2SH-wrapped P2WPKH segwit receiving addresses by
274-
default.
275-
{% when "p2sh_wrapped_p2wsh" %}{:.feature-yes}
276-
- **Default receiving address is P2SH-wrapped P2WSH**<br>
277-
This service generates P2SH-wrapped P2WSH segwit receiving addresses by default.
278-
{% when "bech32" %}{:.feature-yes}
279-
- **Default receiving address is bech32 P2WPKH**<br>
280-
This service generates bech32 P2WPKH segwit receiving addresses by default.
281-
{% when "bech32_p2wsh" %}{:.feature-yes}
282-
- **Default receiving address is bech32 P2WSH**<br>
283-
This service generates bech32 P2WSH segwit receiving addresses by default.
284-
{% when "na" %}{:.feature-neutral}
285-
- **No receiving capabilities**<br>
286-
There are no receiving capabilities for this service.
287-
{% when "untested" %}{:.feature-neutral}
288-
- **Not tested: What is the default receiving address type?**<br>
289-
We either didn’t test this or could not appropriately determine the results.
290-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
291-
{% endcase %}
292-
293-
</div>{% comment %}<!-- end: compat-list -->{% endcomment %}
294-
295-
### Send support
296-
297-
<div markdown="1" class="compat-list">
298-
299-
{:id="segwit-send-bech32"}
300-
{% case segwit.send.bech32 %}
301-
{% when "true" %}{:.feature-yes}
302-
- **Allows sending to bech32 P2WPKH addresses**<br>
303-
Allows sending to bech32 P2WPKH native segwit addresses.
304-
{% when "false" %}{:.feature-no}
305-
- **Does not allow sending to bech32 P2WPKH addresses**<br>
306-
Does not allow sending to bech32 P2WPKH native segwit addresses.
307-
{% when "na" %}{:.feature-neutral}
308-
- **No sending capabilities**<br>
309-
There are no sending capabilities for this service.
310-
{% when "untested" %}{:.feature-neutral}
311-
- **Not tested: Can transaction outputs be sent to bech32 P2WPKH addresses?**<br>
312-
We either didn’t test this or could not appropriately determine the results.
313-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
314-
{% endcase %}
315-
316-
{:id="segwit-send-bech32_p2wsh"}
317-
{% case segwit.send.bech32_p2wsh %}
318-
{% when "true" %}{:.feature-yes}
319-
- **Allows sending to bech32 P2WSH addresses**<br>
320-
Allows sending to bech32 P2WSH native segwit addresses.
321-
{% when "false" %}{:.feature-no}
322-
- **Does not allow sending to bech32 P2WSH addresses**<br>
323-
Does not allow sending to bech32 P2WSH native segwit addresses.
324-
{% when "na" %}{:.feature-neutral}
325-
- **No sending capabilities**<br>
326-
There are no sending capabilities for this service.
327-
{% when "untested" %}{:.feature-neutral}
328-
- **Not tested: Can transaction outputs be sent to bech32 P2WSH addresses?**<br>
329-
We either didn’t test this or could not appropriately determine the results.
330-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
331-
{% endcase %}
332-
333-
{:id="segwit-send-change_bech32"}
334-
{% case segwit.send.change_bech32 %}
335-
{% when "true" %}{:.feature-yes}
336-
- **Creates bech32 change addresses**<br>
337-
When sending, generates bech32 (either P2WPKH or P2WSH) segwit change addresses.
338-
{% when "false" %}{:.feature-no}
339-
- **Does not create bech32 change addresses**<br>
340-
When sending, does not generate bech32 (either P2WPKH or P2WSH) segwit change addresses.
341-
{% when "na" %}{:.feature-neutral}
342-
- **No sending or change capabilities**<br>
343-
There are no sending capabilities for this service or sending does not
344-
generate change.
345-
{% when "untested" %}{:.feature-neutral}
346-
- **Not tested: Can bech32 addresses be used for change?**<br>
347-
We either didn’t test this or could not appropriately determine the results.
348-
{% else %}{% include ERROR_42_UNEXPECTED_VALUE %}
349-
{% endcase %}
350-
351-
</div>{% comment %}<!-- end: compat-list -->{% endcomment %}
352-
353-
### Usability
354-
355-
{% include functions/compat-gallery.md examples=tool.segwit.examples %}
356-
357-
{% else %}
358-
*We have not yet tested {{tool.name}} for segwit capabilities.*
359-
{% endif %}
8+
{% include templates/compatibility/rbf.md %}

0 commit comments

Comments
 (0)