tmove maybe_save_short_chan_id to lnchannel - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 55d0a9587ec1dbadbecd6b97662bda0a84cee565 DIR parent 4512f9d6d87fc8778d574b4c5cf901fe946d4ea0 HTML Author: ThomasV <thomasv@electrum.org> Date: Mon, 6 Apr 2020 18:35:12 +0200 move maybe_save_short_chan_id to lnchannel Diffstat: M electrum/lnchannel.py | 34 ++++++++++++++++++++++++++++--- M electrum/lnworker.py | 31 ------------------------------- 2 files changed, 31 insertions(+), 34 deletions(-) --- DIR diff --git a/electrum/lnchannel.py b/electrum/lnchannel.py t@@ -1105,6 +1105,33 @@ class Channel(Logger): else: self.update_closed_state(funding_txid, funding_height, closing_txid, closing_height, keep_watching) + def is_funding_tx_mined(self, funding_height): + """ + Checks if Funding TX has been mined. If it has, save the short channel ID in chan; + if it's also deep enough, also save to disk. + Returns tuple (mined_deep_enough, num_confirmations). + """ + funding_txid = self.funding_outpoint.txid + funding_idx = self.funding_outpoint.output_index + conf = funding_height.conf + if conf < self.constraints.funding_txn_minimum_depth: + self.logger.info(f"funding tx is still not at sufficient depth. actual depth: {conf}") + return False + assert conf > 0 + # check funding_tx amount and script + funding_tx = self.lnworker.lnwatcher.db.get_transaction(funding_txid) + if not funding_tx: + self.logger.info(f"no funding_tx {funding_txid}") + return False + outp = funding_tx.outputs()[funding_idx] + redeem_script = funding_output_script(self.config[REMOTE], self.config[LOCAL]) + funding_address = redeem_script_to_address('p2wsh', redeem_script) + funding_sat = self.constraints.capacity + if not (outp.address == funding_address and outp.value == funding_sat): + self.logger.info('funding outpoint mismatch') + return False + return True + def update_unfunded_state(self): self.delete_funding_height() self.delete_closing_height() t@@ -1136,10 +1163,11 @@ class Channel(Logger): self.save_funding_height(funding_txid, funding_height.height, funding_height.timestamp) self.delete_closing_height() if self.get_state() == channel_states.OPENING: - if self.short_channel_id is None: - self.lnworker.maybe_save_short_chan_id(self, funding_height) - if self.short_channel_id: + if self.is_funding_tx_mined(funding_height): self.set_state(channel_states.FUNDED) + self.set_short_channel_id(ShortChannelID.from_components( + funding_height.height, funding_height.txpos, self.funding_outpoint.output_index)) + self.logger.info(f"save_short_channel_id: {self.short_channel_id}") def update_closed_state(self, funding_txid, funding_height, closing_txid, closing_height, keep_watching): self.save_funding_height(funding_txid, funding_height.height, funding_height.timestamp) DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py t@@ -659,36 +659,6 @@ class LNWallet(LNWorker): self.wallet.save_db() self.network.trigger_callback('channel', chan) - def maybe_save_short_chan_id(self, chan, funding_height): - """ - Checks if Funding TX has been mined. If it has, save the short channel ID in chan; - if it's also deep enough, also save to disk. - Returns tuple (mined_deep_enough, num_confirmations). - """ - funding_txid = chan.funding_outpoint.txid - funding_idx = chan.funding_outpoint.output_index - conf = funding_height.conf - if conf < chan.constraints.funding_txn_minimum_depth: - self.logger.info(f"funding tx is still not at sufficient depth. actual depth: {conf}") - return - assert conf > 0 - # check funding_tx amount and script - funding_tx = self.lnwatcher.db.get_transaction(funding_txid) - if not funding_tx: - self.logger.info(f"no funding_tx {funding_txid}") - return - outp = funding_tx.outputs()[funding_idx] - redeem_script = funding_output_script(chan.config[REMOTE], chan.config[LOCAL]) - funding_address = redeem_script_to_address('p2wsh', redeem_script) - funding_sat = chan.constraints.capacity - if not (outp.address == funding_address and outp.value == funding_sat): - self.logger.info('funding outpoint mismatch') - return - chan.set_short_channel_id(ShortChannelID.from_components( - funding_height.height, funding_height.txpos, chan.funding_outpoint.output_index)) - self.logger.info(f"save_short_channel_id: {chan.short_channel_id}") - self.save_channel(chan) - def channel_by_txo(self, txo): with self.lock: channels = list(self.channels.values()) t@@ -696,7 +666,6 @@ class LNWallet(LNWorker): if chan.funding_outpoint.to_str() == txo: return chan - async def on_channel_update(self, chan): if chan.get_state() == channel_states.OPEN and chan.should_be_closed_due_to_expiring_htlcs(self.network.get_local_height()):