You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
8.4 KiB

# SPDX-FileCopyrightText: 2020 Foundation Devices, Inc. <hello@foundationdevices.com>
4 years ago
# SPDX-License-Identifier: GPL-3.0-or-later
#
# SPDX-FileCopyrightText: 2018 Coinkite, Inc. <coldcardwallet.com>
4 years ago
# SPDX-License-Identifier: GPL-3.0-only
#
# (c) Copyright 2018 by Coinkite Inc. This file is part of Coldcard <coldcardwallet.com>
# and is covered by GPLv3 license found in COPYING.
#
# flow.py - Menu structure
#
import version
from actions import *
# from address_explorer import address_explore
from choosers import *
from common import settings
from menu import MenuItem
from public_constants import AF_P2WPKH
from multisig import make_multisig_menu
from wallets.utils import has_export_mode
from export import view_backup_password
from utils import is_new_wallet_in_progress, get_accounts, is_screenshot_mode_enabled
from new_wallet import pair_new_wallet
from ie import show_browser
FirmwareMenu = [
MenuItem('Update Firmware', f=update_firmware),
4 years ago
MenuItem('Current Version', f=show_version),
]
SDCardMenu = [
MenuItem('Format Card', f=format_sd_card),
4 years ago
MenuItem('List Files', f=list_files),
MenuItem('Export Summary', f=export_summary),
4 years ago
]
def archived_accounts_exist():
accounts = get_accounts()
for account in accounts:
if account.get('status') == 'r':
return True
return False
def has_secrets():
from common import pa
return not pa.is_secret_blank()
def has_pubkey():
if common.cached_pubkey == None:
result, common.cached_pubkey = read_user_firmware_pubkey()
if not result:
return False
return not is_all_zero(common.cached_pubkey)
DeveloperPubkeyMenu = [
MenuItem('Install PubKey', predicate=lambda: not has_pubkey(), f=install_user_firmware_pubkey),
MenuItem('View PubKey', predicate=has_pubkey, f=view_user_firmware_pubkey),
MenuItem('Remove PubKey', predicate=has_pubkey, f=remove_user_firmware_pubkey)
]
4 years ago
AdvancedMenu = [
MenuItem('Change PIN', f=change_pin),
MenuItem('Passphrase', menu_title='Passphrase', chooser=enable_passphrase_chooser),
MenuItem('Sign Text File', predicate=has_secrets, f=sign_message_on_sd),
MenuItem('MicroSD Settings', menu=SDCardMenu),
MenuItem('View Seed Words', f=view_seed_words, predicate=lambda: settings.get('words', True)),
MenuItem('Developer PubKey', menu=DeveloperPubkeyMenu, menu_title='Developer'),
MenuItem('Erase Passport', f=erase_wallet, arg=True)
4 years ago
]
BackupMenu = [
MenuItem('Create Backup', f=make_microsd_backup),
MenuItem('Verify Backup', f=verify_microsd_backup),
MenuItem('View Password', f=view_backup_password),
MenuItem('Restore Backup', f=restore_microsd_backup),
4 years ago
]
SettingsMenu = [
MenuItem('About', f=about_info),
MenuItem('Firmware', menu=FirmwareMenu),
MenuItem('Backup', menu=BackupMenu),
MenuItem('Screen Brightness', chooser=brightness_chooser),
MenuItem('Auto Shutdown', chooser=shutdown_timeout_chooser),
MenuItem('Multisig', menu=make_multisig_menu, arg='Multisig'),
MenuItem('Accounts', menu=make_accounts_menu, arg='Accounts'),
MenuItem('Advanced', menu=AdvancedMenu, menu_title='Advanced')
4 years ago
]
NoWalletSettingsMenu = [
MenuItem('About', f=about_info),
MenuItem('Firmware', menu=FirmwareMenu),
MenuItem('Screen Brightness', chooser=brightness_chooser),
MenuItem('Auto Shutdown', chooser=shutdown_timeout_chooser),
4 years ago
MenuItem('Change PIN', f=change_pin),
]
# ManageAcctMenu = [
# MenuItem('About', f=account_info),
# MenuItem('Export by QR', f=export_wallet_qr, predicate=lambda:has_export_mode('qr')),
# MenuItem('Export by microSD', f=export_wallet_microsd, predicate=lambda: has_export_mode('microsd')),
# MenuItem('Rename', f=rename_account),
# MenuItem('Archive', f=archive_account)
# ]
def not_account_zero():
return common.active_account.get('acct_num') > 0
AccountMenu = [
MenuItem('Rename', f=rename_account),
MenuItem('Delete', f=delete_account, predicate=not_account_zero),
4 years ago
]
SeedLengthMenu = [
MenuItem('24-Word Seed', f=restore_wallet_from_seed, arg=24),
MenuItem('18-Word Seed', f=restore_wallet_from_seed, arg=18),
MenuItem('12-Word Seed', f=restore_wallet_from_seed, arg=12),
4 years ago
]
# Has PIN, but no secret seed yet
NoSeedMenu = [
MenuItem('Create New Seed', f=create_new_seed),
MenuItem('Restore Seed', menu=SeedLengthMenu, menu_title='Seed Length'),
MenuItem('Restore Backup', f=restore_microsd_backup),
MenuItem('Settings', menu=NoWalletSettingsMenu, menu_title='Settings'),
4 years ago
]
from noise_source import NoiseSource
4 years ago
DeveloperMenu = [
# MenuItem('Settings Error 2', f=generate_settings_error2),
# MenuItem('Settings Error', f=generate_settings_error),
MenuItem('Set Last Addr', f=set_last_verified_addr),
MenuItem('Clear OVC', f=clear_ovc),
MenuItem('Test UR1', f=test_ur1),
MenuItem('Reset Device', f=reset_device),
MenuItem('Test Battery Calcs', f=test_battery_calcs),
# MenuItem('Test Folder', f=test_folders),
# MenuItem('Test Enter Number', f=test_num_entry),
MenuItem('Settings', menu=SettingsMenu),
MenuItem('Clear Accts/Multisig', f=clear_accts),
MenuItem('Dump Settings', menu=dump_settings),
MenuItem('Dump Flash Cache', menu=dump_flash_cache),
MenuItem('Toggle Battery Mon', f=toggle_battery_mon),
MenuItem('Toggle Screenshot', f=toggle_screenshot_mode),
MenuItem('Toggle Snapshot', f=toggle_snapshot_mode),
MenuItem('Write Flash Cache', f=test_write_flash_cache),
MenuItem('Read Flash Cache', f=test_read_flash_cache),
MenuItem('Supply Chain Test', f=supply_chain_challenge),
# MenuItem('Address Explorer', f=address_explore),
MenuItem('Import User PubKey', f=install_user_firmware_pubkey),
MenuItem('Read User PubKey', f=read_user_firmware_pubkey),
MenuItem('Test Derive Addrs', f=test_derive_addresses),
MenuItem('Test Seed Check', f=test_seed_check),
MenuItem('Enter Passphrase', f=enter_passphrase, arg='Passphrase'),
MenuItem('Random: All', f=gen_random, arg=NoiseSource.ALL),
# MenuItem('Random: All Except SE', f=gen_random, arg=NoiseSource.AVALANCHE | NoiseSource.MCU | NoiseSource.AMBIENT_LIGHT_SENSOR),
MenuItem('Random: Avalanche', f=gen_random, arg=NoiseSource.AVALANCHE),
MenuItem('Read Ambient', f=read_ambient),
# MenuItem('Battery Monitor', f=battery_mon),
MenuItem('Create New Seed', f=create_new_seed),
MenuItem('Restore SD Card', f=restore_microsd_backup),
MenuItem('View Seed Words', f=view_seed_words, predicate=lambda: settings.get('words', True)),
4 years ago
MenuItem('Select PIN', f=initial_pin_setup),
MenuItem('Login', f=block_until_login),
MenuItem('Update XPUB/XFP', f=update_xpub),
MenuItem('Update Firmware', f=update_firmware),
MenuItem('Format SD Card', f=format_sd_card),
4 years ago
MenuItem('Enter 12-Word Seed', f=enter_seed_phrase, arg=12),
MenuItem('Enter 24-Word Seed', f=enter_seed_phrase, arg=24),
MenuItem('Sign with QR Code', f=magic_scan, arg='Scan QR Code'),
4 years ago
MenuItem('Get Config.', f=se_get_config),
MenuItem('Power Mon.', f=show_power_monitor),
MenuItem('Board Rev.', f=show_board_rev),
MenuItem('UR Unit Tests', f=test_ur),
MenuItem('Test UR Encoder', f=test_ur_encoder),
4 years ago
# Run these three to do a "factory reset"
MenuItem('Erase User Settings', f=erase_user_settings),
MenuItem('Erase Passport', f=erase_wallet, arg=False),
# MenuItem('Set Blank PIN', f=set_blank_pin),
4 years ago
MenuItem('Test UR1.0', f=test_ur1),
]
MainMenu = [
# MenuItem('Developer Menu', menu=DeveloperMenu),
# MenuItem('Start/Stop Demo', f=toggle_demo),
MenuItem('Sign with QR Code', f=magic_scan, arg='Scan QR Code'),
4 years ago
MenuItem('Sign with microSD', f=sign_tx_from_sd),
MenuItem('Verify Address', f=verify_address, arg='Verify Address'),
# Show Resume or Pair Wallet menu depending on status
MenuItem('Resume Pair Wallet', f=pair_new_wallet, predicate=is_new_wallet_in_progress),
MenuItem('Pair Wallet', f=pair_new_wallet, predicate=lambda: not is_new_wallet_in_progress(), arg='Pair Wallet'),
MenuItem('Settings', menu=SettingsMenu, menu_title='Settings'),
4 years ago
]
ExtrasMenu = [
# MenuItem('Developer Menu', menu=DeveloperMenu),
4 years ago
MenuItem('Snakamoto', f=play_snake),
MenuItem('Stacking Sats', f=play_stacking_sats),
MenuItem('Internet Browser', f=show_browser),
MenuItem('Enable Screenshots', f=toggle_screenshot_mode, predicate=lambda: not is_screenshot_mode_enabled()),
MenuItem('Disable Screenshots', f=toggle_screenshot_mode, predicate=is_screenshot_mode_enabled)
4 years ago
]