tMerge pull request #6134 from SomberNight/202004_ln_fundingtx_forbid_bump_cjoin - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 8e3ee73dafb15e8d8bce2d1e11470582597f69e8 DIR parent 6aa337c618221acb1af700b8a6972914f8fa5949 HTML Author: ThomasV <thomasv@electrum.org> Date: Wed, 27 May 2020 18:37:04 +0200 Merge pull request #6134 from SomberNight/202004_ln_fundingtx_forbid_bump_cjoin wallet: disallow fee-bumping/coinjoining ln funding tx Diffstat: M electrum/gui/qt/transaction_dialog… | 8 +++++--- M electrum/wallet.py | 11 ++++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) --- DIR diff --git a/electrum/gui/qt/transaction_dialog.py b/electrum/gui/qt/transaction_dialog.py t@@ -170,9 +170,9 @@ class BaseTxDialog(QDialog, MessageBoxMixin): ptx_merge_sigs_action = QAction(_("Merge signatures from"), self) ptx_merge_sigs_action.triggered.connect(self.merge_sigs) partial_tx_actions_menu.addAction(ptx_merge_sigs_action) - ptx_join_txs_action = QAction(_("Join inputs/outputs"), self) - ptx_join_txs_action.triggered.connect(self.join_tx_with_another) - partial_tx_actions_menu.addAction(ptx_join_txs_action) + self._ptx_join_txs_action = QAction(_("Join inputs/outputs"), self) + self._ptx_join_txs_action.triggered.connect(self.join_tx_with_another) + partial_tx_actions_menu.addAction(self._ptx_join_txs_action) self.partial_tx_actions_button = QToolButton() self.partial_tx_actions_button.setText(_("Combine")) self.partial_tx_actions_button.setMenu(partial_tx_actions_menu) t@@ -499,6 +499,8 @@ class BaseTxDialog(QDialog, MessageBoxMixin): widget.menuAction().setVisible(show_psbt_only_widgets) else: widget.setVisible(show_psbt_only_widgets) + if tx_details.is_lightning_funding_tx: + self._ptx_join_txs_action.setEnabled(False) # would change txid self.save_button.setEnabled(tx_details.can_save_as_local) if tx_details.can_save_as_local: DIR diff --git a/electrum/wallet.py b/electrum/wallet.py t@@ -208,6 +208,7 @@ class TxWalletDetails(NamedTuple): tx_mined_status: TxMinedInfo mempool_depth_bytes: Optional[int] can_remove: bool # whether user should be allowed to delete tx + is_lightning_funding_tx: bool class Abstract_Wallet(AddressSynchronizer, ABC): t@@ -521,7 +522,11 @@ class Abstract_Wallet(AddressSynchronizer, ABC): exp_n = None can_broadcast = False can_bump = False - tx_hash = tx.txid() + tx_hash = tx.txid() # note: txid can be None! e.g. when called from GUI tx dialog + is_lightning_funding_tx = False + if self.has_lightning() and tx_hash is not None: + is_lightning_funding_tx = any([chan.funding_outpoint.txid == tx_hash + for chan in self.lnworker.channels.values()]) tx_we_already_have_in_db = self.db.get_transaction(tx_hash) can_save_as_local = (is_relevant and tx.txid() is not None and (tx_we_already_have_in_db is None or not tx_we_already_have_in_db.is_complete())) t@@ -571,6 +576,9 @@ class Abstract_Wallet(AddressSynchronizer, ABC): else: amount = None + if is_lightning_funding_tx: + can_bump = False # would change txid + return TxWalletDetails( txid=tx_hash, status=status, t@@ -583,6 +591,7 @@ class Abstract_Wallet(AddressSynchronizer, ABC): tx_mined_status=tx_mined_status, mempool_depth_bytes=exp_n, can_remove=can_remove, + is_lightning_funding_tx=is_lightning_funding_tx, ) def get_spendable_coins(self, domain, *, nonlocal_only=False) -> Sequence[PartialTxInput]: