Fix: Trezor Suite Missing Legacy SegWit (BIP49) Bitcoin Balances
Following a firmware update, a migration from the deprecated Trezor web wallet to Trezor Suite, or a device recovery onto a new Trezor Safe 3 or Model T, users frequently experience acute panic: their Bitcoin portfolio displays 0.00000000 BTC. Historical transaction histories have vanished, and incoming addresses generated by the app start with bc1q... instead of the user’s familiar 3... format.
This balance disappearance is not a loss of funds. Rather, it represents a cryptographic derivation standard divergence between BIP84 (Native SegWit) and BIP49 (Nested / Legacy SegWit).
If you are experiencing similar derivation discrepancies with Native SegWit addresses or xpub/zpub key formats, consult our foundational analysis on BIP-84 Native SegWit Missing Bitcoin Balance.
Cryptographic Root Cause: Derivation Path & Script Divergence
Bitcoin wallets derive cryptographic keys hierarchically from a master seed phrase according to BIP32 and BIP44 standards:
$$\text{m / purpose’ / coin_type’ / account’ / change / address_index}$$
The Three Competing Bitcoin Script Formats
- Legacy (BIP44 - P2PKH):
- Path:
m/44'/0'/0' - Address Prefix:
1... - Extended Key:
xpub
- Path:
- Nested / Legacy SegWit (BIP49 - P2SH-P2WPKH):
- Path:
m/49'/0'/0' - Address Prefix:
3... - Extended Key:
ypub - Standard default for Trezor wallets between 2017 and 2021.
- Path:
- Native SegWit (BIP84 - P2WPKH Bech32):
- Path:
m/84'/0'/0' - Address Prefix:
bc1q... - Extended Key:
zpub - Modern default for Trezor Suite.
- Path:
When a user initializes Trezor Suite, the software queries the device for m/84'/0'/0' by default. If the user originally deposited BTC into a 3... address derived under m/49'/0'/0', the Native SegWit address tree is mathematically completely unrelated, displaying a balance of zero.
Step-by-Step Recovery Protocol
To locate and display your stranded Legacy SegWit Bitcoin balances in Trezor Suite or third-party open-source tools without exposing your seed phrase, execute the following protocol.
1. Enable Legacy SegWit Accounts in Trezor Suite
- Open Trezor Suite (desktop application) and connect your Trezor device.
- Enter your PIN and optional passphrase (if used).
- In the left navigation sidebar, navigate to the Accounts section.
- Click the
+(Add Account) button. - In the modal, select Bitcoin.
- Click the Account type dropdown menu (which defaults to Native SegWit).
- Select Legacy SegWit (P2SH).
- Click Add account.
[Trezor Suite Account Selector Preview]
Account Type: [ Legacy SegWit (P2SH) ▼ ]
Derivation Path: m/49'/0'/0'
Expected Prefix: 3...
Status: Scanning blockchain... FOUND (1.4285 BTC)
Trezor Suite will immediately scan the blockchain starting at address index 0 for m/49'/0'/0'. Your historical transactions and positive balance will reappear in the account dashboard.
2. Recovery via Electrum with Custom BIP49 Derivation
If Trezor Suite fails to discover older accounts due to non-standard address gap limits (where more than 20 consecutive addresses have no transactions), pair your Trezor with Electrum:
- Download and verify the official Electrum wallet.
- Launch Electrum $\rightarrow$ Create New Wallet $\rightarrow$ Standard wallet.
- Select Use a hardware device $\rightarrow$ choose your Trezor.
- When prompted for script type and derivation path, select:
- p2sh-segwit (p2wpkh-p2sh)
- Derivation path:
m/49'/0'/0'
- Complete the setup. Electrum will connect directly to decentralized Electrum servers and index your full UTXO set.
3. Inspect and Verify Extended Public Keys (Ypub vs Zpub)
You can verify whether your public keys match without risking funds by using Bitcoin CLI utilities:
# Verify the Ypub (Nested SegWit) master key on Trezor
trezorctl btc get-public-node -n "m/49'/0'/0'" --coin Bitcoin
# Verify the Zpub (Native SegWit) master key on Trezor
trezorctl btc get-public-node -n "m/84'/0'/0'" --coin Bitcoin
If you convert a ypub to an xpub using tools like bitcoinjs-lib, you can audit transactions in block explorers like Blockstream.info or Mempool.space:
// scripts/ypubToAddresses.ts
import * as bitcoin from 'bitcoinjs-lib';
import { BIP32Factory } from 'bip32';
import * as ecc from 'tiny-secp256k1';
const bip32 = BIP32Factory(ecc);
export function deriveBip49Address(accountYpub: string, index: number): string {
// Convert Ypub to standard BIP32 node
const node = bip32.fromBase58(accountYpub);
const child = node.derive(0).derive(index); // External receiving chain
const { address } = bitcoin.payments.p2sh({
redeem: bitcoin.payments.p2wpkh({ pubkey: child.publicKey, network: bitcoin.networks.bitcoin }),
network: bitcoin.networks.bitcoin,
});
return address!;
}
Bitcoin Account Standard Comparison Table
| Feature | Legacy (BIP44) | Nested SegWit (BIP49) | Native SegWit (BIP84) | Taproot (BIP86) |
|---|---|---|---|---|
| Address Starts With | 1... | 3... | bc1q... | bc1p... |
| Derivation Path | m/44'/0'/0' | m/49'/0'/0' | m/84'/0'/0' | m/86'/0'/0' |
| Extended Key Prefix | xpub | ypub | zpub | xpub |
| Avg Transaction Fee | High (Baseline) | ~25% Cheaper | ~40% Cheaper | ~45% Cheaper (Complex txs) |
| Trezor Suite Support | Optional | Optional | Default | Supported |
Frequently Asked Questions
Q: Should I move my Bitcoin from Legacy SegWit (BIP49) to Native SegWit (BIP84)?
Yes, moving funds from BIP49 (3...) to BIP84 (bc1q...) or Taproot (bc1p...) reduces future network transaction fees by approximately 20–35% due to more efficient witness data serialization. Once you discover your BIP49 account, execute a standard transfer to your Native SegWit address during a low-mempool weekend.
Q: Why didn’t Trezor Suite show my BIP49 account automatically?
To optimize synchronization speed and reduce RPC server load, Trezor Suite stops scanning an account derivation tree if it detects an account with 0 balance and 0 historical transactions. If your BIP49 account was created at account index 1 (m/49'/0'/1') instead of index 0, Suite requires manual account addition.
Q: Can entering the wrong Passphrase cause this?
Yes. If you use a BIP39 passphrase (the “25th word”), even a single capitalization error (e.g. Password vs password) creates an entirely different hidden wallet with empty balances across all derivation standards. Ensure your passphrase matches your original setup character for character.