|
1 | 1 | {:.third-party-logo}{:title="{{tool.name}}"}
|
2 | 2 |
|
3 | 3 | {:.center}
|
4 |
| -[Replace-by-Fee](#rbf) \| [Segwit](#segwit) |
| 4 | +[Segwit](#segwit) \| [Replace-by-Fee](#rbf) |
5 | 5 |
|
6 |
| -## Replace-by-Fee (RBF) {#rbf} |
| 6 | +{% include templates/compatibility/segwit.md %} |
7 | 7 |
|
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