Skip to content

Commit a220932

Browse files
committed
serialize txin-type in xpub/xprv
1 parent 62fe3a4 commit a220932

4 files changed

Lines changed: 21 additions & 23 deletions

File tree

lib/base_wizard.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ def on_restore_bip39(self, seed, passphrase):
299299
self.derivation_dialog(f)
300300

301301
def create_keystore(self, seed, passphrase):
302-
k = keystore.from_seed(seed, passphrase)
302+
k = keystore.from_seed(seed, passphrase, self.wallet_type == 'multisig')
303303
self.on_keystore(k)
304304

305305
def on_bip43(self, seed, passphrase, derivation):

lib/bitcoin.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,25 @@ def read_json_dict(filename):
4747
return r
4848

4949

50+
51+
5052
# Version numbers for BIP32 extended keys
5153
# standard: xprv, xpub
5254
# segwit in p2sh: yprv, ypub
5355
# native segwit: zprv, zpub
5456
XPRV_HEADERS = {
5557
'standard': 0x0488ade4,
56-
'segwit_p2sh': 0x049d7878,
57-
'segwit': 0x4b2430c
58+
'p2wpkh-p2sh': 0x049d7878,
59+
'p2wsh-p2sh': 0x295b004,
60+
'p2wpkh': 0x4b2430c,
61+
'p2wsh': 0x2aa7a99
5862
}
5963
XPUB_HEADERS = {
6064
'standard': 0x0488b21e,
61-
'segwit_p2sh': 0x049d7cb2,
62-
'segwit': 0x4b24746
65+
'p2wpkh-p2sh': 0x049d7cb2,
66+
'p2wsh-p2sh': 0x295b43e,
67+
'p2wpkh': 0x4b24746,
68+
'p2wsh': 0x2aa7ed3
6369
}
6470

6571

lib/keystore.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ def bip44_derivation(account_id, segwit=False):
681681
coin = 1 if bitcoin.TESTNET else 0
682682
return "m/%d'/%d'/%d'" % (bip, coin, int(account_id))
683683

684-
def from_seed(seed, passphrase):
684+
def from_seed(seed, passphrase, is_p2sh):
685685
t = seed_type(seed)
686686
if t == 'old':
687687
keystore = Old_KeyStore({})
@@ -691,7 +691,13 @@ def from_seed(seed, passphrase):
691691
keystore.add_seed(seed)
692692
keystore.passphrase = passphrase
693693
bip32_seed = Mnemonic.mnemonic_to_seed(seed, passphrase)
694-
keystore.add_xprv_from_seed(bip32_seed, t, "m/")
694+
if t == 'standard':
695+
der = "m/"
696+
xtype = 'standard'
697+
else:
698+
der = "m/1'/" if is_p2sh else "m/0'/"
699+
xtype = 'p2wsh' if is_p2sh else 'p2wpkh'
700+
keystore.add_xprv_from_seed(bip32_seed, xtype, der)
695701
else:
696702
raise BaseException(t)
697703
return keystore

lib/wallet.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1662,14 +1662,7 @@ def load_keystore(self):
16621662
xtype = deserialize_xpub(self.keystore.xpub)[0]
16631663
except:
16641664
xtype = 'standard'
1665-
if xtype == 'standard':
1666-
self.txin_type = 'p2pkh'
1667-
elif xtype == 'segwit':
1668-
self.txin_type = 'p2wpkh'
1669-
elif xtype == 'segwit_p2sh':
1670-
self.txin_type = 'p2wpkh-p2sh'
1671-
else:
1672-
raise BaseException('unknown txin_type', xtype)
1665+
self.txin_type = 'p2pkh' if xtype == 'standard' else xtype
16731666

16741667
def get_pubkey(self, c, i):
16751668
return self.derive_pubkeys(c, i)
@@ -1731,14 +1724,7 @@ def load_keystore(self):
17311724
self.keystores[name] = load_keystore(self.storage, name)
17321725
self.keystore = self.keystores['x1/']
17331726
xtype = deserialize_xpub(self.keystore.xpub)[0]
1734-
if xtype == 'standard':
1735-
self.txin_type = 'p2sh'
1736-
elif xtype == 'segwit':
1737-
self.txin_type = 'p2wsh'
1738-
elif xtype == 'segwit_p2sh':
1739-
self.txin_type = 'p2wsh-p2sh'
1740-
else:
1741-
raise BaseException('unknown txin_type', xtype)
1727+
self.txin_type = 'p2sh' if xtype == 'standard' else 'xtype'
17421728

17431729
def save_keystore(self):
17441730
for name, k in self.keystores.items():

0 commit comments

Comments
 (0)