URI: 
       tRead default server list from file. Update list with 1.1 servers. Remove nolnet option. - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 8c5b6bdaf3077d5855b69c71830296917d132931
   DIR parent dd2b7e4d89dcf0e61bb12bb1505fa30b0b8ead4c
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Tue, 12 Sep 2017 15:04:57 +0200
       
       Read default server list from file. Update list with 1.1 servers. Remove nolnet option.
       
       Diffstat:
         M electrum                            |       5 -----
         M lib/bitcoin.py                      |      30 ++++++++++++++++--------------
         M lib/commands.py                     |       1 -
         M lib/network.py                      |      60 ++++----------------------------
         A lib/servers.json                    |     231 +++++++++++++++++++++++++++++++
         A lib/servers_testnet.json            |       8 ++++++++
         M lib/simple_config.py                |       2 --
         M scripts/servers                     |      11 +++--------
       
       8 files changed, 264 insertions(+), 84 deletions(-)
       ---
   DIR diff --git a/electrum b/electrum
       t@@ -355,11 +355,6 @@ if __name__ == '__main__':
        
            if config.get('testnet'):
                bitcoin.set_testnet()
       -        network.set_testnet()
       -
       -    if config.get('nolnet'):
       -        bitcoin.set_nolnet()
       -        network.set_nolnet()
        
            # run non-RPC commands separately
            if cmdname in ['create', 'restore']:
   DIR diff --git a/lib/bitcoin.py b/lib/bitcoin.py
       t@@ -28,6 +28,7 @@ import base64
        import re
        import hmac
        import os
       +import json
        
        import ecdsa
        import pyaes
       t@@ -37,6 +38,14 @@ from . import version
        from .util import print_error, InvalidPassword, assert_bytes, to_bytes
        from . import segwit_addr
        
       +def read_json_dict(filename):
       +    path = os.path.join(os.path.dirname(__file__), filename)
       +    try:
       +        r = json.loads(open(path, 'r').read())
       +    except:
       +        r = {}
       +    return r
       +
        
        # Bitcoin network constants
        TESTNET = False
       t@@ -48,6 +57,9 @@ XPRV_HEADER = 0x0488ade4
        XPUB_HEADER = 0x0488b21e
        HEADERS_URL = "https://headers.electrum.org/blockchain_headers"
        GENESIS = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
       +SERVERLIST = 'servers.json'
       +DEFAULT_PORTS = {'t':'50001', 's':'50002'}
       +DEFAULT_SERVERS = read_json_dict('servers.json')
        
        def set_testnet():
            global ADDRTYPE_P2PKH, ADDRTYPE_P2SH
       t@@ -55,6 +67,7 @@ def set_testnet():
            global TESTNET, HEADERS_URL
            global GENESIS
            global SEGWIT_HRP
       +    global DEFAULT_PORTS, SERVERLIST
            TESTNET = True
            ADDRTYPE_P2PKH = 111
            ADDRTYPE_P2SH = 196
       t@@ -63,20 +76,9 @@ def set_testnet():
            XPUB_HEADER = 0x043587cf
            HEADERS_URL = "https://headers.electrum.org/testnet_headers"
            GENESIS = "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"
       -
       -def set_nolnet():
       -    global ADDRTYPE_P2PKH, ADDRTYPE_P2SH
       -    global XPRV_HEADER, XPUB_HEADER
       -    global NOLNET, HEADERS_URL
       -    global GENESIS
       -    TESTNET = True
       -    ADDRTYPE_P2PKH = 0
       -    ADDRTYPE_P2SH = 5
       -    XPRV_HEADER = 0x0488ade4
       -    XPUB_HEADER = 0x0488b21e
       -    HEADERS_URL = "https://headers.electrum.org/nolnet_headers"
       -    GENESIS = "663c88be18d07c45f87f910b93a1a71ed9ef1946cad50eb6a6f3af4c424625c6"
       -
       +    SERVERLIST = 'servers_testnet.json'
       +    DEFAULT_PORTS = {'t':'51001', 's':'51002'}
       +    DEFAULT_SERVERS = read_json_dict('servers_testnet.json')
        
        
        ################################## transactions
   DIR diff --git a/lib/commands.py b/lib/commands.py
       t@@ -826,7 +826,6 @@ def add_global_options(parser):
            group.add_argument("-w", "--wallet", dest="wallet_path", help="wallet path")
            group.add_argument("--testnet", action="store_true", dest="testnet", default=False, help="Use Testnet")
            group.add_argument("--segwit", action="store_true", dest="segwit", default=False, help="The Wizard will create Segwit seed phrases (Testnet only).")
       -    group.add_argument("--nolnet", action="store_true", dest="nolnet", default=False, help="Use Nolnet")
        
        def get_parser():
            # create main parser
   DIR diff --git a/lib/network.py b/lib/network.py
       t@@ -1,3 +1,4 @@
       +
        # Electrum - Lightweight Bitcoin Client
        # Copyright (c) 2011-2016 Thomas Voegtlin
        #
       t@@ -35,7 +36,6 @@ import select
        import traceback
        from collections import defaultdict, deque
        import threading
       -
        import socket
        import json
        
       t@@ -47,54 +47,6 @@ from .interface import Connection, Interface
        from . import blockchain
        from .version import ELECTRUM_VERSION, PROTOCOL_VERSION
        
       -DEFAULT_PORTS = {'t':'50001', 's':'50002'}
       -
       -#There is a schedule to move the default list to e-x (electrumx) by Jan 2018
       -#Schedule is as follows:
       -#move ~3/4 to e-x by 1.4.17
       -#then gradually switch remaining nodes to e-x nodes
       -
       -DEFAULT_SERVERS = {
       -    'erbium1.sytes.net':DEFAULT_PORTS,                  # core, e-x
       -    'ecdsa.net':{'t':'50001', 's':'110'},               # core, e-x
       -    'gh05.geekhosters.com':DEFAULT_PORTS,               # core, e-s
       -    'VPS.hsmiths.com':DEFAULT_PORTS,                    # core, e-x
       -    'electrum.anduck.net':DEFAULT_PORTS,                # core, e-s; banner with version pending
       -    'electrum.no-ip.org':DEFAULT_PORTS,                 # core, e-s
       -    'electrum.be':DEFAULT_PORTS,                        # core, e-x
       -    'helicarrier.bauerj.eu':DEFAULT_PORTS,              # core, e-x
       -    'elex01.blackpole.online':DEFAULT_PORTS,            # core, e-x
       -    'electrumx.not.fyi':DEFAULT_PORTS,                  # core, e-x
       -    'node.xbt.eu':DEFAULT_PORTS,                        # core, e-x
       -    'kirsche.emzy.de':DEFAULT_PORTS,                    # core, e-x
       -    'electrum.villocq.com':DEFAULT_PORTS,               # core?, e-s; banner with version recommended
       -    'us11.einfachmalnettsein.de':DEFAULT_PORTS,         # core, e-x
       -    'electrum.trouth.net':DEFAULT_PORTS,                # BU, e-s
       -    'Electrum.hsmiths.com':{'t':'8080', 's':'995'},     # core, e-x
       -    'electrum3.hachre.de':DEFAULT_PORTS,                # core, e-x
       -    'b.1209k.com':DEFAULT_PORTS,                        # XT, jelectrum
       -    'elec.luggs.co':{ 's':'443'},                       # core, e-x
       -    'btc.smsys.me':{'t':'110', 's':'995'},              # BU, e-x
       -}
       -
       -def set_testnet():
       -    global DEFAULT_PORTS, DEFAULT_SERVERS
       -    DEFAULT_PORTS = {'t':'51001', 's':'51002'}
       -    DEFAULT_SERVERS = {
       -        'testnetnode.arihanc.com': DEFAULT_PORTS,
       -        'testnet1.bauerj.eu': DEFAULT_PORTS,
       -        '14.3.140.101': DEFAULT_PORTS,
       -        'testnet.hsmiths.com': {'t':'53011', 's':'53012'},
       -        'electrum.akinbo.org': DEFAULT_PORTS,
       -        'ELEX05.blackpole.online': {'t':'52011', 's':'52002'},
       -    }
       -
       -def set_nolnet():
       -    global DEFAULT_PORTS, DEFAULT_SERVERS
       -    DEFAULT_PORTS = {'t':'52001', 's':'52002'}
       -    DEFAULT_SERVERS = {
       -        '14.3.140.101': DEFAULT_PORTS,
       -    }
        
        NODES_RETRY_INTERVAL = 60
        SERVER_RETRY_INTERVAL = 10
       t@@ -401,11 +353,10 @@ class Network(util.DaemonThread):
                return list(self.interfaces.keys())
        
            def get_servers(self):
       +        out = DEFAULT_SERVERS
                if self.irc_servers:
       -            out = self.irc_servers.copy()
       -            out.update(DEFAULT_SERVERS)
       +            out.update(filter_version(self.irc_servers.copy()))
                else:
       -            out = DEFAULT_SERVERS
                    for s in self.recent_servers:
                        try:
                            host, port, protocol = deserialize_server(s)
       t@@ -510,7 +461,8 @@ class Network(util.DaemonThread):
                '''Switch to a random connected server other than the current one'''
                servers = self.get_interfaces()    # Those in connected state
                if self.default_server in servers:
       -            servers.remove(self.default_server)
       +            servers.remov
       +            e(self.default_server)
                if servers:
                    self.switch_to_interface(random.choice(servers))
        
       t@@ -577,7 +529,7 @@ class Network(util.DaemonThread):
                        self.on_notify_header(interface, result)
                elif method == 'server.peers.subscribe':
                    if error is None:
       -                self.irc_servers = filter_version(parse_servers(result))
       +                self.irc_servers = parse_servers(result)
                        self.notify('servers')
                elif method == 'server.banner':
                    if error is None:
   DIR diff --git a/lib/servers.json b/lib/servers.json
       t@@ -0,0 +1,231 @@
       +{
       +    "E-X.not.fyi": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "ELECTRUMX.not.fyi": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "ELEX01.blackpole.online": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "VPS.hsmiths.com": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "bitcoin.freedomnode.com": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "btc.smsys.me": {
       +        "pruning": "-",
       +        "s": "995",
       +        "version": "1.1"
       +    },
       +    "currentlane.lovebitco.in": {
       +        "pruning": "-",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "daedalus.bauerj.eu": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "de01.hamster.science": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "ecdsa.net": {
       +        "pruning": "-",
       +        "s": "110",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "elec.luggs.co": {
       +        "pruning": "-",
       +        "s": "443",
       +        "version": "1.1"
       +    },
       +    "electrum.akinbo.org": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum.antumbra.se": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum.be": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum.coinucopia.io": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum.cutie.ga": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum.festivaldelhumor.org": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum.hsmiths.com": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum.qtornado.com": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum.vom-stausee.de": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrum3.hachre.de": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrumx.bot.nu": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "electrumx.westeurope.cloudapp.azure.com": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "elx01.knas.systems": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "ex-btc.server-on.net": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "helicarrier.bauerj.eu": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "mooo.not.fyi": {
       +        "pruning": "-",
       +        "s": "50012",
       +        "t": "50011",
       +        "version": "1.1"
       +    },
       +    "ndnd.selfhost.eu": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "node.arihanc.com": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "node.xbt.eu": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "node1.volatilevictory.com": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "noserver4u.de": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "qmebr.spdns.org": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "raspi.hsmiths.com": {
       +        "pruning": "-",
       +        "s": "51002",
       +        "t": "51001",
       +        "version": "1.1"
       +    },
       +    "s2.noip.pl": {
       +        "pruning": "-",
       +        "s": "50102",
       +        "version": "1.1"
       +    },
       +    "s5.noip.pl": {
       +        "pruning": "-",
       +        "s": "50105",
       +        "version": "1.1"
       +    },
       +    "songbird.bauerj.eu": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "us.electrum.be": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    },
       +    "us01.hamster.science": {
       +        "pruning": "-",
       +        "s": "50002",
       +        "t": "50001",
       +        "version": "1.1"
       +    }
       +}
   DIR diff --git a/lib/servers_testnet.json b/lib/servers_testnet.json
       t@@ -0,0 +1,8 @@
       +{
       +        'testnetnode.arihanc.com': {'t':'51001', 's':'51002'},
       +        'testnet1.bauerj.eu': {'t':'51001', 's':'51002'},
       +        '14.3.140.101': {'t':'51001', 's':'51002'},
       +        'testnet.hsmiths.com': {'t':'53011', 's':'53012'},
       +        'electrum.akinbo.org': {'t':'51001', 's':'51002'},
       +        'ELEX05.blackpole.online': {'t':'52011', 's':'52002'},
       +}
   DIR diff --git a/lib/simple_config.py b/lib/simple_config.py
       t@@ -87,8 +87,6 @@ class SimpleConfig(PrintError):
        
                if self.get('testnet'):
                    path = os.path.join(path, 'testnet')
       -        elif self.get('nolnet'):
       -            path = os.path.join(path, 'nolnet')
        
                # Make directory if it does not yet exist.
                if not os.path.exists(path):
   DIR diff --git a/scripts/servers b/scripts/servers
       t@@ -1,14 +1,9 @@
        #!/usr/bin/env python3
        
        from electrum import set_verbosity
       -from electrum.network import filter_protocol
       -
       +from electrum.network import filter_version
        import util, json
        set_verbosity(False)
        
       -
       -servers = util.get_peers()
       -
       -for k, v in sorted(servers.items(), key=lambda x:x[1].get('version')):
       -    print("%40s"%k, v.get('version'))
       -
       +servers = filter_version(util.get_peers())
       +print(json.dumps(servers, sort_keys = True, indent = 4))