Use listWallets to ascertain if account is from a device. Fix #1385. Fix #1128.

pull/1402/head
David Núñez 2019-10-03 12:35:10 +02:00
parent 9ae408056d
commit 5ca663ef3f
3 changed files with 16 additions and 6 deletions

View File

@ -1390,7 +1390,6 @@ class StakeHolder(Staker):
self.__get_accounts()
if checksum_address not in self:
raise self.UnknownAccount
# TODO: What if cached TransactingPower is wrongly initialized? See issue #1385
try:
transacting_power = self.__transacting_powers[checksum_address]
except KeyError:

View File

@ -166,11 +166,10 @@ def stake(click_config,
allocation_registry = None
initial_address = staking_address
dummy_password = "Look Away, I'm Hideous" # TODO: See #1385
STAKEHOLDER = stakeholder_config.produce(initial_address=initial_address,
allocation_registry=allocation_registry,
password=dummy_password)
allocation_registry=allocation_registry)
blockchain = BlockchainInterfaceFactory.get_interface(provider_uri=provider_uri) # Eager connection
economics = STAKEHOLDER.economics
# Dynamic click types (Economics)

View File

@ -19,6 +19,7 @@ along with nucypher. If not, see <https://www.gnu.org/licenses/>.
import inspect
from typing import List, Tuple, Optional
from eth_utils import to_checksum_address
from constant_sorrow.constants import NO_BLOCKCHAIN_CONNECTION
from hexbytes import HexBytes
from umbral import pre
@ -123,8 +124,19 @@ class TransactingPower(CryptoPowerUp):
self.blockchain = BlockchainInterfaceFactory.get_or_create_interface(provider_uri=provider_uri)
self.__account = account
# TODO: Is there a better way to design this Flag? See #1385
self.device = True if not password else False
# TODO: Temporary fix for #1128 and #1385. It's ugly af, but it works. Move somewhere else?
try:
wallets = self.blockchain.client.wallets
except AttributeError:
is_from_hw_wallet = False
else:
HW_WALLET_URL_PREFIXES = ('trezor', 'ledger')
hw_accounts = [w['accounts'] for w in wallets if w['url'].startswith(HW_WALLET_URL_PREFIXES)]
hw_addresses = [to_checksum_address(account['address']) for sublist in hw_accounts for account in sublist]
is_from_hw_wallet = account in hw_addresses
self.device = is_from_hw_wallet
self.__password = password
self.__unlocked = False