Skip to content

Commit

Permalink
[REF] Use segwit as default in HDKey, Key
Browse files Browse the repository at this point in the history
  • Loading branch information
mccwdev committed Oct 13, 2023
1 parent fb4e04a commit 86bb946
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 23 deletions.
7 changes: 4 additions & 3 deletions bitcoinlib/keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ def get_key_format(key, is_private=None):
key_format = ""
networks = None
script_types = []
witness_types = ['legacy']
witness_types = [DEFAULT_WITNESS_TYPE]
multisig = [False]

# if isinstance(key, bytes) and len(key) in [128, 130]:
Expand Down Expand Up @@ -528,9 +528,10 @@ def parse(cls, address, compressed=None, encoding=None, depth=None, change=None,
if network is None:
network = addr_dict['network']
script_type = addr_dict['script_type']
witness_type = addr_dict['witness_type']
return Address(hashed_data=public_key_hash_bytes, prefix=prefix, script_type=script_type,
compressed=compressed, encoding=addr_dict['encoding'], depth=depth, change=change,
address_index=address_index, network=network, network_overrides=network_overrides)
witness_type=witness_type, compressed=compressed, encoding=addr_dict['encoding'], depth=depth,
change=change, address_index=address_index, network=network, network_overrides=network_overrides)

