URI: 
       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