Skip to content

Commit bef9cf6

Browse files
k9ertk9ertmoneymanolis
authored
Bugfixes: Various bugfixes (#1959)
* missing __init__.py * Add Device modules to hidden imports * make cli-arguments work in electron * Bugfix devices not shown * additional checks for wallet_import * Update src/cryptoadvance/specter/util/wallet_importer.py Co-authored-by: Manolis Mandrapilias <[email protected]> * Update src/cryptoadvance/specter/util/wallet_importer.py Co-authored-by: Manolis Mandrapilias <[email protected]> * Update src/cryptoadvance/specter/util/wallet_importer.py Co-authored-by: Manolis Mandrapilias <[email protected]> Co-authored-by: k9ert <[email protected]> Co-authored-by: Manolis Mandrapilias <[email protected]>
1 parent 1d2fea9 commit bef9cf6

File tree

11 files changed

+160
-29
lines changed

11 files changed

+160
-29
lines changed

.gitlab-ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ release_electron_linux_windows:
157157
stage: releasing
158158
only:
159159
- tags
160+
dependencies:
161+
- release_binary_windows
160162
before_script:
161163
- python3 -V # Print out python version for debugging
162164
- apt update

pyinstaller/electron/main.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -348,10 +348,8 @@ function startSpecterd(specterdPath) {
348348
if (specterdArgs == null) {
349349
specterdArgs = []
350350
}
351-
let specterdExtraArgs = appSettings.specterdCLIArgs.split('--')
352-
specterdExtraArgs = specterdExtraArgs.filter(Boolean)
353-
specterdExtraArgs.forEach((arg, index) => specterdExtraArgs[index] = '--' + arg.trim())
354-
351+
let specterdExtraArgs = appSettings.specterdCLIArgs.split(' ')
352+
specterdExtraArgs.forEach((arg, index) => specterdExtraArgs[index] = arg.trim())
355353
specterdArgs = specterdArgs.concat(specterdExtraArgs)
356354
}
357355

src/cryptoadvance/specter/commands/psbt_creator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from cryptoadvance.specter.specter_error import SpecterError
88
from cryptoadvance.specter.util.common import str2bool
99

10-
from ..helpers import is_testnet, normalize_address
10+
from ..helpers import normalize_address
1111
from ..util.descriptor import AddChecksum, Descriptor
1212

1313
logger = logging.getLogger(__name__)

src/cryptoadvance/specter/internal_node.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from pathlib import Path
55

66

7-
from .helpers import is_testnet
87
from .specter_error import SpecterError, ExtProcTimeoutException
98
from .rpc import (
109
get_default_datadir,

src/cryptoadvance/specter/managers/service_manager/service_manager.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,16 +429,37 @@ def get_service_x_dirs(cls, x):
429429

430430
@classmethod
431431
def get_service_packages(cls):
432-
"""returns a list of strings containing the service-classes (+ controller/config-classes)
432+
"""returns a list of strings containing the service-classes (+ controller +config-classes +devices)
433433
This is used for hiddenimports in pyinstaller
434434
"""
435435
arr = get_subclasses_for_clazz(Service)
436+
logger.info(f"initial arr: {arr}")
436437
arr.extend(
437438
get_classlist_of_type_clazz_from_modulelist(
438439
Service, ProductionConfig.EXTENSION_LIST
439440
)
440441
)
442+
logger.info(f"After extending: {arr}")
443+
# Before we transform the arr into an array of strings, we iterate through all services to discover
444+
# the devices which might be specified in there
445+
devices_arr = []
446+
for clazz in arr:
447+
if hasattr(clazz, "devices"):
448+
logger.debug("class {clazz} has devices: {clazz.devices}")
449+
for device in clazz.devices:
450+
try:
451+
import_module(device)
452+
devices_arr.append(device)
453+
except ModuleNotFoundError as e:
454+
pass
455+
456+
# Transform into array of strings
441457
arr = [clazz.__module__ for clazz in arr]
458+
459+
# Add the devices
460+
arr.extend(devices_arr)
461+
logger.debug(f"After transforming + devices: {arr}")
462+
442463
# Controller-Packagages from the services are not imported via the service but via the baseclass
443464
# Therefore hiddenimport don't find them. We have to do it here.
444465
cont_arr = [

src/cryptoadvance/specter/node.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ def bitcoin_core_version_raw(self):
110110
def network_parameters(self):
111111
return get_network(self.chain)
112112

113+
@property
114+
def is_testnet(self):
115+
return is_testnet(self.chain)
116+
113117
@property
114118
def is_running(self):
115119
if self.network_info["version"] == 999999:
@@ -582,10 +586,6 @@ def taproot_support(self):
582586
def chain(self):
583587
return self.info["chain"]
584588

585-
@property
586-
def is_testnet(self):
587-
return is_testnet(self.chain)
588-
589589
@property
590590
def asset_labels(self):
591591
if not self.is_liquid:

src/cryptoadvance/specter/specter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
ServiceUnencryptedStorageManager,
2626
)
2727

28-
from .helpers import clean_psbt, deep_update, is_liquid, is_testnet, get_asset_label
28+
from .helpers import clean_psbt, deep_update, is_liquid, get_asset_label
2929
from .internal_node import InternalNode
3030
from .liquid.rpc import LiquidRPC
3131
from .managers.config_manager import ConfigManager

src/cryptoadvance/specter/util/wallet_importer.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from embit.liquid.descriptor import LDescriptor
99
from flask_babel import lazy_gettext as _
1010

11+
from cryptoadvance.specter.device import Device
12+
1113
from ..key import Key
1214
from ..managers.wallet_manager import WalletManager
1315
from ..server_endpoints import flash
@@ -58,8 +60,36 @@ def __init__(self, wallet_json, specter, device_manager=None):
5860
self.unknown_cosigners,
5961
self.unknown_cosigners_types,
6062
) = self.parse_signers(device_manager.devices, self.cosigners_types)
63+
try:
64+
self.check_chain(specter.node)
65+
except Exception as e:
66+
logger.exception(e)
67+
raise SpecterError(f"Invalid chain: {e}")
6168
self.wallet_type = "multisig" if self.descriptor.is_basic_multisig else "simple"
6269

70+
def check_chain(self, node):
71+
72+
cosigner: Device
73+
for cosigner in self.cosigners:
74+
75+
key_chain_list = [key.is_testnet for key in cosigner.keys]
76+
logger.debug(key_chain_list)
77+
if node.is_testnet not in key_chain_list:
78+
raise SpecterError(
79+
f"The device {cosigner} does not have any key for the chain {node.chain}!"
80+
)
81+
for key, label in self.unknown_cosigners:
82+
if key.is_testnet != node.is_testnet:
83+
raise SpecterError(
84+
f"The device {label} has at least one key for the chain {key.metadata['chain'] } whereas your node is on the chain: {node.chain}!"
85+
)
86+
key: Key
87+
for key in self.keys:
88+
if key.is_testnet != node.is_testnet:
89+
raise SpecterError(
90+
f"The key {key} belongs to the chain {key.metadata['chain'] } but your node is on the chain {node.chain}!"
91+
)
92+
6393
def check_descriptor(self):
6494
# Sparrow fix: if all keys have None as allowed derivation - set allowed derivation to [0, None]
6595
if all(
@@ -86,6 +116,15 @@ def check_descriptor(self):
86116
)
87117

88118
def parse_signers(self, devices, cosigners_types):
119+
"""returns:
120+
* keys:
121+
* keys which are already existing in the device_manager
122+
* keys:[<cryptoadvance.specter.key.Key object at 0x7fda8451e0e0>]
123+
# cosigners:
124+
* [<cryptoadvance.specter.devices.generic.GenericDevice object at 0x7fda8451fcd0>]
125+
# unknown_cosigners:[(<cryptoadvance.specter.key.Key object at 0x7fda8451e830>, 'Signer - K'), (<cryptoadvance.specter.key.Key object at 0x7fda94235570>, 'Signer - Tired no WP')]
126+
127+
"""
89128
keys = []
90129
cosigners = []
91130
unknown_cosigners = []
@@ -119,7 +158,11 @@ def parse_signers(self, devices, cosigners_types):
119158
unknown_cosigners_types.append("other")
120159
else:
121160
unknown_cosigners_types.append(cosigners_types[i]["type"])
122-
161+
logger.debug("parse_signers returning:")
162+
logger.debug(f"keys:{keys}")
163+
logger.debug(f"cosigners:{cosigners}")
164+
logger.debug(f"unknown_cosigners:{unknown_cosigners}")
165+
logger.debug(f"unknown_cosigners_types:{unknown_cosigners_types}")
123166
return (keys, cosigners, unknown_cosigners, unknown_cosigners_types)
124167

125168
def create_nonexisting_signers(self, device_manager, request_form):

src/cryptoadvance/specterext/electrum/devices/__init__.py

Whitespace-only changes.

tests/test_managers_service.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,12 @@ def test_ServiceManager_get_service_x_dirs(caplog):
5656
os.chdir("../")
5757

5858

59-
def test_ServiceManager_get_service_packages():
59+
def test_ServiceManager_get_service_packages(caplog):
60+
caplog.set_level(logging.DEBUG)
6061
packages = ServiceManager.get_service_packages()
6162
assert "cryptoadvance.specterext.swan.service" in packages
63+
assert "cryptoadvance.specterext.electrum.service" in packages
64+
assert "cryptoadvance.specterext.electrum.devices.electrum" in packages
6265

6366

6467
@pytest.fixture

0 commit comments

Comments
 (0)