Skip to content

Commit

Permalink
[REF] Use distinguisable prefixes for bitcoinlib_testnet network
Browse files Browse the repository at this point in the history
  • Loading branch information
mccwdev committed Sep 22, 2023
1 parent cb3c73d commit 08ef79f
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 48 deletions.
24 changes: 12 additions & 12 deletions bitcoinlib/data/networks.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,18 @@
"prefix_bech32": "blt",
"prefix_wif": "99",
"prefixes_wif": [
["9488B21E", "YXsf", "public", false, "legacy", "p2pkh"],
["9488B21E", "YXsf", "public", true, "legacy", "p2sh"],
["9488ADE4", "YXsc", "private", false, "legacy", "p2pkh"],
["9488ADE4", "YXsc", "private", true, "legacy", "p2sh"],
["9488B21E", "YXsf", "public", false, "p2sh-segwit", "p2sh_p2wpkh"],
["9488B21E", "YXsf", "public", true, "p2sh-segwit", "p2sh_p2wsh"],
["9488ADE4", "YXsc", "private", false, "p2sh-segwit", "p2sh_p2wpkh"],
["9488ADE4", "YXsc", "private", true, "p2sh-segwit", "p2sh_p2wsh"],
["9488B21E", "YXsf", "public", false, "segwit", "p2wpkh"],
["9488B21E", "YXsf", "public", true, "segwit", "p2wsh"],
["9488ADE4", "YXsc", "private", false, "segwit", "p2wpkh"],
["9488ADE4", "YXsc", "private", true, "segwit", "p2wsh"]
["2FFFACCC", "BC11", "public", false, "legacy", "p2pkh"],
["2FFFACCC", "BC11", "public", true, "legacy", "p2sh"],
["2FFFADDD", "BC12", "private", false, "legacy", "p2pkh"],
["2FFFADDD", "BC12", "private", true, "legacy", "p2sh"],
["2FFFAEEE", "BC13", "public", false, "p2sh-segwit", "p2sh_p2wpkh"],
["2FFFB100", "BC14", "public", true, "p2sh-segwit", "p2sh_p2wsh"],
["2FFFB300", "BC15", "private", false, "p2sh-segwit", "p2sh_p2wpkh"],
["2FFFB500", "BC16", "private", true, "p2sh-segwit", "p2sh_p2wsh"],
["2FFFB666", "BC17", "public", false, "segwit", "p2wpkh"],
["2FFFB800", "BC18", "public", true, "segwit", "p2wsh"],
["2FFFB900", "BC19", "private", false, "segwit", "p2wpkh"],
["2FFFBA00", "BC1A", "private", true, "segwit", "p2wsh"]
],
"bip44_cointype": 9999999,
"denominator": 0.00000001,
Expand Down
22 changes: 13 additions & 9 deletions tests/test_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,24 +360,28 @@ def test_hdkey_import_from_private_byte(self):
self.assertEqual(hdkey.address(), '17N9VQbP89ThunSq7Yo2VooXCFTW1Lp8bd')

def test_hdkey_import_private_uncompressed(self):
wif = 'YXscyqNJ5YK411nwB2T35cvM1M4F4VDzbfpTxgBxFL3eDFcUrPGfGSzLG4DmwGyRY6nzRGqyBjMMnw9x7oq2mw2mUQWpCZyfopCUEvU458AMAhqj'
wif = ('BC12Se7KL1uS2bA6QNFneYit57Ac2wGdCrn5CTr94xr1NqLxvPozYzpm4d72ojPFnpLyAgpoXdad78PL9HaATYH2Y695hYcs8AF'
'1iLxUL5fk2jQv')
pk_hex = '681e34705a758455e75d761a8d33aaef6d0507e3750fb7c3848ab119438626a3'
pubkey_uncompressed = (
'04007d7ff2fbf9486746f8beffc34e7a68f06a4938edd3b1eed4a2fe23148423c7e8d714ef853988adc2fef434'
'3ccdcb07356cfd9b8f361e3c8ec43598210c946d')
pubkey_compressed = '03007d7ff2fbf9486746f8beffc34e7a68f06a4938edd3b1eed4a2fe23148423c7'

k = HDKey(wif, compressed=False)
self.assertFalse(k.compressed)
self.assertEqual(k.private_hex, '427ea8c9c286fc050b8ccd8d8a7a8de57322c519ba79b3fad745bc4e97ed5a37')
self.assertEqual(k.public_hex, '0403c6eb8873620ac55a6035b0fd527e623f7659c97f30cb8d6a3fe90e924da5fa197aa4'
'9ee663e360ac71dbb514e2f8b02a90301a0ae52e8014ec805fa36040d9')
self.assertEqual(k.private_hex, pk_hex)
self.assertEqual(k.public_hex, pubkey_uncompressed)

