导入助记词后余额为 0 可能只是新钱包推出了另一个地址
把原来那个收款地址复制到区块浏览器里搜一下:查一个地址只用地址本身,不需要助记词,也不用连接钱包。浏览器上那个地址的余额还在,币就还在链上。接着拿新钱包显示的地址和原地址逐字比对:对不上,才是新钱包用同一组助记词推出了另一个地址,差别可能出在派生路径、比特币的地址类型、自动恢复了几个账户,或者原钱包设过的额外口令;对得上,推法没有问题,再看新钱包当前选的是不是币所在的那条链。
原来的地址记不清,旧钱包 App 还能打开就看它的收款页;打不开,就翻当初往这个地址转币的记录,比如交易所提币记录里你填过的收款地址。查到余额已经是 0、记录里多了一笔你没发起过的转出,这就和换钱包导入无关了,按钱包异常转出的步骤去查授权、保留证据。
本文讲助记词怎样推出地址、怎样在新钱包里改回原来的推法,不构成投资建议。见免责声明。
同一组助记词在两个钱包里推出不同地址的原因
助记词不直接对应哪一个地址。钱包先把它换算成种子,再沿一条派生路径(derivation path)一层层往下推,每一层取的数不同,最后落到的地址就不同。BIP-44 把这条路径定为五层:
m / purpose' / coin_type' / account' / change / address_index
purpose 是用途号,BIP-44 里固定为 44';coin_type 给每个币种单独分出一棵子树,比特币取 0;account 是账户序号,从 0 起按顺序递增;change 取 0 是对外收款用的地址,取 1 是找零地址;address_index 是这条链上的第几个地址,同样从 0 起。比特币第一个账户的第一个收款地址,路径就是 m/44'/0'/0'/0/0。五层里任何一层换个数,推出来的都是另一个地址,哪怕助记词一个词都没错。
比特币还多一层差别,就是地址类型。BIP-84 和 BIP-86 沿用这套五层结构,只把用途号换成 84' 和 86',推出的地址类型和开头也跟着换。
| 地址开头 | 对应 BIP | 账户 0 第一个收款地址的路径 |
|---|---|---|
| bc1q | BIP-84,P2WPKH 地址 | m/84'/0'/0'/0/0 |
| bc1p | BIP-86,单密钥 P2TR(Taproot) | m/86'/0'/0'/0/0 |
imToken 帮助中心写明,导入 BTC 钱包助记词时「默认导入地址类型为:Taproot,路径为:m/86'/0'/0'」;导入后地址变了、余额为 0,则可能是导入地址类型和路径不一致。落到账户 0 的第一个收款地址,完整路径是 m/86'/0'/0'/0/0。原钱包里的地址以 bc1q、1 或 3 开头,导入后看到的却以 bc1p 开头,这次的 0 余额应该就是类型没对上。改法是向原钱包的客服问清导入地址类型和路径,再到 Bitcoin 网络的「高级模式」里选相应的地址类型添加。

