chore: align trezor dev tooling with ios - #1170
Conversation
Greptile SummaryThe PR adds a debug/E2E Trezor Electrum override, applies it across Trezor operations and hardware-wallet watchers, and documents the emulator workflow. The network-aware follow-up remains incomplete, and mutable screen state can also select the wrong broadcast network.
Confidence Score: 3/5The PR is not yet safe to merge because Trezor operations and signed-transaction broadcast can still select an Electrum endpoint for the wrong network. The reply from an unspecified author claims the earlier operation-network issue was fixed, but non-regtest operations still fall back to the app-wide regtest endpoint; additionally, changing the screen’s network after signing makes broadcast use a network that is not bound to the signed transaction. Files Needing Attention: app/src/main/java/to/bitkit/repositories/TrezorRepo.kt, app/src/main/java/to/bitkit/ui/screens/trezor/TrezorViewModel.kt, app/src/main/java/to/bitkit/env/Env.kt
|
| Filename | Overview |
|---|---|
| app/src/main/java/to/bitkit/repositories/TrezorRepo.kt | Makes Trezor operations network-aware, but non-regtest operations still fall back to a potentially regtest app-wide endpoint. |
| app/src/main/java/to/bitkit/ui/screens/trezor/TrezorViewModel.kt | Passes the selected network into broadcast, but does not bind that network to the signed transaction. |
| app/src/main/java/to/bitkit/env/Env.kt | Adds the build-time Trezor Electrum override and restricts it to debug/E2E regtest operations. |
| app/src/main/java/to/bitkit/repositories/HwWalletRepo.kt | Applies the Trezor-specific endpoint resolution to production hardware-wallet watchers and funding broadcasts. |
| app/build.gradle.kts | Emits TREZOR_ELECTRUM_URL into BuildConfig using the existing provider pattern. |
| docs/trezor-emulator.md | Documents emulator startup, build flags, installation, funding, and smoke checks. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Trezor operation] --> B[Operation network]
B --> C[currentElectrumUrl]
C --> D{Regtest override applies?}
D -->|Yes| E[TREZOR_ELECTRUM_URL]
D -->|No| F[SettingsStore electrumServer]
E --> G[TrezorService]
F --> G
H[Signed transaction] --> I[Mutable selectedNetwork]
I --> J[broadcastRawTx]
J --> C
Reviews (2): Last reviewed commit: "fix: scope trezor electrum override per ..." | Re-trigger Greptile
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
| private suspend fun currentElectrumUrl(network: BitkitCoreNetwork): String = | ||
| Env.trezorElectrumUrlOrDefault( | ||
| configured = settingsStore.data.first().electrumServer, | ||
| network = network, | ||
| ) |
There was a problem hiding this comment.
Fallback still selects wrong network
When a dev-regtest build selects Bitcoin or testnet in Trezor Dev Settings, trezorElectrumUrlOrDefault rejects the regtest override but returns the app-wide regtest Electrum setting unchanged. Account lookups, composition, and broadcast therefore use an endpoint for the wrong chain, producing unrelated state or failed operations.
Knowledge Base Used: Repositories overview (non-core domains)
| val rawTx = signedStep.signedTx.serializedTx | ||
| _uiState.update { it.copy(send = it.send.copy(isBroadcasting = true)) } | ||
| trezorRepo.broadcastRawTx(serializedTx = rawTx) | ||
| trezorRepo.broadcastRawTx(serializedTx = rawTx, network = state.selectedNetwork) |
There was a problem hiding this comment.
Broadcast loses signed transaction network
When a user changes the network selector after composing and signing a transaction, broadcastSignedTx passes the current selectedNetwork instead of the network used to create the signed transaction. The transaction is then submitted to another network's Electrum server and broadcast is rejected.
Knowledge Base Used: UI Screens: Navigation, Screens, and Components
Closes #1008
This PR:
TREZOR_ELECTRUM_URLbuild config so Trezor and hardware wallet flows can be pointed at the local regtest Electrum from bitkit-docker, matching the iOS override of the same name.docs/, replacing setup instructions that until now only existed in the bodies of feat: trezor hardware support #792 and chore: improve trezor dashboard #939.Description
Android Trezor Bridge support landed before bitkit-docker shipped its Trezor User Env, so two pieces stayed behind while iOS builds on bitkit-docker end to end. The Bridge runtime path already worked; this closes the tooling gap that #1038 depends on.
Every Trezor Electrum lookup previously resolved to the staging regtest server unless the build was an E2E local-backend build. A plain
installDevDebugused for emulator work therefore watched staging, not the local node the emulator's coins live on, so a freshly funded emulator wallet showed unrelated chain state.TREZOR_ELECTRUM_URLfollows the existingTREZOR_BRIDGEandTREZOR_BRIDGE_URLpattern: environment variable, then Gradle property, thenlocal.properties, mirrored in.env.example. It applies only to debug and E2E builds and only on regtest, and is scoped to Trezor. The app-wide Electrum server under Settings, and the default behind it, are untouched.The issue describes the Android watcher as resolving Electrum through
Env, which holds only for the Dev Settings watcher. The production watchers and the Trezor calls behind account info, compose and broadcast read the Electrum setting instead, so the override is applied at all three points. Restarting a watcher when its server changes was already handled.The doc covers starting the emulator helper, the three build flags and how each resolves, install commands for an emulator and a physical phone, funding the emulator wallet on regtest, and a smoke checklist. The README section and the hardware wallet journeys README now point at it.
No changelog fragment: this is dev tooling with no user-facing change.
Preview
Same paired emulator device, same app data, one rebuild apart.
QA Notes
Requires the bitkit-docker stack and
./scripts/trezor-emulator start.Manual Tests
TREZOR_BRIDGE=true TREZOR_BRIDGE_URL=http://10.0.2.2:21325 TREZOR_ELECTRUM_URL=tcp://10.0.2.2:60001→ fresh wallet → Settings → Hardware Wallets → Add Hardware Wallet → Continue → Connect: paired screen reports the funds held on the local regtest chain.TREZOR_ELECTRUM_URL, keeping the app data → relaunch → Home: the tile switches to the staging regtest balance and history, confirming the fallback.regression:Settings → Advanced → Electrum Server: still the staging server in both builds, so the override stays scoped to Trezor.trezor-emulator adbandadb reverse tcp:60001 tcp:60001→ build with the127.0.0.1form: same result as the emulator run.Automated Checks
just compile,just testandjust lintpass.BuildConfig.TREZOR_ELECTRUM_URLis emitted from the generated source, both set and empty.