k2 = HDKey.from_wif(wif, compressed=False)
self.assertFalse(k2.compressed)
self.assertEqual(k2.private_hex, '427ea8c9c286fc050b8ccd8d8a7a8de57322c519ba79b3fad745bc4e97ed5a37')
self.assertEqual(k2.public_hex, '0403c6eb8873620ac55a6035b0fd527e623f7659c97f30cb8d6a3fe90e924da5fa197aa4'
'9ee663e360ac71dbb514e2f8b02a90301a0ae52e8014ec805fa36040d9')
self.assertEqual(k2.private_hex, pk_hex)
self.assertEqual(k2.public_hex, pubkey_uncompressed)

k3 = HDKey.from_wif(wif)
self.assertTrue(k3.compressed)
self.assertEqual(k3.private_hex, '427ea8c9c286fc050b8ccd8d8a7a8de57322c519ba79b3fad745bc4e97ed5a37')
self.assertEqual(k3.public_hex, '0303c6eb8873620ac55a6035b0fd527e623f7659c97f30cb8d6a3fe90e924da5fa')
self.assertEqual(k3.private_hex, pk_hex)
self.assertEqual(k3.public_hex, pubkey_compressed)


class TestHDKeysChildKeyDerivation(unittest.TestCase):
Expand Down
55 changes: 28 additions & 27 deletions tests/test_wallets.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,8 @@ def test_delete_wallet(self):
self.assertEqual(wallet_delete('wallet_to_remove', db_uri=self.DATABASE_URI), 1)

def test_delete_wallet_no_private(self):
key = "YXsfembHRwpatrAVUFhHAd7mErqzPtfehhq5YEt4dFM2B6hVNtxnqj3JqiP4nAf9BZ9SRBmH8esrDamoA3ZFNdNshvYA8rf7bDxhEdUyuoPZ7HTF"
key = ("BC19UtECk2r9PVQYhZo2RsN5SJVTmTt6NjCqGh6KH7FoVGhV9oV3f6UdyMtSzWPUBPw2S313ZJqCCNd6kTV9xbNQWzPBUVufnp"
"sNKhh3vb3ut5bY")
Wallet.create('delete_watch_only_wallet', keys=key, network='bitcoinlib_test', db_uri=self.DATABASE_URI)
self.assertEqual(wallet_delete('delete_watch_only_wallet', db_uri=self.DATABASE_URI), 1)

Expand Down Expand Up @@ -820,8 +821,8 @@ def test_wallet_multiple_networks_import_key_network(self):
self.assertIn(address_ltc, addresses_ltc_in_wallet)

def test_wallet_multiple_networks_import_error(self):
pk_dashtest = 'YXsfembHRwpatrAVUGY8MBUuKwhUDf9EEWeZwGoEfE5appg5rLjSfZ1GwoaNB5DgUZ2aVuU1ezmg7zDefubuWkZ17et5o' \
'KoMgKnjvAZ6a4Yn2QZg'
pk_dashtest = ('BC19UtECk2r9PVQYhZYzX3m4arsu6tCL5VMpKPbeGpZdpzd9FHweoSRreTFKo96FAEFsUWBrASfKussgoxTrNQfm'
'jWFrVraLbiHf4gCkUvwHEocA')
error_str = "Network bitcoinlib_test not available in this wallet, please create an account for this network " \
"first."
self.assertRaisesRegexp(WalletError, error_str, self.wallet.import_key, pk_dashtest)
Expand Down Expand Up @@ -1123,10 +1124,10 @@ def test_wallet_multisig_2of2(self):
self.db_remove()

keys = [
HDKey('YXscyqNJ5YK411nwB4wzazXjJn9L9iLAR1zEMFcpLipDA25rZregBGgwXmprsvQLeQAsuTvemtbCWR1AHaPv2qmvkartoiFUU6'
'qu1uafT2FETtXT', network='bitcoinlib_test', witness_type='legacy'),
HDKey('YXscyqNJ5YK411nwB4EyGbNZo9eQSUWb64vAFKHt7E2LYnbmoNz8Gyjs6xc7iYAudcnkgf127NPnaanuUgyRngAiwYBcXKGsSJ'
'wadGhxByT2MnLd', network='bitcoinlib_test', witness_type='legacy')]
HDKey('BC12Se7KL1uS2bA6QQaWWrcA5kApD8UAM78dx91LrFvsvdvua3irnpQNjHUTCPJR7tZ72eGhMsy3mLPp5C'
'SJcmKPchBvaf72i1mNY6yhrmY4RFSr', network='bitcoinlib_test', witness_type='legacy'),
HDKey('BC12Se7KL1uS2bA6QPiq4cdXWKfmQwuPPTXkRUJNBSLFZt9tPgLfgrRSfkVLRLYCYpgzsTmKybPHSX165w'
'42VBjw4Neub1KyPBfNpjFfgx9SyynF', network='bitcoinlib_test', witness_type='legacy')]

