1
0

generic multisig wallet constructor. fixes #1129

This commit is contained in:
ThomasV
2015-04-03 11:27:57 +02:00
parent 87709dfd16
commit a3422d3fae
3 changed files with 38 additions and 94 deletions

View File

@@ -1798,12 +1798,15 @@ class Wallet(object):
return True
@classmethod
def from_seed(self, seed, storage):
def from_seed(self, seed, password, storage):
if is_old_seed(seed):
klass = OldWallet
elif is_new_seed(seed):
klass = NewWallet
w = klass(storage)
w.add_seed(text, password)
w.create_master_keys(password)
w.create_main_account(password)
return w
@classmethod
@@ -1840,3 +1843,30 @@ class Wallet(object):
w = BIP32_Simple_Wallet(storage)
w.create_xprv_wallet(xprv, password)
return w
@classmethod
def from_multisig(klass, key_list, password, storage):
if len(key_list) == 2:
self = Wallet_2of2(storage)
elif len(key_list) == 3:
self = Wallet_2of3(storage)
key_list = sorted(key_list, key = lambda x: klass.is_xpub(x))
for i, text in enumerate(key_list):
assert klass.is_seed(text) or klass.is_xprv(text) or klass.is_xpub(text)
name = "x%d/"%(i+1)
if klass.is_seed(text):
if name == 'x1/':
self.add_seed(text1, password)
self.create_master_keys(password)
else:
self.add_cosigner_seed(text, name, password)
elif klass.is_xprv(text):
xpub = bitcoin.xpub_from_xprv(text)
self.add_master_public_key(name, xpub)
self.add_master_private_key(name, text, password)
elif klass.is_xpub(text):
self.add_master_public_key(name, text)
self.use_encryption = (password != None)
self.storage.put('use_encryption', self.use_encryption, True)
self.create_main_account(password)
return self