Browse Source

add signet support

patch-4
wakiyamap 4 years ago
parent
commit
639cd94dcb
  1. 1
      electrum/commands.py
  2. 18
      electrum/constants.py
  3. 4
      electrum/gui/qt/main_window.py
  4. 6
      electrum/lnaddr.py
  5. 14
      electrum/servers_signet.json
  6. 3
      electrum/simple_config.py
  7. 10
      electrum/trampoline.py
  8. 19
      electrum/util.py
  9. 2
      run_electrum

1
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):

18
electrum/constants.py

@ -60,6 +60,7 @@ class AbstractNet:
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

4
electrum/gui/qt/main_window.py

@ -540,7 +540,9 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
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', '?')]

6
electrum/lnaddr.py

@ -178,6 +178,9 @@ def pull_tagged(stream):
return (CHARSET[tag], stream.read(length * 5), stream)
def lnencode(addr: 'LnAddr', privkey) -> str:
# see https://github.com/lightningnetwork/lightning-rfc/pull/844
if constants.net.NET_NAME == "signet":
addr.currency += "s"
if addr.amount:
amount = addr.currency + shorten_amount(addr.amount)
else:
@ -366,6 +369,9 @@ class SerializableKey:
def lndecode(invoice: str, *, verbose=False, expected_hrp=None) -> LnAddr:
if expected_hrp is None:
expected_hrp = constants.net.SEGWIT_HRP
# see https://github.com/lightningnetwork/lightning-rfc/pull/844
if constants.net.NET_NAME == "signet":
expected_hrp += "s"
decoded_bech32 = bech32_decode(invoice, ignore_long_length=True)
hrp = decoded_bech32.hrp
data = decoded_bech32.data

14
electrum/servers_signet.json

@ -0,0 +1,14 @@
{
"127.0.0.1": {
"pruning": "-",
"s": "51002",
"t": "51001",
"version": "1.2"
},
"signet-electrumx.wakiyamap.dev": {
"pruning": "-",
"s": "50002",
"t": "50001",
"version": "1.4"
}
}

3
electrum/simple_config.py

@ -128,6 +128,9 @@ class SimpleConfig(Logger):
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

10
electrum/trampoline.py

@ -63,11 +63,17 @@ TRAMPOLINE_NODES_TESTNET = {
'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 == "mainnet":
return TRAMPOLINE_NODES_MAINNET
if constants.net in (constants.BitcoinTestnet,):
if constants.net.NET_NAME == "testnet":
return TRAMPOLINE_NODES_TESTNET
if constants.net.NET_NAME == "signet":
return TRAMPOLINE_NODES_SIGNET
return {}
def trampolines_by_id():

19
electrum/util.py

@ -804,12 +804,29 @@ testnet_block_explorers = {
{'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 == "testnet":
return testnet_block_explorers
elif constants.net.NET_NAME == "signet":
return signet_block_explorers
return mainnet_block_explorers
def block_explorer(config: 'SimpleConfig') -> Optional[str]:

2
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')

Loading…
Cancel
Save