diff --git a/electrum/lnchannel.py b/electrum/lnchannel.py index e87eb8bea..91104a204 100644 --- a/electrum/lnchannel.py +++ b/electrum/lnchannel.py @@ -496,6 +496,9 @@ class AbstractChannel(Logger, ABC): """ pass + def has_anchors(self) -> bool: + pass + class ChannelBackup(AbstractChannel): """ @@ -883,6 +886,10 @@ class Channel(AbstractChannel): assert self.lnworker.wallet.is_mine(addr) return addr + def has_anchors(self) -> bool: + channel_type = ChannelType(self.storage.get('channel_type')) + return bool(channel_type & ChannelType.OPTION_ANCHOR_OUTPUTS) + def get_wallet_addresses_channel_might_want_reserved(self) -> Sequence[str]: assert self.is_static_remotekey_enabled() our_payment_pubkey = self.config[LOCAL].payment_basepoint.pubkey diff --git a/electrum/lnpeer.py b/electrum/lnpeer.py index 4e9301961..b9b2a6eb1 100644 --- a/electrum/lnpeer.py +++ b/electrum/lnpeer.py @@ -656,6 +656,9 @@ class Peer(Logger, EventListener): def is_upfront_shutdown_script(self): return self.features.supports(LnFeatures.OPTION_UPFRONT_SHUTDOWN_SCRIPT_OPT) + def use_anchors(self) -> bool: + return self.features.supports(LnFeatures.OPTION_ANCHOR_OUTPUTS_OPT) + def upfront_shutdown_script_from_payload(self, payload, msg_identifier: str) -> Optional[bytes]: if msg_identifier not in ['accept', 'open']: raise ValueError("msg_identifier must be either 'accept' or 'open'") diff --git a/electrum/lnutil.py b/electrum/lnutil.py index f804e9d2b..a0080ab79 100644 --- a/electrum/lnutil.py +++ b/electrum/lnutil.py @@ -1181,6 +1181,18 @@ class LnFeatures(IntFlag): _ln_feature_contexts[OPTION_SUPPORT_LARGE_CHANNEL_OPT] = (LNFC.INIT | LNFC.NODE_ANN) _ln_feature_contexts[OPTION_SUPPORT_LARGE_CHANNEL_REQ] = (LNFC.INIT | LNFC.NODE_ANN) + OPTION_ANCHOR_OUTPUTS_REQ = 1 << 20 + OPTION_ANCHOR_OUTPUTS_OPT = 1 << 21 + _ln_feature_direct_dependencies[OPTION_ANCHOR_OUTPUTS_OPT] = {OPTION_STATIC_REMOTEKEY_OPT} + _ln_feature_contexts[OPTION_ANCHOR_OUTPUTS_REQ] = (LNFC.INIT | LNFC.NODE_ANN) + _ln_feature_contexts[OPTION_ANCHOR_OUTPUTS_OPT] = (LNFC.INIT | LNFC.NODE_ANN) + + OPTION_ANCHORS_ZERO_FEE_HTLC_REQ = 1 << 22 + OPTION_ANCHORS_ZERO_FEE_HTLC_OPT = 1 << 23 + _ln_feature_direct_dependencies[OPTION_ANCHORS_ZERO_FEE_HTLC_OPT] = {OPTION_STATIC_REMOTEKEY_OPT} + _ln_feature_contexts[OPTION_ANCHORS_ZERO_FEE_HTLC_REQ] = (LNFC.INIT | LNFC.NODE_ANN) + _ln_feature_contexts[OPTION_ANCHORS_ZERO_FEE_HTLC_OPT] = (LNFC.INIT | LNFC.NODE_ANN) + # Temporary number. OPTION_TRAMPOLINE_ROUTING_REQ_ECLAIR = 1 << 148 OPTION_TRAMPOLINE_ROUTING_OPT_ECLAIR = 1 << 149