simplify wallet types
This commit is contained in:
parent
058e49e839
commit
24a9ff3fef
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import keystore
|
import keystore
|
||||||
from wallet import Wallet, Imported_Wallet, Standard_Wallet, Multisig_Wallet, WalletStorage
|
from wallet import Wallet, Imported_Wallet, Standard_Wallet, Multisig_Wallet, WalletStorage, wallet_types
|
||||||
from i18n import _
|
from i18n import _
|
||||||
from plugins import run_hook
|
from plugins import run_hook
|
||||||
|
|
||||||
|
@ -76,11 +76,10 @@ class BaseWizard(object):
|
||||||
])
|
])
|
||||||
wallet_kinds = [
|
wallet_kinds = [
|
||||||
('standard', _("Standard wallet")),
|
('standard', _("Standard wallet")),
|
||||||
('twofactor', _("Wallet with two-factor authentication")),
|
('2fa', _("Wallet with two-factor authentication")),
|
||||||
('multisig', _("Multi-signature wallet")),
|
('multisig', _("Multi-signature wallet")),
|
||||||
]
|
]
|
||||||
registered_kinds = Wallet.categories()
|
choices = [pair for pair in wallet_kinds if pair[0] in wallet_types]
|
||||||
choices = wallet_kinds#[pair for pair in wallet_kinds if pair[0] in registered_kinds]
|
|
||||||
self.choice_dialog(title=title, message=message, choices=choices, run_next=self.on_wallet_type)
|
self.choice_dialog(title=title, message=message, choices=choices, run_next=self.on_wallet_type)
|
||||||
|
|
||||||
def on_wallet_type(self, choice):
|
def on_wallet_type(self, choice):
|
||||||
|
@ -89,7 +88,7 @@ class BaseWizard(object):
|
||||||
action = 'choose_keystore'
|
action = 'choose_keystore'
|
||||||
elif choice == 'multisig':
|
elif choice == 'multisig':
|
||||||
action = 'choose_multisig'
|
action = 'choose_multisig'
|
||||||
elif choice == 'twofactor':
|
elif choice == '2fa':
|
||||||
self.storage.put('wallet_type', '2fa')
|
self.storage.put('wallet_type', '2fa')
|
||||||
self.storage.put('use_trustedcoin', True)
|
self.storage.put('use_trustedcoin', True)
|
||||||
self.plugin = self.plugins.load_plugin('trustedcoin')
|
self.plugin = self.plugins.load_plugin('trustedcoin')
|
||||||
|
|
|
@ -153,14 +153,14 @@ class Plugins(DaemonThread):
|
||||||
self.print_error("cannot load plugin for:", name)
|
self.print_error("cannot load plugin for:", name)
|
||||||
return wallet_types, descs
|
return wallet_types, descs
|
||||||
|
|
||||||
def register_wallet_type(self, name, gui_good, details):
|
def register_wallet_type(self, name, gui_good, wallet_type):
|
||||||
from wallet import Wallet
|
from wallet import register_wallet_type, register_constructor
|
||||||
global plugin_loaders
|
self.print_error("registering wallet type", (wallet_type, name))
|
||||||
def loader():
|
def loader():
|
||||||
plugin = self.wallet_plugin_loader(name)
|
plugin = self.wallet_plugin_loader(name)
|
||||||
Wallet.register_constructor(details[0], details[1], plugin.wallet_class)
|
register_constructor(wallet_type, plugin.wallet_class)
|
||||||
self.print_error("registering wallet type %s: %s" %(name, details))
|
register_wallet_type(wallet_type)
|
||||||
plugin_loaders[details[1]] = loader
|
plugin_loaders[wallet_type] = loader
|
||||||
|
|
||||||
def register_keystore(self, name, gui_good, details):
|
def register_keystore(self, name, gui_good, details):
|
||||||
from keystore import register_keystore
|
from keystore import register_keystore
|
||||||
|
|
|
@ -1530,7 +1530,20 @@ class Multisig_Wallet(Deterministic_Wallet):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WalletType = namedtuple("WalletType", "category type constructor")
|
wallet_types = ['standard', 'multisig', 'imported']
|
||||||
|
|
||||||
|
def register_wallet_type(category):
|
||||||
|
wallet_types.append(category)
|
||||||
|
|
||||||
|
wallet_constructors = {
|
||||||
|
'standard': Standard_Wallet,
|
||||||
|
'old': Standard_Wallet,
|
||||||
|
'xpub': Standard_Wallet,
|
||||||
|
'imported': Imported_Wallet
|
||||||
|
}
|
||||||
|
|
||||||
|
def register_constructor(wallet_type, constructor):
|
||||||
|
wallet_constructors[wallet_type] = constructor
|
||||||
|
|
||||||
|
|
||||||
# former WalletFactory
|
# former WalletFactory
|
||||||
|
@ -1539,15 +1552,6 @@ class Wallet(object):
|
||||||
This class is actually a factory that will return a wallet of the correct
|
This class is actually a factory that will return a wallet of the correct
|
||||||
type when passed a WalletStorage instance."""
|
type when passed a WalletStorage instance."""
|
||||||
|
|
||||||
wallets = [ # category type constructor
|
|
||||||
WalletType('standard', 'old', Standard_Wallet),
|
|
||||||
WalletType('standard', 'xpub', Standard_Wallet),
|
|
||||||
WalletType('standard', 'standard', Standard_Wallet),
|
|
||||||
WalletType('standard', 'imported', Imported_Wallet),
|
|
||||||
WalletType('multisig', '2of2', Multisig_Wallet),
|
|
||||||
WalletType('multisig', '2of3', Multisig_Wallet),
|
|
||||||
]
|
|
||||||
|
|
||||||
def __new__(self, storage):
|
def __new__(self, storage):
|
||||||
wallet_type = storage.get('wallet_type')
|
wallet_type = storage.get('wallet_type')
|
||||||
WalletClass = Wallet.wallet_class(wallet_type)
|
WalletClass = Wallet.wallet_class(wallet_type)
|
||||||
|
@ -1562,21 +1566,12 @@ class Wallet(object):
|
||||||
wallet = rwc(storage)
|
wallet = rwc(storage)
|
||||||
return wallet
|
return wallet
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def categories():
|
|
||||||
return [wallet.category for wallet in Wallet.wallets]
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def register_constructor(category, type, constructor):
|
|
||||||
Wallet.wallets.append(WalletType(category, type, constructor))
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def wallet_class(wallet_type):
|
def wallet_class(wallet_type):
|
||||||
if Wallet.multisig_type(wallet_type):
|
if Wallet.multisig_type(wallet_type):
|
||||||
return Multisig_Wallet
|
return Multisig_Wallet
|
||||||
for wallet in Wallet.wallets:
|
if wallet_type in wallet_constructors:
|
||||||
if wallet.type == wallet_type:
|
return wallet_constructors[wallet_type]
|
||||||
return wallet.constructor
|
|
||||||
raise RuntimeError("Unknown wallet type: " + wallet_type)
|
raise RuntimeError("Unknown wallet type: " + wallet_type)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -7,5 +7,5 @@ description = ''.join([
|
||||||
" <a href=\"https://api.trustedcoin.com/#/electrum-help\">https://api.trustedcoin.com/#/electrum-help</a>"
|
" <a href=\"https://api.trustedcoin.com/#/electrum-help\">https://api.trustedcoin.com/#/electrum-help</a>"
|
||||||
])
|
])
|
||||||
requires_wallet_type = ['2fa']
|
requires_wallet_type = ['2fa']
|
||||||
registers_wallet_type = ('twofactor', '2fa', _("Wallet with two-factor authentication"))
|
registers_wallet_type = '2fa'
|
||||||
available_for = ['qt']
|
available_for = ['qt']
|
||||||
|
|
Loading…
Reference in New Issue