1#!/usr/local/bin/python3.8
2
3# A simple script that connects to a server and displays block headers
4
5import time
6import asyncio
7
8from electrum.network import Network
9from electrum.util import print_msg, json_encode, create_and_start_event_loop, log_exceptions
10from electrum.simple_config import SimpleConfig
11
12config = SimpleConfig()
13
14# start network
15loop, stopping_fut, loop_thread = create_and_start_event_loop()
16network = Network(config)
17network.start()
18
19# wait until connected
20while not network.is_connected():
21    time.sleep(1)
22    print_msg("waiting for network to get connected...")
23
24header_queue = asyncio.Queue()
25
26@log_exceptions
27async def f():
28    try:
29        await network.interface.session.subscribe('blockchain.headers.subscribe', [], header_queue)
30        # 3. wait for results
31        while network.is_connected():
32            header = await header_queue.get()
33            print_msg(json_encode(header))
34    finally:
35        stopping_fut.set_result(1)
36
37# 2. send the subscription
38asyncio.run_coroutine_threadsafe(f(), loop)
39