testing: block_h bumped for SSSP too, when CCC overrides SSSP block

This commit is contained in:
scgbckbone 2026-05-13 18:53:20 +02:00 committed by doc-hex
parent 38616234e7
commit 841e44335e
4 changed files with 60 additions and 4 deletions

View File

@ -622,7 +622,7 @@ class ApproveTransaction(UserAuthorizedAction):
CCCFeature.sign_psbt(self.psbt)
if SSSPFeature.is_enabled():
# capture new min-height for velocity limit
# update SSSP block_h even if SSSP blocks and overridden by CCC
SSSPFeature.update_last_signed(self.psbt)
except FraudulentChangeOutput as exc:

View File

@ -3023,7 +3023,7 @@ def import_wif_to_store(goto_home, pick_menu_item, cap_story, press_select, cap_
from test_backup import backup_system
from test_bbqr import readback_bbqr, render_bbqr, readback_bbqr_ll, try_sign_bbqr, split_scan_bbqr
from test_bip39pw import set_bip39_pw
from test_ccc import get_last_violation
from test_ccc import get_last_violation, setup_ccc, goto_ccc_menu, ccc_ms_setup, bitcoind_create_watch_only_wallet
from test_drv_entro import derive_bip85_secret, activate_bip85_ephemeral
from test_ephemeral import generate_ephemeral_words, import_ephemeral_xprv, goto_eph_seed_menu
from test_ephemeral import ephemeral_seed_disabled_ui, restore_main_seed, confirm_tmp_seed

View File

@ -20,7 +20,7 @@ import pytest, time, os, pdb
from bip32 import BIP32Node
from constants import simulator_fixed_words, simulator_fixed_xprv
from test_ephemeral import SEEDVAULT_TEST_DATA, WORDLISTS
from test_ephemeral import confirm_tmp_seed, verify_ephemeral_secret_ui
from test_ephemeral import confirm_tmp_seed, verify_ephemeral_secret_ui
from test_ux import word_menu_entry
from charcodes import KEY_QR
@ -495,5 +495,5 @@ def test_empty_notes_bug(set_hobble, goto_notes, cap_menu, pick_menu_item, is_q1
m = cap_menu()
assert len(m) == 1
assert m[0] == "(none saved yet)"
# EOF

View File

@ -767,4 +767,60 @@ def test_sssp_notes_enable(only_q1, setup_sssp):
def test_sssp_word_check(setup_sssp):
# just test menu item works
setup_sssp("11-11", mag=2, vel='6 blocks (hour)', word_check=True)
@pytest.mark.bitcoind
def test_ccc_with_sssp_block_h(setup_ccc, ccc_ms_setup, setup_sssp, bitcoind, policy_sign,
settings_get, settings_set, bitcoind_create_watch_only_wallet,
pick_menu_item, press_select, cap_story):
settings_set("ccc", None)
settings_set("sssp", None)
settings_set("multisig", [])
settings_set("chain", "XRT")
setup_ccc(mag=10, vel='Unlimited')
_, target_mi = ccc_ms_setup()
bitcoind_wo = bitcoind_create_watch_only_wallet(target_mi)
setup_sssp(pin="11-11", mag=10, vel='48 blocks (8h)')
pick_menu_item("Test Drive")
time.sleep(.1)
_, story = cap_story()
assert "COLDCARD operation will look like with Spending Policy" in story
press_select()
multi_addr = bitcoind_wo.getnewaddress()
bitcoind.supply_wallet.sendtoaddress(address=multi_addr, amount=49)
bitcoind.supply_wallet.generatetoaddress(1, bitcoind.supply_wallet.getnewaddress())
cur_h = bitcoind.supply_wallet.getblockchaininfo()["blocks"]
psbt1 = bitcoind_wo.walletcreatefundedpsbt(
[], [{bitcoind.supply_wallet.getnewaddress(): 1}], cur_h
)["psbt"]
policy_sign(bitcoind_wo, psbt1)
assert cur_h == settings_get("sssp")["pol"]["block_h"]
assert cur_h == settings_get("ccc")["pol"]["block_h"]
baseline_block_h = cur_h
bitcoind.supply_wallet.generatetoaddress(5, bitcoind.supply_wallet.getnewaddress())
# second signing -> SSSP velocity BLOCKS but CCC overrides and signing allowed
chosen_lock_time = baseline_block_h + 1
psbt2 = bitcoind_wo.walletcreatefundedpsbt(
[], [{bitcoind.supply_wallet.getnewaddress(): 1}], chosen_lock_time
)["psbt"]
policy_sign(bitcoind_wo, psbt2)
assert chosen_lock_time == settings_get("ccc")["pol"]["block_h"]
# SSSP block_h is updated too
assert chosen_lock_time == settings_get("sssp")["pol"]["block_h"]
pick_menu_item("EXIT TEST DRIVE")
settings_set("ccc", None)
settings_set("sssp", None)
# EOF