def __init__(self, data='', hashed_data='', prefix=None, script_type=None,
compressed=None, encoding=None, witness_type=None, witver=0, depth=None, change=None,
Expand Down
4 changes: 2 additions & 2 deletions bitcoinlib/wallets.py
Original file line number Diff line number Diff line change
Expand Up @@ -1233,7 +1233,7 @@ def create(cls, name, keys=None, owner='', network=None, account_id=0, purpose=0
if isinstance(key, WalletKey):
key = key._hdkey_object
else:
key = HDKey(key, password=password, network=network)
key = HDKey(key, password=password, witness_type=witness_type, network=network)
except BKeyError:
try:
scheme = 'single'
Expand Down Expand Up @@ -1638,7 +1638,7 @@ def import_key(self, key, account_id=0, name='', network=None, purpose=44, key_t
if network not in self.network_list():
raise WalletError("Network %s not available in this wallet, please create an account for this "
"network first." % network)
hdkey = HDKey(key, network=network, key_type=key_type)
hdkey = HDKey(key, network=network, key_type=key_type, witness_type=self.witness_type)

if not self.multisig:
if self.main_key and self.main_key.depth == self.depth_public_master and \
Expand Down
8 changes: 4 additions & 4 deletions tests/test_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,14 +313,14 @@ def test_hdkey_import_extended_public_key(self):
self.assertEqual(extkey, self.k.wif())

def test_hdkey_import_simple_key(self):
self.k = HDKey('L45TpiVN3C8Q3MoosGDzug1acpnFjysseBLVboszztmEyotdSJ9g')
self.k = HDKey('L45TpiVN3C8Q3MoosGDzug1acpnFjysseBLVboszztmEyotdSJ9g', witness_type='legacy')
self.assertEqual(
'xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAbeoRRpMHE67jGmBQKCr2YovK2G23x5uzaztRbEW9pc'
'j6SqMFd', self.k.wif(is_private=True))

def test_hdkey_import_bip38_key(self):
if USING_MODULE_SCRYPT:
self.k = HDKey('6PYNKZ1EAgYgmQfmNVamxyXVWHzK5s6DGhwP4J5o44cvXdoY7sRzhtpUeo',
self.k = HDKey('6PYNKZ1EAgYgmQfmNVamxyXVWHzK5s6DGhwP4J5o44cvXdoY7sRzhtpUeo', witness_type='legacy',
password='TestingOneTwoThree')
self.assertEqual('L44B5gGEpqEDRS9vVPz7QT35jcBG2r3CZwSwQ4fCewXAhAhqGVpP', self.k.wif_key())

Expand Down Expand Up @@ -548,7 +548,7 @@ def test_hdkey_info(self):

def test_hdkey_network_change(self):
pk = '688e4b153100f6d4526a00a3fffb47d971a32a54950ec00fab8c22fa8480edfe'
k = HDKey(pk)
k = HDKey(pk, witness_type='legacy')
k.network_change('litecoin')
self.assertEqual(k.address(), 'LPsPTgctprGZ6FEc7QFAugr6qg8XV3X4tg')

Expand Down Expand Up @@ -596,7 +596,7 @@ def test_bip38_other_networks(self):
def test_bip38_hdkey_method(self):
pkwif = '5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5'
bip38_wif = '6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTePPX1dWByq'
k = HDKey(pkwif)
k = HDKey(pkwif, witness_type='legacy')
self.assertEqual(k.encrypt('Satoshi'), bip38_wif)


Expand Down
40 changes: 26 additions & 14 deletions tests/test_wallets.py
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,16 @@ def test_wallet_create_bip38(self):
passphrase = "region kite swamp float card flag chalk click gadget share wage clever"
k = HDKey().from_passphrase(passphrase, witness_type='legacy')
ke = k.encrypt('hoihoi')
w = wallet_create_or_open('kewallet', ke, password='hoihoi', network='bitcoin', witness_type='legacy',
db_uri=self.DATABASE_URI)
self.assertEqual(k.private_hex, w.main_key.key_private.hex())

def test_wallet_create_bip38_segwit(self):
if not USING_MODULE_SCRYPT:
self.skipTest('Need scrypt module to test BIP38 wallets')
passphrase = "region kite swamp float card flag chalk click gadget share wage clever"
k = HDKey().from_passphrase(passphrase)
ke = k.encrypt('hoihoi')
w = wallet_create_or_open('kewallet', ke, password='hoihoi', network='bitcoin', db_uri=self.DATABASE_URI)
self.assertEqual(k.private_hex, w.main_key.key_private.hex())

Expand Down Expand Up @@ -602,7 +612,7 @@ def test_wallet_keys_single_key(self):

def test_wallet_create_uncompressed_masterkey(self):
wlt = wallet_create_or_open('uncompressed_test', keys='68vBWcBndYGLpd4KmeNTk1gS1A71zyDX6uVQKCxq6umYKyYUav5',
network='bitcoinlib_test', db_uri=self.DATABASE_URI)
network='bitcoinlib_test', witness_type='legacy', db_uri=self.DATABASE_URI)
wlt.get_key()
wlt.utxos_update()
self.assertIsNone(wlt.sweep('216xtQvbcG4o7Yz33n7VCGyaQhiytuvoqJY', offline=False).error)
Expand All @@ -611,7 +621,7 @@ def test_wallet_create_invalid_key(self):
# Test for issue #206
key_correct = HDKey(witness_type='segwit', network='testnet')
key_invalid = HDKey(witness_type='segwit', network='testnet')
w = wallet_create_or_open('my-awesome-wallet55', keys=key_correct, witness_type='segwit', network='testnet',
wallet_create_or_open('my-awesome-wallet55', keys=key_correct, witness_type='segwit', network='testnet',
db_uri=self.DATABASE_URI)
self.assertRaisesRegexp(AssertionError, '', Wallet, 'my-awesome-wallet55', main_key_object=key_invalid,
db_uri=self.DATABASE_URI)
Expand Down Expand Up @@ -783,7 +793,7 @@ def setUpClass(cls):
cls.pk = 'xprv9s21ZrQH143K4478MENLXpSXSvJSRYsjD2G3sY7s5sxAGubyujDmt9Qzfd1me5s1HokWGGKW9Uft8eB9dqryybAcFZ5JAs' \
'rg84jAVYwKJ8c'
cls.wallet = Wallet.create(
keys=cls.pk, network='dash',
keys=cls.pk, network='dash', witness_type='legacy',
name='test_wallet_multicurrency',
db_uri=cls.DATABASE_URI)

Expand Down Expand Up @@ -1036,14 +1046,14 @@ def test_wallet_multisig_bitcoinlib_testnet_transaction_send(self):

def test_wallet_multisig_bitcoin_transaction_send_offline(self):
self.db_remove()
pk2 = HDKey('e2cbed99ad03c500f2110f1a3c90e0562a3da4ba0cff0e74028b532c3d69d29d')
pk2 = HDKey('e2cbed99ad03c500f2110f1a3c90e0562a3da4ba0cff0e74028b532c3d69d29d', witness_type='legacy')
key_list = [
HDKey('e9e5095d3e26643cc4d996efc6cb9a8d8eb55119fdec9fa28a684ba297528067'),
HDKey('e9e5095d3e26643cc4d996efc6cb9a8d8eb55119fdec9fa28a684ba297528067', witness_type='legacy'),
pk2.public_master(multisig=True).public(),
HDKey('86b77aee5cfc3a55eb0b1099752479d82cb6ebaa8f1c4e9ef46ca0d1dc3847e6').public_master(
multisig=True).public(),
multisig=True, witness_type='legacy').public(),
]
wl = Wallet.create('multisig_test_bitcoin_send', key_list, sigs_required=2,
wl = Wallet.create('multisig_test_bitcoin_send', key_list, sigs_required=2, witness_type='legacy',
db_uri=self.DATABASE_URI)
wl.utxo_add(wl.get_key().address, 200000, '46fcfdbdc3573756916a0ced8bbc5418063abccd2c272f17bf266f77549b62d5',
0, 1)
Expand Down Expand Up @@ -1096,15 +1106,17 @@ def test_wallet_multisig_bitcoin_transaction_send_fee_priority(self):
def test_wallet_multisig_litecoin_transaction_send_offline(self):
self.db_remove()
network = 'litecoin_legacy'
pk2 = HDKey('e2cbed99ad03c500f2110f1a3c90e0562a3da4ba0cff0e74028b532c3d69d29d', network=network)
pk2 = HDKey('e2cbed99ad03c500f2110f1a3c90e0562a3da4ba0cff0e74028b532c3d69d29d', witness_type='legacy',
network=network)
key_list = [
HDKey('e9e5095d3e26643cc4d996efc6cb9a8d8eb55119fdec9fa28a684ba297528067', network=network),
HDKey('e9e5095d3e26643cc4d996efc6cb9a8d8eb55119fdec9fa28a684ba297528067', witness_type='legacy',
network=network),
pk2.public_master(multisig=True),
HDKey('86b77aee5cfc3a55eb0b1099752479d82cb6ebaa8f1c4e9ef46ca0d1dc3847e6',
network=network).public_master(multisig=True),
witness_type='legacy', network=network).public_master(multisig=True),
]
wl = Wallet.create('multisig_test_litecoin_send', key_list, sigs_required=2, network=network,
db_uri=self.DATABASE_URI)
witness_type='legacy', db_uri=self.DATABASE_URI)
wl.get_keys(number_of_keys=2)
wl.utxo_add(wl.get_key().address, 200000, '46fcfdbdc3573756916a0ced8bbc5418063abccd2c272f17bf266f77549b62d5',
0, 1)
Expand Down Expand Up @@ -1477,7 +1489,7 @@ def test_wallet_multisig_replace_sig_bug(self):
'2631ab1a4745f657f7216c636fb8ac708a3f6b63a6cd5cf773bfc9a3ebe6e1ba',
'97a66126f42fd3241cf256846e58cd7049d4d395f84b1811f73a3f5d33ff833e',
]
key_list = [HDKey(pk, network=network) for pk in pk_hex_list]
key_list = [HDKey(pk, witness_type='legacy', network=network) for pk in pk_hex_list]
key_list_cosigners = [k.public_master(multisig=True) for k in key_list if k is not key_list[0]]
key_list_wallet = [key_list[0]] + key_list_cosigners
w = wallet_create_or_open(wallet_name, keys=key_list_wallet, sigs_required=sigs_req, witness_type=witness_type,
Expand Down Expand Up @@ -1736,7 +1748,7 @@ def test_wallet_balance_update_multi_network(self):
k = "tpubDCutwJADa3iSbFtB2LgnaaqJgZ8FPXRRzcrMq7Tms41QNnTV291rpkps9vRwyss9zgDc7hS5V1aM1by8nFip5VjpGpz1oP54peKt" \
"hJzfabX"
wlt = Wallet.create("test_wallet_balance_update_multi_network", network='bitcoinlib_test',
db_uri=self.DATABASE_URI)
witness_type='legacy', db_uri=self.DATABASE_URI)
wlt.new_key()
wlt.new_account(network='testnet')
wlt.import_key(k)
Expand Down Expand Up @@ -1913,7 +1925,7 @@ def test_wallet_transaction_method(self):

def test_wallet_transaction_from_txid(self):
w = Wallet.create('testwltbcl', keys='dda84e87df25f32d73a7f7d008ed2b89fc00d9d07fde588d1b8af0af297023de',
network='bitcoinlib_test', db_uri=self.DATABASE_URI)
witness_type='legacy', network='bitcoinlib_test', db_uri=self.DATABASE_URI)
w.utxos_update()
wts = w.transactions()
txid = wts[0].txid
Expand Down

0 comments on commit 86bb946

Please sign in to comment.