msw1 = Wallet.create('msw1', [keys[0], keys[1].subkey_for_path("m/45'").wif_public()],
network='bitcoinlib_test', sort_keys=False, sigs_required=2,
Expand Down Expand Up @@ -1157,10 +1158,10 @@ def test_wallet_multisig_2of2_different_database(self):
self.db_remove()

keys = [
HDKey('YXscyqNJ5YK411nwB4wzazXjJn9L9iLAR1zEMFcpLipDA25rZregBGgwXmprsvQLeQAsuTvemtbCWR1AHaPv2qmvkartoiFUU6'
'qu1uafT2FETtXT', network='bitcoinlib_test'),
HDKey('YXscyqNJ5YK411nwB4EyGbNZo9eQSUWb64vAFKHt7E2LYnbmoNz8Gyjs6xc7iYAudcnkgf127NPnaanuUgyRngAiwYBcXKGsSJ'
'wadGhxByT2MnLd', network='bitcoinlib_test')]
HDKey('BC12Se7KL1uS2bA6QQaWWrcA5kApD8UAM78dx91LrFvsvdvua3irnpQNjHUTCPJR7tZ72eGhMsy3mLPp5C'
'SJcmKPchBvaf72i1mNY6yhrmY4RFSr', network='bitcoinlib_test', witness_type='legacy'),
HDKey('BC12Se7KL1uS2bA6QPiq4cdXWKfmQwuPPTXkRUJNBSLFZt9tPgLfgrRSfkVLRLYCYpgzsTmKybPHSX165w'
'42VBjw4Neub1KyPBfNpjFfgx9SyynF', network='bitcoinlib_test', witness_type='legacy')]

