OKCoin

没有wallet.dat文件,就不是比特币钱包么?

比太钱包 发布在 比特币 65 9241

过去半年里小太的日常:

“比太钱包的wallet.dat放哪里啦?”

“比太没有wallet.dat”

“不可能,所有的比特币钱包都有wallet.dat,没wallet.dat的怎么能叫钱包?”

“@#$%^&*”

这个比特币老玩家们经常挂在嘴边的“wallet.dat”到底是何方神圣呢?

我们知道,从早期的比特币客户端(bitcoin-qt)开始,中本聪就设计了一个叫“wallet.dat”的文件,用来存放比特币私钥及相关交易。直到今天,官方的qt/core以及大部分第三方客户端都采用了类似的方案。

比特币玩家们通过努力学习,掌握了非常多的wallet.dat使用“技巧”,比如说,如何备份wallet.dat,钱包损坏如何恢复,甚至有人送比特币也是直接给一个wallet.dat(存储在光盘或U盘上)。对于大部分比特币用户来说,比特币就是wallet.dat,wallet.dat就是比特币。

当然,这其实并不十分准确,wallet.dat只是一种不太合理的文件存储方式(序列化或数据库),比特币就是比特币,它与wallet.dat一点关系都没有。

比特币的产权无论是过去、现在还是未来,都只由一个东西来确定,那就是私钥。谁掌握私钥,谁就控制着该地址上的比特币,弄丢私钥,比特币就没了。
重要的是私钥,那交易呢?难道交易不重要吗?比特币的区块链总账上记录的不都是交易吗?

交易的确也很重要,历史交易记录决定了某地址上的比特币余额,决定了您能花费多少钱。但重要的是区块链(blockchain)上的交易,而不是您钱包文件wallet.dat里的交易。任何人都可以在自己的wallet.dat中编造出一个假的交易,尝试着去花费,只是其它比特币节点并不会接受这笔交易而已。

也就是说,wallet.dat中存放的那些交易,仅仅是软件本身为了方便查询而采取的一种数据结构而已,毕竟,总不能每次查询相关地址的历史交易,就去检索整个区块链吧?

为了达到这个目的,将那些与钱包地址相关的比特币交易存放在wallet.dat中,就成了过去最常用的一种解决方案,跟这个文件打交道也就成了比特币用户们的“日常”。

那问题又来了,为什么要把交易和私钥存放在一起?

小太估计的答案是,中本聪最初就是这么设计的,后来大家也就继续这么做了。

这种设计的坏处很多:(这也是小太为什么会放弃bitcoinj而重新开发了bitherj的原因之一)

1、每同步到一个新区块,都要更新wallet.dat,也就是说,要对存放私钥的文件进行写操作,这既存在性能问题,也增加了写坏私钥数据的潜在风险;

2、对于普通用户,备份wallet.dat的难度远大于直接备份私钥,风险当然也更高,备份文件的有效性也很难验证;

3、区块同步时会一直更新wallet.dat文件,杀进程可能会导致wallet.dat与内存中的wallet对象不一致,有时可能需要修复,某些情况下甚至需要重置整个区块链数据;

4、钱包的扩展性严格受制于wallet.dat,比如说,像交易所或电子商务解决方案提供商,就无法采用bitcoin-core的解决方案。经常听他们说,“我们需要的地址太多,qt满足不了,只能基于qt改”。其实仔细一想,几百万甚至几千万条地址记录,对于数据库技术来说,都不能算是大数据量,怎么反倒成了困扰比特币行业的问题呢?

5、无法实现冷热分离的模型,私钥和交易存放在一起,交易需要与区块链进行同步,这也就意味着私钥是“热”的,想“冷”?改程序吧;

把交易和私钥放一起的坏处这么多,那我们又该怎么办呢?

很简单,交易是交易,私钥是私钥,这两者原本就不是一回事,千万别放一起。

