lightningd: remove the "listpeers.features.option_anchors_zero_fee_htlc_tx" option.
What changed, and why it matters
This commit removes an old, renamed label from the list of features shown for Lightning peers and channels. The old label 'option_anchors_zero_fee_htlc_tx' is replaced by the current spec name 'option_anchors'. It is a routine cleanup of a deprecated JSON-RPC field, not a security fix.
No security action required. Users or integrations still parsing 'option_anchors_zero_fee_htlc_tx' should update to look for 'option_anchors', as noted in the deprecation schedule.
Security signals we found
No security signals present: this is a deprecation removal and naming cleanup.
Evidence from the diff
The change deletes the deprecated JSON-RPC feature string ‘option_anchors_zero_fee_htlc_tx’ from listpeers/listpeerchannels output and related schemas/tests. The underlying feature bit (OPT_ANCHORS_ZERO_FEE_HTLC_TX) is still negotiated and reported under the new name ‘option_anchors’. No protocol behavior, cryptography, or transaction logic is altered.
Changed components
lightningd JSON-RPC listpeers/listpeerchannels responsesdoc/schemas/listpeerchannels.jsoncontrib/msggen/msggen/schema.jsondoc/schemas/sql-template.jsontests/utils.pyInspect captured patch +6 / −36
diff --git a/contrib/msggen/msggen/schema.json b/contrib/msggen/msggen/schema.json
index c6c8fc45..f139feb6 100644
--- a/contrib/msggen/msggen/schema.json
+++ b/contrib/msggen/msggen/schema.json
@@ -24292,12 +24292,11 @@
"option_static_remotekey",
"option_anchor_outputs",
"option_anchors",
- "option_anchors_zero_fee_htlc_tx",
"option_scid_alias",
"option_zeroconf"
],
"description": [
- "BOLT #9 features which apply to this channel. Note that *anchors_zero_fee_htlc_tx* is a deprecated synonym for *anchors*."
+ "BOLT #9 features which apply to this channel."
]
}
},
@@ -25366,7 +25365,6 @@
},
"features": [
"option_static_remotekey",
- "option_anchors_zero_fee_htlc_tx",
"option_anchors"
],
"funding": {
@@ -25498,7 +25496,6 @@
},
"features": [
"option_static_remotekey",
- "option_anchors_zero_fee_htlc_tx",
"option_anchors"
],
"funding": {
@@ -25624,7 +25621,6 @@
},
"features": [
"option_static_remotekey",
- "option_anchors_zero_fee_htlc_tx",
"option_anchors"
],
"funding": {
@@ -34534,12 +34530,6 @@
0,
"option_static_remotekey"
],
- [
- 29,
- 23,
- 1,
- "option_anchors_zero_fee_htlc_tx"
- ],
[
30,
23,
diff --git a/doc/developers-guide/deprecated-features.md b/doc/developers-guide/deprecated-features.md
index f8cd848a..93693b08 100644
--- a/doc/developers-guide/deprecated-features.md
+++ b/doc/developers-guide/deprecated-features.md
@@ -9,7 +9,6 @@ privacy:
| Name | Type | First Deprecated | Last Supported | Description |
|----------------------------------------------------|--------------------|------------------|----------------|---------------------------------------------------------------------------------------------------------------------------|
-| listpeers.features.option_anchors_zero_fee_htlc_tx | Field | v24.08 | v25.09 | Renamed to `option_anchors` in the spec: check for that in `features` instead |
| decodepay | Command | v24.11 | v25.12 | Use `decode` which is more powerful (since v23.05) |
| close.tx | Field | v24.11 | v25.12 | Use txs array instead |
| close.txid | Field | v24.11 | v25.12 | Use txids array instead |
diff --git a/doc/schemas/listpeerchannels.json b/doc/schemas/listpeerchannels.json
index 95c49bb3..b4749a29 100644
--- a/doc/schemas/listpeerchannels.json
+++ b/doc/schemas/listpeerchannels.json
@@ -462,12 +462,11 @@
"option_static_remotekey",
"option_anchor_outputs",
"option_anchors",
- "option_anchors_zero_fee_htlc_tx",
"option_scid_alias",
"option_zeroconf"
],
"description": [
- "BOLT #9 features which apply to this channel. Note that *anchors_zero_fee_htlc_tx* is a deprecated synonym for *anchors*."
+ "BOLT #9 features which apply to this channel."
]
}
},
@@ -1536,7 +1535,6 @@
},
"features": [
"option_static_remotekey",
- "option_anchors_zero_fee_htlc_tx",
"option_anchors"
],
"funding": {
@@ -1668,7 +1666,6 @@
},
"features": [
"option_static_remotekey",
- "option_anchors_zero_fee_htlc_tx",
"option_anchors"
],
"funding": {
@@ -1794,7 +1791,6 @@
},
"features": [
"option_static_remotekey",
- "option_anchors_zero_fee_htlc_tx",
"option_anchors"
],
"funding": {
diff --git a/doc/schemas/sql-template.json b/doc/schemas/sql-template.json
index 0ff34801..758eac7b 100644
--- a/doc/schemas/sql-template.json
+++ b/doc/schemas/sql-template.json
@@ -285,12 +285,6 @@
0,
"option_static_remotekey"
],
- [
- 29,
- 23,
- 1,
- "option_anchors_zero_fee_htlc_tx"
- ],
[
30,
23,
diff --git a/lightningd/dual_open_control.c b/lightningd/dual_open_control.c
index 388ba47e..ed75f5d7 100644
--- a/lightningd/dual_open_control.c
+++ b/lightningd/dual_open_control.c
@@ -162,11 +162,8 @@ void json_add_unsaved_channel(struct command *cmd,
if (feature_negotiated(channel->peer->ld->our_features,
channel->peer->their_features,
- OPT_ANCHORS_ZERO_FEE_HTLC_TX)) {
- if (command_deprecated_out_ok(cmd, "features", "v24.08", "v25.09"))
- json_add_string(response, NULL, "option_anchors_zero_fee_htlc_tx");
+ OPT_ANCHORS_ZERO_FEE_HTLC_TX))
json_add_string(response, NULL, "option_anchors");
- }
json_array_end(response);
json_object_end(response);
diff --git a/lightningd/opening_control.c b/lightningd/opening_control.c
index f280ee66..ae302630 100644
--- a/lightningd/opening_control.c
+++ b/lightningd/opening_control.c
@@ -70,11 +70,8 @@ void json_add_uncommitted_channel(struct command *cmd,
if (feature_negotiated(uc->peer->ld->our_features,
uc->peer->their_features,
- OPT_ANCHORS_ZERO_FEE_HTLC_TX)) {
- if (command_deprecated_out_ok(cmd, "features", "v24.08", "v25.09"))
- json_add_string(response, NULL, "option_anchors_zero_fee_htlc_tx");
+ OPT_ANCHORS_ZERO_FEE_HTLC_TX))
json_add_string(response, NULL, "option_anchors");
- }
json_array_end(response);
json_object_end(response);
diff --git a/lightningd/peer_control.c b/lightningd/peer_control.c
index 1e9dfa0d..2751769c 100644
--- a/lightningd/peer_control.c
+++ b/lightningd/peer_control.c
@@ -1093,11 +1093,8 @@ static void NON_NULL_ARGS(1, 2, 4, 5) json_add_channel(struct command *cmd,
json_add_string(response, NULL, "option_static_remotekey");
if (channel_has(channel, OPT_ANCHOR_OUTPUTS_DEPRECATED))
json_add_string(response, NULL, "option_anchor_outputs");
- if (channel_has(channel, OPT_ANCHORS_ZERO_FEE_HTLC_TX)) {
- if (command_deprecated_out_ok(cmd, "features", "v24.08", "v25.09"))
- json_add_string(response, NULL, "option_anchors_zero_fee_htlc_tx");
+ if (channel_has(channel, OPT_ANCHORS_ZERO_FEE_HTLC_TX))
json_add_string(response, NULL, "option_anchors");
- }
if (channel_has(channel, OPT_ZEROCONF))
json_add_string(response, NULL, "option_zeroconf");
if (channel_has(channel, OPT_SCID_ALIAS))
diff --git a/tests/utils.py b/tests/utils.py
index d879bf3d..9fc902aa 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -465,7 +465,7 @@ def first_scidd(n1, n2):
def basic_fee(feerate, anchor_expected):
if anchor_expected:
- # option_anchor_outputs / option_anchors_zero_fee_htlc_tx
+ # option_anchor_outputs
weight = 1124
else:
weight = 724
Why this scored 21/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.