test fixes after Address Explorer label changes

This commit is contained in:
scgbckbone 2023-05-10 23:49:55 +02:00 committed by doc-hex
parent 448fae8bdd
commit 95e943a32b
11 changed files with 54 additions and 32 deletions

View File

@ -17,6 +17,7 @@ MULTI_FMT_TO_SCRIPT = {
"p2sh-p2wsh": "sh(wsh(%s))",
"p2wsh-p2sh": "sh(wsh(%s))",
"p2wsh": "wsh(%s)",
"p2tr": "tr(%s)"
}
SINGLE_FMT_TO_SCRIPT = {
@ -347,7 +348,7 @@ class MultisigDescriptor(Descriptor):
tmp_desc = desc.replace("tr(", "")
tmp_desc = tmp_desc.rstrip(")")
internal_key, tmp_desc = tmp_desc.split(",", 1)
assert tmp_desc.startswith("sortedmulti_a("), "Only on sortedmulti_a allowed"
assert tmp_desc.startswith("sortedmulti_a("), "Only one sortedmulti_a allowed"
tmp_desc = tmp_desc.replace("sortedmulti_a(", "")
tmp_desc = tmp_desc.rstrip(")")

View File

@ -55,7 +55,7 @@ class PaperWalletMaker:
def atype(self):
if self.is_taproot: return 2, 'Taproot P2TR'
if self.is_segwit: return 1, 'Segwit P2WPKH'
return 0, 'Classic P2PKPH'
return 0, 'Classic P2PKH'
async def pick_template(self, *a):
fn = await file_picker('Pick PDF template to use, or X for none.',
@ -71,7 +71,7 @@ class PaperWalletMaker:
self.is_segwit = idx == 1
self.is_taproot = idx == 2
self.update_menu()
return self.atype()[0], ['Classic P2PKPH', 'Segwit P2WPKH', 'Taproot P2TR'], set
return self.atype()[0], ['Classic P2PKH', 'Segwit P2WPKH', 'Taproot P2TR'], set
@staticmethod
def can_do_qr():

View File

@ -478,7 +478,7 @@ class USBHandler:
file_len, file_sha = unpack_from('<I32s', args)
if file_sha != self.file_checksum.digest():
return b'err_Checksum'
assert 100 < file_len <= (20*200), "badlen"
assert 100 < file_len <= (32*200), "badlen"
# Start an UX interaction, return immediately here
from auth import maybe_enroll_xpub

View File

@ -1586,7 +1586,6 @@ def load_export(need_keypress, cap_story, microsd_path, virtdisk_path, nfc_read_
else:
# virtual disk
if f"({key_map['vdisk']}) to save to Virtual Disk" not in story:
import pdb;pdb.set_trace()
pytest.skip("Vdisk disabled")
else:
need_keypress(key_map['vdisk'])

View File

@ -107,7 +107,6 @@ def test_show_addr_nfc_invalid(body_err, goto_home, pick_menu_item, nfc_write_te
@pytest.mark.parametrize("str_addr_fmt", ["p2pkh", "", "p2wpkh", "p2wpkh-p2sh", "p2sh-p2wpkh", "p2tr"])
def test_show_addr_nfc(path, str_addr_fmt, nfc_write_text, nfc_read_text, pick_menu_item, goto_home, cap_story,
need_keypress, addr_vs_path):
# import pdb;pdb.set_trace()
for _ in range(5):
# need to wait for ApproveMessageSign to be popped from ux stack
try:

View File

@ -27,7 +27,7 @@ def mk_common_derivations():
return doit
@pytest.fixture
def goto_address_explorer(goto_home, pick_menu_item, need_keypress, enter_number):
def goto_address_explorer(goto_home, pick_menu_item, need_keypress, enter_number, cap_menu):
def doit(click_idx=None, acct_num=None):
goto_home()
pick_menu_item('Address Explorer')
@ -41,9 +41,12 @@ def goto_address_explorer(goto_home, pick_menu_item, need_keypress, enter_number
time.sleep(0.01)
if acct_num:
for _ in range(5): # goto account number
need_keypress('8')
need_keypress("y")
# import pdb;pdb.set_trace()
menu = cap_menu()
# can be "Account number" or "Account: N"
mi = [m for m in menu if "Account" in m]
assert len(mi) == 1
pick_menu_item(mi[0])
enter_number(acct_num)
# now we are back at the top
@ -117,7 +120,7 @@ def generate_addresses_file(goto_address_explorer, need_keypress, cap_story, mic
time.sleep(.5) # always long enough to write the file?
title, body = cap_story()
if click_idx == 3 or is_p2tr:
if click_idx in (6,7) or is_p2tr:
# p2tr - no signature file
contents = load_export(way, label="Address summary", is_json=False, sig_check=False,
skip_query=True)
@ -194,7 +197,7 @@ def test_applications_samourai(chain, change, option, goto_address_explorer, cap
node_prv = BIP32Node.from_wallet_key(
sim_execfile('devtest/dump_private.py').strip()
)
goto_address_explorer(click_idx=6) # "applications" at index 3
goto_address_explorer(click_idx=8) # "applications" at index 8
menu = cap_menu()
assert "Samourai" in menu
pick_menu_item("Samourai")
@ -459,7 +462,7 @@ def test_custom_path(path, which_fmt, addr_vs_path, pick_menu_item, goto_address
@pytest.mark.parametrize("acct_num", [None, "999"])
def test_bitcoind_descriptor_address(addr_fmt, acct_num, bitcoind, goto_home, pick_menu_item, cap_story,
use_regtest, need_keypress, microsd_path, generate_addresses_file,
bitcoind_d_wallet_w_sk, load_export):
bitcoind_d_wallet_w_sk, load_export, settings_set):
# export single sig descriptors (external, internal)
# export addressses from address explorer
# derive addresses from descriptor with bitcoind
@ -495,15 +498,15 @@ def test_bitcoind_descriptor_address(addr_fmt, acct_num, bitcoind, goto_home, pi
if addr_fmt == AF_P2WPKH:
menu_item = "Segwit P2WPKH"
desc_prefix = "wpkh("
click_idx = 2
click_idx = 4
elif addr_fmt == AF_P2WPKH_P2SH:
menu_item = "P2SH-Segwit"
desc_prefix = "sh(wpkh("
click_idx = 1
click_idx = 2
elif addr_fmt == AF_P2TR:
menu_item = "Taproot P2TR"
desc_prefix = "tr("
click_idx = 3
click_idx = 6
sig_check = False
else:
# addr_fmt == AF_CLASSIC:
@ -521,6 +524,7 @@ def test_bitcoind_descriptor_address(addr_fmt, acct_num, bitcoind, goto_home, pi
# check both external and internal
for chng in [False, True]:
desc = int_desc if chng else ext_desc
settings_set("axi", 0)
cc_addrs_gen = generate_addresses_file(click_idx, acct_num=acct_num, change=chng)
cc_addrs = [addr for deriv, addr in cc_addrs_gen]
bitcoind_addrs = bitcoind.deriveaddresses(desc, [0, 249])

View File

@ -169,7 +169,6 @@ def make_signer_round1(settings_get, settings_set, settings_remove, microsd_path
# vdisk
path_fn = virtdisk_path
basename = bsms_sr1_fname(token, is_extended, suffix, index)
# pdb.set_trace()
with open(path_fn(basename), mode) as f:
f.write(data)
return data
@ -634,8 +633,9 @@ def test_coordinator_round2(way, encryption_type, M_N, addr_fmt, auto_collect, c
index = None
if encryption_type != "2":
index = i + 1
# pdb.set_trace()
all_data.append(make_signer_round1(token, way, purge_bsms=False, index=index))
goto_home()
pick_menu_item('Settings')
pick_menu_item('Multisig Wallets')
@ -1506,7 +1506,6 @@ def test_integration_coordinator(encryption_type, M_N, addr_fmt, clear_ms, micro
if "Press (1) to import co-signer round 1 files from SD Card" in story:
need_keypress("1")
need_keypress("y") # continue with manual file selection
# import pdb;pdb.set_trace()
if cr1_shortcut:
time.sleep(0.1)
title, story = cap_story()

View File

@ -614,7 +614,7 @@ def test_generic_descriptor_export(chain, addr_fmt, acct_num, goto_home, setting
desc_prefix = "sh(wpkh("
bip44_purpose = 49
elif addr_fmt == AF_P2TR:
menu_item = "Taproot (P2TR)"
menu_item = "Taproot P2TR"
desc_prefix = "tr("
bip44_purpose = 86
else:

View File

@ -303,7 +303,6 @@ def test_nfc_msg_signing_invalid(body, goto_home, pick_menu_item, nfc_write_text
@pytest.mark.parametrize("str_addr_fmt", ["p2pkh", "", "p2wpkh", "p2wpkh-p2sh", "p2sh-p2wpkh"])
def test_nfc_msg_signing(msg, path, str_addr_fmt, nfc_write_text, nfc_read_text, pick_menu_item,
goto_home, cap_story, need_keypress, addr_vs_path):
# import pdb;pdb.set_trace()
for _ in range(5):
# need to wait for ApproveMessageSign to be popped from ux stack
try:

View File

@ -157,7 +157,7 @@ def offer_ms_import(cap_story, dev, need_keypress):
def import_ms_wallet(dev, make_multisig, offer_ms_import, need_keypress):
def doit(M, N, addr_fmt=None, name=None, unique=0, accept=False, common=None, keys=None, do_import=True, derivs=None,
descriptor=False, int_ext_desc=False):
descriptor=False, int_ext_desc=False, internal_key=None):
keys = keys or make_multisig(M, N, unique=unique, deriv=common or (derivs[0] if derivs else None))
name = name or f'test-{M}-{N}'
@ -172,12 +172,17 @@ def import_ms_wallet(dev, make_multisig, offer_ms_import, need_keypress):
else:
assert len(derivs) == N
key_list = [(xfp, derivs[idx], dd.hwif(as_private=False)) for idx, (xfp, m, dd) in enumerate(keys)]
desc = MultisigDescriptor(M=M, N=N, keys=key_list, addr_fmt=addr_fmt)
if "p2tr" and internal_key is None:
internal_key = "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0"
addr_fmt = AF_P2TR
desc = MultisigDescriptor(M=M, N=N, keys=key_list, addr_fmt=addr_fmt, internal_key=internal_key)
if int_ext_desc:
desc_str = desc.serialize(int_ext=True)
else:
desc_str = desc.serialize()
config = "%s\n" % desc_str
else:
# render as a file for import
config = f"name: {name}\npolicy: {M} / {N}\n\n"
@ -1841,7 +1846,8 @@ def test_ms_addr_explorer(descriptor, change, M, N, addr_fmt, make_multisig, cle
derivs = [deriv.format(idx=i) for i in range(N)]
clear_ms()
keys = import_ms_wallet(M, N, accept=1, keys=keys, name=wal_name, derivs=derivs, addr_fmt=text_a_fmt, descriptor=descriptor)
keys = import_ms_wallet(M, N, accept=1, keys=keys, name=wal_name, derivs=derivs,
addr_fmt=text_a_fmt, descriptor=descriptor)
goto_home()
pick_menu_item("Address Explorer")
@ -2003,8 +2009,12 @@ def test_bitcoind_ms_address(change, descriptor, M_N, addr_fmt, clear_ms, goto_h
title, story = cap_story()
assert "Press (6)" in story
assert "change addresses." in story
assert "Taproot internal key" not in story
assert "Taproot tree keys" not in story
if addr_fmt == AF_P2TR:
assert "Taproot internal key" in story
assert "Taproot tree keys" in story
else:
assert "Taproot internal key" not in story
assert "Taproot tree keys" not in story
if change:
need_keypress("6")
time.sleep(0.2)
@ -2704,8 +2714,8 @@ def test_ms_xpub_ordering(descriptor, m_n, clear_ms, make_multisig, import_ms_wa
@pytest.mark.parametrize('cmn_pth_from_root', [True, False])
@pytest.mark.parametrize('way', ["sd", "vdisk", "nfc"])
@pytest.mark.parametrize('M_N', [(3, 15), (2, 2), (3, 5), (32, 32)])
@pytest.mark.parametrize('addr_fmt', [AF_P2WSH, AF_P2SH, AF_P2WSH_P2SH])
@pytest.mark.parametrize('M_N', [(3, 5), (2, 3), (15, 15), (32, 32)])
@pytest.mark.parametrize('addr_fmt', [AF_P2TR])
def test_multisig_descriptor_export(M_N, way, addr_fmt, cmn_pth_from_root, clear_ms, make_multisig,
import_ms_wallet, goto_home, pick_menu_item, cap_menu,
nfc_read_text, microsd_path, cap_story, need_keypress,
@ -2723,6 +2733,7 @@ def test_multisig_descriptor_export(M_N, way, addr_fmt, cmn_pth_from_root, clear
dd = {
AF_P2WSH: ("m/48'/1'/0'/2'/{idx}", 'p2wsh'),
AF_P2TR: ("m/48'/1'/0'/3'/{idx}", 'p2tr'),
AF_P2SH: ("m/45'/{idx}", 'p2sh'),
AF_P2WSH_P2SH: ("m/48'/1'/0'/1'/{idx}", 'p2sh-p2wsh'),
}
@ -2730,8 +2741,18 @@ def test_multisig_descriptor_export(M_N, way, addr_fmt, cmn_pth_from_root, clear
keys = make_multisig(M, N, unique=1, deriv=None if cmn_pth_from_root else deriv)
derivs = [deriv.format(idx=i) for i in range(N)]
clear_ms()
import_ms_wallet(M, N, accept=1, keys=keys, name=wal_name, derivs=None if cmn_pth_from_root else derivs,
addr_fmt=text_a_fmt, descriptor=False, common="m/45'" if cmn_pth_from_root else None)
try:
import_ms_wallet(M, N, accept=1, keys=keys, name=wal_name,
derivs=None if cmn_pth_from_root else derivs,
addr_fmt=text_a_fmt, descriptor=True,
common="m/45'" if cmn_pth_from_root else None)
except Exception as e:
assert addr_fmt != AF_P2TR
assert M == N == 32
assert str(e) == 'Coldcard Error: badlen'
return
# get bare descriptor
choose_multisig_wallet()
pick_menu_item("Descriptors")

View File

@ -45,8 +45,8 @@ def test_generate(mode, chain, pdf, cap_menu, pick_menu_item, goto_home, cap_sto
time.sleep(0.5)
if mode == 'taproot':
pick_menu_item('Classic Address')
pick_menu_item('Taproot')
pick_menu_item('Classic P2PKH')
pick_menu_item('Taproot P2TR')
time.sleep(0.5)
if pdf: