class for xpub wallets
This commit is contained in:
parent
edb5552a31
commit
8df2179025
|
@ -138,7 +138,6 @@ class Abstract_Wallet(object):
|
|||
self.gap_limit_for_change = 3 # constant
|
||||
# saved fields
|
||||
self.seed_version = storage.get('seed_version', NEW_SEED_VERSION)
|
||||
self.gap_limit = storage.get('gap_limit', 5)
|
||||
self.use_change = storage.get('use_change',True)
|
||||
self.use_encryption = storage.get('use_encryption', False)
|
||||
self.seed = storage.get('seed', '') # encrypted
|
||||
|
@ -1223,16 +1222,15 @@ class Deterministic_Wallet(Abstract_Wallet):
|
|||
return out
|
||||
|
||||
|
||||
|
||||
class BIP32_Wallet(Deterministic_Wallet):
|
||||
# Wallet with a single BIP32 account, no seed
|
||||
# gap limit 20
|
||||
root_name = 'x/'
|
||||
# abstract class, bip32 logic
|
||||
gap_limit = 20
|
||||
|
||||
def __init__(self, storage):
|
||||
Deterministic_Wallet.__init__(self, storage)
|
||||
self.master_public_keys = storage.get('master_public_keys', {})
|
||||
self.master_private_keys = storage.get('master_private_keys', {})
|
||||
self.gap_limit = 20
|
||||
|
||||
def is_watching_only(self):
|
||||
return not bool(self.master_private_keys)
|
||||
|
@ -1251,20 +1249,6 @@ class BIP32_Wallet(Deterministic_Wallet):
|
|||
xpub = self.master_public_keys[self.root_name]
|
||||
assert deserialize_xkey(xpriv)[3] == deserialize_xkey(xpub)[3]
|
||||
|
||||
def create_xprv_wallet(self, xprv, password):
|
||||
xpub = bitcoin.xpub_from_xprv(xprv)
|
||||
account = BIP32_Account({'xpub':xpub})
|
||||
self.storage.put('seed_version', self.seed_version, True)
|
||||
self.add_master_private_key(self.root_name, xprv, password)
|
||||
self.add_master_public_key(self.root_name, xpub)
|
||||
self.add_account('0', account)
|
||||
|
||||
def create_xpub_wallet(self, xpub):
|
||||
account = BIP32_Account({'xpub':xpub})
|
||||
self.storage.put('seed_version', self.seed_version, True)
|
||||
self.add_master_public_key(self.root_name, xpub)
|
||||
self.add_account('0', account)
|
||||
|
||||
def add_master_public_key(self, name, xpub):
|
||||
self.master_public_keys[name] = xpub
|
||||
self.storage.put('master_public_keys', self.master_public_keys, True)
|
||||
|
@ -1295,6 +1279,27 @@ class BIP32_Wallet(Deterministic_Wallet):
|
|||
return False
|
||||
|
||||
|
||||
class BIP32_Simple_Wallet(BIP32_Wallet):
|
||||
# Wallet with a single BIP32 account, no seed
|
||||
# gap limit 20
|
||||
root_name = 'x/'
|
||||
wallet_type = 'xpub'
|
||||
|
||||
def create_xprv_wallet(self, xprv, password):
|
||||
xpub = bitcoin.xpub_from_xprv(xprv)
|
||||
account = BIP32_Account({'xpub':xpub})
|
||||
self.storage.put('seed_version', self.seed_version, True)
|
||||
self.add_master_private_key(self.root_name, xprv, password)
|
||||
self.add_master_public_key(self.root_name, xpub)
|
||||
self.add_account('0', account)
|
||||
|
||||
def create_xpub_wallet(self, xpub):
|
||||
account = BIP32_Account({'xpub':xpub})
|
||||
self.storage.put('seed_version', self.seed_version, True)
|
||||
self.add_master_public_key(self.root_name, xpub)
|
||||
self.add_account('0', account)
|
||||
|
||||
|
||||
class BIP32_HD_Wallet(BIP32_Wallet):
|
||||
# wallet that can create accounts
|
||||
|
||||
|
@ -1484,6 +1489,11 @@ class Wallet_2of3(Wallet_2of2):
|
|||
|
||||
class OldWallet(Deterministic_Wallet):
|
||||
wallet_type = 'old'
|
||||
gap_limit = 5
|
||||
|
||||
def __init__(self, storage):
|
||||
Deterministic_Wallet.__init__(self, storage)
|
||||
self.gap_limit = storage.get('gap_limit', 5)
|
||||
|
||||
def make_seed(self):
|
||||
import mnemonic
|
||||
|
@ -1571,6 +1581,7 @@ class Wallet(object):
|
|||
|
||||
self.wallet_types = [
|
||||
('old', ("Old wallet"), OldWallet),
|
||||
('xpub', ("BIP32 Import"), BIP32_Simple_Wallet),
|
||||
('standard', ("Standard wallet"), NewWallet),
|
||||
('imported', ("Imported wallet"), Imported_Wallet),
|
||||
('2of2', ("Multisig wallet (2 of 2)"), Wallet_2of2),
|
||||
|
@ -1689,12 +1700,12 @@ class Wallet(object):
|
|||
|
||||
@classmethod
|
||||
def from_xpub(self, xpub, storage):
|
||||
w = BIP32_Wallet(storage)
|
||||
w = BIP32_Simple_Wallet(storage)
|
||||
w.create_xpub_wallet(xpub)
|
||||
return w
|
||||
|
||||
@classmethod
|
||||
def from_xprv(self, xprv, password, storage):
|
||||
w = BIP32_Wallet(storage)
|
||||
w = BIP32_Simple_Wallet(storage)
|
||||
w.create_xprv_wallet(xprv, password)
|
||||
return w
|
||||
|
|
Loading…
Reference in New Issue