refactor(core/rust/ui): layouts for SLIP-39 backups

[no changelog]
pull/2496/head
Martin Milata 2 years ago
parent 4782afbae3
commit 3b629a1ea4

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

@ -27,11 +27,14 @@ static void _librust_qstrs(void) {
MP_QSTR_confirm_reset_device;
MP_QSTR_confirm_text;
MP_QSTR_confirm_total;
MP_QSTR_show_checklist;
MP_QSTR_show_error;
MP_QSTR_show_qr;
MP_QSTR_show_success;
MP_QSTR_show_warning;
MP_QSTR_show_info;
MP_QSTR_show_simple;
MP_QSTR_request_number;
MP_QSTR_request_pin;
MP_QSTR_request_passphrase;
MP_QSTR_request_bip39;
@ -75,4 +78,9 @@ static void _librust_qstrs(void) {
MP_QSTR_user_fee_change;
MP_QSTR_words;
MP_QSTR_pages;
MP_QSTR_count;
MP_QSTR_min_count;
MP_QSTR_max_count;
MP_QSTR_items;
MP_QSTR_active;
}

@ -0,0 +1,55 @@
use super::{Component, Event, EventCtx};
use crate::ui::geometry::{Insets, Rect};
pub struct Border<T> {
border: Insets,
inner: T,
}
impl<T> Border<T>
where
T: Component,
{
pub fn new(border: Insets, inner: T) -> Self {
Self { border, inner }
}
pub fn inner(&self) -> &T {
&self.inner
}
}
impl<T> Component for Border<T>
where
T: Component,
{
type Msg = T::Msg;
fn place(&mut self, bounds: Rect) -> Rect {
let inside = bounds.inset(self.border);
self.inner.place(inside);
inside
}
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
self.inner.event(ctx, event)
}
fn paint(&mut self) {
self.inner.paint()
}
fn bounds(&self, sink: &mut dyn FnMut(Rect)) {
self.inner.bounds(sink);
}
}
#[cfg(feature = "ui_debug")]
impl<T> crate::trace::Trace for Border<T>
where
T: Component + crate::trace::Trace,
{
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
self.inner.trace(t)
}
}

@ -1,6 +1,7 @@
#![forbid(unsafe_code)]
pub mod base;
pub mod border;
pub mod empty;
pub mod image;
pub mod label;
@ -13,6 +14,7 @@ pub mod placed;
pub mod text;
pub use base::{Child, Component, ComponentExt, Event, EventCtx, Never, TimerToken};
pub use border::Border;
pub use empty::Empty;
pub use image::Image;
pub use label::{Label, LabelStyle};

@ -2,13 +2,13 @@ use heapless::Vec;
use crate::ui::{
component::{Component, Event, EventCtx, Never, Paginate},
display::Color,
geometry::{Alignment, Dimensions, Insets, LinearPlacement, Rect},
display::{self, Color},
geometry::{Alignment, Dimensions, Insets, LinearPlacement, Offset, Point, Rect},
};
use super::layout::{LayoutFit, TextLayout, TextStyle};
pub const MAX_PARAGRAPHS: usize = 6;
pub const MAX_PARAGRAPHS: usize = 9;
/// Maximum space between paragraphs. Actual result may be smaller (even 0) if
/// it would make paragraphs overflow the bounding box.
pub const DEFAULT_SPACING: i32 = 0;
@ -94,6 +94,13 @@ where
self
}
pub fn update(&mut self, i: usize, content: T) {
if i < self.list.len() {
self.list[i].content = content;
self.change_offset(PageOffset::default());
}
}
/// Update bounding boxes of paragraphs on the current page. First determine
/// the number of visible paragraphs and their sizes. These are then
/// arranged according to the layout.
@ -332,3 +339,92 @@ where
None
}
}
pub struct Checklist<T> {
area: Rect,
paragraphs: Paragraphs<T>,
current: usize,
icon_current: &'static [u8],
icon_done: &'static [u8],
}
impl<T> Checklist<T>
where
T: AsRef<str>,
{
const CHECK_WIDTH: i32 = 16;
const DONE_OFFSET: Offset = Offset::new(-2, 6);
const CURRENT_OFFSET: Offset = Offset::new(2, 3);
pub fn from_paragraphs(
icon_current: &'static [u8],
icon_done: &'static [u8],
current: usize,
paragraphs: Paragraphs<T>,
) -> Self {
Self {
area: Rect::zero(),
paragraphs,
current,
icon_current,
icon_done,
}
}
fn paint_icon(&self, index: usize, icon: &'static [u8], offset: Offset) {
let para = self.paragraphs.list[index].layout;
let top_left = Point::new(self.area.x0, para.bounds.y0);
display::icon_top_left(
top_left + offset,
icon,
para.style.text_color,
para.style.background_color,
);
}
}
impl<T> Component for Checklist<T>
where
T: AsRef<str>,
{
type Msg = Never;
fn place(&mut self, bounds: Rect) -> Rect {
self.area = bounds;
let para_area = bounds.inset(Insets::left(Self::CHECK_WIDTH));
self.paragraphs.place(para_area);
self.area
}
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
self.paragraphs.event(ctx, event)
}
fn paint(&mut self) {
self.paragraphs.paint();
let first = self.paragraphs.offset.par;
let last = first + self.paragraphs.visible;
for i in first..last.min(self.current) {
self.paint_icon(i, self.icon_done, Self::DONE_OFFSET);
}
self.paint_icon(self.current, self.icon_current, Self::CURRENT_OFFSET)
}
fn bounds(&self, sink: &mut dyn FnMut(Rect)) {
sink(self.area);
self.paragraphs.bounds(sink);
}
}
#[cfg(feature = "ui_debug")]
impl<T> crate::trace::Trace for Checklist<T>
where
T: AsRef<str>,
{
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
t.open("Checklist");
t.field("current", &self.current);
t.field("items", &self.paragraphs);
t.close();
}
}

@ -1,6 +1,6 @@
use crate::ui::{
component::{text::paragraphs::Paragraphs, Child, Component, Event, EventCtx, Image, Never},
geometry::{Grid, Insets, LinearPlacement, Rect},
geometry::{Insets, LinearPlacement, Rect},
};
use super::{theme, Button};
@ -71,14 +71,11 @@ pub struct DialogLayout {
impl DialogLayout {
pub fn middle(area: Rect) -> Self {
let grid = Grid::new(area, 5, 1);
Self {
content: Rect::new(
grid.row_col(0, 0).top_left(),
grid.row_col(3, 0).bottom_right(),
),
controls: grid.row_col(4, 0),
}
let (content, controls) = area.split_bottom(Button::<&str>::HEIGHT);
let content = content
.inset(Insets::bottom(theme::BUTTON_SPACING))
.inset(Insets::left(theme::CONTENT_BORDER));
Self { content, controls }
}
}
@ -113,7 +110,7 @@ where
paragraphs: Paragraphs::new()
.with_placement(
LinearPlacement::vertical()
.align_at_start()
.align_at_center()
.with_spacing(Self::VALUE_SPACE),
)
.add(theme::TEXT_MEDIUM, title)
@ -132,8 +129,8 @@ where
self
}
pub const ICON_AREA_HEIGHT: i32 = 64;
pub const DESCRIPTION_SPACE: i32 = 14;
pub const ICON_AREA_PADDING: i32 = 2;
pub const ICON_AREA_HEIGHT: i32 = 60;
pub const VALUE_SPACE: i32 = 5;
}
@ -145,10 +142,11 @@ where
type Msg = DialogMsg<Never, U::Msg>;
fn place(&mut self, bounds: Rect) -> Rect {
let bounds = bounds.inset(theme::borders());
let bounds = bounds
.inset(theme::borders())
.inset(Insets::top(Self::ICON_AREA_PADDING));
let (content, buttons) = bounds.split_bottom(Button::<&str>::HEIGHT);
let (image, content) = content.split_top(Self::ICON_AREA_HEIGHT);
let content = content.inset(Insets::top(Self::DESCRIPTION_SPACE));
self.image.place(image);
self.paragraphs.place(content);

@ -4,6 +4,7 @@ mod frame;
mod hold_to_confirm;
mod keyboard;
mod loader;
mod number_input;
mod page;
mod scroll;
mod swipe;
@ -23,6 +24,7 @@ pub use keyboard::{
slip39::Slip39Input,
};
pub use loader::{Loader, LoaderMsg, LoaderStyle, LoaderStyleSheet};
pub use number_input::{NumberInputDialog, NumberInputDialogMsg};
pub use page::{SwipeHoldPage, SwipePage};
pub use scroll::ScrollBar;
pub use swipe::{Swipe, SwipeDirection};

@ -0,0 +1,239 @@
use crate::ui::{
component::{
base::ComponentExt, text::paragraphs::Paragraphs, Child, Component, Event, EventCtx, Pad,
},
display,
geometry::{Grid, Insets, Offset, Rect},
util,
};
use super::{theme, Button, ButtonMsg};
pub enum NumberInputDialogMsg {
Selected,
InfoRequested,
}
pub struct NumberInputDialog<T, F>
where
F: Fn(u32) -> T,
{
area: Rect,
description_func: F,
input: Child<NumberInput>,
paragraphs: Child<Paragraphs<T>>,
paragraphs_pad: Pad,
info_button: Child<Button<&'static str>>,
confirm_button: Child<Button<&'static str>>,
}
impl<T, F> NumberInputDialog<T, F>
where
F: Fn(u32) -> T,
T: AsRef<str>,
{
pub fn new(min: u32, max: u32, init_value: u32, description_func: F) -> Self {
let text = description_func(init_value);
Self {
area: Rect::zero(),
description_func,
input: NumberInput::new(min, max, init_value).into_child(),
paragraphs: Paragraphs::new().add(theme::TEXT_NORMAL, text).into_child(),
paragraphs_pad: Pad::with_background(theme::BG),
info_button: Button::with_text("INFO").into_child(),
confirm_button: Button::with_text("CONTINUE")
.styled(theme::button_confirm())
.into_child(),
}
}
fn update_text(&mut self, ctx: &mut EventCtx, value: u32) {
let text = (self.description_func)(value);
self.paragraphs.mutate(ctx, move |ctx, para| {
para.update(0, text);
ctx.request_paint()
});
self.paragraphs_pad.clear();
ctx.request_paint();
}
pub fn value(&self) -> u32 {
self.input.inner().value
}
}
impl<T, F> Component for NumberInputDialog<T, F>
where
T: AsRef<str>,
F: Fn(u32) -> T,
{
type Msg = NumberInputDialogMsg;
fn place(&mut self, bounds: Rect) -> Rect {
self.area = bounds;
let button_height = Button::<&str>::HEIGHT;
let content_area = self.area.inset(Insets::top(2 * theme::BUTTON_SPACING));
let (input_area, content_area) = content_area.split_top(button_height);
let (content_area, button_area) = content_area.split_bottom(button_height);
let content_area = content_area.inset(Insets::new(
theme::BUTTON_SPACING,
0,
theme::BUTTON_SPACING,
theme::CONTENT_BORDER,
));
let grid = Grid::new(button_area, 1, 3).with_spacing(theme::KEYBOARD_SPACING);
self.input.place(input_area);
self.paragraphs.place(content_area);
self.paragraphs_pad.place(content_area);
self.info_button.place(grid.row_col(0, 0));
self.confirm_button
.place(grid.row_col(0, 1).union(grid.row_col(0, 2)));
bounds
}
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
if let Some(NumberInputMsg::Changed(i)) = self.input.event(ctx, event) {
self.update_text(ctx, i);
}
self.paragraphs.event(ctx, event);
if let Some(ButtonMsg::Clicked) = self.info_button.event(ctx, event) {
return Some(Self::Msg::InfoRequested);
}
if let Some(ButtonMsg::Clicked) = self.confirm_button.event(ctx, event) {
return Some(Self::Msg::Selected);
};
None
}
fn paint(&mut self) {
self.input.paint();
self.paragraphs_pad.paint();
self.paragraphs.paint();
self.info_button.paint();
self.confirm_button.paint();
}
fn bounds(&self, sink: &mut dyn FnMut(Rect)) {
sink(self.area);
self.input.bounds(sink);
self.paragraphs.bounds(sink);
self.info_button.bounds(sink);
self.confirm_button.bounds(sink);
}
}
#[cfg(feature = "ui_debug")]
impl<T, F> crate::trace::Trace for NumberInputDialog<T, F>
where
T: AsRef<str>,
F: Fn(u32) -> T,
{
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
t.open("NumberInputDialog");
t.field("input", &self.input);
t.field("paragraphs", &self.paragraphs);
t.field("info_button", &self.info_button);
t.field("confirm_button", &self.confirm_button);
t.close();
}
}
pub enum NumberInputMsg {
Changed(u32),
}
pub struct NumberInput {
area: Rect,
dec: Child<Button<&'static str>>,
inc: Child<Button<&'static str>>,
min: u32,
max: u32,
value: u32,
}
impl NumberInput {
pub fn new(min: u32, max: u32, value: u32) -> Self {
let dec = Button::with_text("-")
.styled(theme::button_counter())
.into_child();
let inc = Button::with_text("+")
.styled(theme::button_counter())
.into_child();
let value = value.clamp(min, max);
Self {
area: Rect::zero(),
dec,
inc,
min,
max,
value,
}
}
}
impl Component for NumberInput {
type Msg = NumberInputMsg;
fn place(&mut self, bounds: Rect) -> Rect {
let grid = Grid::new(bounds, 1, 3).with_spacing(theme::KEYBOARD_SPACING);
self.dec.place(grid.row_col(0, 0));
self.inc.place(grid.row_col(0, 2));
self.area = grid.row_col(0, 1);
bounds
}
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
let mut changed = false;
if let Some(ButtonMsg::Clicked) = self.dec.event(ctx, event) {
self.value = self.min.max(self.value.saturating_sub(1));
changed = true;
};
if let Some(ButtonMsg::Clicked) = self.inc.event(ctx, event) {
self.value = self.max.min(self.value.saturating_add(1));
changed = true;
};
if changed {
self.dec
.mutate(ctx, |ctx, btn| btn.enable_if(ctx, self.value > self.min));
self.inc
.mutate(ctx, |ctx, btn| btn.enable_if(ctx, self.value < self.max));
ctx.request_paint();
return Some(NumberInputMsg::Changed(self.value));
}
None
}
fn paint(&mut self) {
let mut buf = [0u8; 10];
if let Some(text) = util::u32_to_str(self.value, &mut buf) {
let digit_font = theme::FONT_MEDIUM;
let y_offset = digit_font.text_height() / 2 + Button::<&str>::BASELINE_OFFSET;
display::rect_fill(self.area, theme::BG);
display::text_center(
self.area.center() + Offset::y(y_offset),
text,
digit_font,
theme::FG,
theme::BG,
);
}
self.dec.paint();
self.inc.paint();
}
fn bounds(&self, sink: &mut dyn FnMut(Rect)) {
self.dec.bounds(sink);
self.inc.bounds(sink);
sink(self.area)
}
}
#[cfg(feature = "ui_debug")]
impl crate::trace::Trace for NumberInput {
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
t.open("NumberInput");
t.field("value", &(self.value as usize));
t.close();
}
}