msw1 = Wallet.create('msw1', [keys[0], keys[1].public_master(multisig=True)], network='bitcoinlib_test',
sort_keys=False, sigs_required=2, db_uri=self.DATABASE_URI)
Expand Down Expand Up @@ -1352,8 +1353,8 @@ def test_wallet_multisig_network_mixups(self):
phrase1 = 'shop cloth bench traffic vintage security hour engage omit almost episode fragile'
phrase2 = 'exclude twice mention orchard grit ignore display shine cheap exercise same apart'
phrase3 = 'citizen obscure tribe index little welcome deer wine exile possible pizza adjust'
pk2 = HDKey.from_passphrase(phrase2, multisig=True, network=network)
pk3 = HDKey.from_passphrase(phrase3, multisig=True, network=network)
pk2 = HDKey.from_passphrase(phrase2, multisig=True, network=network, witness_type='legacy')
pk3 = HDKey.from_passphrase(phrase3, multisig=True, network=network, witness_type='legacy')
wlt = wallet_create_or_open(
'multisig_network_mixups', sigs_required=2, network=network, db_uri=self.DATABASE_URI,
keys=[phrase1, pk2.public_master(), pk3.public_master()], witness_type='legacy',
Expand Down Expand Up @@ -1550,10 +1551,10 @@ def test_wallet_import_private_for_known_public_multisig(self):
self.assertTrue(wlt.cosigner[2].main_key.is_private)

def test_wallet_import_private_for_known_public_p2sh_segwit(self):
pk1 = HDKey('YXscyqNJ5YK411nwB3VjLYgjht3dqfKxyLdGSqNMGKhYdcK4Gh1CRSJyxS2So8KXSQrxtysS1jAmHtLnxRKa47xEiAx6hP'
'vrj8tuEzyeR8TQNu5e')
pk2 = HDKey('YXscyqNJ5YK411nwB4Jo3JCQ1GZNetf4BrLJjZiqdWKVzoXwPtyJ5xyNdZjuEWtqCeSZGtmg7SuQerERwniHLYL3aVcnyS'
'ciEAxk7gLgDkoZC5Lq')
pk1 = HDKey('BC15gwSkKnLsWk3GmCxBwzdbij4fXUa5j6UB8bSYJt9a81aSUCVjg7tVJaEDpxRZ4X2dt3VKjuy8po1fbo6opZ6tCqxVAg'
'XgQKUBwWi6EGh2eLRC')
pk2 = HDKey('BC15gwSkKnLsWk3GmCWRgmp2edaya3UgmQ4TqjiBfx2cuvMC5ASQwJ5N5wwKcMp627AucznuYvTzKnhYRERcPFnEAn1a7w'
'VKQy7FMLXzMq7N2nQq')
w = Wallet.create('segwit-p2sh-p2wsh-import',
[pk1, pk2.public_master(witness_type='p2sh-segwit', multisig=True)],
witness_type='p2sh-segwit', network='bitcoinlib_test', db_uri=self.DATABASE_URI)
Expand Down Expand Up @@ -1803,8 +1804,8 @@ def test_wallet_transaction_import_raw_locktime(self):

def test_wallet_transaction_import_raw_segwit_fee(self):
wallet_delete_if_exists('bcltestwlt-size', force=True, db_uri=self.DATABASE_URI)
pk = 'YXscyqNJ5YK411nwB2peYdMeJPmkJmMJCfNdo9JuWkEKLZhVSoUjbRRinVqqtBN2GNC2A6L1Taz1e3LWApHkC84GgTp3vr7neD' \
'ZTxXnvGkUwVz4c'
pk = ('BC19UtECk2r9PVQYhZT9iJZvzK7jDgQXFQxRiguB28ESn53b8BjZjT4ZyQEStPD9yKAXBhTq6Wtb9zyPQiRU4chaTjEwvtpKW'
'EdrMscH3ZqPTtdV')
wlt = Wallet.create('bcltestwlt-size', keys=pk, network='bitcoinlib_test', witness_type='segwit',
db_uri=self.DATABASE_URI)
wlt.utxos_update()
Expand All @@ -1818,8 +1819,8 @@ def test_wallet_transaction_import_raw_segwit_fee(self):
del wlt

def test_wallet_transaction_load_segwit_size(self):
pk = 'YXscyqNJ5YK411nwB2peYdMeJPmkJmMJCfNdo9JuWkEKLZhVSoUjbRRinVqqtBN2GNC2A6L1Taz1e3LWApHkC84GgTp3vr7neD' \
'ZTxXnvGkUwVz4c'
pk = ('BC19UtECk2r9PVQYhZT9iJZvzK7jDgQXFQxRiguB28ESn53b8BjZjT4ZyQEStPD9yKAXBhTq6Wtb9zyPQiRU4chaTjEwvtpKW'
'EdrMscH3ZqPTtdV')
wlt = Wallet.create('bcltestwlt2-size', keys=pk, network='bitcoinlib_test', witness_type='segwit',
db_uri=self.DATABASE_URI)
wlt.utxos_update()
Expand Down Expand Up @@ -1936,10 +1937,10 @@ def test_wallet_transaction_sign_with_hex(self):
self.assertTrue(wt.verified)

def test_wallet_transaction_sign_with_wif(self):
wif = 'YXscyqNJ5YK411nwB4eU6PmyGTJkBUHjgXEf53z4TTjHCDXPPXKJD2PyfXonwtT7VwSdqcZJS2oeDbvg531tEsx3yq4425Mfrb9aS' \
'PyNQ5bUGFwu'
wif2 = 'YXscyqNJ5YK411nwB4UK8ScMahPWewyKrTBjgM5BZKRkPg8B2HmKT3r8yc2GFg9GqgFXaWmxkTRhNkRGVxbzUREMH8L5HxoKGCY8' \
'WDdf1GcW2k8q'
wif = ('BC17qWy2RMw8AmwsqwTXpokwXXwhaWmUpqtAc5iGGzrFXs13PkKERJUyobB9YUbzT8hJ8EiCtcqdEpeRy7wyvE1esehD'
'8bVpgzzdEw9ndQbjyF5w')
wif2 = ('BC17qWy2RMw8AmwsqwTjmX2SwwSHBNA2c6KyGHs5Kghg3q6dPa4ajP1jwFBPCkoSeXWsPAiVD2iAcroVc6cJQmHrYatviN'
'Ck5jDM83DkbPGFxbCK')
w = wallet_create_or_open('test_wallet_transaction_sign_with_wif',
keys=[wif, HDKey(wif2).public_master_multisig(witness_type='segwit')],
witness_type='segwit', network='bitcoinlib_test',
Expand Down Expand Up @@ -2029,8 +2030,8 @@ def test_wallet_select_inputs(self):
self.assertEqual(len(wlt.select_inputs(150000000)), 2)

def test_wallet_transaction_create_exceptions(self):
wif = 'YXscyqNJ5YK411nwB3kahnuWqF2KUJfJNRGG1n3zLPi3MSPCRcD2cmcVz1UKBjTMuMxAfXrbSAe5qJfu5nnSuRZKEtqJt' \
'FwNjcNknbseoKp1vR2h'
wif = ('BC17qWy2RMw8AmwsqwTjmX2SwwSHBNA2c6KyGHs5Kghg3q6dPa4ajP1jwFBPCkoSeXWsPAiVD2iAcroVc6cJQmHrYatvi'
'NCk5jDM83DkbPGFxbCK')
wlt = Wallet.create('test_wallet_transaction_create_exceptions', keys=wif, db_uri=self.DATABASE_URI)
wlt.utxos_update()
self.assertRaisesRegexp(WalletError, "Output array must be a list of tuples with address and amount. "
Expand Down

0 comments on commit 08ef79f

Please sign in to comment.