tonly require libsecp256k1 if lightning is enabled - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 251db638af2f9c892a41af941b587729ba1c6771 DIR parent e5ff4fc7cd668f2422401291c886aa8b7fc5bc0d HTML Author: SomberNight <somber.night@protonmail.com> Date: Fri, 6 Sep 2019 15:08:15 +0200 only require libsecp256k1 if lightning is enabled related: #5606 Diffstat: M electrum/ecc_fast.py | 6 ++++-- M electrum/lnworker.py | 2 ++ M run_electrum | 12 +++++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) --- DIR diff --git a/electrum/ecc_fast.py b/electrum/ecc_fast.py t@@ -186,8 +186,10 @@ def _prepare_monkey_patching_of_python_ecdsa_internals_with_libsecp256k1(): def do_monkey_patching_of_python_ecdsa_internals_with_libsecp256k1(): if not _libsecp256k1: - raise Exception('libsecp256k1 library not available. ' - 'Verifying Lightning channels is too computationally expensive without libsecp256k1, aborting.') + # FIXME logging 'verbosity' is not yet initialised + _logger.info('libsecp256k1 library not available, falling back to python-ecdsa. ' + 'This means signing operations will be slower.') + return if not _patched_functions.prepared_to_patch: raise Exception("can't patch python-ecdsa without preparations") ecdsa.ecdsa.Private_key.sign = _patched_functions.fast_sign DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py t@@ -36,6 +36,7 @@ from .lntransport import LNTransport, LNResponderTransport from .lnpeer import Peer, LN_P2P_NETWORK_TIMEOUT from .lnaddr import lnencode, LnAddr, lndecode from .ecc import der_sig_from_sig_string +from .ecc_fast import is_using_fast_ecc from .lnchannel import Channel, ChannelJsonEncoder from . import lnutil from .lnutil import (Outpoint, calc_short_channel_id, LNPeerAddr, t@@ -251,6 +252,7 @@ class LNGossip(LNWorker): self.localfeatures |= LnLocalFeatures.GOSSIP_QUERIES_OPT self.localfeatures |= LnLocalFeatures.GOSSIP_QUERIES_REQ self.unknown_ids = set() + assert is_using_fast_ecc(), "verifying LN gossip msgs without libsecp256k1 is hopeless" def start_network(self, network: 'Network'): super().start_network(network) DIR diff --git a/run_electrum b/run_electrum t@@ -329,8 +329,6 @@ if __name__ == '__main__': # todo: defer this to gui config = SimpleConfig(config_options) - cmdname = config.get('cmd') - if config.get('testnet'): constants.set_testnet() elif config.get('regtest'): t@@ -338,7 +336,15 @@ if __name__ == '__main__': elif config.get('simnet'): constants.set_simnet() elif config.get('lightning') and not config.get('reckless'): - raise Exception('lightning branch not available on mainnet') + raise Exception('lightning option not available on mainnet') + + if config.get('lightning'): + from electrum.ecc_fast import is_using_fast_ecc + if not is_using_fast_ecc(): + raise Exception('libsecp256k1 library not available. ' + 'Verifying Lightning channels is too computationally expensive without libsecp256k1, aborting.') + + cmdname = config.get('cmd') if cmdname == 'daemon' and config.get("detach"): # fork before creating the asyncio event loop