1
0

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
This commit is contained in:
SomberNight
2020-11-13 19:21:37 +01:00
parent 46e59d18f5
commit c872c3194f
3 changed files with 11 additions and 4 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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