test fixes after Address Explorer label changes
This commit is contained in:
parent
448fae8bdd
commit
95e943a32b
@ -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(")")
|
||||
|
||||
|
||||
@ -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():
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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'])
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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])
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user