Browse Source

clean-up Peer init

regtest_lnd
SomberNight 6 years ago
parent
commit
b901986d80
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 10
      electrum/lnbase.py
  2. 3
      electrum/lntransport.py
  3. 16
      electrum/lnworker.py

10
electrum/lnbase.py

@ -34,6 +34,7 @@ from .lnutil import (Outpoint, LocalConfig, ChannelConfig,
get_ln_flag_pair_of_bit, privkey_to_pubkey) get_ln_flag_pair_of_bit, privkey_to_pubkey)
from .lnutil import LightningPeerConnectionClosed, HandshakeFailed from .lnutil import LightningPeerConnectionClosed, HandshakeFailed
from .lnrouter import NotFoundChanAnnouncementForUpdate, RouteEdge from .lnrouter import NotFoundChanAnnouncementForUpdate, RouteEdge
from .lntransport import LNTransport
def channel_id_from_funding_tx(funding_txid, funding_index): def channel_id_from_funding_tx(funding_txid, funding_index):
@ -190,9 +191,9 @@ def gen_msg(msg_type: str, **kwargs) -> bytes:
class Peer(PrintError): class Peer(PrintError):
def __init__(self, lnworker, peer_addr, request_initial_sync=False): def __init__(self, lnworker, peer_addr, request_initial_sync=False, transport=None):
self.initialized = asyncio.Future() self.initialized = asyncio.Future()
self.transport = None self.transport = transport
self.peer_addr = peer_addr self.peer_addr = peer_addr
self.lnworker = lnworker self.lnworker = lnworker
self.privkey = lnworker.node_keypair.privkey self.privkey = lnworker.node_keypair.privkey
@ -222,6 +223,11 @@ class Peer(PrintError):
self.transport.send_bytes(gen_msg(message_name, **kwargs)) self.transport.send_bytes(gen_msg(message_name, **kwargs))
async def initialize(self): async def initialize(self):
if not self.transport:
reader, writer = await asyncio.open_connection(self.peer_addr.host, self.peer_addr.port)
transport = LNTransport(self.privkey, self.peer_addr.pubkey, reader, writer)
await transport.handshake()
self.transport = transport
self.send_message("init", gflen=0, lflen=1, localfeatures=self.localfeatures) self.send_message("init", gflen=0, lflen=1, localfeatures=self.localfeatures)
self.initialized.set_result(True) self.initialized.set_result(True)

3
electrum/lntransport.py

@ -6,6 +6,7 @@ from .crypto import sha256
from .lnutil import get_ecdh, privkey_to_pubkey from .lnutil import get_ecdh, privkey_to_pubkey
from .lnutil import LightningPeerConnectionClosed, HandshakeFailed from .lnutil import LightningPeerConnectionClosed, HandshakeFailed
from . import ecc from . import ecc
from .util import bh2u
class HandshakeState(object): class HandshakeState(object):
prologue = b"lightning" prologue = b"lightning"
@ -203,7 +204,7 @@ class LNTransport(LNTransportBase):
self.writer.write(msg) self.writer.write(msg)
rspns = await self.reader.read(2**10) rspns = await self.reader.read(2**10)
if len(rspns) != 50: if len(rspns) != 50:
raise HandshakeFailed("Lightning handshake act 1 response has bad length, are you sure this is the right pubkey? " + str(bh2u(self.pubkey))) raise HandshakeFailed(f"Lightning handshake act 1 response has bad length, are you sure this is the right pubkey? {bh2u(self.remote_pubkey)}")
hver, alice_epub, tag = rspns[0], rspns[1:34], rspns[34:] hver, alice_epub, tag = rspns[0], rspns[1:34], rspns[34:]
if bytes([hver]) != hs.handshake_version: if bytes([hver]) != hs.handshake_version:
raise HandshakeFailed("unexpected handshake version: {}".format(hver)) raise HandshakeFailed("unexpected handshake version: {}".format(hver))

16
electrum/lnworker.py

@ -16,7 +16,7 @@ from . import bitcoin
from .keystore import BIP32_KeyStore from .keystore import BIP32_KeyStore
from .bitcoin import sha256, COIN from .bitcoin import sha256, COIN
from .util import bh2u, bfh, PrintError, InvoiceError, resolve_dns_srv, is_ip_address, log_exceptions from .util import bh2u, bfh, PrintError, InvoiceError, resolve_dns_srv, is_ip_address, log_exceptions
from .lntransport import LNTransport, LNResponderTransport from .lntransport import LNResponderTransport
from .lnbase import Peer from .lnbase import Peer
from .lnaddr import lnencode, LnAddr, lndecode from .lnaddr import lnencode, LnAddr, lndecode
from .ecc import der_sig_from_sig_string from .ecc import der_sig_from_sig_string
@ -116,13 +116,7 @@ class LNWorker(PrintError):
self._last_tried_peer[peer_addr] = time.time() self._last_tried_peer[peer_addr] = time.time()
self.print_error("adding peer", peer_addr) self.print_error("adding peer", peer_addr)
peer = Peer(self, peer_addr, request_initial_sync=self.config.get("request_initial_sync", True)) peer = Peer(self, peer_addr, request_initial_sync=self.config.get("request_initial_sync", True))
async def _init_peer(): await self.network.main_taskgroup.spawn(peer.main_loop())
reader, writer = await asyncio.open_connection(peer_addr.host, peer_addr.port)
transport = LNTransport(self.node_keypair.privkey, node_id, reader, writer)
await transport.handshake()
peer.transport = transport
await self.network.main_taskgroup.spawn(peer.main_loop())
asyncio.ensure_future(_init_peer())
self.peers[node_id] = peer self.peers[node_id] = peer
self.network.trigger_callback('ln_status') self.network.trigger_callback('ln_status')
return peer return peer
@ -525,8 +519,10 @@ class LNWorker(PrintError):
async def cb(reader, writer): async def cb(reader, writer):
t = LNResponderTransport(self.node_keypair.privkey, reader, writer) t = LNResponderTransport(self.node_keypair.privkey, reader, writer)
node_id = await t.handshake() node_id = await t.handshake()
peer = Peer(self, LNPeerAddr("bogus", 1337, node_id), request_initial_sync=self.config.get("request_initial_sync", True)) # FIXME extract host and port from transport
peer.transport = t peer = Peer(self, LNPeerAddr("bogus", 1337, node_id),
request_initial_sync=self.config.get("request_initial_sync", True),
transport=t)
self.peers[node_id] = peer self.peers[node_id] = peer
await self.network.main_taskgroup.spawn(peer.main_loop()) await self.network.main_taskgroup.spawn(peer.main_loop())
self.network.trigger_callback('ln_status') self.network.trigger_callback('ln_status')

Loading…
Cancel
Save