tallow transition from FORCE_CLOSING to REDEEMED. define REDEEM_AFTER_DOUBLE_SPENT_DELAY - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 15fb8c04158c563f0d010db1b5b83b39f4464b7f DIR parent 28452e2d4661715841aba7bea43c855dc6e9f9e1 HTML Author: ThomasV <thomasv@electrum.org> Date: Fri, 6 Mar 2020 11:40:08 +0100 allow transition from FORCE_CLOSING to REDEEMED. define REDEEM_AFTER_DOUBLE_SPENT_DELAY Diffstat: M electrum/lnchannel.py | 1 + M electrum/lnutil.py | 1 + M electrum/lnworker.py | 8 +++++--- 3 files changed, 7 insertions(+), 3 deletions(-) --- DIR diff --git a/electrum/lnchannel.py b/electrum/lnchannel.py t@@ -99,6 +99,7 @@ state_transitions = [ (cs.CLOSING, cs.CLOSING), # if we reestablish (cs.CLOSING, cs.CLOSED), (cs.FORCE_CLOSING, cs.CLOSED), + (cs.FORCE_CLOSING, cs.REDEEMED), (cs.CLOSED, cs.REDEEMED), (cs.OPENING, cs.REDEEMED), # channel never funded (dropped from mempool) (cs.PREOPENING, cs.REDEEMED), # channel never funded DIR diff --git a/electrum/lnutil.py b/electrum/lnutil.py t@@ -135,6 +135,7 @@ class PaymentFailure(UserFacingException): pass # TODO make some of these values configurable? DEFAULT_TO_SELF_DELAY = 144 +REDEEM_AFTER_DOUBLE_SPENT_DELAY = 30 ##### CLTV-expiry-delta-related values # see https://github.com/lightningnetwork/lightning-rfc/blob/master/02-peer-protocol.md#cltv_expiry_delta-selection DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py t@@ -704,8 +704,11 @@ class LNWallet(LNWorker): return chan async def update_unfunded_channel(self, chan, funding_txid): - if chan.get_state() in [channel_states.PREOPENING, channel_states.OPENING]: + if chan.get_state() in [channel_states.PREOPENING, channel_states.OPENING, channel_states.FORCE_CLOSING]: if chan.constraints.is_initiator: + # set channel state to REDEEMED so that it can be removed manually + # to protect ourselves against a server lying by omission, + # we check that funding_inputs have been double spent and deeply mined inputs = chan.storage.get('funding_inputs', []) if not inputs: self.logger.info(f'channel funding inputs are not provided') t@@ -716,9 +719,8 @@ class LNWallet(LNWorker): continue if spender_txid != funding_txid: tx_mined_height = self.wallet.get_tx_height(spender_txid) - if tx_mined_height.conf > 6: + if tx_mined_height.conf > lnutil.REDEEM_AFTER_DOUBLE_SPENT_DELAY: self.logger.info(f'channel is double spent {inputs}') - # set to REDEEMED so that it can be removed manually chan.set_state(channel_states.REDEEMED) break else: