Browse Source

Don't crash if find_address() is called with a multisig address, but no ms_wallet

dev-v1.0.4
Ken Carpenter 4 years ago
parent
commit
ce8631b70e
  1. 52
      ports/stm32/boards/Passport/modules/utils.py

52
ports/stm32/boards/Passport/modules/utils.py

@ -511,30 +511,34 @@ def folder_exists(path):
def find_address(path, start_address_idx, address, addr_type, ms_wallet, max_to_check=100, reverse=False): def find_address(path, start_address_idx, address, addr_type, ms_wallet, max_to_check=100, reverse=False):
import stash import stash
with stash.SensitiveValues() as sv: try:
if ms_wallet: with stash.SensitiveValues() as sv:
# NOTE: Can't easily reverse order here, so this is slightly less efficient if ms_wallet:
for (curr_idx, paths, curr_address, script) in ms_wallet.yield_addresses(start_address_idx, max_to_check): # NOTE: Can't easily reverse order here, so this is slightly less efficient
# print('curr_idx={}: paths={} curr_address = {}'.format(curr_idx, paths, curr_address)) for (curr_idx, paths, curr_address, script) in ms_wallet.yield_addresses(start_address_idx, max_to_check):
# print('curr_idx={}: paths={} curr_address = {}'.format(curr_idx, paths, curr_address))
if curr_address == address:
return (curr_idx, paths) # NOTE: Paths are the full paths of the addresses of each signer if curr_address == address:
return (curr_idx, paths) # NOTE: Paths are the full paths of the addresses of each signer
else:
r = range(start_address_idx, start_address_idx + max_to_check) else:
if reverse: r = range(start_address_idx, start_address_idx + max_to_check)
r = reversed(r) if reverse:
r = reversed(r)
for curr_idx in r:
addr_path = '{}/0/{}'.format(path, curr_idx) # Zero for non-change address for curr_idx in r:
# print('addr_path={}'.format(addr_path)) addr_path = '{}/0/{}'.format(path, curr_idx) # Zero for non-change address
node = sv.derive_path(addr_path) # print('addr_path={}'.format(addr_path))
# print('node={}'.format(node)) node = sv.derive_path(addr_path)
curr_address = sv.chain.address(node, addr_type) # print('node={}'.format(node))
# print('curr_idx={}: path={} addr_type={} curr_address = {}'.format(curr_idx, addr_path, addr_type, curr_address)) curr_address = sv.chain.address(node, addr_type)
if curr_address == address: # print('curr_idx={}: path={} addr_type={} curr_address = {}'.format(curr_idx, addr_path, addr_type, curr_address))
return (curr_idx, addr_path) if curr_address == address:
return (-1, None) return (curr_idx, addr_path)
return (-1, None)
except Exception as e:
# Any address handling exceptions result in no address found
return (-1, None)
def get_accounts(): def get_accounts():
from common import settings from common import settings

Loading…
Cancel
Save