From 37d73c3165e361c32382d6a1b76a3775a1cd978e Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 12 Apr 2018 12:00:31 +0200 Subject: [PATCH] lnbase: expose wallet object in LNWorker --- lib/lnbase.py | 30 +++++++++++++----------------- lib/network.py | 14 ++------------ lib/wallet.py | 3 +++ 3 files changed, 18 insertions(+), 29 deletions(-) diff --git a/lib/lnbase.py b/lib/lnbase.py index f9548c61..079a08db 100644 --- a/lib/lnbase.py +++ b/lib/lnbase.py @@ -334,16 +334,13 @@ class Peer(PrintError): async def main_loop(self, loop): self.reader, self.writer = await asyncio.open_connection(self.host, self.port, loop=loop) await self.handshake() - # send init self.send_message(gen_msg("init", gflen=0, lflen=0)) - # read init msg = await self.read_message() self.process_message(msg) - + # initialized self.init_message_received_future.set_result(msg) - # loop while True: self.ping_if_required() @@ -355,9 +352,7 @@ class Peer(PrintError): async def channel_establishment_flow(self): await self.init_message_received_future - pubkeys = get_unused_public_keys() - temp_channel_id = os.urandom(32) msg = gen_msg("open_channel", temporary_channel_id=temp_channel_id, chain_hash=bytes.fromhex(rev_hex(constants.net.GENESIS)), funding_satoshis=20000, max_accepted_htlcs=5, funding_pubkey=next(pubkeys), revocation_basepoint=next(pubkeys), htlc_basepoint=next(pubkeys), payment_basepoint=next(pubkeys), delayed_payment_basepoint=next(pubkeys), first_per_commitment_point=next(pubkeys)) self.temporary_channel_id_to_incoming_accept_channel[temp_channel_id] = asyncio.Future() @@ -369,23 +364,24 @@ class Peer(PrintError): finally: del self.temporary_channel_id_to_incoming_accept_channel[temp_channel_id] - # check that it is in my pending requests - # I need to attach a wallet to each request - if ok: - tx = wallet.create_funding_tx() - wallet.sign(tx) - m = gen_msg('funding created', signature) - self.send_message(m) # replacement for lightningCall -class LNWallet(Wallet): - - def __init__(self, wallet, peer): +class LNWorker: + + def __init__(self, wallet, network): self.wallet = wallet - self.peer = peer + self.network = network + self.loop = network.asyncio_loop + host, port, pubkey = ('ecdsa.net', '9735', '038370f0e7a03eded3e1d41dc081084a87f0afa1c5b22090b4f3abb391eb15d8ff') + pubkey = binascii.unhexlify(pubkey) + port = int(port) + privkey = b"\x21"*32 + b"\x01" + self.peer = Peer(privkey, host, port, pubkey) + self.network.futures.append(asyncio.run_coroutine_threadsafe(self.peer.main_loop(self.loop), self.loop)) def openchannel(self): # todo: get utxo from wallet + # submit coro to asyncio main loop self.peer.open_channel() diff --git a/lib/network.py b/lib/network.py index 7e13bd47..21e4a7a9 100644 --- a/lib/network.py +++ b/lib/network.py @@ -1063,7 +1063,7 @@ class Network(util.DaemonThread): def run(self): self.init_headers_file() self.futures = [] - loop = asyncio.new_event_loop() + self.asyncio_loop = loop = asyncio.new_event_loop() networkAndWalletLock = QLock() def asyncioThread(): asyncio.set_event_loop(loop) @@ -1071,17 +1071,7 @@ class Network(util.DaemonThread): self.lightninglock.acquire() if self.lightningrpc is not None and self.lightningworker is not None: task = asyncio.ensure_future(asyncio.gather(self.lightningrpc.run(networkAndWalletLock), self.lightningworker.run(networkAndWalletLock))) - loop.run_forever() - if self.config.get('lnbase', False): - from .lnbase import Peer - import binascii - host, port, pubkey = ('ecdsa.net', '9735', '038370f0e7a03eded3e1d41dc081084a87f0afa1c5b22090b4f3abb391eb15d8ff') - pubkey = binascii.unhexlify(pubkey) - port = int(port) - privkey = b"\x21"*32 + b"\x01" - peer = Peer(privkey, host, port, pubkey) - self.futures.append(asyncio.run_coroutine_threadsafe(peer.main_loop(loop), loop)) - loop.run_forever() + loop.run_forever() threading.Thread(target=asyncioThread).start() networkAndWalletLock.acquire() diff --git a/lib/wallet.py b/lib/wallet.py index ea8d0302..4c45f2c5 100644 --- a/lib/wallet.py +++ b/lib/wallet.py @@ -1313,6 +1313,9 @@ class Abstract_Wallet(PrintError): network.lightningworker = LightningWorker(self, network, network.config) network.lightningrpc = LightningRPC() network.lightninglock.release() + if network.config.get("lnbase", False): + from .lnbase import LNWorker + self.lnworker = LNWorker(self, network) else: self.verifier = None self.synchronizer = None