只恢复出一个账户时,后面的账户怎么加回来?
用同一组助记词建出的多个账户,是按序号一个接一个推出来的。导入时沿着序号往下找、找到哪里停,MetaMask 的规则是按升序逐个检查,在以太坊主网(Ethereum Mainnet)上 ETH 余额非零的账户才添加,而且「当遇到一个 ETH 余额为零的账户时,该过程即停止。」
按这条规则,序号靠前的某个账户在以太坊主网上没有 ETH,检查就在它这里停下;排在它后面的账户,哪怕在别的链上存着币,也不会自动出现。要把它们找回来,在钱包里手动新增账户,逐个往后加,每加出一个就拿它的地址和原地址比对。
单独用私钥导入过的账户不在这组助记词的推导范围里:「通过私钥或其他私钥助记词导入的账户需要手动重新添加。」当初那把私钥或另一组助记词,要再导入一次。要找的地址一个都没出现,帮助中心列出的可能是助记词本身有误,或者外部 JSON、私钥还没重新导入;这时逐个核对单词的拼写和顺序。
按 BIP-44 做账户发现的钱包,看的是交易记录:某个账户对外收款的那条链上一笔交易都查不到,就停止发现,不再看下一个账户;同一条链上连续 20 个地址没用过,软件就认为后面不会再有用过的地址,停止扫描。
漏填额外口令(passphrase)会打开另一个有效的钱包
BIP-39 允许用户再加一个口令(passphrase)来保护助记词;没设口令时,规范拿空字符串代替。
麻烦出在规范的设计上:每一个口令都会生成一个有效的种子,对应一个完整可用的钱包,只有原来那个口令才会打开你存过币的那一个。导入时漏填,算出来的是空字符串对应的钱包;口令错一个字符,又是另一个。这些钱包的地址格式一切正常,只是和原来那个不是同一个。
回想原钱包创建或备份时有没有设过这样一个口令。设过,新钱包导入界面有这一项时,把口令原样填进去,再拿推出的地址和浏览器里查到的原地址比对;从来没设过,问题就不在口令上,回到路径和账户去找。
导入助记词时手动选择地址路径的步骤
原钱包用的地址类型和路径,到原钱包的官方帮助中心查,或者通过原钱包 App 里的官方客服入口问。问的只是地址类型和路径这两项,用不着报出助记词。
拿到路径以后,在 TokenPocket 里是这样导入的:
- 在助记词导入界面点击【高级模式】。
- 在高级模式的【选择地址路径】里,设成原钱包用的那条路径。
- 导入后,拿新钱包显示的地址和浏览器里查到的原地址逐字比对。
别的钱包设置导入路径或地址类型的入口,以它自己的帮助中心为准。
从查余额到导入,助记词只该出现在一个地方:你从官方渠道装好的钱包 App 的导入界面。网页上的「恢复工具」「余额查询」,私信里自称能帮你找回资产的人,都不该拿到它;对方以同步、修复、解冻为由索要恢复词,按假客服索取恢复凭据处理,停止联系。
原钱包还能打开的,先别卸载或重置。新钱包里出现和浏览器上一字不差的地址、余额也对上之后,再决定旧 App 留不留。
地址对上之前和之后还会碰到的情况
额外口令忘了还能找回吗?
只能靠自己回忆。BIP-39 下任意一个口令都会生成一个有效的钱包,只有原来那个口令对应你存过币的那一个,所以每试一个候选口令,都要拿推出的地址和原地址逐字比对。别把助记词和候选口令交给任何网站或「找回服务」代试。
地址对上了余额却还是 0 怎么办?
地址逐字一致,推法就没有问题了。回区块浏览器看币在哪条链上、是哪种代币,再看新钱包当前选中的网络是不是那一条。浏览器里有余额、钱包切到那条链仍不显示,带着地址和链名去问钱包官方客服,不用提供助记词。
同一组助记词导入两个钱包会互相影响吗?
两个钱包可以同时用。路径一致时,两个 App 推出的是同一批地址,在哪一边转账,链上都记在同一个地址名下,另一边刷新后余额跟着变。代价是这组助记词多了一处存放的地方,哪一处泄露,两边的资产都会受影响。
本文引用源
- BIP-39: Mnemonic code for generating deterministic keys · github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
- BIP-44: Multi-Account Hierarchy for Deterministic Wallets · github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
- BIP-84: Derivation scheme for P2WPKH based accounts · github.com/bitcoin/bips/blob/master/bip-0084.mediawiki
- BIP-86: Key Derivation for Single Key P2TR Outputs · github.com/bitcoin/bips/blob/master/bip-0086.mediawiki
- MetaMask 帮助中心「如何使用私钥助记词恢复您的钱包」(简体中文) · support.metamask.io/zh-cn/configure/wallet/how-to-restore-your-metamask-wallet-from-secret-recovery-phrase
- TokenPocket 帮助中心「如何设置助记词导入路径」 · help.tokenpocket.pro/cn/faq/multichain-wallet/settings
- imToken 帮助中心:其他钱包助记词导入后 BTC 钱包余额为 0 的说明 · token.im/hc/zh-CN/articles/7517484502681