@ -17,8 +17,8 @@ use crate::{
base::ComponentExt,
paginated::{PageMsg, Paginate},
painter,
text::paragraphs::Paragraphs,
Component,
text::paragraphs::{Checklist, Paragraphs},
Border, Component,
},
geometry,
layout::{
@ -32,8 +32,9 @@ use super::{
component::{
Bip39Input, Button, ButtonMsg, ButtonStyleSheet, CancelConfirmMsg, CancelInfoConfirmMsg,
Dialog, DialogMsg, Frame, HoldToConfirm, HoldToConfirmMsg, IconDialog, MnemonicInput,
MnemonicKeyboard, MnemonicKeyboardMsg, PassphraseKeyboard, PassphraseKeyboardMsg,
PinKeyboard, PinKeyboardMsg, SelectWordMsg, Slip39Input, SwipeHoldPage, SwipePage,
MnemonicKeyboard, MnemonicKeyboardMsg, NumberInputDialog, NumberInputDialogMsg,
PassphraseKeyboard, PassphraseKeyboardMsg, PinKeyboard, PinKeyboardMsg, SelectWordMsg,
Slip39Input, SwipeHoldPage, SwipePage,
},
theme,
};
@ -196,6 +197,47 @@ where
}
}
impl<T> ComponentMsgObj for Paragraphs<T>
where
T: AsRef<str>,
{
fn msg_try_into_obj(&self, _msg: Self::Msg) -> Result<Obj, Error> {
unreachable!()
}
}
impl<T> ComponentMsgObj for Checklist<T>
where
T: AsRef<str>,
{
fn msg_try_into_obj(&self, _msg: Self::Msg) -> Result<Obj, Error> {
unreachable!()
}
}
impl<T, F> ComponentMsgObj for NumberInputDialog<T, F>
where
T: AsRef<str>,
F: Fn(u32) -> T,
{
fn msg_try_into_obj(&self, msg: Self::Msg) -> Result<Obj, Error> {
let value = self.value().try_into()?;
match msg {
NumberInputDialogMsg::Selected => Ok((CONFIRMED.as_obj(), value).try_into()?),
NumberInputDialogMsg::InfoRequested => Ok((CANCELLED.as_obj(), value).try_into()?),
}
}
}
impl<T> ComponentMsgObj for Border<T>
where
T: ComponentMsgObj,
{
fn msg_try_into_obj(&self, msg: Self::Msg) -> Result<Obj, Error> {
self.inner().msg_try_into_obj(msg)
}
}
extern "C" fn new_confirm_action(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = move |_args: &[Obj], kwargs: &Map| {
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
@ -532,6 +574,42 @@ extern "C" fn new_show_info(n_args: usize, args: *const Obj, kwargs: *mut Map) -
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
extern "C" fn new_show_simple(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = move |_args: &[Obj], kwargs: &Map| {
let title: Option<StrBuffer> = kwargs.get(Qstr::MP_QSTR_title)?.try_into_option()?;
let description: StrBuffer =
kwargs.get_or(Qstr::MP_QSTR_description, StrBuffer::empty())?;
let button: StrBuffer = kwargs.get(Qstr::MP_QSTR_button)?.try_into()?;
let obj = if let Some(t) = title {
LayoutObj::new(Frame::new(
t,
Dialog::new(
Paragraphs::new().add(theme::TEXT_NORMAL, description),
Button::with_text(button).map(|msg| {
(matches!(msg, ButtonMsg::Clicked)).then(|| CancelConfirmMsg::Confirmed)
}),
),
))?
.into()
} else {
LayoutObj::new(Border::new(
theme::borders(),
Dialog::new(
Paragraphs::new().add(theme::TEXT_NORMAL, description),
Button::with_text(button).map(|msg| {
(matches!(msg, ButtonMsg::Clicked)).then(|| CancelConfirmMsg::Confirmed)
}),
),
))?
.into()
};
Ok(obj)
};
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
extern "C" fn new_confirm_payment_request(
n_args: usize,
args: *const Obj,
@ -685,6 +763,79 @@ extern "C" fn new_show_share_words(n_args: usize, args: *const Obj, kwargs: *mut
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
extern "C" fn new_request_number(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = move |_args: &[Obj], kwargs: &Map| {
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
let min_count: u32 = kwargs.get(Qstr::MP_QSTR_min_count)?.try_into()?;
let max_count: u32 = kwargs.get(Qstr::MP_QSTR_max_count)?.try_into()?;
let count: u32 = kwargs.get(Qstr::MP_QSTR_count)?.try_into()?;
let description_callback: Obj = kwargs.get(Qstr::MP_QSTR_description)?;
let callback = move |i: u32| {
StrBuffer::try_from(
description_callback
.call_with_n_args(&[i.try_into().unwrap()])
.unwrap(),
)
.unwrap()
};
let obj = LayoutObj::new(
Frame::new(
title,
NumberInputDialog::new(min_count, max_count, count, callback),
)
.with_border(theme::borders())
.into_child(),
)?;
Ok(obj.into())
};
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
extern "C" fn new_show_checklist(n_args: usize, args: *const Obj, kwargs: *mut Map) -> Obj {
let block = move |_args: &[Obj], kwargs: &Map| {
let title: StrBuffer = kwargs.get(Qstr::MP_QSTR_title)?.try_into()?;
let button: StrBuffer = kwargs.get(Qstr::MP_QSTR_button)?.try_into()?;
let active: usize = kwargs.get(Qstr::MP_QSTR_active)?.try_into()?;
let items: Obj = kwargs.get(Qstr::MP_QSTR_items)?;
let mut iter_buf = IterBuf::new();
let mut paragraphs = Paragraphs::new().with_spacing(theme::CHECKLIST_SPACING);
let iter = Iter::try_from_obj_with_buf(items, &mut iter_buf)?;
for (i, item) in iter.enumerate() {
let color = match i.cmp(&active) {
Ordering::Less => theme::GREEN_DARK,
Ordering::Equal => theme::FG,
Ordering::Greater => theme::GREY_LIGHT,
};
let text: StrBuffer = item.try_into()?;
paragraphs = paragraphs.add_color(theme::TEXT_NORMAL, color, text);
}
let obj = LayoutObj::new(
Frame::new(
title,
Dialog::new(
Checklist::from_paragraphs(
theme::ICON_LIST_CURRENT,
theme::ICON_LIST_CHECK,
active,
paragraphs,
),
Button::with_text(button).map(|msg| {
(matches!(msg, ButtonMsg::Clicked)).then(|| CancelConfirmMsg::Confirmed)
}),
),
)
.with_border(theme::borders())
.into_child(),
)?;
Ok(obj.into())
};
unsafe { util::try_with_args_and_kwargs(n_args, args, kwargs, block) }
}
#[no_mangle]
pub static mp_module_trezorui2: Module = obj_module! {
Qstr::MP_QSTR___name__ => Qstr::MP_QSTR_trezorui2.to_obj(),
@ -828,6 +979,15 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// """Info modal."""
Qstr::MP_QSTR_show_info => obj_fn_kw!(0, new_show_info).as_obj(),
/// def show_simple(
/// *,
/// title: str | None,
/// description: str,
/// button: str,
/// ) -> object:
/// """Simple dialog with text and one button."""
Qstr::MP_QSTR_show_simple => obj_fn_kw!(0, new_show_simple).as_obj(),
/// def confirm_payment_request(
/// *,
/// description: str,
@ -894,6 +1054,28 @@ pub static mp_module_trezorui2: Module = obj_module! {
/// ) -> object:
/// """Show mnemonic for backup. Expects the words pre-divided into individual pages."""
Qstr::MP_QSTR_show_share_words => obj_fn_kw!(0, new_show_share_words).as_obj(),
/// def request_number(
/// *,
/// title: str,
/// count: int,
/// min_count: int,
/// max_count: int,
/// description: Callable[[int], str],
/// ) -> object:
/// """Number input with + and - buttons, description, and info button."""
Qstr::MP_QSTR_request_number => obj_fn_kw!(0, new_request_number).as_obj(),
/// def show_checklist(
/// *,
/// title: str,
/// items: Iterable[str],
/// active: int,
/// button: str,
/// ) -> object:
/// """Checklist of backup steps. Active index is highlighted, previous items have check
/// mark nex to them."""
Qstr::MP_QSTR_show_checklist => obj_fn_kw!(0, new_show_checklist).as_obj(),
};
#[cfg(test)]

@ -32,7 +32,7 @@ pub const RED_DARK: Color = Color::rgb(166, 45, 45);
pub const YELLOW: Color = Color::rgb(193, 144, 9); // ochre
pub const YELLOW_DARK: Color = Color::rgb(154, 115, 6); // FIXME
pub const GREEN: Color = Color::rgb(57, 168, 20); // grass-green
pub const GREEN_DARK: Color = Color::rgb(48, 147, 15);
pub const GREEN_DARK: Color = Color::rgb(16, 171, 87);
pub const BLUE: Color = Color::rgb(0, 86, 190); // blue
pub const BLUE_DARK: Color = Color::rgb(0, 68, 152); // FIXME
pub const OFF_WHITE: Color = Color::rgb(222, 222, 222); // very light grey
@ -56,6 +56,8 @@ pub const ICON_SPACE: &[u8] = include_res!("model_tt/res/space.toif");
pub const ICON_BACK: &[u8] = include_res!("model_tt/res/back.toif");
pub const ICON_CLICK: &[u8] = include_res!("model_tt/res/click.toif");
pub const ICON_NEXT: &[u8] = include_res!("model_tt/res/next.toif");
pub const ICON_LIST_CURRENT: &[u8] = include_res!("model_tt/res/current.toif");
pub const ICON_LIST_CHECK: &[u8] = include_res!("model_tt/res/check.toif");
// Large, color icons.
pub const IMAGE_WARN: &[u8] = include_res!("model_tt/res/warn.toif");
@ -76,6 +78,30 @@ pub fn label_default() -> LabelStyle {
}
}
pub fn label_checklist_default() -> LabelStyle {
LabelStyle {
font: FONT_NORMAL,
text_color: GREY_LIGHT,
background_color: BG,
}
}
pub fn label_checklist_selected() -> LabelStyle {
LabelStyle {
font: FONT_NORMAL,
text_color: FG,
background_color: BG,
}
}
pub fn label_checklist_done() -> LabelStyle {
LabelStyle {
font: FONT_NORMAL,
text_color: GREEN_DARK,
background_color: BG,
}
}
pub fn label_keyboard() -> LabelStyle {
LabelStyle {
font: FONT_MEDIUM,
@ -316,6 +342,38 @@ pub fn button_pin() -> ButtonStyleSheet {
}
}
pub fn button_counter() -> ButtonStyleSheet {
ButtonStyleSheet {
normal: &ButtonStyle {
font: FONT_MEDIUM,
text_color: FG,
button_color: GREY_DARK,
background_color: BG,
border_color: BG,
border_radius: RADIUS,
border_width: 0,
},
active: &ButtonStyle {
font: FONT_MEDIUM,
text_color: FG,
button_color: GREY_MEDIUM,
background_color: BG,
border_color: FG,
border_radius: RADIUS,
border_width: 0,
},
disabled: &ButtonStyle {
font: FONT_MEDIUM,
text_color: GREY_LIGHT,
button_color: GREY_DARK,
background_color: BG,
border_color: BG,
border_radius: RADIUS,
border_width: 0,
},
}
}
pub fn button_clear() -> ButtonStyleSheet {
button_default()
}
@ -350,6 +408,7 @@ pub const FORMATTED: FormattedFonts = FormattedFonts {
pub const CONTENT_BORDER: i32 = 5;
pub const KEYBOARD_SPACING: i32 = 8;
pub const BUTTON_SPACING: i32 = 6;
pub const CHECKLIST_SPACING: i32 = 10;
/// +----------+
/// | 13 |

@ -10,3 +10,52 @@ impl<T, E> ResultExt for Result<T, E> {
}
}
}
pub fn u32_to_str(num: u32, buffer: &mut [u8]) -> Option<&str> {
let mut i = 0;
let mut num = num;
while num > 0 && i < buffer.len() {
buffer[i] = b'0' + ((num % 10) as u8);
num /= 10;
i += 1;
}
match i {
0 => Some("0"),
_ if num > 0 => None,
_ => {
let result = &mut buffer[..i];
result.reverse();
Some(core::str::from_utf8(result).unwrap())
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::str;
#[test]
fn u32_to_str_valid() {
let testcases = [0, 1, 9, 10, 11, 999, u32::MAX];
let mut b = [0; 10];
for test in testcases {
let converted = u32_to_str(test, &mut b).unwrap();
let s = test.to_string();
assert_eq!(converted, s);
}
}
#[test]
fn u32_to_str_small_buffer() {
let testcases = [1000, 31337, u32::MAX];
let mut b = [0; 3];
for test in testcases {
let converted = u32_to_str(test, &mut b);
assert_eq!(converted, None)
}
}
}

@ -199,6 +199,16 @@ def show_info(
"""Info modal."""
# rust/src/ui/model_tt/layout.rs
def show_simple(
*,
title: str | None,
description: str,
button: str,
) -> object:
"""Simple dialog with text and one button."""
# rust/src/ui/model_tt/layout.rs
def confirm_payment_request(
*,
@ -272,3 +282,27 @@ def show_share_words(
pages: Iterable[str],
) -> object:
"""Show mnemonic for backup. Expects the words pre-divided into individual pages."""
# rust/src/ui/model_tt/layout.rs
def request_number(
*,
title: str,
count: int,
min_count: int,
max_count: int,
description: Callable[[int], str],
) -> object:
"""Number input with + and - buttons, description, and info button."""
# rust/src/ui/model_tt/layout.rs
def show_checklist(
*,
title: str,
items: Iterable[str],
active: int,
button: str,
) -> object:
"""Checklist of backup steps. Active index is highlighted, previous items have check
mark nex to them."""

@ -1,7 +1,7 @@
from typing import TYPE_CHECKING
from trezor import wire
from trezor.enums import ButtonRequestType
from trezor.enums import BackupType, ButtonRequestType
import trezorui2
@ -9,8 +9,9 @@ from ..common import interact
from . import _RustLayout
if TYPE_CHECKING:
from trezor.enums import BackupType
from typing import Sequence, List
from typing import Callable, Sequence, List
pass
def _split_share_into_pages(share_words: Sequence[str], per_page: int = 4) -> List[str]:
@ -112,29 +113,206 @@ async def select_word(
async def slip39_show_checklist(
ctx: wire.GenericContext, step: int, backup_type: BackupType
) -> None:
raise NotImplementedError
items = []
if backup_type is BackupType.Slip39_Basic:
items.append("Set number of shares")
items.append("Set threshold")
items.append("Write down and check all recovery shares")
elif backup_type is BackupType.Slip39_Advanced:
items.append("Set number of groups")
items.append("Set group threshold")
items.append("Set size and threshold for each group")
result = await interact(
ctx,
_RustLayout(
trezorui2.show_checklist(
title="BACKUP CHECKLIST",
button="CONTINUE",
active=step,
items=items,
)
),
"slip39_checklist",
ButtonRequestType.ResetDevice,
)
if result != trezorui2.CONFIRMED:
raise wire.ActionCancelled
async def _prompt_number(
ctx: wire.GenericContext,
title: str,
description: Callable[[int], str],
info: Callable[[int], str],
count: int,
min_count: int,
max_count: int,
br_name: str,
) -> int:
num_input = _RustLayout(
trezorui2.request_number(
title=title.upper(),
description=description,
count=count,
min_count=min_count,
max_count=max_count,
)
)
while True:
result = await interact(
ctx,
num_input,
br_name,
ButtonRequestType.ResetDevice,
)
if __debug__:
if not isinstance(result, tuple):
# DebugLink currently can't send number of shares and it doesn't
# change the counter either so just use the initial value.
result = (result, count)
status, value = result
if status == trezorui2.CONFIRMED:
assert isinstance(value, int)
return value
await ctx.wait(
_RustLayout(
trezorui2.show_simple(
title=None, description=info(value), button="OK, I UNDERSTAND"
)
)
)
async def slip39_prompt_threshold(
ctx: wire.GenericContext, num_of_shares: int, group_id: int | None = None
) -> int:
raise NotImplementedError
count = num_of_shares // 2 + 1
# min value of share threshold is 2 unless the number of shares is 1
# number of shares 1 is possible in advanced slip39
min_count = min(2, num_of_shares)
max_count = num_of_shares
def description(count: int):
if group_id is None:
if count == 1:
return "For recovery you need 1 share."
elif count == max_count:
return f"For recovery you need all {count} of the shares."
else:
return f"For recovery you need any {count} of the shares."
else:
return f"The required number of shares to form Group {group_id + 1}."
def info(count: int):
text = "The threshold sets the number of shares "
if group_id is None:
text += "needed to recover your wallet. "
text += f"Set it to {count} and you will need "
if num_of_shares == 1:
text += "1 share."
elif num_of_shares == count:
text += f"all {count} of your {num_of_shares} shares."
else:
text += f"any {count} of your {num_of_shares} shares."
else:
text += "needed to form a group. "
text += f"Set it to {count} and you will "
if num_of_shares == 1:
text += "need 1 share "
elif num_of_shares == count:
text += f"need all {count} of {num_of_shares} shares "
else:
text += f"need any {count} of {num_of_shares} shares "
text += f"to form Group {group_id + 1}."
return text
return await _prompt_number(
ctx,
title="SET THRESHOLD",
description=description,
info=info,
count=count,
min_count=min_count,
max_count=max_count,
br_name="slip39_threshold",
)
async def slip39_prompt_number_of_shares(
ctx: wire.GenericContext, group_id: int | None = None
) -> int:
raise NotImplementedError
count = 5
min_count = 1
max_count = 16
def description(i: int):
if group_id is None:
if i == 1:
return "Only one share will be created."
else:
return f"{i} people or locations will each hold one share."
else:
return f"Set the total number of shares in Group {group_id + 1}."
if group_id is None:
info = "Each recovery share is a sequence of 20 words. Next you will choose how many shares you need to recover your wallet."
else:
info = f"Each recovery share is a sequence of 20 words. Next you will choose the threshold number of shares needed to form Group {group_id + 1}."
return await _prompt_number(
ctx,
title="SET NUMBER OF SHARES",
description=description,
info=lambda i: info,
count=count,
min_count=min_count,
max_count=max_count,
br_name="slip39_shares",
)
async def slip39_advanced_prompt_number_of_groups(ctx: wire.GenericContext) -> int:
raise NotImplementedError
count = 5
min_count = 2
max_count = 16
description = "A group is made up of recovery shares."
info = "Each group has a set number of shares and its own threshold. In the next steps you will set the numbers of shares and the thresholds."
return await _prompt_number(
ctx,
title="SET NUMBER OF GROUPS",
description=lambda i: description,
info=lambda i: info,
count=count,
min_count=min_count,
max_count=max_count,
br_name="slip39_groups",
)
async def slip39_advanced_prompt_group_threshold(
ctx: wire.GenericContext, num_of_groups: int
) -> int:
raise NotImplementedError
count = num_of_groups // 2 + 1
min_count = 1
max_count = num_of_groups
description = "The required number of groups for recovery."
info = "The group threshold specifies the number of groups required to recover your wallet."
return await _prompt_number(
ctx,
title="SET GROUP THRESHOLD",
description=lambda i: description,
info=lambda i: info,
count=count,
min_count=min_count,
max_count=max_count,
br_name="slip39_group_threshold",
)
async def show_warning_backup(ctx: wire.GenericContext, slip39: bool) -> None:

@ -16,6 +16,10 @@ def toif_convert(infile, outfile):
Examples:
toif_convert.py somefile.jpg outfile.toif
toif_convert.py infile.toif outfile.png
# ensure gray-scale output TOIF
mogrify -colorspace gray icon.png
toif_convert.py icon.png icon.toif
"""
if infile.name.endswith(".toif") or infile.name == "-":
toi = toif.from_bytes(infile.read())

@ -1668,8 +1668,12 @@
"TTui2_binance-test_sign_tx.py::test_binance_sign_message[message1-expected_response1]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_binance-test_sign_tx.py::test_binance_sign_message[message2-expected_response2]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_authorize_coinjoin.py::test_cancel_authorization": "e86435a8bfbe0f3e84dd14fa3fc65378fb781e154fc37cc034225834d730d596",
"TTui2_bitcoin-test_authorize_coinjoin.py::test_get_address": "d3ca64a1ee5a32ebd4aa05b8fbf53d62486e37236c6d1e824463c79cf992ec75",
"TTui2_bitcoin-test_authorize_coinjoin.py::test_get_public_key": "f2e86cbdfb6f366da2c25632b095733e23760c7007104c9aac5e5e0d0705e66a",
"TTui2_bitcoin-test_authorize_coinjoin.py::test_multisession_authorization": "84c35fd5dea8c492de5ff44d5a9464008ff02b6b95e4f19b68bf2dc954afece5",
"TTui2_bitcoin-test_authorize_coinjoin.py::test_sign_tx": "71e815272e959eb566b8f47467665dbc7c72a3091a97e7d58e6b014f6222f518",
"TTui2_bitcoin-test_authorize_coinjoin.py::test_sign_tx_spend": "a6ee72e6563098e4bcf26f4645f48eaddda48173e10917133f409b9368b333db",
"TTui2_bitcoin-test_authorize_coinjoin.py::test_wrong_account_type": "e86435a8bfbe0f3e84dd14fa3fc65378fb781e154fc37cc034225834d730d596",
"TTui2_bitcoin-test_authorize_coinjoin.py::test_wrong_coordinator": "e86435a8bfbe0f3e84dd14fa3fc65378fb781e154fc37cc034225834d730d596",
"TTui2_bitcoin-test_bcash.py::test_attack_change_input": "82807a26c44e6ca7edc44e87b21e2524dfb70a5bc34b019ee772dc73e0ed5de1",
"TTui2_bitcoin-test_bcash.py::test_send_bch_change": "82807a26c44e6ca7edc44e87b21e2524dfb70a5bc34b019ee772dc73e0ed5de1",
@ -1691,7 +1695,7 @@
"TTui2_bitcoin-test_dash.py::test_send_dash_dip2_input": "74f2ee3b77d895f4b19cb0e3c62498bf68fb43b7c5b416623dde1161b3a990cc",
"TTui2_bitcoin-test_decred.py::test_decred_multisig_change": "15cc7253c867dbde2e99f8482d6ab83fcba837fc30ea0dbe72abcabefacd5f56",
"TTui2_bitcoin-test_decred.py::test_purchase_ticket_decred": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_decred.py::test_send_decred": "f40a30099cf74086921adba2a02f446fbdde71c00d0576b88357948fd4e03ef1",
"TTui2_bitcoin-test_decred.py::test_send_decred": "fc60c1d4810eefa11080f0bef05fee753f9c86b4ec1c638955ddbd34c1701cc6",
"TTui2_bitcoin-test_decred.py::test_send_decred_change": "3cc3d6de1c886265eaa3fb336268d5fc7540d6ee293d496cc74cec641e0ae046",
"TTui2_bitcoin-test_decred.py::test_spend_from_stake_generation_and_revocation_decred": "4c18e54ff963ebce4d9fba57873111e8943a3da193ce093e35dc4d76ba7aa2f9",
"TTui2_bitcoin-test_descriptors.py::test_descriptors[Bitcoin-0-InputScriptType.SPENDADDRESS-pkh([5-7a80e3db": "0ccb7a9dc52037538ed9b4a9f061baa507291cdd402049359c912b4d73ece6cb",
@ -1715,25 +1719,25 @@
"TTui2_bitcoin-test_getaddress.py::test_address_mac": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_altcoin_address_mac": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_bch": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_bch_multisig": "f66a226d9ac3d4aad7c2a4bcf0a622563300ec02d91668510d8da60711bc6484",
"TTui2_bitcoin-test_getaddress.py::test_bch_multisig": "e259a3e9250aafd2d686c8da5cffa622a56a0b6ed4bcbb98283a58e6e36ae8fe",
"TTui2_bitcoin-test_getaddress.py::test_btc": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_crw": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_elements": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_grs": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_invalid_path": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_ltc": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_multisig": "f3c9e4df672d2acb27fc61238df1e2828294a6f1602f52f07deb908cd1eb2cd8",
"TTui2_bitcoin-test_getaddress.py::test_multisig": "024e7a3025a5c1bdc378ea1f093736c14cee39bc765bf61e63b528a37e93bda7",
"TTui2_bitcoin-test_getaddress.py::test_multisig_missing[False]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_multisig_missing[True]": "d868aec455776eba425411e94901a649d386cadacbeaa11be2f5864c5f00084a",
"TTui2_bitcoin-test_getaddress.py::test_multisig_missing[True]": "8c8a8c9586cdf822c207f58bdc04d0bdb549765275c08d37774db3f8123b3af7",
"TTui2_bitcoin-test_getaddress.py::test_public_ckd": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_tbtc": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_tgrs": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress.py::test_unknown_path": "5e786a7fcb46f83dade42e4745eea7895642c0176b9989121058372c8a423260",
"TTui2_bitcoin-test_getaddress.py::test_unknown_path": "f6af7cca387eeb354af03ee898a993b8f40a33c73d03c0327c9f8d51d65b3991",
"TTui2_bitcoin-test_getaddress_segwit.py::test_multisig_missing[False]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress_segwit.py::test_multisig_missing[True]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress_segwit.py::test_show_multisig_3": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress_segwit.py::test_show_segwit": "bdd4ef1ca2d34f65373b8206b05d6c1ddffe2a5eb9409da19022a30c85953ba3",
"TTui2_bitcoin-test_getaddress_segwit.py::test_show_segwit_altcoin": "c3b1311db7d4ebd69b0323272faa2e08686a092d29430b0cc946bddb290d98e9",
"TTui2_bitcoin-test_getaddress_segwit.py::test_show_segwit_altcoin": "ddd568ba1924c4287c58f4594b1b72a90066692954dbaeb25f12838c871013d9",
"TTui2_bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-0-0-bc1p5cyxnuxmeuwuvkwfem-dc12f29f": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-0-1-bc1p4qhjn9zdvkux4e44uh-1f521bf2": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-1-0-bc1p3qkhfews2uk44qtvau-d8b57624": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -1770,9 +1774,9 @@
"TTui2_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-0-0-InputScr-821a199d": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-1-0-InputScr-9d2fa8bc": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-1-0-InputScr-d5b7f8fc": "bbddf7db56267bfdbd779c875355282f8bdf97f1fc7602d8d766b50ad0d6a068",
"TTui2_bitcoin-test_getaddress_show.py::test_show[m-44h-0h-12h-0-0-InputScriptType.SPENDADDRESS-1F-1e4f2f74": "b3d4a6b7a5c7694a009a4ff5fda904b1d0916e12a593ed999caba3d8993822e2",
"TTui2_bitcoin-test_getaddress_show.py::test_show[m-49h-0h-12h-0-0-InputScriptType.SPENDP2SHWITNES-a986211d": "9624aa9c8e2a0cec9257256319b7149231592296891c11294c2ee91b5eb58fd4",
"TTui2_bitcoin-test_getaddress_show.py::test_show[m-84h-0h-12h-0-0-InputScriptType.SPENDWITNESS-bc-a5f08dfb": "0f5b3d392dd2b00bdb6bbe44828f225860f10eec0880252f89849724ad101396",
"TTui2_bitcoin-test_getaddress_show.py::test_show[m-44h-0h-12h-0-0-InputScriptType.SPENDADDRESS-1F-1e4f2f74": "0594005ecf204616fee8178440c954d3cd99dd6b8574f54916865b5eca9f1cf1",
"TTui2_bitcoin-test_getaddress_show.py::test_show[m-49h-0h-12h-0-0-InputScriptType.SPENDP2SHWITNES-a986211d": "76c542955e2319e3a9afcadca2a6d79b3f719807ac0c40b2d26198e168abf899",
"TTui2_bitcoin-test_getaddress_show.py::test_show[m-84h-0h-12h-0-0-InputScriptType.SPENDWITNESS-bc-a5f08dfb": "81ae91ea20ca248558986d6c18f957b6b2f236d285efca6e1f8538a6a67d954f",
"TTui2_bitcoin-test_getaddress_show.py::test_show_multisig_15": "07a7a7bb2976b6a123dd7482467fe5277cb6799a9861910df477e361b45accfb",
"TTui2_bitcoin-test_getaddress_show.py::test_show_multisig_3": "cd2df86e724e5971f6e7f9c6fe79286144344917e72fd571db9aed920ef54c4e",
"TTui2_bitcoin-test_getaddress_show.py::test_show_multisig_xpubs[InputScriptType.SPENDMULTISIG-0-3-4efd9cf3": "e702cb33c0c54490029b076655e75d7e5e80134cbe9c057b5aa8ef8ca18f96a9",
@ -1811,6 +1815,7 @@
"TTui2_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDP2SHWITNESS-ypub6WYmBsV-0710fbb3": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getpublickey.py::test_script_type[InputScriptType.SPENDWITNESS-zpub6qP2VY9x7Mx-84eaa56c": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getpublickey.py::test_script_type[None-xpub6BiVtCp7ozsRo7kaoYNrCNAVJwPYTQHjoXF-c37a47fd": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getpublickey.py::test_slip25_path": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getpublickey_curve.py::test_coin_and_curve": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getpublickey_curve.py::test_ed25519_public": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_getpublickey_curve.py::test_publickey_curve[ed25519-path4-002e28dc0346d6d30d4e-e6c7a440": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -1829,7 +1834,7 @@
"TTui2_bitcoin-test_komodo.py::test_one_one_rewards_claim": "bac20902771b117a6b5a544b379ecb8143e0ae7590ce7e4d83551ea852016656",
"TTui2_bitcoin-test_multisig.py::test_15_of_15": "e3feb81e1f7074f5fb0a4739644db80db17496e28f4598dd692548e8dd271d49",
"TTui2_bitcoin-test_multisig.py::test_2_of_3": "d4451fedf6e004cfb42be2e4274cd212d5454b744e590d320a77bd61bcdafc8a",
"TTui2_bitcoin-test_multisig.py::test_attack_change_input": "c29260aec42924b145e153adbfb7c309d23cd543369ada37aaa5ad65c84089c1",
"TTui2_bitcoin-test_multisig.py::test_attack_change_input": "f4f102794e9e999d81d9ce15435abd8fa10c9af084e4b4bc3d445839aef0755d",
"TTui2_bitcoin-test_multisig.py::test_missing_pubkey": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_multisig_change.py::test_external_external": "d4c05f668cacfb6a08dc2dab45729cc89120e4f9b1c422855a8171a271f6dafd",
"TTui2_bitcoin-test_multisig_change.py::test_external_internal": "676ca0ba877814630124d3c9d5b911a3123a9ae1d07d5553a93e34a6bffdbf92",
@ -1839,15 +1844,15 @@
"TTui2_bitcoin-test_multisig_change.py::test_multisig_external_external": "62053184643d1f374aeb6c6ebfeba37818e9c8c956be5d27d559d941006c7261",
"TTui2_bitcoin-test_multisig_change.py::test_multisig_mismatch_change": "1da508a75ac20168bddfdc9f1dd1dd65e3af31b46d6a093792b4497a7d93541b",
"TTui2_bitcoin-test_multisig_change.py::test_multisig_mismatch_inputs": "acf3e3093fb9e42be99c4419b0c1e6e564765c644b007046ee685933a818dce7",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-6-255-script_types3]": "b6af022581c0cb001f524aed7ca7899c5ec787811fa56b091b7f67e8e12be7aa",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-script_types2]": "771a10f5ac84e2c656e408ca0c384fea714c2f6110090087ac802cc4920a5c4f",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-6-255-script_types3]": "5ed68e5c665c55abc47fabc664e19ada990135a78d1a0d396fbec1d782a69eb6",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-script_types2]": "ff06a6edf05bf8c3cb3fb96e17b24039e958eccb54ec4db5d46f15671f92d803",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress[m-3h-100h-4-255-script_types1]": "0d143b9fa0eee95150b1753f202fe400541d04ce28d84137b355589a0f3d3b84",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress[m-4-255-script_types0]": "4670eeb58a80783a48380b0683b1918c8d55c898766bbf7b8984712ec6ac8499",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress[m-49-0-63-0-255-script_types4]": "69fa7690ab5ef602c3dc39c174c58cea3d5d73a48e10950f339e94061fb4597f",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths0-address_index0]": "12ce818365a2cda8e627293f018b197bf201ab561a99a810f3f09b218edeb4a5",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths1-address_index1]": "a9c363c6cfb2647bf4af2883776630b6bcd79e0e919634f449cd383e08cb49d5",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths2-address_index2]": "347967990f86ea00f1311d627bec53ca8452b381de25250dd74f7e9665649c63",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths3-address_index3]": "602409a3ea44037dbb8f9579af1befb0059b52b2118239aeefe963df4e9a9202",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths2-address_index2]": "9c3f5da8071e113277dcebfbf3cdc265425e1db744f0d35b66dcc785bbb48ef3",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths3-address_index3]": "e6c80d783f2e07aa4bb66f8b8b060a6facfa78744fb87d48707bd8ce225bb73b",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths4-address_index4]": "55b2237f278a25d2649c0c9106876e654b9a04f87b6568d30466723c16c8a0f2",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths5-address_index5]": "18acb23a37a48c9a13c4daf60078a06731b3bb348f6dc20a7a8d3920c6c1afdc",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths6-address_index6]": "7289799134c3ddf1f0ab22a3f9ec37547613e3f261763e05490cfb50c9ef7cf3",
@ -1856,20 +1861,20 @@
"TTui2_bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-3h-100h-4-255-script_types1]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-4-255-script_types0]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-49-0-63-0-255-script_types4]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signmessage[m-1195487518-6-255-script_types3]": "7f7cd45aee32d8bc5d5830e0f5d7ca60c6331d4c0b5b92fa6be9bffbe21bda2f",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signmessage[m-1195487518-script_types2]": "c6867a7315202897e0f937fe036aed74d90bbce252b74893cd1bc9e4a10e1781",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signmessage[m-1195487518-6-255-script_types3]": "1cf4b6045a7842757b4fb1e8f5bfaef332545077a45dd9df18b528068abcd29f",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signmessage[m-1195487518-script_types2]": "1921cf9059ee8e553bfb0eb388c4089fb78da23cd0c735712588d815bd0e151d",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signmessage[m-3h-100h-4-255-script_types1]": "e91c26185761f6826389c56a7ff18c06d39751878a706d14d8724cae82250072",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signmessage[m-4-255-script_types0]": "6664cee18011e0d51201117b52e3d197aaffa99691d3c05339ea9dd29652e518",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signmessage[m-49-0-63-0-255-script_types4]": "4e4fda48067f1924abaa3672f4d3b2a0b169195569ccd3c6ae443f0b24324c52",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "87ca5089ae3c76afe526716b8034ac0d1085c0e09f3c5ab968c3a6226136db5b",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "aabed6b75f2e558817be851fc8757580f8548af5ef871f1cbf1f527dcae020f6",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "2c5b4c9fd5a110ad11090a69c90a8b55a28f7f718ac7910f2db132751496b4a6",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "8f2bdaae1f4e3553c152df451a6ab1133cebf15728d421ad9a6ec462c0b9e334",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "c6c74a8110e702cedfdcc891a60317de94cb73e87c4e9465eaebf2e3712305c7",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "c6c74a8110e702cedfdcc891a60317de94cb73e87c4e9465eaebf2e3712305c7",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "3f8124c4f363b5b653efc20b006cfb68e7c4f59b0ff2ada57b57c7f71814bc1b",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths0-address_index0]": "7b44d6ed3de9bfc8ede584a60f13140b0d31ac422e94d728fca61d1f31312a0a",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths1-address_index1]": "7b44d6ed3de9bfc8ede584a60f13140b0d31ac422e94d728fca61d1f31312a0a",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths2-address_index2]": "bd48d263b65e0b14e10f52709fde6e96eb99851b2bfbd47ac86f3480e7c74766",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths3-address_index3]": "8e31a1b49b251e9c11c13653f4b675c4c0074e732e99de1a91745765067b8ef5",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths2-address_index2]": "3e5e87f421ce9a2021b5d71b0ab26a424cadea1b3e4b442c26e3aa3b1ac91cfe",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths3-address_index3]": "01eb36997b393ad30c38b6d049c6e97a6e0fb9eb550d2c4bf54c1d6ea8af6b18",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths4-address_index4]": "7b44d6ed3de9bfc8ede584a60f13140b0d31ac422e94d728fca61d1f31312a0a",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths5-address_index5]": "7b44d6ed3de9bfc8ede584a60f13140b0d31ac422e94d728fca61d1f31312a0a",
"TTui2_bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths6-address_index6]": "7b44d6ed3de9bfc8ede584a60f13140b0d31ac422e94d728fca61d1f31312a0a",
@ -1907,13 +1912,13 @@
"TTui2_bitcoin-test_signmessage.py::test_signmessage_pagination[utf_nospace]": "f1d75de8106980288b1adca46fd57af0c85a7d6d2fc7a1c16bdb7e4edf68a354",
"TTui2_bitcoin-test_signmessage.py::test_signmessage_pagination[utf_text]": "ccbb739bc0649ab5c94ada099e75b33dc025c81bac01a29fa5ffa417eb4b67f9",
"TTui2_bitcoin-test_signmessage.py::test_signmessage_pagination_trailing_newline": "20e4ab5430739e12479ae7effba0f5f9a42db421a8b91ec91962ac44e769e2e3",
"TTui2_bitcoin-test_signmessage.py::test_signmessage_path_warning": "d57a52909487b1076baf9efdae7a77063263e2c98e093a2d75580c5df73d3bf0",
"TTui2_bitcoin-test_signmessage.py::test_signmessage_path_warning": "abdf7e4470cebadeb511fe0d4b6d40fa37f5d34f479d8170850caf0cc8e3b089",
"TTui2_bitcoin-test_signtx.py::test_attack_change_input_address": "286b957738a6df9044e40015e1c52e0aceb41845a26a6f484f6dc576f1d39d07",
"TTui2_bitcoin-test_signtx.py::test_attack_change_outputs": "e5aa6ad2a407151aadce85acc7cf9e7fd7e08f6cda8663ee3cbb9fc87d5e16bd",
"TTui2_bitcoin-test_signtx.py::test_attack_modify_change_address": "2caf6724b1cc6eed4ac4015e30080b076b9fa8393a577bffc3dfadca51674ead",
"TTui2_bitcoin-test_signtx.py::test_change_on_main_chain_allowed": "2caf6724b1cc6eed4ac4015e30080b076b9fa8393a577bffc3dfadca51674ead",
"TTui2_bitcoin-test_signtx.py::test_fee_high_hardfail": "9f6b3877016801771c50ecd2299501465ca5b3248e84e719601ce6a855edcb6e",
"TTui2_bitcoin-test_signtx.py::test_fee_high_warning": "440556cab757cdcd2354132ab55fe38c4fb838a6a55f3388ea0e3ff36ceea54d",
"TTui2_bitcoin-test_signtx.py::test_fee_high_warning": "75c962fa97000c052c33e72ad7e567df2c153646c5a7f1877278d85b254a5892",
"TTui2_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.EXTERNAL]": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx.py::test_incorrect_input_script_type[InputScriptType.SPENDADDRESS]": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx.py::test_incorrect_output_script_type[OutputScriptType.PAYTOADDRESS]": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
@ -1924,7 +1929,7 @@
"TTui2_bitcoin-test_signtx.py::test_lock_time_blockheight": "74bd9d7889a224004c3a0e28a0259a181e84e2009b894ca0a2a8142b7411d01f",
"TTui2_bitcoin-test_signtx.py::test_lock_time_datetime[1985-11-05 00:53:20]": "74bd9d7889a224004c3a0e28a0259a181e84e2009b894ca0a2a8142b7411d01f",
"TTui2_bitcoin-test_signtx.py::test_lock_time_datetime[2048-08-16 22:14:00]": "74bd9d7889a224004c3a0e28a0259a181e84e2009b894ca0a2a8142b7411d01f",
"TTui2_bitcoin-test_signtx.py::test_lots_of_change": "3a2d5a2ef26c3974e6874895ebc03a296d9a3dc436f8f0393b914bbe3ee02ded",
"TTui2_bitcoin-test_signtx.py::test_lots_of_change": "e1dfcfe4e9eceea3be1c2a5b48c6416f12dda39f88806ba432144470b6cc88ec",
"TTui2_bitcoin-test_signtx.py::test_lots_of_inputs": "592bef32fef7f5560abd0d7f2b4727a76add902eb461b7ff44f88863de4486c6",
"TTui2_bitcoin-test_signtx.py::test_lots_of_outputs": "487a815c0efb929439b3e00721b3dca2e5bb80bdbe46994b1ac0140fed42d193",
"TTui2_bitcoin-test_signtx.py::test_not_enough_funds": "5a007d01aeb7fc1f286303633685c7b2b52e7a60c3944321d4d5a2a5848d1647",
@ -1944,7 +1949,7 @@
"TTui2_bitcoin-test_signtx.py::test_signtx_forbidden_fields[version_group_id-69]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_bitcoin-test_signtx.py::test_spend_coinbase": "01c4dad811314f902e956bdf7a894f23b2a32d0a0beefab3ef7c7cdb8bedf014",
"TTui2_bitcoin-test_signtx.py::test_testnet_big_amount": "94b96f176e4d656de07f0ac9708aec8e15ea02e28c1a0ef2a29f1fceb71cd664",
"TTui2_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "0d5301c60768a085c4ef16071075c65ffdfcfd82926aec0e14bb4badfdad7d4a",
"TTui2_bitcoin-test_signtx.py::test_testnet_fee_high_warning": "dceac8593581d3af955d09adf23815978645d5fd46e3bf3a3f52bbd6a8599e7c",
"TTui2_bitcoin-test_signtx.py::test_testnet_one_two_fee": "2caf6724b1cc6eed4ac4015e30080b076b9fa8393a577bffc3dfadca51674ead",
"TTui2_bitcoin-test_signtx.py::test_two_changes": "3ab1abfc95932a9c83b9d9c2d8a769856fc2458f31fdcb299a4b289ef5287151",
"TTui2_bitcoin-test_signtx.py::test_two_two": "e5aa6ad2a407151aadce85acc7cf9e7fd7e08f6cda8663ee3cbb9fc87d5e16bd",
@ -1968,8 +1973,8 @@
"TTui2_bitcoin-test_signtx_invalid_path.py::test_attack_path_segwit": "b35b9a83e3e1fc732f2106217bc9407ee9223a6b9861d80e29398667fddf2433",
"TTui2_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx_invalid_path.py::test_invalid_path_fail_asap": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx_invalid_path.py::test_invalid_path_pass_forkid": "f0264b8db95312d4a7649cf36d68d64c458e9a08667eaddc6985cd7d09e8aff4",
"TTui2_bitcoin-test_signtx_invalid_path.py::test_invalid_path_prompt": "33b3c96e24c1f8d306be27dfa2376f5b8f84a31d5914dc93b3e5a742da116c2b",
"TTui2_bitcoin-test_signtx_invalid_path.py::test_invalid_path_pass_forkid": "9b71056bb84b892f5cc88fca0bfa69818c94d60dcb6b4310c325f7233bb01475",
"TTui2_bitcoin-test_signtx_invalid_path.py::test_invalid_path_prompt": "f55ce6b1bb456b76f470bbb3ab84330c93574a56c36ae2f550f0c8bcd48351a1",
"TTui2_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_inputs": "d2bf6e264eb07356434b34fcb48bbb31cf0c261264962f96c12da44662af0529",
"TTui2_bitcoin-test_signtx_mixed_inputs.py::test_non_segwit_segwit_non_segwit_inputs": "dd676dc6e25290c436664bbbc4c99556ef77fa17ed6a4a0e7f0bd36ca34d349c",
"TTui2_bitcoin-test_signtx_mixed_inputs.py::test_segwit_non_segwit_inputs": "d2bf6e264eb07356434b34fcb48bbb31cf0c261264962f96c12da44662af0529",
@ -1990,14 +1995,14 @@
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[hello world]": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[x]": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "54c6a8940716a8cd53c7f20e585bf14b31f293794c69c0bedb88bf8a8d4b15ae",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "54c6a8940716a8cd53c7f20e585bf14b31f293794c69c0bedb88bf8a8d4b15ae",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "54c6a8940716a8cd53c7f20e585bf14b31f293794c69c0bedb88bf8a8d4b15ae",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "54c6a8940716a8cd53c7f20e585bf14b31f293794c69c0bedb88bf8a8d4b15ae",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "fda1e8c12b1be86aa1a268f16fb16cfba5617d7eb3833b17589964caf2137d9a",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "fda1e8c12b1be86aa1a268f16fb16cfba5617d7eb3833b17589964caf2137d9a",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "fda1e8c12b1be86aa1a268f16fb16cfba5617d7eb3833b17589964caf2137d9a",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "fda1e8c12b1be86aa1a268f16fb16cfba5617d7eb3833b17589964caf2137d9a",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[]": "07e3a4c2c4238fc66c5e25ae99db2c57913d9f319def103774c2f108961a1e43",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[hello world]": "07e3a4c2c4238fc66c5e25ae99db2c57913d9f319def103774c2f108961a1e43",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[x]": "07e3a4c2c4238fc66c5e25ae99db2c57913d9f319def103774c2f108961a1e43",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_attack[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "07e3a4c2c4238fc66c5e25ae99db2c57913d9f319def103774c2f108961a1e43",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[]": "a0c216bfc973661eb9a450a68df85bb9b7723c2072c6bc27103eb7403e12e7b9",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[hello world]": "a0c216bfc973661eb9a450a68df85bb9b7723c2072c6bc27103eb7403e12e7b9",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[x]": "a0c216bfc973661eb9a450a68df85bb9b7723c2072c6bc27103eb7403e12e7b9",
"TTui2_bitcoin-test_signtx_prevhash.py::test_invalid_prev_hash_in_prevtx[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]": "a0c216bfc973661eb9a450a68df85bb9b7723c2072c6bc27103eb7403e12e7b9",
"TTui2_bitcoin-test_signtx_replacement.py::test_attack_fake_ext_input_amount": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx_replacement.py::test_attack_fake_int_input_amount": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
"TTui2_bitcoin-test_signtx_replacement.py::test_attack_false_internal": "493db455a2a705880cea9800818345de8dc4086ac1d0f92bb8f21c5eed094084",
@ -2006,7 +2011,7 @@
"TTui2_bitcoin-test_signtx_replacement.py::test_p2tr_fee_bump": "648c476388bd5537898246c2365fa0388bfb5767e7a5536c5c01b44b3c172a1e",
"TTui2_bitcoin-test_signtx_replacement.py::test_p2tr_invalid_signature": "648c476388bd5537898246c2365fa0388bfb5767e7a5536c5c01b44b3c172a1e",
"TTui2_bitcoin-test_signtx_replacement.py::test_p2wpkh_finalize": "489a76a3d2f6bfdf8d3b728f32b0992a22237483a56bfb2f6d8148c9c2a71e00",
"TTui2_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_fee_bump_from_external": "a1692902a90ff9bf6f17ba548a68a081b5daf72b46ef2fd9e3adef84748853b9",
"TTui2_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_fee_bump_from_external": "a085d0805c77faec60cef45951a2994f42c13ef49040ca5979f3c1c731e09e60",
"TTui2_bitcoin-test_signtx_replacement.py::test_p2wpkh_in_p2sh_remove_change": "c46cfa45370d6380bff5b7f4276da57914f653a69c11eceaca58ae76367d203a",
"TTui2_bitcoin-test_signtx_replacement.py::test_p2wpkh_invalid_signature": "489a76a3d2f6bfdf8d3b728f32b0992a22237483a56bfb2f6d8148c9c2a71e00",
"TTui2_bitcoin-test_signtx_replacement.py::test_p2wpkh_op_return_fee_bump": "b043f6dafcfa6f2d023e7bdce54b79391f46906ccf24d5adaa575a998906345b",
@ -2017,7 +2022,7 @@
"TTui2_bitcoin-test_signtx_replacement.py::test_p2wpkh_payjoin[19909859-89859-02483045022100eb74ab-881c7bef": "9d99f81fc2623cc26dfe8b44d9161d62560dfa4cb226d945e523c1970d2b82c9",
"TTui2_bitcoin-test_signtx_replacement.py::test_tx_meld": "2fe1ef0f26b48435b147b9f34ec6760817d6d3df3fba513f7c9b010d76c67bb0",
"TTui2_bitcoin-test_signtx_segwit.py::test_attack_change_input_address": "7971479598aa797aeb2735c399abaa0a4ea36ac9e585fc42bde569dacead8508",
"TTui2_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "3e737aef00ff9f034abce64594ba6b9cad35b0b1e1c333497a915d857691441e",
"TTui2_bitcoin-test_signtx_segwit.py::test_attack_mixed_inputs": "2a47a2d6b89aac7fed76d05c50e994ab6182f7fb058581dcbd7fa59378fe386d",
"TTui2_bitcoin-test_signtx_segwit.py::test_send_multisig_1": "de818e8db2188dbff208548a22188cac3dc6ea8bd36d8b6b461bac0bab0830a2",
"TTui2_bitcoin-test_signtx_segwit.py::test_send_p2sh": "1fd736fe6001a146213ace109f521f325df6e58948dd97aaedb846837d1a02b4",
"TTui2_bitcoin-test_signtx_segwit.py::test_send_p2sh_change": "82c0f7e8ed54ef93146d6eada20ec5a2a3d097c15ccff6942a1687d682c538ed",
@ -2041,21 +2046,21 @@
"TTui2_bitcoin-test_signtx_taproot.py::test_send_mixed": "b95105e2678b621a06ffe3c126921a5d89e655b11957e8c76c192b3ce645cf39",
"TTui2_bitcoin-test_signtx_taproot.py::test_send_p2tr": "fcc17bdfe319aa8f27f01bdb9660b0a8d1dca5a0be74e353bf13a3c2eef39328",
"TTui2_bitcoin-test_signtx_taproot.py::test_send_two_with_change": "8c1992cb4bed58e0faad9f1a24269866e2d5e5c12106a57c3b8637edd6554e92",
"TTui2_bitcoin-test_verifymessage.py::test_message_grs": "2064ccc2b13792fad9d0b5fe7f440dde0c4008e9bdb97836d6daa25abdd3b1f8",
"TTui2_bitcoin-test_verifymessage.py::test_message_long": "0446d62f1064b475ea5dc598bfb250c49709a67994907b26a4a66f61ae31c7aa",
"TTui2_bitcoin-test_verifymessage.py::test_message_testnet": "23aee4d0b7fa79b8a56a7e53ae96fe8f9d27e9bcdf84b5f5aae1211115e2c2a4",
"TTui2_bitcoin-test_verifymessage.py::test_message_verify": "310f47fb628516589cd39d97f13bde039cdfdb992b89c62f1c666a17706bff8c",
"TTui2_bitcoin-test_verifymessage.py::test_message_verify_bcash": "f7fb516ce7576e780ae4f5030463b1227a0d10f01a5914271e318c067dabebe8",
"TTui2_bitcoin-test_verifymessage.py::test_verify_bitcoind": "869ae959ead3e36698433dd30d156d2ffe54575c284d77d8560ddf5a4457e6af",
"TTui2_bitcoin-test_verifymessage.py::test_verify_utf": "1a8dd96912552e04bf75b62d88b13de3dbb57d407ee09bdd6985af2d685912d1",
"TTui2_bitcoin-test_verifymessage_segwit.py::test_message_long": "97804ef81ded061de6f76a457527fac2b4c96386367ca825a79fcb01c327d02d",
"TTui2_bitcoin-test_verifymessage_segwit.py::test_message_testnet": "352f3c5bd780c1329b8f2937b49412305a2693ceb883654a2822728d2d592380",
"TTui2_bitcoin-test_verifymessage_segwit.py::test_message_verify": "146464ced13055910c19c300ec58bfdd17c85edbb122c83913bc723fc434e55e",
"TTui2_bitcoin-test_verifymessage_segwit.py::test_verify_utf": "c70865e1f65bb18b4162fe642761ae58cf7288b1e84b936b45202d97765005bb",
"TTui2_bitcoin-test_verifymessage_segwit_native.py::test_message_long": "e66a4c9e8879bf226b247a5e7ecf18b5ca9121aacc6c8a30febb3493b0591f9b",
"TTui2_bitcoin-test_verifymessage_segwit_native.py::test_message_testnet": "4da0a753f420e21069b1a014e1d91f37ef9804af8c68345ec324b417c5255171",
"TTui2_bitcoin-test_verifymessage_segwit_native.py::test_message_verify": "4b865e4f25e98c0acabeeff41941715b208a9abedd2eb6208e2e8932f4025e5d",
"TTui2_bitcoin-test_verifymessage_segwit_native.py::test_verify_utf": "f865e399a4b598010714a49658846a39a42c16dc321e1672a9d2337ab0d342da",
"TTui2_bitcoin-test_verifymessage.py::test_message_grs": "d9789e293d71b497430538be4f3635c6ec96cd332c30c05676abd390300b2e98",
"TTui2_bitcoin-test_verifymessage.py::test_message_long": "041181a31c9232d8706eca4541fe5faa264acc43c2d8a6873f382bd67b04f1a6",
"TTui2_bitcoin-test_verifymessage.py::test_message_testnet": "cf5fc04107faef7b618732d49ed9a9507889b258bc09990b78e32f3e4af396d5",
"TTui2_bitcoin-test_verifymessage.py::test_message_verify": "b923b1a2b88838808460bf38b15bf805841e280a90723a40a7f47b6306628cd2",
"TTui2_bitcoin-test_verifymessage.py::test_message_verify_bcash": "2ded468d30dde1494fb3f4ad7dab465c17335f94b59bef11713091389fd77e50",
"TTui2_bitcoin-test_verifymessage.py::test_verify_bitcoind": "e924ff7a3008c7dca542e36f0026dd418352fb6910ab48dfadc237c36b46ddd3",
"TTui2_bitcoin-test_verifymessage.py::test_verify_utf": "8cc659614a453c5643e9c211fb070d58e93b472ebe45096c219058170caa3cd2",
"TTui2_bitcoin-test_verifymessage_segwit.py::test_message_long": "46cbf98f28bb01e4d92acc2755c24bed3616cbf9a189bb9ca0d60cd0af710d8a",
"TTui2_bitcoin-test_verifymessage_segwit.py::test_message_testnet": "ee70f4a3410c5cb37a351587b38a625b489a801be0f5040fc3649c9b0fb7544d",
"TTui2_bitcoin-test_verifymessage_segwit.py::test_message_verify": "b934503757f3974319ce43f4f9fad5e9d48291c17892b939bd4548ca122f4f76",
"TTui2_bitcoin-test_verifymessage_segwit.py::test_verify_utf": "5daff0a6e6df88737ca1b479afd87df2e06e6e2233b86d9da123e2af8a1cecc3",
"TTui2_bitcoin-test_verifymessage_segwit_native.py::test_message_long": "00c2b350d781b89b7a6df32b337798d85f54b76dd32c1faadd868cf90bd8249e",
"TTui2_bitcoin-test_verifymessage_segwit_native.py::test_message_testnet": "dd9c50a6fb92ca728fe254111ef0a2d0392cc81ac21dd1ebc009314f24f07d0e",
"TTui2_bitcoin-test_verifymessage_segwit_native.py::test_message_verify": "dfc35dc605f15bb3f391ae5c10870b3358ea49d1aea02ff9f3607798c15ca667",
"TTui2_bitcoin-test_verifymessage_segwit_native.py::test_verify_utf": "91b659369711ecee12e7976ad56f6f1b8b748871be5f0d864b38c626109b5ce0",
"TTui2_bitcoin-test_zcash.py::test_external_presigned": "31a32b4d4a0cabb6a61a31083191c7c165700d0c69842e02f16d3aca6498a986",
"TTui2_bitcoin-test_zcash.py::test_one_one_fee_sapling": "5cc295dd9530834f57114bf999912fd53559c900ea90340438d17f4c646f8f00",
"TTui2_bitcoin-test_zcash.py::test_spend_old_versions": "dba154053210d0b9a38299e0fc33b09aa5bb0b1a9b2973aaab610feb2cdb6af1",
@ -2139,208 +2144,208 @@
"TTui2_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[nested_script_w-789238e6": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[pub_key_script]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_cardano-test_get_native_script_hash.py::test_cardano_get_native_script_hash[pub_key_script_-1579fe2a": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[byron_to_shelley_transfer]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_change0]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_change1]": "f9427d422ec8fc050f50411797f3f465db62cc716357ff9a0d7a0adaf24d258e",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_multiple_inputs]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_without_change0]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_without_change1]": "f9427d422ec8fc050f50411797f3f465db62cc716357ff9a0d7a0adaf24d258e",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_different_policies_-1dbb1bfb": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_multiasset_output]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_no_ttl-validity_start]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_a_required_signer]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_most_elements_fille-29691455": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_output_datum_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_script_data_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_deregistratio-1ab28f77": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_deregistration]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_registration_-a144c34c": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_registration_-bf5f9707": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_token_minting]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_a_required_signer]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_both_output_formats]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_inline_datum,_refer-d1082570": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_long_inline_datum,_-1f681aaa": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_multiple_correctly_-6545455a": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_network_id_included-d9df16f9": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_output_datum_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_output_datum_hash_a-84ad587a": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_script_address_but_-b0da7209": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_script_data_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_token_minting]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_an_ordinary_input]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-a33e6741": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-a6481374": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_key_script_addre-d3366a63": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_device-owned_collater-8f38b4d7": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_external_collateral_return]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_output_datum_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_reference_input]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_credentials_giv-6a67c1eb": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_credentials_giv-72ef969e": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_deregistration]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_deregistration_-78f5c748": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_registration_an-4da9385a": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_registration_ce-46b0a250": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_token_minting]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral_and_-3f0b305a": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral_and_-c92d773b": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_without_script_data_hash_a-9590827f": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate_wi-336f4a44": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate_wi-d3427614": "7e2881e5b84c557a8b9d8b7b2efdf8be488db0c550eb5ab51e313ba12f136bbe",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_with_zero_margin]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction_with_additional_wit-36ba8ce8": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction_with_required_signers]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_o-0c37e6dc": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_o-7f1d12f6": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_output]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_script_address_a-56fc16f7": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_enterprise_address_ch-15518a4c": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_pointer_address_change_output]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[stake_pool_registration_certificate_with_no_p-0bbad967": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[stake_pool_registration_on_testnet]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[testnet_transaction0]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[testnet_transaction1]": "f9427d422ec8fc050f50411797f3f465db62cc716357ff9a0d7a0adaf24d258e",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_auxiliary_data_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_base_address_change_output_p-3c7243e1": "7e2881e5b84c557a8b9d8b7b2efdf8be488db0c550eb5ab51e313ba12f136bbe",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_base_address_change_output_s-20438873": "7e2881e5b84c557a8b9d8b7b2efdf8be488db0c550eb5ab51e313ba12f136bbe",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_catalyst_registration]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_everything_set_except_pool_r-1e1ef130": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration_and_withdrawal]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration_with_ac-9ca046f0": "7e2881e5b84c557a8b9d8b7b2efdf8be488db0c550eb5ab51e313ba12f136bbe",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_and_stake-3fdfc583": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_certifica-e7bd462a": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_certificate]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_ttl_equal_to_0]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_validity_interval_start_equal_to_0]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[1854_change_output_path_in_ordinary_tr-805f9bd0": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[1854_input_path_in_ordinary_transaction]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[additional_witness_requests_in_ordinar-9c4f94c0": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[all_tx_inputs_must_be_external_(without_path)]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_mint_token_group_in_wrong_order]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_multiasset_token_group_-7c1351bc": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[auxiliary_data_hash_has_incorrect_length]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[both_datum_hash_and_inline_datum_present]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[byron_to_shelley_transfer_input_accoun-863fee7d": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[byron_to_shelley_transfer_output_accou-5a99fb35": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_both_path_and_key_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_both_path_and_script_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_invalid_pool_size]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_key_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_multisig_path]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_non_staking_path]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_script_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_and_stake_deregistration-e17db500": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_and_withdrawal_account_mismatch]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_path_larger_than_100]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_staking_path_larger_than_100]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_with_script_in_payment_part]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[byron_to_shelley_transfer]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_change0]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_change1]": "5b86dfd5380a6ec553b8ade069f8bddabe96c836e2e9e837249d9ec3158234d5",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_with_multiple_inputs]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_without_change0]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mainnet_transaction_without_change1]": "5b86dfd5380a6ec553b8ade069f8bddabe96c836e2e9e837249d9ec3158234d5",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_different_policies_-1dbb1bfb": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_multiasset_output]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[mary_era_transaction_with_no_ttl-validity_start]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_a_required_signer]": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_most_elements_fille-29691455": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_output_datum_hash]": "8c673886c292f96636e1e830e38e46258d32eadb67033ac990719329b594fa20",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_script_data_hash]": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_deregistratio-1ab28f77": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_deregistration]": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_registration_-a144c34c": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_stake_registration_-bf5f9707": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[multisig_transaction_with_token_minting]": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_a_required_signer]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_both_output_formats]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_inline_datum,_refer-d1082570": "405717cb6434ec914f38abe90171ec66ac07199e925ac88e99a41276c5033b65",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_long_inline_datum,_-1f681aaa": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_multiple_correctly_-6545455a": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_network_id_included-d9df16f9": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_output_datum_hash]": "405717cb6434ec914f38abe90171ec66ac07199e925ac88e99a41276c5033b65",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_output_datum_hash_a-84ad587a": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_script_address_but_-b0da7209": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_script_data_hash]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[ordinary_transaction_with_token_minting]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_an_ordinary_input]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-a33e6741": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_address_device-o-a6481374": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_base_key_script_addre-d3366a63": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_device-owned_collater-8f38b4d7": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_external_collateral_return]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_output_datum_hash]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_reference_input]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_credentials_giv-6a67c1eb": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_credentials_giv-72ef969e": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_deregistration]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_deregistration_-78f5c748": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_registration_an-4da9385a": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_stake_registration_ce-46b0a250": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_token_minting]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral]": "c970297187d1f474ecac74e01ccf3bd878f1746725990dc01e3dbd298013e6e2",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral_and_-3f0b305a": "c970297187d1f474ecac74e01ccf3bd878f1746725990dc01e3dbd298013e6e2",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_with_total_collateral_and_-c92d773b": "c970297187d1f474ecac74e01ccf3bd878f1746725990dc01e3dbd298013e6e2",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[plutus_transaction_without_script_data_hash_a-9590827f": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate_wi-336f4a44": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_certificate_wi-d3427614": "6a769e7d8165775a8c90b76a83517268aaf55399b8ce21e67a453f28e3c9e1c9",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[sample_stake_pool_registration_with_zero_margin]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction_with_additional_wit-36ba8ce8": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_plutus_transaction_with_required_signers]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_o-0c37e6dc": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_o-7f1d12f6": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_address_change_output]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_base_script_address_a-56fc16f7": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_enterprise_address_ch-15518a4c": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[simple_transaction_with_pointer_address_change_output]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[stake_pool_registration_certificate_with_no_p-0bbad967": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[stake_pool_registration_on_testnet]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[testnet_transaction0]": "8bff4c04ea01e21cb9c332d32478f1bce1053e0ac018685a977634b47514fe13",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[testnet_transaction1]": "c99bd98c07a059342d4445a925cf1c59e22779a758a7934145e2a46e52d76f98",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_auxiliary_data_hash]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_base_address_change_output_p-3c7243e1": "0898d3ae371236b252fd04e527bf299e556ee3bc7296883b96a1f6e268874f06",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_base_address_change_output_s-20438873": "0898d3ae371236b252fd04e527bf299e556ee3bc7296883b96a1f6e268874f06",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_catalyst_registration]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_everything_set_except_pool_r-1e1ef130": "3290b3e7d3ff1dd2ca6f7b2e4a03e631ec7167666da0ce4daccd5aa458d67ca4",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration_and_withdrawal]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_deregistration_with_ac-9ca046f0": "8906296086070678a4726ba8aad5912f44de37adc9ff0871506767f014ba03ce",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_and_stake-3fdfc583": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_certifica-e7bd462a": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_stake_registration_certificate]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_ttl_equal_to_0]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx[transaction_with_validity_interval_start_equal_to_0]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[1854_change_output_path_in_ordinary_tr-805f9bd0": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[1854_input_path_in_ordinary_transaction]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[additional_witness_requests_in_ordinar-9c4f94c0": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[all_tx_inputs_must_be_external_(without_path)]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_mint_token_group_in_wrong_order]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[asset_names_in_multiasset_token_group_-7c1351bc": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[auxiliary_data_hash_has_incorrect_length]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[both_datum_hash_and_inline_datum_present]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[byron_to_shelley_transfer_input_accoun-863fee7d": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[byron_to_shelley_transfer_output_accou-5a99fb35": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_both_path_and_key_hash]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_both_path_and_script_hash]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_invalid_pool_size]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_key_hash]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_multisig_path]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_non_staking_path]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[certificate_has_script_hash]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_and_stake_deregistration-e17db500": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_and_withdrawal_account_mismatch]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_path_larger_than_100]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_staking_path_larger_than_100]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[change_output_with_script_in_payment_part]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_input_is_present]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_input_prev_hash_has_incorre-99d2dc0e": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_input_prev_hash_has_incorre-99d2dc0e": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_return_is_present]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_return_with_datum_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_return_with_script_address]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[contains_a_different_certificate]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_return_with_datum_hash]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[collateral_return_with_script_address]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[contains_a_different_certificate]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[contains_multiple_pool_registration_ce-3000d4f0": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[contains_withdrawal]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[fee_is_too_high]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[inline_datum_present_in_output_with_le-43c025ef": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_change_output_account_mismatch]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_stake_deregistration_certifi-b3383de2": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_withdrawal_account_mismatch]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_prev_hash_has_incorrect_length]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[invalid_pool_id]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[inline_datum_present_in_output_with_le-43c025ef": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_change_output_account_mismatch]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_stake_deregistration_certifi-b3383de2": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_and_withdrawal_account_mismatch]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[input_prev_hash_has_incorrect_length]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[invalid_pool_id]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[mainnet_protocol_magic_with_testnet_network_id]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[mainnet_transaction_with_testnet_output]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[margin_higher_than_1]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[missing_owner_with_path]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_1852_multisi-b7679330": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[mainnet_transaction_with_testnet_output]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[margin_higher_than_1]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[missing_owner_with_path]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_1852_multisi-b7679330": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_a_collateral_input]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_collateral_return]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_long_token_m-9fb3cfe5": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_output_conta-e3b36436": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_long_token_m-9fb3cfe5": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_output_conta-e3b36436": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_reference_input]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_repeated_withdrawal]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_delega-19d1722c": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_delega-394991f1": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_deregi-351ce869": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_deregi-43da91d4": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_regist-456f1292": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_regist-84b1254e": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_repeated_withdrawal]": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_delega-19d1722c": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_delega-394991f1": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_deregi-351ce869": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_deregi-43da91d4": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_regist-456f1292": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_stake_regist-84b1254e": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_total_collateral]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_withdrawal_c-9f7e1700": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_withdrawal_c-e98b1f5c": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_wthdrawal_ad-3291ee9e": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_without_minting_b-da5ba399": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_long_token_m-350c65f4": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_token_mintin-bc56f145": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_without_token_min-a128d577": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_has_invalid_crc]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_a_valid_cbor_but_inv-ea3da215": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_invalid_cbor]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_too_long]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_too_short]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_datum_hash_has_incorrect_length]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_has_both_address_and_address_pa-2efc280f": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_total_is_too_high]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_with_reward_address]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[plutus_transaction_with_output_contain-74465253": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_mint_in_wrong_order]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_multiasset_output_in_wrong_order]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[pool_reward_address_belongs_to_differe-e79b6855": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[pool_reward_address_is_a_base_address]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_withdrawal_c-9f7e1700": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_withdrawal_c-e98b1f5c": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_with_wthdrawal_ad-3291ee9e": "2e0f33cd226d5ba5b791b756cb81addb2f9add683f98fa4df76d21b45e1e469b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[multisig_transaction_without_minting_b-da5ba399": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_long_token_m-350c65f4": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_with_token_mintin-bc56f145": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[ordinary_transaction_without_token_min-a128d577": "3290b3e7d3ff1dd2ca6f7b2e4a03e631ec7167666da0ce4daccd5aa458d67ca4",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_has_invalid_crc]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_a_valid_cbor_but_inv-ea3da215": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_invalid_cbor]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_too_long]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_address_is_too_short]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_datum_hash_has_incorrect_length]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_has_both_address_and_address_pa-2efc280f": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_total_is_too_high]": "7eaaee4c95d9a61eacd86762d1798339d169f80b558a5c9cefe91b5e55e57cfb",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[output_with_reward_address]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[plutus_transaction_with_output_contain-74465253": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_mint_in_wrong_order]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[policyids_in_multiasset_output_in_wrong_order]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[pool_reward_address_belongs_to_differe-e79b6855": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[pool_reward_address_is_a_base_address]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[reference_input_is_present]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_mint_token_group]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_multiasset_token_group]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_mint]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_multiasset_output]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[required_signer_with_both_key_path_and-7d9a3c59": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_mint_token_group]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_asset_name_in_multiasset_token_group]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_mint]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[repeated_policyid_in_multiasset_output]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[required_signer_with_both_key_path_and-7d9a3c59": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-02b129f8": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-11c8b442": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-11c8b442": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-2d1899d5": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-3f8170f6": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-3f8170f6": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-60961d51": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-790fc948": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-883e81d5": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-883e81d5": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-9ae6620c": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-d0eba163": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-e7a533e7": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-e7a533e7": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-e908b1a8": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-f9976ae8": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[script_data_hash_has_incorrect_length]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[shelley_mainnet_transaction_with_testn-af110e3e": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[shelley_testnet_transaction_with_mainn-ba78ab8f": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[stake_deregistration_account_larger_than_100]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[stake_deregistration_certificate_and_w-003a1023": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[sample_stake_pool_registration_certifi-f9976ae8": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[script_data_hash_has_incorrect_length]": "9ef42749cd338e0189d8e99fabe7f82f0c19d7211ec4ed44bb3584e3ac65af09",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[shelley_mainnet_transaction_with_testn-af110e3e": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[shelley_testnet_transaction_with_mainn-ba78ab8f": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[stake_deregistration_account_larger_than_100]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[stake_deregistration_certificate_and_w-003a1023": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[testnet_protocol_magic_with_mainnet_network_id]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[testnet_transaction_with_mainnet_output]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[testnet_transaction_with_mainnet_output]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[total_collateral_is_present]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[transaction_with_both_auxiliary_data_b-64274ac4": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[transaction_with_catalyst_registration-11533421": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[two_owners_with_path]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[unsupported_address_type]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_multisig_transaction_signing_mode]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_ordinary_transaction_signing_mode]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_plutus_transaction_signing_mode]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_amount_is_too_large]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_contains_both_path_and_key_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_contains_both_path_and_script_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_key_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_multisig_path]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_non_staking_path]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_script_hash]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[mainnet_transaction_without_change]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[multisig_transaction_with_a_requ-c2fba589": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_a_requ-9728607e": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_long_i-708443f3": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_output-9ba7352d": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[plutus_transaction_with_reference_input]": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[plutus_transaction_with_total_co-e846c221": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[transaction_with_stake_deregistr-6e84da2f": "6f59841dc5e3597d0940a7b4be0813b25555652180043634c9018272c5a22a3a",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[transaction_with_both_auxiliary_data_b-64274ac4": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[transaction_with_catalyst_registration-11533421": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[two_owners_with_path]": "52934629dcd68007bbb0858710eaabd237230621c2b7de6239a2b371f663fc8b",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[unsupported_address_type]": "cbfd7d957541a2ab43c47ccdcf2fa61893d817f888c2ce65af0af14b61c11425",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_multisig_transaction_signing_mode]": "1046e4587492a3ca32656c7f772db75462abd816d36f60e33022a783a8f155ea",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_ordinary_transaction_signing_mode]": "f71fe6d2af5c42cd6c75af8249deb3f14494ffa33e523469037b49cb13311991",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[with_plutus_transaction_signing_mode]": "07f9fd1a70fee3a30df134ca83965d4b45a5ddc7a54fa3e4e0f221d12911ca6d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_amount_is_too_large]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_contains_both_path_and_key_hash]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_contains_both_path_and_script_hash]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_key_hash]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_multisig_path]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_non_staking_path]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_failed[withdrawal_has_script_hash]": "a2bd55d3756d8be0583e95e9c6c92e6324a3e538eb816d8833fb34c38aa8910d",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[mainnet_transaction_without_change]": "220d08082ca2fdaa6a0d690230df063c8eff2caf09d1774eda271fd63a380475",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[multisig_transaction_with_a_requ-c2fba589": "08f9331d5e2d3863fb850475efd85bb70c069d4bec57d5ba3e34d1ca8c3bbbae",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_a_requ-9728607e": "737076e18dd20e11b6e0fcdc114ac08a35b71f18320d8e2b6e7b55c8aee7ddf9",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_long_i-708443f3": "c54ae51ab53104280b1082a3f6b333801434522530bc13971771886a66496dc9",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[ordinary_transaction_with_output-9ba7352d": "47f45b994e7666a56c8ad812c2e2556a2a45ba0eb429c25c15d7ea86ef254486",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[plutus_transaction_with_reference_input]": "40e8c9595433edc450a33f591532f936de98f9b0a9c7d87618e29d8f37c8201f",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[plutus_transaction_with_total_co-e846c221": "40e8c9595433edc450a33f591532f936de98f9b0a9c7d87618e29d8f37c8201f",
"TTui2_cardano-test_sign_tx.py::test_cardano_sign_tx_show_details[transaction_with_stake_deregistr-6e84da2f": "737076e18dd20e11b6e0fcdc114ac08a35b71f18320d8e2b6e7b55c8aee7ddf9",
"TTui2_eos-test_get_public_key.py::test_eos_get_public_key": "37c6d89dee7834586e85363d526d3bc3a0255be62b69015aecd0aacaa0f2a161",
"TTui2_eos-test_signtx.py::test_eos_signtx_buyram": "2368c134fe964d8ca92fde2d2e665c7822e32f7bf181ef943161f5385799c950",
"TTui2_eos-test_signtx.py::test_eos_signtx_buyrambytes": "2368c134fe964d8ca92fde2d2e665c7822e32f7bf181ef943161f5385799c950",
@ -2368,17 +2373,17 @@
"TTui2_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters0-result0]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters1-result1]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_getpublickey.py::test_ethereum_getpublickey[parameters2-result2]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[complex_data]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[full_domain_empty_message]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[injective_testcase]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[struct_list_non_v4]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[struct_list_v4]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[structs_arrays_v4]": "95a40f79fa7ffceb10e89b513c203b4937112b8d764cdba3c1df538355dc129c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_cancel": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_show_more_button": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[array_of_structs]": "d956173e83f18021dfa4f78e474dccb865386e3ec02f2006b6e4886d5163029e",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[bare_minimum]": "1570f4edca1356df7222638dd3ee8ab12c42108b344a441556f9f1ce886d85a3",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[basic_data]": "724869011909189b15b70ff5a5cc1cd64de94f7cd6dc7b5ecd85fbe060693b2c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[complex_data]": "30ccf9be3f61a51d98f98466edf73d9abb96d0082f2fd16d5d1ff4f4aef0fc20",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[full_domain_empty_message]": "1f2abaead7069cb49e1f598cb7d806758f594cdacf09d502f5fdc8b0c45b4f78",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[injective_testcase]": "1919cc5d3979d8c664d740b06a104409dedb21c171b8d1243c1cd8bcc7bcdca8",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[struct_list_non_v4]": "724869011909189b15b70ff5a5cc1cd64de94f7cd6dc7b5ecd85fbe060693b2c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[struct_list_v4]": "724869011909189b15b70ff5a5cc1cd64de94f7cd6dc7b5ecd85fbe060693b2c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data[structs_arrays_v4]": "724869011909189b15b70ff5a5cc1cd64de94f7cd6dc7b5ecd85fbe060693b2c",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_cancel": "cb39f049291853a97887998967150c16c265c4c4d5de4c951732f12ebff82692",
"TTui2_ethereum-test_sign_typed_data.py::test_ethereum_sign_typed_data_show_more_button": "4afa86262e681c00db09fa7883008d157b9f0c77477a75dd5144ded262900244",
"TTui2_ethereum-test_sign_verify_message.py::test_signmessage[parameters0-result0]": "22c2edab04af9dc8873ccb7c6bfbe81461de85aa533e404b5a033b212772d0c3",
"TTui2_ethereum-test_sign_verify_message.py::test_signmessage[parameters1-result1]": "fbec6c25222739d8a6c8f409d8ab854487cad7599cd5865a589dec653c0f357f",
"TTui2_ethereum-test_sign_verify_message.py::test_signmessage[parameters2-result2]": "506eae7c9993b6bc2661697556e512ff5ee410004bf1e7317d24a4a4ce11d855",
@ -2387,15 +2392,15 @@
"TTui2_ethereum-test_sign_verify_message.py::test_signmessage[parameters5-result5]": "ac91923e18c748b4d6df32a85234cb4e9ab40bfbf9dddfee3ac9a23a21a89cc2",
"TTui2_ethereum-test_sign_verify_message.py::test_signmessage[parameters6-result6]": "f6d2267cd8c1272239fc1c838c302761f37e59412616537fc2c3595e7922d837",
"TTui2_ethereum-test_sign_verify_message.py::test_signmessage[parameters7-result7]": "9c527296750ac999679e0b5e6a55be4bd0e21ce0b1dfc7e8f168e34fd4c39bf2",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters0-result0]": "73884c1bb779c0651c3bf50103e06ba2c0ce6a93e9352403102d56f6bc634a10",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters1-result1]": "aa61dae57d0fe02c3649c95c0bacb21d25d307cb5adbf9ffd16ab6ee8c00f22c",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters2-result2]": "969f3358d3ad138a797993cdd39dc041992d5c17731d61585624bf0dc4024ae9",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters3-result3]": "7061ed972c14f5f0e2d953d2a2274cbc8c04af46648d7410f80dc85e954e0217",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters4-result4]": "a470a44658779b42f6740b38e6668f9f35e5aa27184a9a42bf81f326b79ddf5b",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters5-result5]": "44baa17a75bbcd36ecc26ac187b93bda0e85fc262ee8e08aaab1295efa07e215",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters6-result6]": "ccf8a842bb9c8353f92baa1590755fbcc47b72dfa4b17ecfcff2a6ff5545cb09",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters7-result7]": "16827e7b3782806296b972e6c079fa9af500c2b438cb95b218c9df706acf2cbb",
"TTui2_ethereum-test_sign_verify_message.py::test_verify_invalid": "73884c1bb779c0651c3bf50103e06ba2c0ce6a93e9352403102d56f6bc634a10",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters0-result0]": "918e6281f9265348aabf6b7308f02cf880649d442ba5b7b2ec8a721ba9cebdce",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters1-result1]": "84ce569e4fb2732e69f8fe1fcad512331f5210410db535d502309a0ccdafd431",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters2-result2]": "2ca9028817a8fbeb92b773335d682fb9fdc60e97c76cc7b59b58e2bb79b9a7f0",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters3-result3]": "ba8e670b066efe24f23f73e6781d698490ebdbd8d89a2cd2bc4691dedfa8c591",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters4-result4]": "fc34ebc1a523fa3634754cef55ccfa34d1f5e9b1862538acc164fde0b8471c6e",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters5-result5]": "bdcf67d7683efeb794e46b74f4d8bbdf7729b80921a1c3eedb22080c2ca1d104",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters6-result6]": "8964fc3f6bcd2c87917b1072c90236f26759d1001896ba282e6f189f231b7425",
"TTui2_ethereum-test_sign_verify_message.py::test_verify[parameters7-result7]": "50b3a55ef37800c3b0880ba8351a5aec227909d5e024c830d05d9d200c9c1940",
"TTui2_ethereum-test_sign_verify_message.py::test_verify_invalid": "918e6281f9265348aabf6b7308f02cf880649d442ba5b7b2ec8a721ba9cebdce",
"TTui2_ethereum-test_signtx.py::test_data_streaming": "b97351ec13f0b5511911e40e0fd9a6958d9b26eb8c0d6eb2750ba5576cd85a56",
"TTui2_ethereum-test_signtx.py::test_sanity_checks": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_ethereum-test_signtx.py::test_sanity_checks_eip1559": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -2458,7 +2463,7 @@
"TTui2_misc-test_msg_signidentity.py::test_sign": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_monero-test_getaddress.py::test_monero_getaddress": "415aa4667be5775d1b5b361688d3d171c95feffb860570421022af1df91223d2",
"TTui2_monero-test_getwatchkey.py::test_monero_getwatchkey": "bf70b5c85f9a0b3e76600cee79a51fc737019251ac104cfa0a9a69544fca11e1",
"TTui2_nem-test_getaddress.py::test_nem_getaddress": "5879bc407bfb393a7bb691d55b52cd22d5247358e0c3f49e98636f7d73a75f42",
"TTui2_nem-test_getaddress.py::test_nem_getaddress": "884ee56462d35be935c07c83998ca133d2c93cf2ca197060aadf955ea1ed4de1",
"TTui2_nem-test_signtx_mosaics.py::test_nem_signtx_mosaic_creation": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_nem-test_signtx_mosaics.py::test_nem_signtx_mosaic_creation_levy": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_nem-test_signtx_mosaics.py::test_nem_signtx_mosaic_creation_properties": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -2469,9 +2474,9 @@
"TTui2_nem-test_signtx_others.py::test_nem_signtx_importance_transfer": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_nem-test_signtx_others.py::test_nem_signtx_provision_namespace": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_encrypted_payload": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic": "2491e0b47ce4509b549cc402916f99832024737700b407ccb51e8f6cd5fa63bf",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic_with_levy": "2491e0b47ce4509b549cc402916f99832024737700b407ccb51e8f6cd5fa63bf",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_multiple_mosaics": "709a7db8f7c70bf31db8050f42512e43ad83be5fc3e5bd710b02e1288bc09890",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic": "3b4c2d06098c29a528e5d886c7084a65977665dcccd0d1b195235c81c72e5e07",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_known_mosaic_with_levy": "3b4c2d06098c29a528e5d886c7084a65977665dcccd0d1b195235c81c72e5e07",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_multiple_mosaics": "d4a891636f2760d87b7e7b8f7c50c3bd5813ea56c93b8fe34c7c4c01ed38ad6e",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_simple": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_unknown_mosaic": "f32f3ae5971dc6d1407ec49a4225e3128c67cd1f6298ac588d9e2809a58496cb",
"TTui2_nem-test_signtx_transfers.py::test_nem_signtx_xem_as_mosaic": "08add8db0fa244b5ac5b0ea459a210d6f897df57407351904c9f23d785818140",
@ -2480,9 +2485,9 @@
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[passphrase_protection-True]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[pin_protection-True]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_bad_parameters[u2f_counter-1]": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_dry_run": "6163bdd261809e749bcc2eed7882b994eae98b5db28a4a6c27ded2c0ecce4294",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_invalid_seed_core": "6163bdd261809e749bcc2eed7882b994eae98b5db28a4a6c27ded2c0ecce4294",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_seed_mismatch": "6163bdd261809e749bcc2eed7882b994eae98b5db28a4a6c27ded2c0ecce4294",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_dry_run": "fb6d1ba5b6f8b0c28d7c114a1cad2170029800a50cea1dce1b222b56c53d4169",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_invalid_seed_core": "fb6d1ba5b6f8b0c28d7c114a1cad2170029800a50cea1dce1b222b56c53d4169",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_seed_mismatch": "fb6d1ba5b6f8b0c28d7c114a1cad2170029800a50cea1dce1b222b56c53d4169",
"TTui2_reset_recovery-test_recovery_bip39_dryrun.py::test_uninitialized": "8711e2fa6f7b301add7641e08ffb4bacf29bcd41530b1dd435fdbddb49b4bdf8",
"TTui2_reset_recovery-test_recovery_bip39_t2.py::test_already_initialized": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_reset_recovery-test_recovery_bip39_t2.py::test_tt_nopin_nopassphrase": "3919d9404e9f9a4880bd084edbfa02fbb04641008e04b83458633691e69bf239",
@ -2511,24 +2516,24 @@
"TTui2_reset_recovery-test_recovery_slip39_basic.py::test_wrong_nth_word[2]": "4b94af756dc9288eca587760a32e66abcac622da498d6a9b5bfb5f965f295d2f",
"TTui2_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_dryrun": "7a5048ee96f76bb2e2a6d64fd89dfc22eb6fe792eaa769058249d0f552ee59d3",
"TTui2_reset_recovery-test_recovery_slip39_basic_dryrun.py::test_2of3_invalid_seed_dryrun": "7a5048ee96f76bb2e2a6d64fd89dfc22eb6fe792eaa769058249d0f552ee59d3",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "4f4ba72d808efd3b1c90493dc287fe22d64f1fa28d1b055c05b4b13bb662946e",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Advanced-bac-f67baa1c": "1d2e196f1f194c41aa4ddc6a5968fea311583f2b1447812fee59410fd19aaca0",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Basic-backup-6348e7fe": "b99b45445bb22a6a2954c87c895770580e069d61eebd5bb13f0e7411d69b692e",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Bip39-backup_flow_bip39]": "19654fc05ca617863fd0788e34bb57a0c209d863f780f16e4ecb952446ca6409",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Advanced-backup-dcbda5cf": "536cf8b5905ed9e36b37bbef57567e3bfc0a48e192073d81e2bfce1da3cb8e03",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Basic-backup_fl-1577de4d": "c36cf19489c96fc349d584d9cd3ba4f9ff86f16ad3d202d55dc0570a5b0b5b9e",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Bip39-backup_flow_bip39]": "e858239e4efffb8c185c098c8c7a0b9ca19d4b3c4836ee43b6db926abf7918bc",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Advanced-bac-f67baa1c": "bd1f14226b2b3b778dc146ab8e4d0b0535657649330ca5dd3efa4c00a70ecb24",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_manual[BackupType.Slip39_Basic-backup-6348e7fe": "9f0568a1782a4d392cf64c2f4478b6fadc6ffcaea8a3c706c04ba798d2fa5195",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Bip39-backup_flow_bip39]": "f8cbc0efdbfbaef7bfdcf84d14a798189a8e5f8d80d5e64c2b0f6fd43abcfe52",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Advanced-backup-dcbda5cf": "00ffcd324fa349282cd08524722e92b0b8469739259f66b8de30182dba6f6607",
"TTui2_reset_recovery-test_reset_backup.py::test_skip_backup_msg[BackupType.Slip39_Basic-backup_fl-1577de4d": "77797bb5a33f8ffafb778b85a1a5dd2f59ec651c03e71c681656118ea15ed0cc",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_already_initialized": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_failed_pin": "e34eb8420d9e74571c36e39352ba2308d90a021b2f5ef2e78afb167764ea931d",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_reset_device": "23bf8446c0c9b9f948b9734b0cb4062d004e6b7b02b950e557ad34e47b4b3889",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192": "44f01af26a3a1a6abde60a60de781b69bab9d7cf41c50ca16522e423e01da9a5",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "32ce727d1add7d2150296a10332250f768544a088e35a123091c6a5ff7d8b549",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "79e75a5a75aaae9c05f598e5ef273734d8de3b9416bd747a9d58326d57090b1f",
"TTui2_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery": "26df7da23999be182499ccafc8252513afdb0d0e288adbe37b393cf80a7e0662",
"TTui2_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery": "92a0fd39f25845744194dc1ae04d5eebf268f658161ab7e685b4179d2c092e82",
"TTui2_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery": "38eacc7bb14cdbd21bcc971cd2916f288b7929bd7b4e9cf2d49c66a81b981126",
"TTui2_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced": "92a0fd39f25845744194dc1ae04d5eebf268f658161ab7e685b4179d2c092e82",
"TTui2_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic": "38eacc7bb14cdbd21bcc971cd2916f288b7929bd7b4e9cf2d49c66a81b981126",
"TTui2_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256": "38eacc7bb14cdbd21bcc971cd2916f288b7929bd7b4e9cf2d49c66a81b981126",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_reset_device": "c9791eaa949c37a6996ec08677b1aff00dd294097c62cc51b905e115fd32cdb3",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_reset_device_192": "a21078e36aa4b49377ef3fc1ad6084f725eb3941608a03e1bc899dca828d07ad",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_reset_device_pin": "6818c19bba26ef8acecd87cadbe5bf678449a519e49cc365311708d91abe92be",
"TTui2_reset_recovery-test_reset_bip39_t2.py::test_reset_failed_check": "fad48c5d40c5df33cbf4abbb7695f6c22b490ab3f118cfdf3b64b2bc2936920f",
"TTui2_reset_recovery-test_reset_recovery_bip39.py::test_reset_recovery": "1c463175327e8a0286464e8c7165de3a1434b3c48e7f7b6ed47edfaa992bb039",
"TTui2_reset_recovery-test_reset_recovery_slip39_advanced.py::test_reset_recovery": "6dc1c0d4106d8a789a7eae973a3b768cb1a5383fdf42866e51516e67fd4a36ca",
"TTui2_reset_recovery-test_reset_recovery_slip39_basic.py::test_reset_recovery": "78cd86e1e473e5cdd541840a657723f663d9294fc4fdc74af97274ea1b3939b8",
"TTui2_reset_recovery-test_reset_slip39_advanced.py::test_reset_device_slip39_advanced": "16fdec338958b038ecb96614cb8b47d5dcdd61bf1422e9dff8bfd8022fef1536",
"TTui2_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic": "e68ba714482d7d6239a4e4d43d890a3de340230c5618fc820b1c24027c87b72d",
"TTui2_reset_recovery-test_reset_slip39_basic.py::test_reset_device_slip39_basic_256": "146b4d7880fd9bd325da46d675ec4ee4f88e27916eba3198d911c3c4c6a5e29f",
"TTui2_ripple-test_get_address.py::test_ripple_get_address": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_ripple-test_get_address.py::test_ripple_get_address_other": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_ripple-test_sign_tx.py::test_ripple_sign_invalid_fee": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -2610,34 +2615,34 @@
"TTui2_test_msg_applysettings.py::test_apply_settings_rotation": "5478c39f7e16f84a05456c30f3779b971f490a0305ef6685643ff827eb8965a0",
"TTui2_test_msg_applysettings.py::test_experimental_features": "46cfceb61926077ce9a1e8e36102af5343b6ed19d6b4f5f50fca7a36ef579a47",
"TTui2_test_msg_applysettings.py::test_label_too_long": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_test_msg_applysettings.py::test_safety_checks": "72863043d2c43d34fe2bcb5f13dc53f54cb1ba734341e6e8ee48015f55a03530",
"TTui2_test_msg_backup_device.py::test_backup_bip39": "300ec4990b9b3dbc7f5ed8bffbd45294d975868ec43ff5713640f3ee7dd58f5c",
"TTui2_test_msg_backup_device.py::test_backup_slip39_advanced[click_info]": "d7f617f5b3cc9f8b061e4e809ba96e4e0c398a94ec81d22e523769bc244e1620",
"TTui2_test_msg_backup_device.py::test_backup_slip39_advanced[no_click_info]": "d7f617f5b3cc9f8b061e4e809ba96e4e0c398a94ec81d22e523769bc244e1620",
"TTui2_test_msg_backup_device.py::test_backup_slip39_basic[click_info]": "d7f617f5b3cc9f8b061e4e809ba96e4e0c398a94ec81d22e523769bc244e1620",
"TTui2_test_msg_backup_device.py::test_backup_slip39_basic[no_click_info]": "d7f617f5b3cc9f8b061e4e809ba96e4e0c398a94ec81d22e523769bc244e1620",
"TTui2_test_msg_applysettings.py::test_safety_checks": "8adb07fc5748b43a07e17cca83d97f49399937f5881c9d96eb2439fd3c95f7b5",
"TTui2_test_msg_backup_device.py::test_backup_bip39": "14daf97298adcf42a2b9d85eef18313ac91d75662ee80f6b177579f2ba55d2ae",
"TTui2_test_msg_backup_device.py::test_backup_slip39_advanced[click_info]": "25713dd7f6a465462378340eae7653d28439bbabd54cf73ed04649c89f17d350",
"TTui2_test_msg_backup_device.py::test_backup_slip39_advanced[no_click_info]": "a7c5dbc2c0369e91e946bb58aca3205121f4f04458f4c97183c0bd0b267bbef8",
"TTui2_test_msg_backup_device.py::test_backup_slip39_basic[click_info]": "ba33d497614804396de701895d633aa82b187a398eefeba6dc3a75443b673670",
"TTui2_test_msg_backup_device.py::test_backup_slip39_basic[no_click_info]": "c5500332d0754cf9cda7fa7a6da7fdeae033ca86bec030f82db5204a4e6d5fbc",
"TTui2_test_msg_backup_device.py::test_interrupt_backup_fails": "a8b5bc47867681b496da4b7473cde4fa43027c01fb071c2b0dcf97804809643f",
"TTui2_test_msg_backup_device.py::test_no_backup_fails": "ffc38ab2b61939fea6883a4805b2a4eb17a0be03afe0fed3b1cca492b50bb25c",
"TTui2_test_msg_backup_device.py::test_no_backup_show_entropy_fails": "8711e2fa6f7b301add7641e08ffb4bacf29bcd41530b1dd435fdbddb49b4bdf8",
"TTui2_test_msg_change_wipe_code_t2.py::test_set_pin_to_wipe_code": "7f9c7e2550d4e515c7c9785a11dfcc2ce583925024ea2f52c859dc96de681afc",
"TTui2_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "b09db51b47e37ec94d4a2d8b063e1ed0ad95cb11215f43acf10453aadf7b7bb2",
"TTui2_test_msg_change_wipe_code_t2.py::test_set_pin_to_wipe_code": "a6976555523e774fc1eb0ff1c192cdca6f6298cebc962a8d4b87d197a945af87",
"TTui2_test_msg_change_wipe_code_t2.py::test_set_remove_wipe_code": "e7a3858d2db160253ff3dbde450e5632fcc385ff529d586de28c49f0bf4ed059",
"TTui2_test_msg_change_wipe_code_t2.py::test_set_wipe_code_mismatch": "8fd746c535ec5add348b76002a7936cc85c3206edbb59f225ad075912329452d",
"TTui2_test_msg_change_wipe_code_t2.py::test_set_wipe_code_to_pin": "25eac0cb6ea45c0cb9cfcad3b4ac3ec33af9212a7b812370c8132ef9f14c7700",
"TTui2_test_msg_changepin_t2.py::test_change_failed": "e207e2c62f6930e9e112d7a1a31b9a66c14580df8aac82ea40e2f243d987e878",
"TTui2_test_msg_changepin_t2.py::test_change_invalid_current": "9dce14051a6872469af20e9e8d03fe033908e32837df6a9dc31feb2db15bf398",
"TTui2_test_msg_changepin_t2.py::test_change_pin": "bef4ccf69a801159487ac24ff1218953e5592a6da618d4f10bcece03e42283cc",
"TTui2_test_msg_changepin_t2.py::test_remove_pin": "7770b9d9ba1c74f2184bf4413816fd20722996c12b9ed67880a45fd674cf8a16",
"TTui2_test_msg_changepin_t2.py::test_change_invalid_current": "5e04bc7ab716549d8aa70087cac37c8e1beafaad9929713a631e11845102d4e9",
"TTui2_test_msg_changepin_t2.py::test_change_pin": "2b891a989548802893f1b6a486e9751704a460ce4f59b65b39315318e11171f2",
"TTui2_test_msg_changepin_t2.py::test_remove_pin": "0483000d2760100596744b4270119860925f767028dfc6453141d4279fadb468",
"TTui2_test_msg_changepin_t2.py::test_set_failed": "391b309cadaefcaab9086f7e003faec88b7e38c13f2738b5ad1aa4bfd5d89566",
"TTui2_test_msg_changepin_t2.py::test_set_pin": "8240ad8ff105e7cbc3e01e3cc917b55b177f3a7e67643e76678d49f92e7b0a04",
"TTui2_test_msg_changepin_t2.py::test_set_pin": "9fa58d0b6e5dcaa581f7bbccc4e6a84c4de732200c2bc8465b83a79beceb55d5",
"TTui2_test_msg_loaddevice.py::test_load_device_1": "eeb5afb34b4bbf42b8c635fdd34bae5c1e3693facb16e6d64e629746612a2c3f",
"TTui2_test_msg_loaddevice.py::test_load_device_2": "a95020926a62b4078cb0034f6e7a772e49fc42121c9197b534437e26c306a994",
"TTui2_test_msg_loaddevice.py::test_load_device_slip39_advanced": "eeb5afb34b4bbf42b8c635fdd34bae5c1e3693facb16e6d64e629746612a2c3f",
"TTui2_test_msg_loaddevice.py::test_load_device_slip39_basic": "eeb5afb34b4bbf42b8c635fdd34bae5c1e3693facb16e6d64e629746612a2c3f",
"TTui2_test_msg_loaddevice.py::test_load_device_utf": "7eddfcc018eb3b5847e2617b1a9495632430ca5494f69063082a5063c5702dcf",
"TTui2_test_msg_ping.py::test_ping": "9b44725459426439bc27f2cf72ee926ab7146f3ee1236d197382524cdf9a89a1",
"TTui2_test_msg_sd_protect.py::test_enable_disable": "1e64e5d08faac781f2bbba45b114a588c8a63d5a1865deaa0bc11c67ae891ea9",
"TTui2_test_msg_sd_protect.py::test_refresh": "d295a23bfc9b0fdef75d6732a5dd7fea7059a05fc566c599eddef75dfc05fcbb",
"TTui2_test_msg_sd_protect.py::test_wipe": "d6e2c4224f6d6970c9339bb29c08f8e88308fcfd9ef6bac2cd6f56b7a520747a",
"TTui2_test_msg_sd_protect.py::test_enable_disable": "a3bb336df845857ea89e764b163a9e485c77747ba4651a69d65887a202dc9a98",
"TTui2_test_msg_sd_protect.py::test_refresh": "50ee89a9faeb09e370fb2cecab9a4621f775d3b9646a86a6f20af8e451fd8edf",
"TTui2_test_msg_sd_protect.py::test_wipe": "fabc6ec862992e54b68587631d23d7d38137c26ebae53c096463239cf1f81d4a",
"TTui2_test_msg_wipedevice.py::test_autolock_not_retained": "5200f217377bac4a795e1d5bb5963d4bb03a0ec6875a3272faca2572f8c7da2e",
"TTui2_test_msg_wipedevice.py::test_wipe_device": "36fd19373828ac579ae2e0eaf34c050ac9ea95596cfe38c447737acba86ec706",
"TTui2_test_passphrase_slip39_advanced.py::test_128bit_passphrase": "68e7d02ee3038fa20f0ccc226abdc29c422aa0d3b0c54533869276cd08a7a5b8",
@ -2649,7 +2654,7 @@
"TTui2_test_pin.py::test_incorrect_pin_t2": "cecd9cc23e1fab56f7df9c0a88b309f5fdd9f29ef97e0f5ba0b808cea2d11759",
"TTui2_test_pin.py::test_no_protection": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
"TTui2_test_protection_levels.py::test_apply_settings": "294a58f6e0222746f27bdf80014de14cf0b2d298bf806456ee94fd814e301cba",
"TTui2_test_protection_levels.py::test_change_pin_t2": "733e6e94ad06fdb8f270a0bc50ba613de7fd40cff2f764f4828f4ffd7c3c285a",
"TTui2_test_protection_levels.py::test_change_pin_t2": "7ab1870bc3c960843fc68c0c7f2541ba8d93a56bc27a2e941e7b4a1668fa754e",
"TTui2_test_protection_levels.py::test_get_address": "ef09d088bf4ca767162d5017748158bb8dda9849ccb0bf9ca5acf32b872e260c",
"TTui2_test_protection_levels.py::test_get_entropy": "7eadf62627e7a2c5a69b94c72eb4daca0153afb93ab8a12fd85d0d4ddc0a5a1d",
"TTui2_test_protection_levels.py::test_get_public_key": "ef09d088bf4ca767162d5017748158bb8dda9849ccb0bf9ca5acf32b872e260c",
@ -2661,9 +2666,9 @@
"TTui2_test_protection_levels.py::test_sign_message": "08fd8f35609c8a8f18a32e8bfa58adff9e303d6479353d2047b6e2ea44234fa1",
"TTui2_test_protection_levels.py::test_signtx": "e6befc1421d1794a362decfcae6bfe6342bd23335b191afea4f1f68cf7f27175",
"TTui2_test_protection_levels.py::test_unlocked": "ed7d5e2c6bac6b7e1ea4f23e8a91a1337e9bb6a03e093d69fb16df686f2fe68a",
"TTui2_test_protection_levels.py::test_verify_message_t2": "23efc0636e09bed8a73ac25ec6f760adbee906e777833c140d12355248959927",
"TTui2_test_protection_levels.py::test_verify_message_t2": "bd0711454876fec517714c0203c088c35c339dab6aaaaf19b6cc19b4c4424571",
"TTui2_test_protection_levels.py::test_wipe_device": "40fdf3dafe49468bf8f948f36aa510927016f4803c1fb2d1d170fc40dff5c052",
"TTui2_test_sdcard.py::test_sd_format": "53a16049a6ab7df7e5eb63f748e0e449f33b82013373ab8658238f9ac13dd3e3",
"TTui2_test_sdcard.py::test_sd_format": "1702d52626aff6ee829ef2a20fed7df55fe9fdb0489eca10af16d08de8e08d6d",
"TTui2_test_sdcard.py::test_sd_no_format": "e48ac8dc3f81340d89746a9a6bc2b89f8ebce54568c4c1805e626178ff1c509c",
"TTui2_test_sdcard.py::test_sd_protect_unlock": "3ccb135f2a39a727be85f45ce5472c3c7439792239f990264f78848e851cd56d",
"TTui2_test_session.py::test_cannot_resume_ended_session": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1",
@ -2708,5 +2713,6 @@
"TTui2_zcash-test_sign_tx.py::test_spend_multisig": "5b1048fdf7d7c347151898d35b22294081f1a2956a0054c4de5ee21486dee915",
"TTui2_zcash-test_sign_tx.py::test_spend_v4_input": "47d0bb16c597d1c8f2e4d702110c1bfa236b59fce6387e6f48224bb2c2fa5ad1",
"TTui2_zcash-test_sign_tx.py::test_spend_v5_input": "a11eecc5afe8cf0d4b6595a1e39f0966490d0a6d086f965f3d23ef3f3c9a11f2",
"TTui2_zcash-test_sign_tx.py::test_unified_address": "dfd50fef1f80501aee2b7b54c03d586495c3e017d089e396372174f0888ef51c",
"TTui2_zcash-test_sign_tx.py::test_version_group_id_missing": "f03b50df7f4a161078fa903c44f37272961b70358d4014d30a12888e1fd2caf1"
}

@ -1,7 +1,7 @@
#!/bin/sh
RETURN=0
EXCEPTIONS="decred|omni|ripple|dash|TEXT_MARGIN_LEFT|dash_width|dashlane|flo|mnemonic|meter|refuse|fused|enemy|cinema|syntaxerror|mix|palm|UdesRsK|kcc|derive_cardano|ntity|gather|bmc|cloudflare"
EXCEPTIONS="decred|omni|ripple|dash|TEXT_MARGIN_LEFT|dash_width|dashlane|flo|mnemonic|meter|refuse|fused|enemy|cinema|syntaxerror|mix|palm|UdesRsK|kcc|derive_cardano|ntity|gather|bmc|cloudflare|rsk7"
# dump all coins except the first 3 (Bitcoin, Testnet, Regtest)
ALTCOINS=$(./common/tools/cointool.py dump -l -p -t -d trezor1 -d trezor2 | grep '"name"' | cut -d '"' -f 4 | tail -n +4)

Loading…
Cancel
Save