修复受损的 Zcash wallet.dat 钱包文件

在一次Zcash转账中电脑死机再次重启后发现Zcash4win(现在新的叫WinZec)无法启动,再次启动后发现钱包文件丢失,具体表现情况为地址被重新初始化,原有地址和密钥丢失。

在Zcash的文件夹中(Windows访问%APPDATA%中的Zcash文件夹),发现原有的wallet.dat变成了wallet.时间戳.bak文件。

日志分析

打开db.log文件发现了以下的报错

BDB0090 DB_VERIFY_BAD: Database verification failed

失败的尝试

1.将wallet.时间戳.bak文件改回wallet.dat再次启动程序,继续报错,再次打开钱包被再次初始化。

2.使用Ubuntu安装最新版的Zcashd启动,问题同上。

3.使用Winhex打开wallet.dat,无耐里面一大堆数据看不懂,而且通过搜索只搜索到地址,并没有密钥数据(应该是无法直接被搜索出)。

恢复过程

通过寻找相关资料,发现wallet.dat是一个Oracle Berkeley DB数据库文件,最终在zcash的github上找到了修复文件的方法。

原文参考:https://github.com/zcash/zcash/issues/1694

this may be a serious bug but I finally made recovery:

1.compiled BDB version 6.2 and did a dump of wallet.dat
2.on separate machine i installed db-util ver 5.3 and loaded the dump
3.started daemon with -salvagewallet

具体操作方法如下:

注意:Berkeley DB以下简称BDB。
比特币等使用BDB的Wallet.dat也可以试着参照这个方法。
警告:不保证一定能修复钱包文件,请在操作之前,备份好钱包文件!!!

  1. 首先准备一台Ubuntu Linux(其他的Linux也可以,只是我个人喜欢使用Ubuntu),为了方便可以使用虚拟机进行操作。
  2. 前往Oracle官网下载BDB 6.2.32 。(传送门:http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html)
  3. 编译并安装BDB,当然如果能yum或者apt到这个版本也可以的。(编译安装的方法请自行搜索一下,我当时忘记记录了orz,具体方法跟编译安装其他软件差不多,configure,make,make install三连)
==再次提醒!!备份好钱包文件(包括bak文件)再继续接下来的操作!==
  1. 使用db_dump命令dump出损坏的数据库文件。

    db_dump -r -f dumpfile wallet.时间戳.bak

  2. 使用db_load命令重构数据库文件。

    db_load -t btree -f dumpfile wallet.dat

  3. 使用db_verify命令检查数据库文件。

    db_verify wallet.dat

出现以下提示代表修复成功:

BDB5105 Verification of wallet.dat successed.

  1. 将wallet.dat文件复制回zcash目录再次打开zcashd或者zcash4win即可正常使用。
  2. 可以使用以下命令导出密钥。
T地址:zcash-cli dumpprivkey
Z地址:zcash-cli z_exportkey

警告:拥有密钥可以完全控制你的钱包,务必妥善保管,不要告诉任何人,也不要上传到任何网站上。截图时请打码。

参考资料

  1. Zcash Github Issue:https://github.com/zcash/zcash/issues/1694
  2. BDB安装手册:https://docs.oracle.com/cd/E17076_05/html/installation/build_unix.html
  3. db_dump命令:https://docs.oracle.com/cd/E17275_01/html/api_reference/C/db_dump.html
  4. db_load命令:https://docs.oracle.com/cd/E17276_01/html/api_reference/C/db_load.html

发布者

Zmsky

http://xloli.net/?page_id=11

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.