Skip to content

fix(emulator): show confirm button for zcash address + eth verify-message view-on-device#271

Merged
BitHighlander merged 1 commit into
developfrom
fix/emu-display-confirm-button
Jun 20, 2026
Merged

fix(emulator): show confirm button for zcash address + eth verify-message view-on-device#271
BitHighlander merged 1 commit into
developfrom
fix/emu-display-confirm-button

Conversation

@BitHighlander

Copy link
Copy Markdown
Collaborator

Fix: emulator "view on device" hangs with no confirm button

Reported: in the emulator, Zcash "view address on device" (and similar view-on-device flows) show the OLED screen but have no button to press Accept, so it feels stuck.

Root cause

On a real device the user presses a physical button. On the emulator there's no button, so on-device display/confirm prompts must be wrapped in emuSigningOp(), which installs the ButtonRequest handler that surfaces the Confirm/Reject affordance in the emulator window (and writes the DebugLinkDecision press).

Every standard getAddress display handler does this (engine.isEmulator && params.showDisplay → emuSigningOp). Two handlers skipped the gate and called the wallet directly, so the firmware busy-loops in confirm_helper() with no UI button until the 120s confirm timeout:

  • zcashDisplayAddress — view Orchard address on device (the reported bug)
  • ethVerifyMessage — verify-message shows the message + address on device and waits for a press (its Tron counterpart tronVerifyMessage was already gated)

Fix

Wrap both in emuSigningOp() when engine.isEmulator, matching the existing pattern. No behavior change on real devices.

Sibling audit

  • All *GetAddress display handlers, ethSignMessage, solanaSignMessage, tonSignMessage, ethSignTypedData, tronVerifyMessage — already gated. ✅
  • Flagged separately (not touched here): an early terse eth handler cluster (ethSignTx/ethSignMessage/ethSignTypedData, ~index.ts:683-685) appears to be a different RPC object and is ungated — needs a separate look to confirm whether it's emulator-reachable.

Verification

  • Typecheck clean (0 errors in index.ts).
  • Needs an emulator smoke test: trigger Zcash "verify on device" and ETH verify-message in the emulator → Confirm/Reject buttons should now appear.

…sage

On the emulator there is no physical button, so on-device display/confirm
prompts must be wrapped in emuSigningOp() — that installs the ButtonRequest
handler that surfaces the Confirm/Reject affordance in the emulator window.

Two handlers skipped this gate and hung with no button until the 120s
confirm timeout:
- zcashDisplayAddress (view Orchard address on device)
- ethVerifyMessage (verify message shows msg+address on device)

Both now match the gated pattern used by every other getAddress display
handler and by tronVerifyMessage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@BitHighlander
BitHighlander merged commit 1faf043 into develop Jun 20, 2026
1 check passed
@BitHighlander
BitHighlander deleted the fix/emu-display-confirm-button branch June 20, 2026 03:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant