From a78dfeda62da815937e751e0cce0c00d30976f7a Mon Sep 17 00:00:00 2001 From: wakiyamap Date: Sun, 2 May 2021 05:54:58 +0900 Subject: [PATCH 1/2] add signet support --- electrum/commands.py | 1 + electrum/constants.py | 18 +++++++++++++++++- electrum/gui/qt/main_window.py | 4 +++- electrum/servers_signet.json | 8 ++++++++ electrum/simple_config.py | 3 +++ electrum/trampoline.py | 10 ++++++++-- electrum/util.py | 19 ++++++++++++++++++- run_electrum | 2 ++ 8 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 electrum/servers_signet.json diff --git a/electrum/commands.py b/electrum/commands.py index 3159f4ed5c65..b17bb540b5fa 100644 --- a/electrum/commands.py +++ b/electrum/commands.py @@ -1400,6 +1400,7 @@ 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("--signet", action="store_true", dest="signet", default=False, help="Use Signet") group.add_argument("-o", "--offline", action="store_true", dest="offline", default=False, help="Run offline") def add_wallet_option(parser): diff --git a/electrum/constants.py b/electrum/constants.py index 6e5f7435e923..b31654e1b7cd 100644 --- a/electrum/constants.py +++ b/electrum/constants.py @@ -60,6 +60,7 @@ def rev_genesis_bytes(cls) -> bytes: class BitcoinMainnet(AbstractNet): + NET_NAME = "mainnet" TESTNET = False WIF_PREFIX = 0x80 ADDRTYPE_P2PKH = 0 @@ -98,6 +99,7 @@ class BitcoinMainnet(AbstractNet): class BitcoinTestnet(AbstractNet): + NET_NAME = "testnet" TESTNET = True WIF_PREFIX = 0xef ADDRTYPE_P2PKH = 111 @@ -134,6 +136,7 @@ class BitcoinTestnet(AbstractNet): class BitcoinRegtest(BitcoinTestnet): + NET_NAME = "regtest" SEGWIT_HRP = "bcrt" GENESIS = "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206" DEFAULT_SERVERS = read_json('servers_regtest.json', {}) @@ -143,6 +146,7 @@ class BitcoinRegtest(BitcoinTestnet): class BitcoinSimnet(BitcoinTestnet): + NET_NAME = "simnet" WIF_PREFIX = 0x64 ADDRTYPE_P2PKH = 0x3f ADDRTYPE_P2SH = 0x7b @@ -153,9 +157,22 @@ class BitcoinSimnet(BitcoinTestnet): LN_DNS_SEEDS = [] +class BitcoinSignet(BitcoinTestnet): + + NET_NAME = "signet" + GENESIS = "00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6" + DEFAULT_SERVERS = read_json('servers_signet.json', {}) + CHECKPOINTS = [] + LN_DNS_SEEDS = [] + + # don't import net directly, import the module instead (so that net is singleton) net = BitcoinMainnet +def set_signet(): + global net + net = BitcoinSignet + def set_simnet(): global net net = BitcoinSimnet @@ -168,7 +185,6 @@ def set_testnet(): global net net = BitcoinTestnet - def set_regtest(): global net net = BitcoinRegtest diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 7a607caab774..ac39a488436f 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -540,7 +540,9 @@ def init_geometry(self): self.setGeometry(100, 100, 840, 400) def watching_only_changed(self): - name = "Electrum Testnet" if constants.net.TESTNET else "Electrum" + name = "Electrum" + if constants.net.TESTNET: + name += " " + constants.net.NET_NAME.capitalize() title = '%s %s - %s' % (name, ELECTRUM_VERSION, self.wallet.basename()) extra = [self.wallet.db.get('wallet_type', '?')] diff --git a/electrum/servers_signet.json b/electrum/servers_signet.json new file mode 100644 index 000000000000..9eed859c17a0 --- /dev/null +++ b/electrum/servers_signet.json @@ -0,0 +1,8 @@ +{ + "signet-electrumx.wakiyamap.dev": { + "pruning": "-", + "s": "50002", + "t": "50001", + "version": "1.4" + } +} diff --git a/electrum/simple_config.py b/electrum/simple_config.py index 3ab248da71ff..96e313096504 100644 --- a/electrum/simple_config.py +++ b/electrum/simple_config.py @@ -128,6 +128,9 @@ def electrum_path(self): elif self.get('simnet'): path = os.path.join(path, 'simnet') make_dir(path, allow_symlink=False) + elif self.get('signet'): + path = os.path.join(path, 'signet') + make_dir(path, allow_symlink=False) self.logger.info(f"electrum directory {path}") return path diff --git a/electrum/trampoline.py b/electrum/trampoline.py index 07eed3ce88f1..59b4b4db7d0e 100644 --- a/electrum/trampoline.py +++ b/electrum/trampoline.py @@ -63,11 +63,17 @@ 'endurance': LNPeerAddr(host='34.250.234.192', port=9735, pubkey=bytes.fromhex('03933884aaf1d6b108397e5efe5c86bcf2d8ca8d2f700eda99db9214fc2712b134')), } +TRAMPOLINE_NODES_SIGNET = { + 'wakiyamap.dev': LNPeerAddr(host='signet-electrumx.wakiyamap.dev', port=9735, pubkey=bytes.fromhex('02dadf6c28f3284d591cd2a4189d1530c1ff82c07059ebea150a33ab76e7364b4a')), +} + def hardcoded_trampoline_nodes(): - if constants.net in (constants.BitcoinMainnet,): + if constants.net.NET_NAME is "mainnet": return TRAMPOLINE_NODES_MAINNET - if constants.net in (constants.BitcoinTestnet,): + if constants.net.NET_NAME is "testnet": return TRAMPOLINE_NODES_TESTNET + if constants.net.NET_NAME is "signet": + return TRAMPOLINE_NODES_SIGNET return {} def trampolines_by_id(): diff --git a/electrum/util.py b/electrum/util.py index 8fb9ca0d6c03..b00db7f8189c 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -804,12 +804,29 @@ def time_difference(distance_in_time, include_seconds): {'tx': 'tx/', 'addr': 'address/'}), } +signet_block_explorers = { + 'bc-2.jp': ('https://explorer.bc-2.jp/', + {'tx': 'tx/', 'addr': 'address/'}), + 'mempool.space': ('https://mempool.space/signet/', + {'tx': 'tx/', 'addr': 'address/'}), + 'bitcoinexplorer.org': ('https://signet.bitcoinexplorer.org/', + {'tx': 'tx/', 'addr': 'address/'}), + 'wakiyamap.dev': ('https://signet-explorer.wakiyamap.dev/', + {'tx': 'tx/', 'addr': 'address/'}), + 'system default': ('blockchain:/', + {'tx': 'tx/', 'addr': 'address/'}), +} + _block_explorer_default_api_loc = {'tx': 'tx/', 'addr': 'address/'} def block_explorer_info(): from . import constants - return mainnet_block_explorers if not constants.net.TESTNET else testnet_block_explorers + if constants.net.NET_NAME is "testnet": + return testnet_block_explorers + elif constants.net.NET_NAME is "signet": + return signet_block_explorers + return mainnet_block_explorers def block_explorer(config: 'SimpleConfig') -> Optional[str]: diff --git a/run_electrum b/run_electrum index c44650a3a0eb..a00c7a1f605b 100755 --- a/run_electrum +++ b/run_electrum @@ -366,6 +366,8 @@ def main(): constants.set_regtest() elif config.get('simnet'): constants.set_simnet() + elif config.get('signet'): + constants.set_signet() cmdname = config.get('cmd') From 65a8eaeb712623d17ee3872140465067540d3ca2 Mon Sep 17 00:00:00 2001 From: wakiyamap Date: Sun, 2 May 2021 06:33:12 +0900 Subject: [PATCH 2/2] Fix lint error (is -> ==) --- electrum/trampoline.py | 6 +++--- electrum/util.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/electrum/trampoline.py b/electrum/trampoline.py index 59b4b4db7d0e..f49f6fbdada0 100644 --- a/electrum/trampoline.py +++ b/electrum/trampoline.py @@ -68,11 +68,11 @@ } def hardcoded_trampoline_nodes(): - if constants.net.NET_NAME is "mainnet": + if constants.net.NET_NAME == "mainnet": return TRAMPOLINE_NODES_MAINNET - if constants.net.NET_NAME is "testnet": + if constants.net.NET_NAME == "testnet": return TRAMPOLINE_NODES_TESTNET - if constants.net.NET_NAME is "signet": + if constants.net.NET_NAME == "signet": return TRAMPOLINE_NODES_SIGNET return {} diff --git a/electrum/util.py b/electrum/util.py index b00db7f8189c..263b1003cc52 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -822,9 +822,9 @@ def time_difference(distance_in_time, include_seconds): def block_explorer_info(): from . import constants - if constants.net.NET_NAME is "testnet": + if constants.net.NET_NAME == "testnet": return testnet_block_explorers - elif constants.net.NET_NAME is "signet": + elif constants.net.NET_NAME == "signet": return signet_block_explorers return mainnet_block_explorers