Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
268 commits
Select commit Hold shift + click to select a range
7e7d07f
Merge pull request #129 from keepkey/feat/ton-build-transfer
BitHighlander Apr 22, 2026
10bfc40
fix(rest-api): gate pubkey/address serving on UI-active + device-id
BitHighlander Apr 19, 2026
012ee93
fix(rest-api): close uiHeartbeat reactivation + first-mount race
BitHighlander Apr 22, 2026
45dbf35
feat(tron): memo embedding + TRC-20 path for THORChain swaps
BitHighlander Apr 22, 2026
43f0bbd
fix(swap): map THORChain TRON prefix to vault chain id
BitHighlander Apr 22, 2026
e4038b0
fix(swap): shim TRON assets locally until Pioneer lists them
BitHighlander Apr 22, 2026
a113b56
fix(swap): clear swap-asset cache when Pioneer server changes
BitHighlander Apr 22, 2026
3b2ebac
fix(swap): use canonical CAIP from cached SwapAsset for quotes
BitHighlander Apr 23, 2026
1858967
fix(swap): surface THORNode quote errors with friendly messages
BitHighlander Apr 23, 2026
50e8591
fix(swap): preserve build context (tronGridTx, tonBuildResult) throug…
BitHighlander Apr 23, 2026
b5d43ba
fix(tron): expand TronGrid broadcast error parsing + log diagnostics
BitHighlander Apr 23, 2026
02f57b3
fix(tron): hex-encode signature before TronGrid broadcast
BitHighlander Apr 23, 2026
36eb84b
fix(tron): lowercase tron txids in explorer URLs
BitHighlander Apr 23, 2026
6e0b8f7
fix(swap): thread caip+decimals to TRON buildTx; per-asset shim
BitHighlander Apr 23, 2026
035fcca
Merge pull request #130 from keepkey/feat/tron-transfer
BitHighlander Apr 23, 2026
f4a2e86
Merge branch 'master' of https://github.com/keepkey/keepkey-vault int…
BitHighlander Apr 23, 2026
2b93770
Merge branch 'develop' of https://github.com/keepkey/keepkey-vault in…
BitHighlander Apr 23, 2026
6d8247c
fix(tron): drop toAddress+amount hints in TRC-20 path
BitHighlander Apr 23, 2026
5b36ab4
feat(ui): show token contract address in AssetPage token row
BitHighlander Apr 23, 2026
6479487
fix(ui): show full contract address + explicit copy affordance
BitHighlander Apr 23, 2026
42c8d47
fix(spam): push token-visibility changes so dashboard total stays in …
BitHighlander Apr 23, 2026
36c29e7
Merge branch 'develop' of https://github.com/keepkey/keepkey-vault in…
BitHighlander Apr 24, 2026
cae2cd0
Merge pull request #124 from keepkey/fix/rest-api-pubkey-ui-gate
BitHighlander Apr 24, 2026
382d258
fix(rest-api): drop UI-active gate on pubkey/address endpoints (#131)
BitHighlander Apr 25, 2026
41884d8
feat(emu): persist label/firmware/channel/USD per emulator wallet
BitHighlander Apr 25, 2026
fa2f775
refactor(emu): unify add-emulator UX with the device onboarding wizard
BitHighlander Apr 25, 2026
e39db58
refactor(emu): collapse all add/start paths through OobSetupWizard
BitHighlander Apr 25, 2026
b641861
chore(emu): replace 7.10.0-alpha with 7.15.0 build from bithighlander…
BitHighlander Apr 25, 2026
9ce826d
fix(emu): wait for webview-ready handshake before executeJavascript
BitHighlander Apr 25, 2026
268f0cb
fix(emu): copy framebuffer via toArrayBuffer().slice() not toBuffer
BitHighlander Apr 25, 2026
507e161
fix(emu): rebuild 7.15 dylib with confirm_helper tiny-msg fix
BitHighlander Apr 25, 2026
19d4011
fix(emu): build dylib with KK_DEBUG_LINK=ON
BitHighlander Apr 26, 2026
da814f2
fix(emu): cap loadDevice seed-verify at 3s so the wizard advances
BitHighlander Apr 26, 2026
9b7126a
chore(emu): bump watchdog to 60s + log slow per-chain derivations
BitHighlander Apr 26, 2026
8ce8962
fix(emu): cap auto-reload mnemonic verify at 3s in connectEmulator
BitHighlander Apr 26, 2026
ddd0a03
fix(emu): auto-reopen window on signing confirm if it was dismissed
BitHighlander Apr 26, 2026
388a8e1
docs(emu): handoff for finishing the 7.15 alpha emulator work
BitHighlander Apr 26, 2026
820dfaa
feat(emu): make confirm UI reliable + render real OLED frames
BitHighlander Apr 26, 2026
cc5d57e
fix(emu): address PR review — bundle, wedge, hang, makefile, sha
BitHighlander Apr 26, 2026
6bfa512
fix(emu): address PR review #2 — path safety, verify, ack, lifecycle
BitHighlander Apr 26, 2026
c6743b4
fix(emu): address PR review #3 — names, ack, rollback, race, purge
BitHighlander Apr 26, 2026
29d59e7
fix(emu): address PR review #4 — review order, verify, hangs, rollback
BitHighlander Apr 26, 2026
b186c2d
Merge pull request #132 from keepkey/feat/emu-wallet-metadata
BitHighlander Apr 26, 2026
9dcfe56
fix(zcash): unblock dashboard balances + emu signing + deshield witness
BitHighlander Apr 26, 2026
d17f404
fix(zcash): auto-scan before send/shield/deshield to avoid stale doub…
BitHighlander Apr 26, 2026
d58cb03
fix(zcash): require 10 confirmations on spend inputs (Halo2 proof saf…
BitHighlander Apr 26, 2026
71764b4
fix(zcash): per-session full rescan on first Privacy tab access + wit…
BitHighlander Apr 26, 2026
af1c323
test(zcash): shrink witness tests to <_, 8, 4> tree dims (1.5s vs min…
BitHighlander Apr 26, 2026
60168c8
fix(zcash ui): single auto-validation flow, hide stale UI mid-rescan
BitHighlander Apr 26, 2026
3eda144
fix(zcash): never auto-full-rescan, trust cached DB, surface scan pro…
BitHighlander Apr 26, 2026
e289c0b
docs(zcash): retro on six failed cycles + concrete next-step plan
BitHighlander Apr 26, 2026
a2cbf80
fix(zcash): correct ZIP-244 sig digest for empty-vin txs (deshield br…
BitHighlander Apr 26, 2026
a27a152
fix(zcash): pay ZIP-317 fee for post-padding orchard action count (de…
BitHighlander Apr 27, 2026
8fe322b
docs(zcash): retro on deshield resolution + lessons for next ZIP-244 …
BitHighlander Apr 27, 2026
0b1c79e
fix(zcash): address PR #133 review — FVK init, fw gate, UI Max, FVK c…
BitHighlander Apr 27, 2026
1885ba6
fix(zcash): address remaining PR #133 review findings (#3, #5, #8, #9…
BitHighlander Apr 27, 2026
98e87ea
fix(zcash): address PR #133 second review pass — seed-change, restart…
BitHighlander Apr 27, 2026
f532537
fix(zcash): scope sidecar exit cleanup to current proc + drain pendin…
BitHighlander Apr 27, 2026
6b6ac6a
feat(wc): scan/upload QR pair flows + lazy EVM address init
BitHighlander Apr 27, 2026
9121083
Merge pull request #133 from keepkey/final-zcash
BitHighlander Apr 27, 2026
08864d4
feat(wc): identity card, reject flow, empty state + Cosmos & Solana n…
BitHighlander Apr 27, 2026
3d4a34b
fix(wc): address PR review #1 — signer slots, advertised methods, pai…
BitHighlander Apr 27, 2026
59cc2f7
fix(wc): address PR review #2 — Solana signMessage encoding + getAcco…
BitHighlander Apr 27, 2026
1f08565
feat(wc): move WalletConnect to header button, gate on feature flag
BitHighlander Apr 28, 2026
3a91bb7
fix(wc): refcount setAlwaysOnTop across pair/signing flows
BitHighlander Apr 28, 2026
793f5fe
fix(wc): deep-link panel, lazy EVM init by namespace, blind-sign v0 S…
BitHighlander Apr 28, 2026
abf750c
fix(wc): bind EVM signing to session, replay queued deep links, force…
BitHighlander Apr 28, 2026
a993d03
fix(wc): hoist pendingDeepLinkUri above state-change listener
BitHighlander Apr 28, 2026
960ef55
ci: only build on master + release/* (drop develop, fix dead main ref)
BitHighlander Apr 28, 2026
5955fde
Merge pull request #135 from keepkey/feature-wallet-connect
BitHighlander Apr 28, 2026
75dc476
feat(rest): expose signing history at /api/v1/activity
BitHighlander Apr 28, 2026
b006324
fix(rest): address PR #136 review — privacy guard, signature persiste…
BitHighlander Apr 28, 2026
14a7a82
fix(rest): don't audit-log audit-log reads — prevents recursive respo…
BitHighlander Apr 28, 2026
828ba83
Merge pull request #136 from keepkey/feat/rest-signing-history
BitHighlander Apr 28, 2026
b3190b7
fix(linux): unblock USB pairing and TopNav clicks
BitHighlander Apr 29, 2026
8bf7d52
fix(linux): correct udev-warning detection on permission errors
BitHighlander Apr 29, 2026
14c1b2c
fix(linux): route udev-blocked state to disconnected, not connected_u…
BitHighlander Apr 29, 2026
a2fdc29
Merge pull request #139 from keepkey/feature-linux
BitHighlander Apr 29, 2026
7e6dfc9
feat(rpc,sdk,rest): expose 5 new message-signing methods
BitHighlander Apr 29, 2026
4a8937c
fix(rest,schemas): address PR #140 review
BitHighlander Apr 29, 2026
0e2bce0
fix(rest,rpc): apply review nits 5 + 6
BitHighlander Apr 30, 2026
42f529e
Merge pull request #140 from keepkey/feat/message-signing-rpc
BitHighlander Apr 30, 2026
277c74a
fix: gate unsafe solana message signing
BitHighlander Apr 30, 2026
7ad03a9
fix: enforce solana message advanced mode gate
BitHighlander Apr 30, 2026
cdc0865
Merge pull request #142 from keepkey/codex/solana-message-safety
BitHighlander Apr 30, 2026
5331ea9
feat(zcash): View on device button for Orchard UA in privacy tab
BitHighlander Apr 30, 2026
bccc950
feat(emulator): hide from end users + smart drag-and-drop dispatcher
BitHighlander Apr 30, 2026
ba9c26b
fix(emulator): refresh app settings after dylib install + repoint tes…
BitHighlander Apr 30, 2026
43ae676
Merge pull request #143 from keepkey/feat/hide-emulator-and-smart-dnd
BitHighlander Apr 30, 2026
d61b7fe
chore: prepare vault 1.2.17 release
BitHighlander Apr 30, 2026
8c93fdc
ci: build release modules without recursive submodules
BitHighlander Apr 30, 2026
61c252a
fix(walletconnect): handle screen scan permissions and vault links
BitHighlander May 1, 2026
b5d0e70
feat(swap): full REST + UX overhaul; correctness fixes; rip TxReview …
BitHighlander May 7, 2026
1f69a86
feat(swap): destination-side correctness — Native SegWit default, dus…
BitHighlander May 7, 2026
6515d4c
fix(swap): subdivide executeSwap phase so UI stops lying during ERC-2…
BitHighlander May 7, 2026
2aa337b
Merge pull request #146 from keepkey/feat/swap-rest-and-ux
BitHighlander May 8, 2026
01a769a
refactor(swap): extract pure helpers, gate verbose logs, surface reve…
BitHighlander May 8, 2026
2edfa80
feat(swap): asset-picker dialog + CAIP-only routing + REST debug endp…
BitHighlander May 8, 2026
2dee28e
fix(swap): address review — vault ChainDef gate, BEP-20 parsing, drop…
BitHighlander May 8, 2026
01ac9df
fix(swap): fold BSC bep20 → erc20 namespace at canonicalization boundary
BitHighlander May 8, 2026
e94624b
fix(swap): defend against pioneer-server CAIP drift on token assets
BitHighlander May 8, 2026
a161924
Merge pull request #147 from keepkey/feat/swap-asset-picker-dialog
BitHighlander May 8, 2026
31c7376
chore: bump version to 1.3.0
BitHighlander May 8, 2026
51ba989
feat(swap): graduate from feature flag — default-on in 1.3.0
BitHighlander May 8, 2026
aa8c939
ui-v3: design tokens + base component primitives
BitHighlander May 9, 2026
ff27c71
ui-v3: re-skin TopNav against new token system
BitHighlander May 9, 2026
7654bd5
ui-v3: bridge Chakra theme + re-skin AppStore & SplashScreen
BitHighlander May 9, 2026
dfef5ce
ui-v3: sweep hardcoded color literals across components
BitHighlander May 9, 2026
5f5d196
ui-v3: re-skin always-visible / error-state surfaces
BitHighlander May 9, 2026
b510eaf
ui-v3: restructure Dashboard — hero total + network rows
BitHighlander May 9, 2026
23fc0f4
ui-v3: orbital portfolio viz + fix unicode escapes in JSX text
BitHighlander May 9, 2026
018ac3b
ui-v3: fix 01/02 step labels wrapping in welcome card
BitHighlander May 9, 2026
a315104
ui-v3: re-skin AssetPage chrome — header hero, action tabs, surfaces
BitHighlander May 9, 2026
63ee927
ui-v3: re-skin ReceiveView (rebuild) + SendForm (targeted sweep)
BitHighlander May 9, 2026
3781088
ui-v3: re-skin SwapDialog — palette unify, frame, device illustration
BitHighlander May 9, 2026
ae4b23e
ui-v3: fix KeepKeyDevice text overflow — DOM overlay instead of svg <…
BitHighlander May 9, 2026
28fed0b
fix(swap): route v0 Solana txs through solanaSignMessage
BitHighlander May 9, 2026
379e7b8
fix(swap): route v0 Solana txs through solanaSignMessage
BitHighlander May 9, 2026
0f3d869
Merge pull request #148 from keepkey/fix/solana-v0-swap-signing
BitHighlander May 9, 2026
e63b6e8
ui-v3: revert Dashboard to original donut + grid (keep v3 colors)
BitHighlander May 9, 2026
c201914
ui-v3: redesign DeviceGrid as wow landing + watch-only clarity
BitHighlander May 9, 2026
97094dd
ui-v3: KeepKeyDevice renders real kk.gif for signing/active states
BitHighlander May 9, 2026
478e3b9
ui-v3: thorfox + chest gifs in swap, wow Submitted page, attribution
BitHighlander May 9, 2026
67f7696
ui-v3: sweep stale chakra hex literals to v3 tokens
BitHighlander May 9, 2026
2e388a9
fix(swap): MAX button reserves chain-specific gas on native swaps
BitHighlander May 9, 2026
385ddf9
feat(swap): paste contract → auto-add custom token
BitHighlander May 9, 2026
c7e1648
ui-v3: real 3-stage thorfox — calculating is now its own animation
BitHighlander May 9, 2026
3293e79
ui-v3: swap flow per design handoff — pivot, RouteMap, awaiting-device
BitHighlander May 9, 2026
bfde974
ui-v3: sweep uncovered surfaces onto v3 tokens
BitHighlander May 9, 2026
cee0caf
ui-v3: dashboard orbital toggle (default) + OobSetupWizard sweep
BitHighlander May 9, 2026
f55d5f7
fix(swap): enable ZEC swaps + drop hardcoded THORChain provider labels
BitHighlander May 9, 2026
ae29c07
feat(linux): expand distro support, add .deb, build Electrobun core o…
BitHighlander May 10, 2026
906483c
fix(ci-linux-audit): rewrite glibc audit to be crash-resistant
BitHighlander May 10, 2026
2bf1eb1
fix(ci-linux-deb): use printf instead of YAML-indented heredocs
BitHighlander May 10, 2026
630aca9
fix(ci-linux-deb): stage under deb-root to avoid path collision
BitHighlander May 10, 2026
b38965c
fix(zcash-v2): Send view overflows narrow widths
BitHighlander May 10, 2026
7160a76
fix(zcash-v2): remove stray backticks in CSS comment that broke build
BitHighlander May 10, 2026
a512fe4
refactor(zcash): simplify Zcash UI for beginners — page nav + plain copy
BitHighlander May 10, 2026
280cc80
fix(zcash-v2): Send view overflows narrow widths
BitHighlander May 10, 2026
523c96b
fix(zcash-v2): remove stray backticks in CSS comment that broke build
BitHighlander May 10, 2026
0f128e3
refactor(zcash): simplify Zcash UI for beginners — page nav + plain copy
BitHighlander May 10, 2026
ee09cf5
ui(zcash): color-coded tab icons + promoted Show-on-KeepKey on Receive
BitHighlander May 10, 2026
66dd116
ui(zcash): prefill Unshield "To" with the user's own t-addr
BitHighlander May 10, 2026
70b3376
ui(zcash): show t-addr + shielded balances on Shield page
BitHighlander May 10, 2026
bfcbee4
ui(zcash): fix dead-click + cramped layout on result box
BitHighlander May 10, 2026
5ce7384
ui(zcash): "Look at your KeepKey" tx-flow stepper for send/shield/uns…
BitHighlander May 10, 2026
96a64a1
fix(zcash): reverse sidecar txids to display order, point at blockchair
BitHighlander May 10, 2026
d8a30ff
ui(zcash): split signing state into "computing" vs "press the button"
BitHighlander May 10, 2026
79f8eb7
fix(zcash): Shield Max used wrong balance source — only m/.../0/0 is …
BitHighlander May 10, 2026
f4a2623
fix(zcash): apply 10-conf gate to Shield balance + surface pending UTXOs
BitHighlander May 10, 2026
aca4189
ui(swap): hero treatment for "finding route" quote-loading state
BitHighlander May 10, 2026
25b795b
ui(swap): slot quote-loading animation into the receive box
BitHighlander May 10, 2026
619e4e3
ui(swap): round + enlarge the quote-loading gif (68px halo, 60px gif)
BitHighlander May 10, 2026
bb37338
debug(swap): log MAX click payload to diagnose BTC '0' display bug
BitHighlander May 10, 2026
dce136f
debug(swap): flatten MAX-click log into one string + capture post-cli…
BitHighlander May 10, 2026
70fcb91
fix(swap): MAX button is set-action, not toggle
BitHighlander May 10, 2026
b5f8901
ui(swap): bring back the centerpiece GIF in the route map
BitHighlander May 10, 2026
b049fc8
ui(swap): consistent calculating hero on submitted, clip gifs to circle
BitHighlander May 10, 2026
0422307
feat(swap): paste contract → auto-add custom token
BitHighlander May 9, 2026
84eeabb
feat(swap-picker): persist custom tokens + resolve logos via CoinGecko
BitHighlander May 10, 2026
c9bd766
feat(swap-picker): "Upload logo" / "Skip" prompt when CoinGecko misses
BitHighlander May 10, 2026
10a5231
fix(swap-picker): return vault chain id from lookupTokenContract
BitHighlander May 10, 2026
f387b17
feat(swap): refresh custom tokens on picker open + push to Pioneer
BitHighlander May 10, 2026
7dd2919
feat(swap): track Relay request id for per-swap deep links
BitHighlander May 10, 2026
d4fca64
fix(swap): address review findings on PR #152
BitHighlander May 10, 2026
c465369
fix(swap): address P2/P3 follow-up review on PR #152
BitHighlander May 10, 2026
0fb2371
fix(swap): bound Relay re-register loop + try Pioneer update path
BitHighlander May 10, 2026
8272afb
fix(swap): use Pioneer's UpdatePendingSwap with correct call signature
BitHighlander May 10, 2026
b3acca0
feat(v3): SpinningDevice — 6-face CSS-3D KeepKey with customizable OLED
BitHighlander May 10, 2026
480e1d5
Merge feat/swap-custom-tokens-and-relay-tracking into ui-v3 — bundle …
BitHighlander May 11, 2026
d06d349
Merge release/1.3.1 into ui-v3 — picks up 1.3.0/1.3.1 work (swap defa…
BitHighlander May 11, 2026
99f8e3e
ui(swap): split pre/post-sign hero animations + spinning device on co…
BitHighlander May 11, 2026
284f26b
fix(zcash): reject malformed amounts in parseZatoshis
BitHighlander May 11, 2026
44f3abe
ui(swap): wide 2-column hero/details layout on swap completion
BitHighlander May 11, 2026
8c372ef
ci(linux): ratchet glibc floor to 2.35 + bump .deb dep
BitHighlander May 11, 2026
dfa78da
Merge pull request #150 from keepkey/ui-v3
BitHighlander May 11, 2026
613a069
fix(swap): harden EIP-1559 fee buffers
BitHighlander May 11, 2026
620cb9f
fix(swap): validate relay fee affordability
BitHighlander May 11, 2026
60d6c2c
Merge pull request #156 from keepkey/codex/evm-fee-relay-swap-fixes
BitHighlander May 11, 2026
1459991
Delay device confirm until payload prompt
BitHighlander May 11, 2026
5335b46
Remove swap completion divider
BitHighlander May 11, 2026
334d779
Lock swap confirm on audit payload
BitHighlander May 11, 2026
319d06f
Scope wallet activity history
BitHighlander May 11, 2026
2ec5477
Clarify empty wallet activity state
BitHighlander May 11, 2026
8a91e53
Rebuild wallet activity from history endpoints
BitHighlander May 11, 2026
d7968e7
Fix rebuilt activity classification
BitHighlander May 11, 2026
897c815
Preserve rebuilt activity history
BitHighlander May 11, 2026
9db08b9
Redact legacy activity audit keys
BitHighlander May 11, 2026
20e0c95
Refresh activity drawer on open
BitHighlander May 11, 2026
0ca36bf
Format activity amounts
BitHighlander May 11, 2026
cf2e5b3
Address activity rebuild review findings
BitHighlander May 11, 2026
8e0c9e0
Merge pull request #157 from keepkey/audit-wallet-activity-namespacing
BitHighlander May 11, 2026
3559d45
Merge pull request #145 from keepkey/fix/walletconnect-permissions-an…
BitHighlander May 11, 2026
5cf43b3
fix(swap): Maya midgard truth pass + xpub guard + REST hardening + ru…
BitHighlander May 9, 2026
e383bc6
fix(swap): address review feedback — sticky live state, DB outbound t…
BitHighlander May 10, 2026
4d5f9b3
feat(swap): cancel button on awaiting-device confirm screen
BitHighlander May 10, 2026
efd20a4
fix(swap): preview path used BTC zpub for ZEC unspents — gate cached …
BitHighlander May 10, 2026
6eea49a
fix(swap): lock Confirm button while preview is missing/loading/faile…
BitHighlander May 10, 2026
95f8139
Merge pull request #149 from keepkey/fix/swap-truth-pass
BitHighlander May 11, 2026
e20aa6d
fix: localize onboarding setup copy
BitHighlander May 12, 2026
f226d97
docs: remove concrete api key from incident note
BitHighlander May 12, 2026
5490da8
chore: ignore local release-prep artifacts
BitHighlander May 12, 2026
6336c98
fix: update balance server copy
BitHighlander May 12, 2026
efadfdb
fix: stabilize balances and swap pricing
BitHighlander May 12, 2026
7727024
chore: bump version to 1.3.2
BitHighlander May 12, 2026
4727184
build(windows): harden signing pipeline + add SOP docs
mtlouzada May 12, 2026
d794590
chore: lock BIP-85 to firmware 7.16.0+
BitHighlander May 12, 2026
5094db4
docs(windows): capture 1.3.2 launch handoff
mtlouzada May 12, 2026
0d782bf
fix(windows): package deep externals and restore launcher path
mtlouzada May 12, 2026
8becb84
fix: auto-refresh on Zcash enable + AssetPage sync status
BitHighlander May 12, 2026
22bfa2e
fix: ship zcash-cli binary in prod + UX improvements for privacy engine
BitHighlander May 12, 2026
f52b446
fix: clear Zcash sidecar on device disconnect
BitHighlander May 13, 2026
01c8684
fix: switch evm asset balances by address
BitHighlander May 13, 2026
6e23b2c
fix: complete bip85 firmware gate
BitHighlander May 13, 2026
25bab75
fix: address zcash packaging review
BitHighlander May 13, 2026
276462f
fix: handle evm account switch edge cases
BitHighlander May 13, 2026
e027cc7
fix: refresh zcash privacy state after manual start
BitHighlander May 13, 2026
30d817c
Merge pull request #159 from keepkey/feat/bip85-7.16-lock
BitHighlander May 13, 2026
0563404
Merge pull request #160 from keepkey/fix-zcash-sync-out-of-sync
BitHighlander May 13, 2026
eaed693
Merge pull request #161 from keepkey/codex/evm-account-balance-switch
BitHighlander May 13, 2026
a992e31
fix: harden windows release build checks
BitHighlander May 13, 2026
efee756
fix: address windows build review findings
BitHighlander May 13, 2026
284ba1b
Merge pull request #162 from mtlouzada/fix/windows-1.3.2-launch-handoff
BitHighlander May 13, 2026
0e368d2
feat: add QR scan to Zcash privacy send tab (#164)
BitHighlander May 13, 2026
573d052
chore: simplify Zcash privacy UI and improve history table (#163)
BitHighlander May 13, 2026
50aed32
fix: avoid dashboard zcash refresh tdz crash (#165)
mtlouzada May 13, 2026
c1593bb
Harden release SOP and macOS signing checks (#166)
BitHighlander May 13, 2026
b11b63e
fix dashboard token warning for empty wallets
BitHighlander May 13, 2026
02f025c
Merge pull request #167 from keepkey/codex/fresh-wallet-token-warning
BitHighlander May 13, 2026
efae694
chore: prep 1.3.4 release
BitHighlander May 13, 2026
f588092
fix: improve Windows Pioneer balance refresh
mtlouzada May 13, 2026
1fdbd58
fix balance refresh fallback handling
BitHighlander May 13, 2026
232d81d
fix incomplete portfolio refresh handling
BitHighlander May 13, 2026
5d6ffcb
Merge pull request #169 from keepkey/codex/pr168-review-fixes
BitHighlander May 13, 2026
5eff8a5
chore: prepare v1.3.5 release
BitHighlander May 13, 2026
013d1ea
fix: preserve Electrobun launcher with system CA
mtlouzada May 13, 2026
9bab106
fix splash logo centering
BitHighlander May 14, 2026
a6b97f2
fix relay swap status tracking
BitHighlander May 14, 2026
8bf24d9
[codex] Fix max send across native and token swaps
BitHighlander May 14, 2026
bfe588c
Merge pull request #172 from keepkey/codex/keepkey-logo-centering
BitHighlander May 14, 2026
52e5e7f
Preserve Relay terminal metadata updates
BitHighlander May 14, 2026
37ef545
Merge pull request #174 from keepkey/codex/fix-relay-swap-status
BitHighlander May 14, 2026
4bdf3f9
Merge pull request #170 from mtlouzada/release/1.3.5-system-ca-launcher
BitHighlander May 14, 2026
d238544
Fix duplicate tokens in list and scam tokens bypassing spam filter (#…
BitHighlander May 15, 2026
74120bd
fix: portfolio debug, token dedup, relay gas check, Solana max-send (…
BitHighlander May 16, 2026
fd534b2
fix: use Pioneer cache on landing load, forceRefresh only on explicit…
BitHighlander May 18, 2026
5a42cc3
chore: prepare vault 1.3.6 release (#180)
BitHighlander May 18, 2026
8680ebf
fix: portfolio balance reliability — failedPubkeySet, no-walk-backwar…
BitHighlander May 18, 2026
213e3f9
Merge develop into release/1.3.6 — include portfolio reliability fixe…
BitHighlander May 18, 2026
a40401e
Merge branch 'master' into release/1.3.6 — resolve electrobun-linux w…
BitHighlander May 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
349 changes: 340 additions & 9 deletions .github/workflows/build.yml

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ modules/keepkey-firmware/build-emu/
release-windows/

# Developer-local files
.claude/settings.local.json
.claude/
emulator.img
rmdir-result.txt
*.bat
230 changes: 114 additions & 116 deletions Makefile

Large diffs are not rendered by default.

182 changes: 0 additions & 182 deletions docs/EMULATOR-CHANNELS.md

This file was deleted.

135 changes: 135 additions & 0 deletions docs/HANDOFF-emu-finish.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# Handoff — finishing the 7.15 emulator work

**Branch:** `feat/emu-wallet-metadata` (pushed to `origin`, 12 commits on top of `develop`)
**Status:** boots, loads, dashboard renders. **Send is still broken. OLED preview shows no real data.** Two specific things below are the hard blockers; the rest is polish.

---

## Where we are

**Working end-to-end:**
- Add a new emulator from the bottom-right pill → spawns fresh emu on alpha channel → engine connects → state=`needs_init` → `OobSetupWizard` mounts → user picks Create/Recover → seed loads → state=`ready` → Dashboard renders.
- App restart with a saved emu wallet: stale-storage detection → wipe + auto-reload mnemonic from Keychain → state=`ready` → Dashboard.
- Per-wallet metadata persists: label, firmware version, channel, USD total all surface on the splash device cards alongside real KeepKeys.

**The 12 commits on this branch** got us from "won't even start the emu" through SIGTRAP/SIGBUS/SIGKILL crashes to "boots and looks right." Memory file `~/.claude/projects/-Users-highlander-…/memory/emu-7.15-debugging.md` has the full bug-by-bug story; read that first before debugging anything emu-related.

---

## What still doesn't work

### 🔴 BLOCKER 1 — Sending crashes the app

User reproduction:
1. Boot vault, load a seeded emu wallet, dashboard shows balances
2. Try to send a transaction (Solana SOL native transfer in the user's case)
3. Backend log:
```
[solanaSignTx] RPC call received
[solanaSignTx] legacy — fullTx=215B sigCount=1 messageStart=65
[emu-window] 3 chunks written, polling 2 pre-polls
[emu-window] Waiting for user confirmation (id=69c2a819...)
[emu-window] No emulator window — rejecting (fail closed)
[emu-window] User responded: approved=false
Child process terminated by signal: 9
```

**Two distinct bugs in this trace:**

**1a. Emulator window goes missing between dashboard mount and sign click.**
Commit `ddd0a03` partially addressed this — `requestUserConfirm` now auto-reopens the window if `emuWindow` is null. **Not yet retested by the user**; the first thing to do is verify the auto-reopen path actually works. If it does, sign should at least show the confirm dialog.

If auto-reopen doesn't work, the deeper question is: **why is `emuWindow` null after the dashboard loads?** The window is opened by `emulatorInit` / `emulatorSwitchWallet` and only torn down by explicit close handlers. Something is clearing the `emuWindow` reference. Suspects:
- Wizard transitions calling `closeEmulatorWindow` somewhere (grep `closeEmulatorWindow` callers in `src/bun/index.ts` — there are several in setup paths)
- The `BrowserWindow.on('close')` handler firing because the user closed the window manually after onboarding
- `emulatorImportWallet` (RPC handler at `index.ts:3560-3680`) closes + reopens — race possible

**1b. SIGKILL after the signing op resolves to `approved=false`.**
This is the watchdog firing again, but the timing is suspicious — `User responded: approved=false` should have triggered an immediate Cancel send to the firmware, then the sign op rejects on the JS side, transport returns an error, RPC returns. No reason for `kkemu_poll` to busy-loop here.

Hypothesis: when the vault rejects (sends `Cancel` over iface 0), the firmware's `confirm_helper` exits with `ret_stat=false` → `fsm_msgSolanaSignTx` returns `Failure` → vault's hdwallet transport reads it → done. But maybe the vault doesn't actually send `Cancel` — it just resolves the JS promise locally with false. The firmware then sits in confirm_helper waiting for BA/DLD that never come, kkemu_poll busy-loops, watchdog fires. Look at `src/bun/emulator-window.ts:requestUserConfirm` rejection path and check whether it actually writes a Cancel frame to iface 0.

**Quickest path to confirming this:** run the user's flow with the just-bundled `ddd0a03` and capture the new log. If "No emulator window" is gone but the sign still hangs, it's bug 1b. If it shows the confirm dialog and the user clicks Reject, then it's clearly 1b.

### 🔴 BLOCKER 2 — OLED preview never shows real device output

User reports: "I still have yet to see any real data in the emulator preview." Throughout the entire flow — boot, wipe, load, post-load — the emu window only ever shows static placeholder UI (the lock/unlock icon was the only thing visible). The actual firmware-rendered OLED framebuffer is supposed to be drawn into the canvas via the `display-update` packets.

**Plumbing summary:**
- `src/bun/emulator.ts:emuGetDisplay()` calls `kkemu_get_display` and copies the framebuffer into a Uint8Array.
- `src/bun/emulator-window.ts:startDisplayPoll()` runs every 66ms (`~15 fps`), fetches the framebuffer, base64-encodes it, sends to the webview via `sendToWindow('display-update', { fb, w, h })`.
- The webview's `onDisplayUpdate(data)` decodes base64 and renders into a 256×64 canvas using SSD1306 page format (8 pages × 256 cols, each byte = 8 vertical pixels).

**What to check first:**
1. Is `kkemu_get_display` actually returning a non-null pointer with `w=256, h=64`? My isolated dylib test did show `fbPtr=4394017601 w=256 h=64` and the first 8 bytes were `00 00 00 00 00 00 00 00` — meaning the framebuffer existed but was all-zeros at that moment. **The firmware may simply not be drawing anything to the OLED in the dylib build.**
2. Is the `display-update` packet actually reaching the webview? Add a `console.log('[emu-ui] onDisplayUpdate w=' + data.w + ' h=' + data.h)` in `emulator-window.ts:onDisplayUpdate` (the inline webview HTML, line ~615) and watch the webview devtools. If you see them, the issue is on the canvas-render side; if not, it's on the bun-send side (`viewReady` race? `sendToWindow` dropping them?).
3. Even if the framebuffer is being delivered, the SSD1306 page-format decoder might be wrong for the 7.15 dylib's framebuffer layout. The 7.10 dylib returned `NULL` early so this code path was never exercised; nobody's verified it actually draws correctly.

**The lock/unlock icon the user sees is purely the placeholder UI** in the webview HTML (`oled.innerHTML = '<div class="idle-text">KeepKey Emulator Ready</div>'` and similar). Real frames would replace it via the `hasRealDisplay = true` branch.

---

## What's solid (don't waste time re-debugging)

These were all chased down already and have memory + commit messages:

- **Webview ready handshake** (`9ce826d`): `executeJavascript` no longer races the WKWebView's first paint.
- **Bun `toBuffer` GC bug** (`268f0cb`): `toArrayBuffer().slice()` everywhere.
- **`KK_DEBUG_LINK=ON` cmake flag** (`19d4011`): the actual fix for the confirm-flow hang. Without this, `msg_read_tiny` doesn't recognize `DebugLinkDecision`, confirm_helper busy-loops, watchdog SIGKILLs.
- **Watchdog 60s** (`9b7126a`): old 15s default was too tight for 7.15's slower derivation paths. Don't lower it back.
- **3s deadlines on DebugLink seed verifies** (`da814f2`, `8ce8962`): cosmetic; they hang on the dylib path. Removing them re-introduces the wizard/dashboard hangs.

---

## Out-of-scope but worth flagging

- **Zcash Orchard on emu** — user said explicitly out of scope. Separate branch.
- **DebugLink reads hang on dylib** — root cause of the timeouts above. If fixed, the workarounds can come out. Likely a poll-thread / interleaving issue in the dylib (`libkkemu.c` ringbuffer logic).
- **python-keepkey reactive flow deadlocks the dylib** — `BitHighlander/python-keepkey @ feat/dylib-transport` has scaffolding (`DylibTransport`, `tests/test_dylib_confirm_flow.py`) that reproduces it deterministically in <30s. Real fix is the same poll-thread in the dylib.
- **`getBalances` per-chain timing instrumented** (`9b7126a`) but not yet diagnosed. Watch for `[getBalances] <chain>.<method> took XXXms` lines >2s.
- **Bundled-vs-user-installed emu drag-and-drop UX** — sketched in an earlier conversation. Out of scope for this branch.

---

## Repro environment

```bash
# From repo root:
cd /Users/highlander/WebstormProjects/keepkey-stack/projects/keepkey-vault-v11

# Make sure submodule is on the right firmware
git -C modules/keepkey-firmware log --oneline -1 # should be f8fee570 on alpha

# Build/start dev
make dev # = bun run dev — re-bundles backend + frontend, launches Electrobun

# Re-build the emulator dylib if you change firmware:
make build-emulator-alpha # honors the new -DKK_DEBUG_LINK=ON via the patched _build-emu rule
```

The emulator binary + dylib live at `firmware/emulators/7.15.0-alpha/`. They're committed. Don't delete and re-build unless you've changed firmware code.

For diagnosing firmware-contract issues *without* electrobun in the loop:

```bash
cd modules/keepkey-firmware/deps/python-keepkey/tests
PYTHONPATH=..:../keepkeylib \
KK_TRANSPORT=dylib \
KK_DYLIB=$PWD/../../../../../../firmware/emulators/7.15.0-alpha/libkkemu.dylib \
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python \
python3 -m pytest test_dylib_confirm_flow.py -v
```

`Initialize` → `Features` round-trips. Anything that needs reactive ButtonAck currently hangs (out-of-scope dylib bug, not new).

---

## Recommended sequence for the next session

1. **Verify `ddd0a03` actually fixed the missing-window** — pull, restart, try a send. If the confirm dialog appears, decline it and watch what happens.
2. **If decline → SIGKILL: fix the Cancel-not-sent path in `requestUserConfirm`.** The vault should write a `Cancel` (msg type 20) frame to iface 0 when the user rejects, so the firmware's `confirm_helper` can exit cleanly.
3. **If decline → clean failure but still no OLED preview: instrument `onDisplayUpdate` in the webview HTML.** First confirm packets arrive at all. Then verify the framebuffer bytes look like a real OLED frame (mostly non-zero in the bottom rows where text usually lives).
4. **If display packets aren't arriving: check the firmware actually drives the OLED in the dylib build.** Memory note from earlier sessions said `force_animation_start()` and `animate()` overwrites get involved, and that the 7.10 dylib returned NULL for `kkemu_get_display`. The 7.15 dylib returns a buffer but it may be all-zeros if `display_refresh()` isn't being called from `kkemu_poll`.
5. **Once send + display work, the branch is reviewable.** Open the PR.

Treat the existing 12 commits as foundation. The two remaining bugs are stop-the-show; the rest is post-merge polish.
Loading
Loading