Browse Source

only require libsecp256k1 if lightning is enabled

related: #5606
dependabot/pip/contrib/deterministic-build/ecdsa-0.13.3
SomberNight 5 years ago
parent
commit
251db638af
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 6
      electrum/ecc_fast.py
  2. 2
      electrum/lnworker.py
  3. 12
      run_electrum

6
electrum/ecc_fast.py

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

2
electrum/lnworker.py

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

12
run_electrum

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

Loading…
Cancel
Save