Browse Source

qt "open channel" dialog: detect invalid remote node id sooner

and avoid the "please wait" text to be interpreted as a node id

related #6705
patch-4
SomberNight 4 years ago
parent
commit
c872c3194f
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 5
      electrum/gui/qt/channels_list.py
  2. 7
      electrum/gui/qt/main_window.py
  3. 3
      electrum/lnutil.py

5
electrum/gui/qt/channels_list.py

@ -357,8 +357,9 @@ class ChannelsList(MyTreeView):
self.parent.wallet.network.start_gossip()
nodeid = bh2u(lnworker.lnrater.suggest_peer() or b'')
if not nodeid:
remote_nodeid.setText(
"Please wait until the graph is synchronized to 30%.")
remote_nodeid.setText("")
remote_nodeid.setPlaceholderText(
"Please wait until the graph is synchronized to 30%, and then try again.")
else:
remote_nodeid.setText(nodeid)
remote_nodeid.repaint() # macOS hack for #6269

7
electrum/gui/qt/main_window.py

@ -74,7 +74,7 @@ from electrum.network import Network, TxBroadcastError, BestEffortRequestFailed,
from electrum.exchange_rate import FxThread
from electrum.simple_config import SimpleConfig
from electrum.logging import Logger
from electrum.lnutil import ln_dummy_address
from electrum.lnutil import ln_dummy_address, extract_nodeid, ConnStringFormatError
from electrum.lnaddr import lndecode, LnDecodeException
from .exception_window import Exception_Hook
@ -1757,6 +1757,11 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
return make_tx
def open_channel(self, connect_str, funding_sat, push_amt):
try:
extract_nodeid(connect_str)
except ConnStringFormatError as e:
self.main_window.show_error(str(e))
return
# use ConfirmTxDialog
# we need to know the fee before we broadcast, because the txid is required
make_tx = self.mktx_for_open_channel(funding_sat)

3
electrum/lnutil.py

@ -1203,7 +1203,8 @@ def extract_nodeid(connect_contents: str) -> Tuple[bytes, str]:
raise ConnStringFormatError(_('At least a hostname must be supplied after the at symbol.'))
try:
node_id = bfh(nodeid_hex)
assert len(node_id) == 33, len(node_id)
if len(node_id) != 33:
raise Exception()
except:
raise ConnStringFormatError(_('Invalid node ID, must be 33 bytes and hexadecimal'))
return node_id, rest

Loading…
Cancel
Save