Skip to content

Commit 58d1983

Browse files
show slip132 switch only if keys have slip132 repr (#268)
1 parent c193d00 commit 58d1983

File tree

2 files changed

+67
-56
lines changed

2 files changed

+67
-56
lines changed

src/apps/wallets/screens.py

Lines changed: 62 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ def __init__(self, wallet, network, idx=None, branch_index=0):
1010
self.wallet = wallet
1111
self.network = network
1212
self.idx = wallet.unused_recv
13-
addr, gap = wallet.get_address(self.idx, network=network, branch_index=branch_index)
13+
addr, gap = wallet.get_address(
14+
self.idx,
15+
network=network,
16+
branch_index=branch_index,
17+
)
1418
super().__init__(
1519
" " + wallet.name + " #708092 " + lv.SYMBOL.EDIT,
1620
format_addr(addr, words=4),
@@ -121,74 +125,80 @@ def update_address(self):
121125
self.warning.set_text("")
122126
self.hide_loader()
123127

128+
# micropython doesn't support mixins :(
129+
def _build_screen(scr, policy, keys):
130+
scr.policy = add_label("Policy: " + policy, y=75, scr=scr)
131+
132+
# check if we need slip132 switch
133+
need_slip132_switch = any(
134+
k["canonical"] != k["slip132"]
135+
for k in keys
136+
)
137+
if need_slip132_switch:
138+
lbl = lv.label(scr)
139+
lbl.set_text("Canonical xpub SLIP-132 ")
140+
lbl.align(scr.policy, lv.ALIGN.OUT_BOTTOM_MID, 0, 30)
141+
scr.slip_switch = lv.sw(scr)
142+
scr.slip_switch.align(lbl, lv.ALIGN.CENTER, 0, 0)
143+
scr.slip_switch.set_event_cb(on_release(scr.fill_message))
144+
else:
145+
scr.slip_switch = None
146+
147+
scr.page.align(
148+
scr.policy,
149+
lv.ALIGN.OUT_BOTTOM_MID,
150+
0,
151+
30 + 40*int(need_slip132_switch)
152+
)
153+
scr.message.set_recolor(True)
154+
scr.page.set_height(500)
155+
156+
def _fill_message(keys, is_complex, use_slip132=False):
157+
msg = ""
158+
arg = "slip132" if use_slip132 else "canonical"
159+
for i, k in enumerate(keys):
160+
alias = "" if not is_complex else " (%s)" % chr(65+i)
161+
kstr = str(k[arg]).replace("]","]\n")
162+
if k["mine"]:
163+
msg += "#7ED321 My key%s: #\n%s\n\n" % (alias, kstr)
164+
elif k["is_nums"]:
165+
msg += "#00CAF1 NUMS key%s: #\nNobody knows private key\n\n" % alias
166+
elif k["is_private"]:
167+
msg += "#F51E2D Private key%s: #\n%s\n\n" % (alias, kstr)
168+
else:
169+
msg += "#F5A623 External key%s:\n# %s\n\n" % (alias, kstr)
170+
return msg
171+
124172

125173
class ConfirmWalletScreen(Prompt):
126174
def __init__(self, name, policy, keys, is_complex=True):
127175
super().__init__('Add wallet "%s"?' % name, "")
128-
self.policy = add_label("Policy: " + policy, y=75, scr=self)
176+
_build_screen(self, policy, keys)
129177
self.is_complex = is_complex
130-
131-
lbl = lv.label(self)
132-
lbl.set_text("Canonical xpub SLIP-132 ")
133-
lbl.align(self.policy, lv.ALIGN.OUT_BOTTOM_MID, 0, 30)
134-
self.slip_switch = lv.sw(self)
135-
self.slip_switch.align(lbl, lv.ALIGN.CENTER, 0, 0)
136-
self.slip_switch.set_event_cb(on_release(self.fill_message))
137-
138-
self.page.align(self.policy, lv.ALIGN.OUT_BOTTOM_MID, 0, 70)
139-
self.message.set_recolor(True)
140-
self.page.set_height(500)
141178
self.keys = keys
142179
self.fill_message()
143180

181+
@property
182+
def use_slip132(self):
183+
return self.slip_switch.get_state() if self.slip_switch is not None else False
184+
144185
def fill_message(self):
145-
msg = ""
146-
arg = "slip132" if self.slip_switch.get_state() else "canonical"
147-
for i, k in enumerate(self.keys):
148-
alias = "" if not self.is_complex else " (%s)" % chr(65+i)
149-
kstr = str(k[arg]).replace("]","]\n")
150-
if k["mine"]:
151-
msg += "#7ED321 My key%s: #\n%s\n\n" % (alias, kstr)
152-
elif k["is_nums"]:
153-
msg += "#00CAF1 NUMS key%s: #\nNobody knows private key\n\n" % alias
154-
elif k["is_private"]:
155-
msg += "#F51E2D Private key%s: #\n%s\n\n" % (alias, kstr)
156-
else:
157-
msg += "#F5A623 External key%s:\n# %s\n\n" % (alias, kstr)
186+
msg = _fill_message(self.keys, self.is_complex, self.use_slip132)
158187
self.message.set_text(msg)
159188

160-
# TODO: refactor to remove duplication
189+
161190
class WalletInfoScreen(Alert):
162191
def __init__(self, name, policy, keys, is_complex=True):
163192
super().__init__(name, "")
164-
self.policy = add_label("Policy: " + policy, y=75, scr=self)
193+
_build_screen(self, policy, keys)
165194
self.is_complex = is_complex
166-
167-
lbl = lv.label(self)
168-
lbl.set_text("Canonical xpub SLIP-132 ")
169-
lbl.align(self.policy, lv.ALIGN.OUT_BOTTOM_MID, 0, 30)
170-
self.slip_switch = lv.sw(self)
171-
self.slip_switch.align(lbl, lv.ALIGN.CENTER, 0, 0)
172-
self.slip_switch.set_event_cb(on_release(self.fill_message))
173-
174-
self.page.align(self.policy, lv.ALIGN.OUT_BOTTOM_MID, 0, 70)
175-
self.message.set_recolor(True)
176-
self.page.set_height(500)
177195
self.keys = keys
178196
self.fill_message()
179197

198+
@property
199+
def use_slip132(self):
200+
return self.slip_switch.get_state() if self.slip_switch is not None else False
201+
180202
def fill_message(self):
181-
msg = ""
182-
arg = "slip132" if self.slip_switch.get_state() else "canonical"
183-
for i, k in enumerate(self.keys):
184-
alias = "" if not self.is_complex else " (%s)" % chr(65+i)
185-
kstr = str(k[arg]).replace("]","]\n")
186-
if k["mine"]:
187-
msg += "#7ED321 My key%s: #\n%s\n\n" % (alias, kstr)
188-
elif k["is_nums"]:
189-
msg += "#AAAAAA NUMS key%s: #\nNobody knows private key\n\n" % alias
190-
elif k["is_private"]:
191-
msg += "#F51E2D Private key%s: #\n%s\n\n" % (alias, kstr)
192-
else:
193-
msg += "#F5A623 External key%s:\n# %s\n\n" % (alias, kstr)
203+
msg = _fill_message(self.keys, self.is_complex, self.use_slip132)
194204
self.message.set_text(msg)

src/apps/xpubs/screens.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,11 @@ def __init__(
4747
self.prefix_switch.set_event_cb(on_release(self.toggle_event))
4848
if slip132 is not None:
4949
self.slip_switch.set_event_cb(on_release(self.toggle_event))
50-
btn = add_button_pair(
51-
lv.SYMBOL.SAVE + " Save to SD", on_release(self.save_to_sd),
52-
lv.SYMBOL.PLUS + " Create wallet", on_release(self.create_wallet),
53-
y=610, scr=self)
50+
add_button_pair(
51+
lv.SYMBOL.SAVE + " Save to SD", on_release(self.save_to_sd),
52+
lv.SYMBOL.PLUS + " Create wallet", on_release(self.create_wallet),
53+
y=610, scr=self,
54+
)
5455

5556
def save_to_sd(self):
5657
"""

0 commit comments

Comments
 (0)