Browse Source

Add signet support

master
Kristaps Kaupe 5 years ago
parent
commit
8526d73014
No known key found for this signature in database
GPG Key ID: 33E472FE870C7E5D
  1. 6
      jmbitcoin/jmbitcoin/secp256k1_deterministic.py
  2. 5
      jmbitcoin/jmbitcoin/secp256k1_main.py
  3. 3
      jmclient/jmclient/blockchaininterface.py
  4. 6
      jmclient/jmclient/configure.py
  5. 9
      jmclient/jmclient/cryptoengine.py
  6. 6
      jmclient/jmclient/wallet.py
  7. 2
      jmclient/jmclient/yieldgenerator.py
  8. 2
      jmdaemon/jmdaemon/irc.py
  9. 7
      scripts/joinmarket-qt.py
  10. 2
      scripts/qtsupport.py

6
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

5
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
"""

3
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

6
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")

9
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

6
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 != {}:

2
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"),

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

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

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

Loading…
Cancel
Save