From 9bef4a532236242e26a73edc25994e469684f553 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 27 Jan 2025 13:40:41 +0000 Subject: [PATCH 1/2] constants: move mainnet/testnet/regtest-specific json files to chains/ note: I find "chains" less ambiguous than "networks" or "net". Though the codebase already uses "net"/"network" for the same meaning, e.g. see `electrum.constants.net` or the `getinfo` cmd dict containing a "network" key.. :/ --- electrum/{ => chains}/checkpoints.json | 0 .../{ => chains}/checkpoints_testnet.json | 0 .../{ => chains}/checkpoints_testnet4.json | 0 .../fallback_lnnodes_mainnet.json | 0 .../{ => chains}/fallback_lnnodes_signet.json | 0 .../fallback_lnnodes_testnet3.json | 0 electrum/{ => chains}/servers.json | 0 electrum/{ => chains}/servers_regtest.json | 0 electrum/{ => chains}/servers_signet.json | 0 electrum/{ => chains}/servers_testnet.json | 0 electrum/{ => chains}/servers_testnet4.json | 0 electrum/constants.py | 26 +++++++++---------- 12 files changed, 13 insertions(+), 13 deletions(-) rename electrum/{ => chains}/checkpoints.json (100%) rename electrum/{ => chains}/checkpoints_testnet.json (100%) rename electrum/{ => chains}/checkpoints_testnet4.json (100%) rename electrum/{ => chains}/fallback_lnnodes_mainnet.json (100%) rename electrum/{ => chains}/fallback_lnnodes_signet.json (100%) rename electrum/{ => chains}/fallback_lnnodes_testnet3.json (100%) rename electrum/{ => chains}/servers.json (100%) rename electrum/{ => chains}/servers_regtest.json (100%) rename electrum/{ => chains}/servers_signet.json (100%) rename electrum/{ => chains}/servers_testnet.json (100%) rename electrum/{ => chains}/servers_testnet4.json (100%) diff --git a/electrum/checkpoints.json b/electrum/chains/checkpoints.json similarity index 100% rename from electrum/checkpoints.json rename to electrum/chains/checkpoints.json diff --git a/electrum/checkpoints_testnet.json b/electrum/chains/checkpoints_testnet.json similarity index 100% rename from electrum/checkpoints_testnet.json rename to electrum/chains/checkpoints_testnet.json diff --git a/electrum/checkpoints_testnet4.json b/electrum/chains/checkpoints_testnet4.json similarity index 100% rename from electrum/checkpoints_testnet4.json rename to electrum/chains/checkpoints_testnet4.json diff --git a/electrum/fallback_lnnodes_mainnet.json b/electrum/chains/fallback_lnnodes_mainnet.json similarity index 100% rename from electrum/fallback_lnnodes_mainnet.json rename to electrum/chains/fallback_lnnodes_mainnet.json diff --git a/electrum/fallback_lnnodes_signet.json b/electrum/chains/fallback_lnnodes_signet.json similarity index 100% rename from electrum/fallback_lnnodes_signet.json rename to electrum/chains/fallback_lnnodes_signet.json diff --git a/electrum/fallback_lnnodes_testnet3.json b/electrum/chains/fallback_lnnodes_testnet3.json similarity index 100% rename from electrum/fallback_lnnodes_testnet3.json rename to electrum/chains/fallback_lnnodes_testnet3.json diff --git a/electrum/servers.json b/electrum/chains/servers.json similarity index 100% rename from electrum/servers.json rename to electrum/chains/servers.json diff --git a/electrum/servers_regtest.json b/electrum/chains/servers_regtest.json similarity index 100% rename from electrum/servers_regtest.json rename to electrum/chains/servers_regtest.json diff --git a/electrum/servers_signet.json b/electrum/chains/servers_signet.json similarity index 100% rename from electrum/servers_signet.json rename to electrum/chains/servers_signet.json diff --git a/electrum/servers_testnet.json b/electrum/chains/servers_testnet.json similarity index 100% rename from electrum/servers_testnet.json rename to electrum/chains/servers_testnet.json diff --git a/electrum/servers_testnet4.json b/electrum/chains/servers_testnet4.json similarity index 100% rename from electrum/servers_testnet4.json rename to electrum/chains/servers_testnet4.json diff --git a/electrum/constants.py b/electrum/constants.py index 869dc3e30..a8782371d 100644 --- a/electrum/constants.py +++ b/electrum/constants.py @@ -104,9 +104,9 @@ class BitcoinMainnet(AbstractNet): BOLT11_HRP = SEGWIT_HRP GENESIS = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" DEFAULT_PORTS = {'t': '50001', 's': '50002'} - DEFAULT_SERVERS = read_json('servers.json', {}) - FALLBACK_LN_NODES = create_fallback_node_list(read_json('fallback_lnnodes_mainnet.json', {})) - CHECKPOINTS = read_json('checkpoints.json', []) + DEFAULT_SERVERS = read_json(os.path.join('chains', 'servers.json'), {}) + FALLBACK_LN_NODES = create_fallback_node_list(read_json(os.path.join('chains', 'fallback_lnnodes_mainnet.json'), {})) + CHECKPOINTS = read_json(os.path.join('chains', 'checkpoints.json'), []) BLOCK_HEIGHT_FIRST_LIGHTNING_CHANNELS = 497000 XPRV_HEADERS = { @@ -145,9 +145,9 @@ class BitcoinTestnet(AbstractNet): BOLT11_HRP = SEGWIT_HRP GENESIS = "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943" DEFAULT_PORTS = {'t': '51001', 's': '51002'} - DEFAULT_SERVERS = read_json('servers_testnet.json', {}) - FALLBACK_LN_NODES = create_fallback_node_list(read_json('fallback_lnnodes_testnet3.json', {})) - CHECKPOINTS = read_json('checkpoints_testnet.json', []) + DEFAULT_SERVERS = read_json(os.path.join('chains', 'servers_testnet.json'), {}) + FALLBACK_LN_NODES = create_fallback_node_list(read_json(os.path.join('chains', 'fallback_lnnodes_testnet3.json'), {})) + CHECKPOINTS = read_json(os.path.join('chains', 'checkpoints_testnet.json'), []) XPRV_HEADERS = { 'standard': 0x04358394, # tprv @@ -177,9 +177,9 @@ class BitcoinTestnet4(BitcoinTestnet): NET_NAME = "testnet4" GENESIS = "00000000da84f2bafbbc53dee25a72ae507ff4914b867c565be350b0da8bf043" - DEFAULT_SERVERS = read_json('servers_testnet4.json', {}) - FALLBACK_LN_NODES = create_fallback_node_list(read_json('fallback_lnnodes_testnet4.json', {})) - CHECKPOINTS = read_json('checkpoints_testnet4.json', []) + DEFAULT_SERVERS = read_json(os.path.join('chains', 'servers_testnet4.json'), {}) + FALLBACK_LN_NODES = create_fallback_node_list(read_json(os.path.join('chains', 'fallback_lnnodes_testnet4.json'), {})) + CHECKPOINTS = read_json(os.path.join('chains', 'checkpoints_testnet4.json'), []) LN_DNS_SEEDS = [] @@ -189,7 +189,7 @@ class BitcoinRegtest(BitcoinTestnet): SEGWIT_HRP = "bcrt" BOLT11_HRP = SEGWIT_HRP GENESIS = "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206" - DEFAULT_SERVERS = read_json('servers_regtest.json', {}) + DEFAULT_SERVERS = read_json(os.path.join('chains', 'servers_regtest.json'), {}) FALLBACK_LN_NODES = [] CHECKPOINTS = [] LN_DNS_SEEDS = [] @@ -204,7 +204,7 @@ class BitcoinSimnet(BitcoinTestnet): SEGWIT_HRP = "sb" BOLT11_HRP = SEGWIT_HRP GENESIS = "683e86bd5c6d110d91b94b97137ba6bfe02dbbdb8e3dff722a669b5d69d77af6" - DEFAULT_SERVERS = read_json('servers_regtest.json', {}) + DEFAULT_SERVERS = read_json(os.path.join('chains', 'servers_regtest.json'), {}) FALLBACK_LN_NODES = [] CHECKPOINTS = [] LN_DNS_SEEDS = [] @@ -215,8 +215,8 @@ class BitcoinSignet(BitcoinTestnet): NET_NAME = "signet" BOLT11_HRP = "tbs" GENESIS = "00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6" - DEFAULT_SERVERS = read_json('servers_signet.json', {}) - FALLBACK_LN_NODES = create_fallback_node_list(read_json('fallback_lnnodes_signet.json', {})) + DEFAULT_SERVERS = read_json(os.path.join('chains', 'servers_signet.json'), {}) + FALLBACK_LN_NODES = create_fallback_node_list(read_json(os.path.join('chains', 'fallback_lnnodes_signet.json'), {})) CHECKPOINTS = [] LN_DNS_SEEDS = [] From 172c3721bd4306ff7d206659fbbb4c06d039cd4b Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 27 Jan 2025 14:21:34 +0000 Subject: [PATCH 2/2] follow-up prev: include chains/ folder in win and mac binaries --- contrib/build-wine/deterministic.spec | 1 + contrib/osx/osx.spec | 1 + electrum/constants.py | 14 +++++++++----- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/contrib/build-wine/deterministic.spec b/contrib/build-wine/deterministic.spec index 25607e23c..af5e65b58 100644 --- a/contrib/build-wine/deterministic.spec +++ b/contrib/build-wine/deterministic.spec @@ -32,6 +32,7 @@ datas = [ (f"{PROJECT_ROOT}/{PYPKG}/lnwire/*.csv", f"{PYPKG}/lnwire"), (f"{PROJECT_ROOT}/{PYPKG}/wordlist/english.txt", f"{PYPKG}/wordlist"), (f"{PROJECT_ROOT}/{PYPKG}/wordlist/slip39.txt", f"{PYPKG}/wordlist"), + (f"{PROJECT_ROOT}/{PYPKG}/chains", f"{PYPKG}/chains"), (f"{PROJECT_ROOT}/{PYPKG}/locale", f"{PYPKG}/locale"), (f"{PROJECT_ROOT}/{PYPKG}/plugins", f"{PYPKG}/plugins"), (f"{PROJECT_ROOT}/{PYPKG}/gui/icons", f"{PYPKG}/gui/icons"), diff --git a/contrib/osx/osx.spec b/contrib/osx/osx.spec index 14eb6917b..3ab38bb34 100644 --- a/contrib/osx/osx.spec +++ b/contrib/osx/osx.spec @@ -35,6 +35,7 @@ datas = [ (f"{PROJECT_ROOT}/{PYPKG}/lnwire/*.csv", f"{PYPKG}/lnwire"), (f"{PROJECT_ROOT}/{PYPKG}/wordlist/english.txt", f"{PYPKG}/wordlist"), (f"{PROJECT_ROOT}/{PYPKG}/wordlist/slip39.txt", f"{PYPKG}/wordlist"), + (f"{PROJECT_ROOT}/{PYPKG}/chains", f"{PYPKG}/chains"), (f"{PROJECT_ROOT}/{PYPKG}/locale", f"{PYPKG}/locale"), (f"{PROJECT_ROOT}/{PYPKG}/plugins", f"{PYPKG}/plugins"), (f"{PROJECT_ROOT}/{PYPKG}/gui/icons", f"{PYPKG}/gui/icons"), diff --git a/electrum/constants.py b/electrum/constants.py index a8782371d..55c639e9c 100644 --- a/electrum/constants.py +++ b/electrum/constants.py @@ -32,12 +32,16 @@ from .util import inv_dict, all_subclasses from . import bitcoin -def read_json(filename, default): +def read_json(filename, default=None): path = os.path.join(os.path.dirname(__file__), filename) try: with open(path, 'r') as f: r = json.loads(f.read()) except Exception: + if default is None: + # Sometimes it's better to hard-fail: the file might be missing + # due to a packaging issue, which might otherwise go unnoticed. + raise r = default return r @@ -53,7 +57,7 @@ def create_fallback_node_list(fallback_nodes_dict: dict[str, dict]) -> List[LNPe GIT_REPO_URL = "https://github.com/spesmilo/electrum" GIT_REPO_ISSUES_URL = "https://github.com/spesmilo/electrum/issues" -BIP39_WALLET_FORMATS = read_json('bip39_wallet_formats.json', []) +BIP39_WALLET_FORMATS = read_json('bip39_wallet_formats.json') class AbstractNet: @@ -104,9 +108,9 @@ class BitcoinMainnet(AbstractNet): BOLT11_HRP = SEGWIT_HRP GENESIS = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" DEFAULT_PORTS = {'t': '50001', 's': '50002'} - DEFAULT_SERVERS = read_json(os.path.join('chains', 'servers.json'), {}) - FALLBACK_LN_NODES = create_fallback_node_list(read_json(os.path.join('chains', 'fallback_lnnodes_mainnet.json'), {})) - CHECKPOINTS = read_json(os.path.join('chains', 'checkpoints.json'), []) + DEFAULT_SERVERS = read_json(os.path.join('chains', 'servers.json')) + FALLBACK_LN_NODES = create_fallback_node_list(read_json(os.path.join('chains', 'fallback_lnnodes_mainnet.json'))) + CHECKPOINTS = read_json(os.path.join('chains', 'checkpoints.json')) BLOCK_HEIGHT_FIRST_LIGHTNING_CHANNELS = 497000 XPRV_HEADERS = {