URI: 
       tuse gossip_timestamp_filter instead of request_initial_sync - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 133e5ec8c3e3ac9602b434986e8aa400d6863e4b
   DIR parent 864d9108883afa111ddaec5c3e3d4f4ba8382db3
  HTML Author: Janus <ysangkok@gmail.com>
       Date:   Tue, 27 Nov 2018 00:40:55 +0100
       
       use gossip_timestamp_filter instead of request_initial_sync
       
       Diffstat:
         M electrum/lnbase.py                  |       2 ++
         M electrum/lnworker.py                |      26 ++++++++++++++++++++++++++
         M electrum/tests/test_lnbase.py       |       1 +
       
       3 files changed, 29 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/electrum/lnbase.py b/electrum/lnbase.py
       t@@ -310,6 +310,8 @@ class Peer(PrintError):
                            raise LightningPeerConnectionClosed("remote does not have even flag {}"
                                                                .format(str(LnLocalFeatures(1 << flag))))
                        self.localfeatures ^= 1 << flag  # disable flag
       +        first_timestamp = self.lnworker.get_first_timestamp()
       +        self.send_message('gossip_timestamp_filter', chain_hash=constants.net.rev_genesis_bytes(), first_timestamp=first_timestamp, timestamp_range=b"\xff"*4)
                self.initialized.set_result(True)
        
            def on_channel_update(self, payload):
   DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py
       t@@ -47,9 +47,11 @@ if TYPE_CHECKING:
        NUM_PEERS_TARGET = 4
        PEER_RETRY_INTERVAL = 600  # seconds
        PEER_RETRY_INTERVAL_FOR_CHANNELS = 30  # seconds
       +GRAPH_DOWNLOAD_SECONDS = 600
        
        FALLBACK_NODE_LIST_TESTNET = (
            LNPeerAddr('ecdsa.net', 9735, bfh('038370f0e7a03eded3e1d41dc081084a87f0afa1c5b22090b4f3abb391eb15d8ff')),
       +    LNPeerAddr('165.227.30.200', 9735, bfh('023ea0a53af875580899da0ab0a21455d9c19160c4ea1b7774c9d4be6810b02d2c')),
        )
        FALLBACK_NODE_LIST_MAINNET = (
            LNPeerAddr('104.198.32.198', 9735, bfh('02f6725f9c1c40333b67faea92fd211c183050f28df32cac3f9d69685fe9665432')), # Blockstream
       t@@ -88,6 +90,30 @@ class LNWorker(PrintError):
                self.network.register_callback(self.on_network_update, ['wallet_updated', 'network_updated', 'verified', 'fee'])  # thread safe
                self.network.register_callback(self.on_channel_txo, ['channel_txo'])
                asyncio.run_coroutine_threadsafe(self.network.main_taskgroup.spawn(self.main_loop()), self.network.asyncio_loop)
       +        self.first_timestamp_requested = None
       +
       +    def get_first_timestamp(self):
       +        first_request = False
       +        if self.first_timestamp_requested is None:
       +            self.first_timestamp_requested = time.time()
       +            first_request = True
       +        first_timestamp = self.wallet.storage.get('lightning_gossip_until', 0)
       +        if first_timestamp == 0:
       +            self.print_error('requesting whole channel graph')
       +        else:
       +            self.print_error('requesting channel graph since', datetime.fromtimestamp(first_timestamp).ctime())
       +        if first_request:
       +            asyncio.run_coroutine_threadsafe(self.save_gossip_timestamp(), self.network.asyncio_loop)
       +        return first_timestamp
       +
       +    @log_exceptions
       +    async def save_gossip_timestamp(self):
       +        while True:
       +            await asyncio.sleep(GRAPH_DOWNLOAD_SECONDS)
       +            yesterday = int(time.time()) - 24*60*60 # now minus a day
       +            self.wallet.storage.put('lightning_gossip_until', yesterday)
       +            self.wallet.storage.write()
       +            self.print_error('saved lightning gossip timestamp')
        
            def payment_completed(self, chan, direction, htlc, preimage):
                chan_id = chan.channel_id
   DIR diff --git a/electrum/tests/test_lnbase.py b/electrum/tests/test_lnbase.py
       t@@ -107,6 +107,7 @@ class MockLNWorker:
            _check_invoice = staticmethod(LNWorker._check_invoice)
            _pay_to_route = LNWorker._pay_to_route
            force_close_channel = LNWorker.force_close_channel
       +    get_first_timestamp = lambda self: 0
        
        class MockTransport:
            def __init__(self):