pull down to refresh

Simple taproot channels are LND funding and commitment transactions that use taproot (P2TR) with support for MuSig2 scriptless multisignature signing when both parties are cooperating. This reduces transaction weight space and improves privacy when channels are closed cooperatively.
Since it's initial implementation in late 2023, it has been slowly adopted by more and more implementations and apps1.
To be able to open Simple Taproot Channels with your LND node, you need to configure some specific protocol flags in the https://docs.lightning.engineering/lightning-network-tools/lnd/lnd.conf file. The required configuration options are:
// Set to enable support for the experimental taproot channel type.
protocol.simple-taproot-chans=true

// Set to enable support for the experimental taproot overlay channel type.
protocol.simple-taproot-overlay-chans=true

// Set to enable support for option_scid_alias channels, which can be referred
// to by an alias instead of the confirmed ShortChannelID. Additionally, is
// needed to open zero-conf channels.
protocol.option-scid-alias=true

// Set to enable support for zero-conf channels. This requires the
// option-scid-alias flag to also be set.
lnd.protocol.zero-conf=true

// Set to handle messages of a particular type that falls outside of the
// custom message number range (i.e. 513 is onion messages). Note that you can
// set this option as many times as you want to support more than one custom
// message type.
lnd.protocol.custom-message=17

// If true, spontaneous payments through keysend will be accepted.
lnd.accept-keysend=true
These settings will enable the necessary features for Simple Taproot Channels, including zero-conf channel opening and SCID aliasing, and most important, will let other nodes know yours support the feature. You must also ensure that your LND version supports these features, as they are part of the protocol enhancements introduced in versions v0.17.
Once you save the file, reboot your node. To open a Simple Taproot Channel using the lncli openchannel command with the --channel_type taproot flag. For example:
lncli openchannel --channel_type taproot --node_key <peer_node_key> --local_amt <channel_capacity> --sat_per_vbyte <fee_rate> 
Simple Taproot Channels do not require reserved on-chain funds for anchor transactions, as the design allows for a more efficient use of on-chain space and eliminates the need for a separate anchor output. This behavior has been previously observed in testnet environments where no reserved balance was left on-chain after opening a taproot channel. The same behaviors is reflected in channels opened today using this flag.
Note: For opening a channel successfully, ensure your selected peer also supports Simple Taproot Channels and that both nodes are running compatible versions of LND with the required protocol flags enabled.
One of the first apps to implement this functionality was ZEUS, fist for self-hosted nodes2 and then enabling the channel opening requests in their LSP3.
Other apps with this feature today are:
Ride The Lightning 4
Let me know in the comment if you know of any other GUi that enable STC. If you want to learn more, Elle Mutton gives a good detailed explanation here #169437

Footnotes

  1. Simple Taproot Channels mentions in the Bitcoin OPS newsletter https://bitcoinops.org/en/topics/simple-taproot-channels/
  2. issue #1624: Adds the ability to open up Simple Taproot Channels in LND v0.17.0+ https://github.com/ZeusLN/zeus/pull/1624
  3. issue #1721 LSP: add ability to request Simple Taproot Channels https://github.com/ZeusLN/zeus/pull/1721
  4. issue #1305 Enable opening Taproot Channels for LND #1296 https://github.com/Ride-The-Lightning/RTL/pull/1305
50 sats \ 1 reply \ @leo 7h
Kudos to you for writing and testing this! One little nit: Her name is Elle Mouton!
reply
Thanks, for highlighting it. Unfortunately, can't fix t anymore
reply
Can't wait for bolt12 on LND
reply
0 sats \ 1 reply \ @megaptera 9h
Is there a way I can make sure my peer does support taproot channels?
reply
Yes you can via cli the command should be:
lncli listpeers | jq '.peers[] | select(.pub_key=="<peer_pubkey>") | .features'
if the peer is not connected, connect first:
lncli connect <peer_pubkey>@<host>:<port>
reply