diff --git a/jmbitcoin/jmbitcoin/secp256k1_deterministic.py b/jmbitcoin/jmbitcoin/secp256k1_deterministic.py index eb9023d..6835afd 100644 --- a/jmbitcoin/jmbitcoin/secp256k1_deterministic.py +++ b/jmbitcoin/jmbitcoin/secp256k1_deterministic.py @@ -10,8 +10,10 @@ MAINNET_PRIVATE = b'\x04\x88\xAD\xE4' MAINNET_PUBLIC = b'\x04\x88\xB2\x1E' TESTNET_PRIVATE = b'\x04\x35\x83\x94' TESTNET_PUBLIC = b'\x04\x35\x87\xCF' -PRIVATE = [MAINNET_PRIVATE, TESTNET_PRIVATE] -PUBLIC = [MAINNET_PUBLIC, TESTNET_PUBLIC] +SIGNET_PRIVATE = b'\x04\x35\x83\x94' +SIGNET_PUBLIC = b'\x04\x35\x87\xCF' +PRIVATE = [MAINNET_PRIVATE, TESTNET_PRIVATE, SIGNET_PRIVATE] +PUBLIC = [MAINNET_PUBLIC, TESTNET_PUBLIC, SIGNET_PUBLIC] privtopub = privkey_to_pubkey diff --git a/jmbitcoin/jmbitcoin/secp256k1_main.py b/jmbitcoin/jmbitcoin/secp256k1_main.py index 87cba6c..48f35f7 100644 --- a/jmbitcoin/jmbitcoin/secp256k1_main.py +++ b/jmbitcoin/jmbitcoin/secp256k1_main.py @@ -11,8 +11,9 @@ from bitcointx.signmessage import BitcoinMessage #Required only for PoDLE calculation: N = 115792089237316195423570985008687907852837564279074904382605163141518161494337 -BTC_P2PK_VBYTE = {"mainnet": b'\x00', "testnet": b'\x6f', "regtest": 100} -BTC_P2SH_VBYTE = {"mainnet": b'\x05', "testnet": b'\xc4'} +BTC_P2PK_VBYTE = {"mainnet": b'\x00', "testnet": b'\x6f', "signet": b'\x6f', + "regtest": 100} +BTC_P2SH_VBYTE = {"mainnet": b'\x05', "testnet": b'\xc4', "signet": b'\xc4'} """PoDLE related primitives """ diff --git a/jmclient/jmclient/blockchaininterface.py b/jmclient/jmclient/blockchaininterface.py index 42e5758..a3500cc 100644 --- a/jmclient/jmclient/blockchaininterface.py +++ b/jmclient/jmclient/blockchaininterface.py @@ -177,7 +177,8 @@ class BitcoinCoreInterface(BlockchainInterface): "was not established successfully.") actualNet = blockchainInfo['chain'] - netmap = {'main': 'mainnet', 'test': 'testnet', 'regtest': 'regtest'} + netmap = {'main': 'mainnet', 'test': 'testnet', 'regtest': 'regtest', + 'signet': 'signet'} if netmap[actualNet] != network and \ (not (actualNet == "regtest" and network == "testnet")): #special case of regtest and testnet having the same addr format diff --git a/jmclient/jmclient/configure.py b/jmclient/jmclient/configure.py index 04b7a2f..ee65cef 100644 --- a/jmclient/jmclient/configure.py +++ b/jmclient/jmclient/configure.py @@ -113,7 +113,7 @@ use_ssl = false # Use 'no-blockchain' to run the ob-watcher.py script in scripts/obwatch without current access # to Bitcoin Core; note that use of this option for any other purpose is currently unsupported. blockchain_source = bitcoin-rpc -# options: testnet, mainnet +# options: signet, testnet, mainnet # Note: for regtest, use network = testnet network = mainnet rpc_host = localhost @@ -461,6 +461,8 @@ def get_config_irc_channel(channel_name): channel = "#" + channel_name if get_network() == 'testnet': channel += '-test' + elif get_network() == 'signet': + channel += '-sig' return channel @@ -642,7 +644,7 @@ def get_blockchain_interface_instance(_config): BitcoinCoreNoHistoryInterface source = _config.get("BLOCKCHAIN", "blockchain_source") network = get_network() - testnet = network == 'testnet' + testnet = (network == 'testnet' or network == 'signet') if source in ('bitcoin-rpc', 'regtest', 'bitcoin-rpc-no-history'): rpc_host = _config.get("BLOCKCHAIN", "rpc_host") diff --git a/jmclient/jmclient/cryptoengine.py b/jmclient/jmclient/cryptoengine.py index 1f577a0..f4acc5b 100644 --- a/jmclient/jmclient/cryptoengine.py +++ b/jmclient/jmclient/cryptoengine.py @@ -14,10 +14,11 @@ from .configure import get_network TYPE_P2PKH, TYPE_P2SH_P2WPKH, TYPE_P2WPKH, TYPE_P2SH_M_N, TYPE_TIMELOCK_P2WSH, \ TYPE_SEGWIT_LEGACY_WALLET_FIDELITY_BONDS, TYPE_WATCHONLY_FIDELITY_BONDS, \ TYPE_WATCHONLY_TIMELOCK_P2WSH, TYPE_WATCHONLY_P2SH_P2WPKH = range(9) -NET_MAINNET, NET_TESTNET = range(2) -NET_MAP = {'mainnet': NET_MAINNET, 'testnet': NET_TESTNET} -WIF_PREFIX_MAP = {'mainnet': b'\x80', 'testnet': b'\xef'} -BIP44_COIN_MAP = {'mainnet': 2**31, 'testnet': 2**31 + 1} +NET_MAINNET, NET_TESTNET, NET_SIGNET = range(3) +NET_MAP = {'mainnet': NET_MAINNET, 'testnet': NET_TESTNET, + 'signet': NET_SIGNET} +WIF_PREFIX_MAP = {'mainnet': b'\x80', 'testnet': b'\xef', 'signet': b'\xef'} +BIP44_COIN_MAP = {'mainnet': 2**31, 'testnet': 2**31 + 1, 'signet': 2**31 + 1} def detect_script_type(script_str): """ Given a scriptPubKey, decide which engine diff --git a/jmclient/jmclient/wallet.py b/jmclient/jmclient/wallet.py index 2462e7d..6fbd925 100644 --- a/jmclient/jmclient/wallet.py +++ b/jmclient/jmclient/wallet.py @@ -315,7 +315,7 @@ class BaseWallet(object): assert self._utxos is not None assert self.max_mixdepth is not None assert self.max_mixdepth >= 0 - assert self.network in ('mainnet', 'testnet') + assert self.network in ('mainnet', 'testnet', 'signet') if mixdepth is not None: assert mixdepth >= 0 @@ -372,12 +372,12 @@ class BaseWallet(object): args: storage: a Storage object - network: str, network we are on, 'mainnet' or 'testnet' + network: str, network we are on, 'mainnet', 'testnet' or 'signet' max_mixdepth: int, number of the highest mixdepth timestamp: bytes or None, defaults to the current time write: execute storage.save() """ - assert network in ('mainnet', 'testnet') + assert network in ('mainnet', 'testnet', 'signet') assert max_mixdepth >= 0 if storage.data != {}: diff --git a/jmclient/jmclient/yieldgenerator.py b/jmclient/jmclient/yieldgenerator.py index 0f2bc89..15d8773 100644 --- a/jmclient/jmclient/yieldgenerator.py +++ b/jmclient/jmclient/yieldgenerator.py @@ -313,7 +313,7 @@ def ygmain(ygclass, nickserv_password='', gaplimit=6): nodaemon = jm_single().config.getint("DAEMON", "no_daemon") daemon = True if nodaemon == 1 else False - if jm_single().config.get("BLOCKCHAIN", "network") in ["regtest", "testnet"]: + if jm_single().config.get("BLOCKCHAIN", "network") in ["regtest", "testnet", "signet"]: startLogging(sys.stdout) start_reactor(jm_single().config.get("DAEMON", "daemon_host"), jm_single().config.getint("DAEMON", "daemon_port"), diff --git a/jmdaemon/jmdaemon/irc.py b/jmdaemon/jmdaemon/irc.py index 5fdd8ab..22e4717 100644 --- a/jmdaemon/jmdaemon/irc.py +++ b/jmdaemon/jmdaemon/irc.py @@ -47,6 +47,8 @@ def get_config_irc_channel(chan_name, btcnet): channel = "#" + chan_name if btcnet == "testnet": channel += "-test" + elif btcnet == "signet": + channel += "-sig" return channel class TxIRCFactory(protocol.ReconnectingClientFactory): diff --git a/scripts/joinmarket-qt.py b/scripts/joinmarket-qt.py index 72b8558..917c214 100755 --- a/scripts/joinmarket-qt.py +++ b/scripts/joinmarket-qt.py @@ -2195,7 +2195,12 @@ tabWidget.addTab(TxHistoryTab(), "Tx History") tabWidget.addTab(CoinsTab(), "Coins") mainWindow.resize(600, 500) -suffix = ' - Testnet' if get_network() == 'testnet' else '' +if get_network() == 'testnet': + suffix = ' - Testnet' +elif get_network() == 'signet': + suffix = ' - Signet' +else: + suffix = '' mainWindow.setWindowTitle(appWindowTitle + suffix) tabWidget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) mainWindow.setCentralWidget(tabWidget) diff --git a/scripts/qtsupport.py b/scripts/qtsupport.py index 479b8e0..debcc5f 100644 --- a/scripts/qtsupport.py +++ b/scripts/qtsupport.py @@ -61,7 +61,7 @@ config_types = {'rpc_port': int, 'absurd_fee_per_kb': 'amount'} config_tips = { 'blockchain_source': 'options: bitcoin-rpc, regtest (for testing)', - 'network': 'one of "testnet" or "mainnet"', + 'network': 'one of "signet", "testnet" or "mainnet"', 'checktx': 'whether to check fees before completing transaction', 'rpc_host': 'the host for bitcoind; only used if blockchain_source is bitcoin-rpc',