BOLT #9: Assigned Feature Flags

May 4, 2026 ยท View on GitHub

This document tracks the assignment of features flags in the init message (BOLT #1), as well as features fields in the channel_announcement and node_announcement messages (BOLT #7). The flags are tracked separately, since new flags will likely be added over time.

Some features were introduced and became so widespread they are ASSUMED to be present by all nodes, and can be safely ignored (and the semantics are only defined in prior revisions of this spec).

Flags are numbered from the least-significant bit, at bit 0 (i.e. 0x1, an even bit). They are generally assigned in pairs so that features can be introduced as optional (odd bits) and later upgraded to be compulsory (even bits), which will be refused by outdated nodes: see BOLT #1: The init Message.

Some features don't make sense on a per-channels or per-node basis, so each feature defines how it is presented in those contexts. Some features may be required for opening a channel, but not a requirement for use of the channel, so the presentation of those features depends on the feature itself.

The Context column decodes as follows:

  • I: presented in the init message.
  • N: presented in the node_announcement messages
  • C: presented in the channel_announcement message.
  • C-: presented in the channel_announcement message, but always odd (optional).
  • C+: presented in the channel_announcement message, but always even (required).
  • 9: presented in BOLT 11 invoices.
  • B: presented in the allowed_features field of a blinded path.
  • T: used in the channel_type field when opening channels.
BitsNameDescriptionContextDependenciesLink
0/1option_data_loss_protectASSUMED
4/5option_upfront_shutdown_scriptCommits to a shutdown scriptpubkey when opening channelINBOLT #2
6/7gossip_queriesPeer has useful gossip to share
8/9var_onion_optinASSUMED
10/11gossip_queries_exGossip queries can include additional informationINBOLT #7
12/13option_static_remotekeyASSUMED
14/15payment_secretASSUMED[Routing Onion Specification][bolt04]
16/17basic_mppNode can receive basic multi-part paymentsIN9payment_secretBOLT #4
18/19option_support_large_channelCan create large channelsINBOLT #2
22/23option_anchorsAnchor commitment type with zero fee HTLC transactionsINTBOLT #3, lightning-dev
24/25option_route_blindingNode supports blinded pathsIN9BOLT #4
26/27option_shutdown_anysegwitFuture segwit versions allowed in shutdownINBOLT #2
28/29option_dual_fundUse v2 of channel open, enables dual fundingINBOLT #2
34/35option_quiesceSupport for stfu messageINBOLT #2
36/37option_attribution_dataCan generate/relay attribution data in update_fail_htlc and update_fulfill_htlcIN9BOLT #4
38/39option_onion_messagesCan forward onion messagesINBOLT #7
40/41zero_fee_commitmentsZero-fee commitment and HTLC transactionsINoption_channel_typeBOLT #3
42/43option_provide_storageCan store other nodes' encrypted backup dataINBOLT #1
44/45option_channel_typeASSUMED
46/47option_scid_aliasSupply channel aliases for routingINTBOLT #2
48/49option_payment_metadataPayment metadata in tlv record9BOLT #11
50/51option_zeroconfUnderstands zeroconf channel typesINToption_scid_aliasBOLT #2
60/61option_simple_closeSimplified closing negotiationINoption_shutdown_anysegwitBOLT #2
62/63option_spliceAllows replacing the funding transaction with a new oneINBOLT #2

Requirements

The origin node:

  • If it supports a feature above, SHOULD set the corresponding odd bit in all feature fields indicated by the Context column unless indicated that it must set the even feature bit instead.
  • If it requires a feature above, MUST set the corresponding even feature bit in all feature fields indicated by the Context column, unless indicated that it must set the odd feature bit instead.
  • MUST NOT set feature bits it does not support.
  • MUST NOT set feature bits in fields not specified by the table above.
  • MUST NOT set both the optional and mandatory bits.
  • MUST set all transitive feature dependencies.
  • MUST support:
    • var_onion_optin

The receiving node:

  • if both the optional and the mandatory feature bits in a pair are set, the feature should be treated as mandatory.

The requirements for receiving specific bits are defined in the linked sections in the table above. The requirements for feature bits that are not defined above can be found in BOLT #1: The init Message.

Rationale

Note that for feature flags which are available in both the node_announcement and BOLT 11 invoice contexts, the features as set in the BOLT 11 invoice should override those set in the node_announcement. This keeps things consistent with the unknown features behavior as specified in BOLT 7.

The origin must set all transitive feature dependencies in order to create a well-formed feature vector. By validating all known dependencies up front, this simplifies logic gated on a single feature bit; the feature's dependencies are known to be set, and do not need to be validated at every feature gate.

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.