对于用户来说,最重要的永远是私钥,有了私钥,任何时候都可以想办法从比特币区块链上获取到相关的交易,比如采用SPV轻钱包模式与区块链进行同步,或者从可资信赖的第三方区块查询服务(blockchain.infoblockmeta.info等)API上获取交易数据,这些方式都可以,只要获取的数据与比特币区块链一致就没有问题。
钱包本身可以提供任何一种私钥存储方式,只要足够安全可靠,文本、二维码、blockchain.info的json格式文件等,都是好方法。

这样,用户就无需学习wallet.dat,也不用再去备份这个文件。用户只需要明白一件事,私钥很重要,私钥决定产权,要备份、要保护的也是私钥。

因为乔布斯和他的iPhone,我们在使用智能手机时终于不用学习“文件”这个恼人的概念。没想到比特币又让大家重新纠结起wallet.dat,这到底是退步呢?还是退步呢?

忘了wallet.dat吧,管好您的比特币,不需要文件,只需要私钥。

作者:比太钱包
官方微博:@比太钱包 http://weibo.com/bither
捐赠地址:
1BsTwoMaX3aYx9Nc8GdgHZzzAGmG669bC3

版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。

评论:65

您需要登录后才可以回复 登录|注册
    卉卉912
    卉卉912 741 天前

    [good]//@比太钱包:对于比特币用户来说,最重要的永远是私钥,而不是那传说中的“wallet.dat” [可爱]

    +1
    +1
    我要点评
    码农周琪
    码农周琪 741 天前

    回复@btcrobot:你是指的修改手续费的费率么?目前高手续费是0.1mBTC/kb,低手续费是0.01mBTC/kb,比太钱包目前就分了这2个。

    +1
    +1
    我要点评
    btcrobot
    btcrobot 741 天前

    回复@码农周琪:好像是,可以修改//@码农周琪:回复@btcrobot:他固定的多少?0.1mBTC?

    +1
    +1
    我要点评
    码农周琪
    码农周琪 741 天前

    回复@btcrobot:他固定的多少?0.1mBTC?

    +1
    +1
    我要点评
    易个芒果
    易个芒果 741 天前

    [羞嗒嗒]

    +1
    +1
    我要点评
    btcrobot
    btcrobot 741 天前

    可是blockchain.info就是固定的

    +1
    +1
    我要点评

    有个弱智的问题,比太钱包的区块数据放在那里的?

    +1
    +1
    我要点评
    码农周琪
    码农周琪 741 天前

    建议还是采用根据字节浮动的方式计算手续费,因为各大矿池也是按这种方式进进行交易排序,固定的话可能导致迟迟不做进块中。//@btcrobot: 顺便问一个交易费的问题,qtwallet怎么样强制收取固定交易费,而不是根据字节浮动的!(除了改代码。。。)//@比太钱包:最重要的永远是私钥,而不是那传说中的

    +1
    +1
    我要点评
    iSevenEleven
    iSevenEleven 742 天前

    我快疯了…

    +1
    +1
    我要点评
    比太钱包
    比太钱包 742 天前

    回复@梦想与现实2012思考中:那就好好保管主公钥哈[可爱]

    +1
    +1
    我要点评
    赵景_Hzemax
    赵景_Hzemax 742 天前

    你为什么每回都这么晚吃饭 还是这是夜宵

    +1
    +1
    我要点评
    比太钱包
    比太钱包 742 天前

    回复@旺旺好男银:[可爱]

    +1
    +1
    我要点评
    姜家志
    姜家志 742 天前

    回复@梦想与现实2012思考中:个人用户可以这样使用

    +1
    +1
    我要点评
    btcrobot
    btcrobot 742 天前

    顺便问一个交易费的问题,qtwallet怎么样强制收取固定交易费,而不是根据字节浮动的!(除了改代码。。。)//@比太钱包:对于比特币用户来说,最重要的永远是私钥,而不是那传说中的“wallet.dat” [可爱]

    +1
    +1
    我要点评