integrate lnbase with network

This commit is contained in:
ThomasV 2018-04-11 11:02:10 +02:00 committed by Janus
parent 14d267b554
commit b64e97a68b
3 changed files with 43 additions and 15 deletions

View File

@ -855,7 +855,8 @@ def add_global_options(parser):
group.add_argument("--testnet", action="store_true", dest="testnet", default=False, help="Use Testnet")
group.add_argument("--regtest", action="store_true", dest="regtest", default=False, help="Use Regtest")
group.add_argument("--simnet", action="store_true", dest="simnet", default=False, help="Use Simnet")
group.add_argument("--lightning", action="store_true", dest="lightning", default=False, help="Enable Lightning support")
group.add_argument("--lightning", action="store_true", dest="lightning", default=False, help="Enable Lightning support via hub")
group.add_argument("--lnbase", action="store_true", dest="lnbase", default=False, help="Enable Lightning support")
def get_parser():
# create main parser

View File

@ -1090,16 +1090,27 @@ class Network(util.DaemonThread):
def run(self):
self.init_headers_file()
self.futures = []
loop = asyncio.new_event_loop()
networkAndWalletLock = QLock()
def asyncioThread():
asyncio.set_event_loop(loop)
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("lightning", False):
threading.Thread(target=asyncioThread).start()
if self.config.get("lightning", False):
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))
threading.Thread(target=asyncioThread).start()
networkAndWalletLock.acquire()
while self.is_running():
self.maintain_sockets()
@ -1109,12 +1120,14 @@ class Network(util.DaemonThread):
self.process_pending_sends()
networkAndWalletLock.release()
networkAndWalletLock.acquire()
# cancel tasks
[f.cancel for f in self.futures]
loop.stop()
if loop.is_running(): time.sleep(0.1)
try:
loop.close()
loop.close()
except:
pass
pass
self.stop_network()
self.on_stop()

View File

@ -18,6 +18,7 @@ import cryptography.hazmat.primitives.ciphers.aead as AEAD
from electrum.bitcoin import public_key_from_private_key, ser_to_point, point_to_ser, string_to_number
from electrum.bitcoin import int_to_hex, bfh, rev_hex
from electrum.util import PrintError
from electrum.wallet import Wallet
tcp_socket_timeout = 10
server_response_timeout = 60
@ -111,7 +112,6 @@ def gen_msg(msg_type, **kwargs):
data += param
return data
###############################
def decode(string):
@ -309,6 +309,9 @@ class Peer(PrintError):
elif message == 'channel_update':
pass
def open_channel(self):
pass
async def main_loop(self, loop):
self.reader, self.writer = await asyncio.open_connection(self.host, self.port, loop=loop)
await self.handshake()
@ -323,12 +326,20 @@ class Peer(PrintError):
msg = await self.read_message()
self.process_message(msg)
# close socket
self.print_error('closing lnbase')
self.writer.close()
# replacement for lightningCall
class LNWallet(Wallet):
def run(self):
loop = asyncio.get_event_loop()
loop.run_until_complete(self.main_loop(loop))
loop.close()
def __init__(self, wallet, peer):
self.wallet = wallet
self.peer = peer
def openchannel(self):
# todo: get utxo from wallet
self.peer.open_channel()
node_list = [
@ -346,4 +357,7 @@ if __name__ == "__main__":
port = int(port)
privkey = b"\x21"*32 + b"\x01"
peer = Peer(privkey, host, port, pubkey)
peer.run()
loop = asyncio.get_event_loop()
loop.run_until_complete(peer.main_loop(loop))
loop.close()