比太钱包安卓版从v0.0.9开端不再根据Bitcoinj,而是使用了咱们自行开发的Java言语比特币协议库Bitherj。这其实是个很无奈的挑选,咱们也不想“从头创造轮子”,不过没办法,由于“Too Fragile!”(借用Mike Hearn对bitcoind的评价),咱们不得不开发一套全新的Bitherj来更好的为比太钱包用户提供服务,这很辛苦,但却值得。

  Bitcoinj的问题如下:
  1. 架构:
  关于SPV轻钱包模型来说,普通用户并不关怀整个区块链上的悉数买卖,而只关怀与自己相关的(和依赖的)比特币买卖。根据一点,在规划轻钱包架构时,应更多的考虑使用联系模型而非序列化模型存储数据。
  但Bitcoinj并没有这么做,Bitcoinj的架构中,无论是缓存的区块链SPV头文件,仍是钱包文件,都使用了谷歌自己的序列化办法进行读写,这其实是导致许多问题的本源。
  2. 功用:
  由于Bitcoinj的架构规划,使得一切钱包文件的读写都必须是通过谷歌的序列化办法全读、全写,这关于只要一个钱包、一个地址且买卖很少的用户来说或许还好(出问题的概率会低得多),但关于有多个钱包、多个地址的用户来说,就或许会成为功用“灾祸”,钱包越多、地址越多、买卖越多,就越是灾祸。
  另外,由于Confidential模型的规划,使得在每一个新块到来的时候,一切钱包一切地址上的一切买卖都需要进行更新,哪怕这个新块与任何一个地址上的任何一个买卖都无任何联系,都需要把一切的钱包文件序列化的读到内存中,更新完一切的条目,再序列化的写回文件,这就是Bitcoinj功用问题的本源。
  3. 过错:
  因架构不合理所导致的功用问题,假如结果仅仅是功用较差,那还算是在可以忍受的领域。可问题就在于,这种功用瓶颈或许会导致Bitcoinj的各种运转过错,某些情况下,乃至会呈现“致命”的结果。
  正由于认识到了严峻的功用问题,Bitcoinj的作者不得不妥协的规划了两套独立的写文件线程,一套高优先级的写线程用于写入那些比较重要的数据(比方通过广播收到了新买卖等),一套低优先级的写线程用于延时同步各个钱包文件与SPV区块头文件。
  这使得Bitcoinj的钱包文件读写十分容易犯错,经常是钱包文件与块头不一致,钱包文件内的买卖之间状况不一致,各个买卖的各种状况都频繁的处于正确、过错的来回切换之中,这次写文件没准给写对了,下一个延时的写操作没准又给改错了。
  此类问题,关于开发人员来说是十分头疼的,由于你完全无法依赖某一个值是否牢靠,你只能尽或许的用其它办法来判别钱包的状况、买卖的状况是否正确,假如发现不正确,再想方设法的用绕过Bitcoinj的办法去修正数据乃至是重置区块链数据(ResetBlockchain)。
  大部分人关于上述问题或许完全没有任何概念,但MultBit的开发者Jim618应该和咱们团队一样,对这些问题深有感触。假如您阅览过一些MultiBit的代码或许比太钱包安卓版v0.0.8之前的代码,就会发现,咱们都写了许多办法,专门用来绕过Bitcoinj中或许存在的缺陷,而这些缺陷都是明确的、可复现的、但却几乎不或许在Bitcoinj的架构上处理的(咱们团队从MultiBit上学习了许多,特此感谢)。
  MultiBit和比太都采用了十分多的迂回手段尽或许避开Bitcoinj中的架构圈套,尽管现已可以在大部分情况下处理许多问题,但仍是不能根治。而另一个根据Bitcoinj的安卓手机钱包Bitcoin-Wallet,由于它的单钱包、单地址模型,使得呈现此类问题的概率大大下降(该使用的开发者自己乃至或许都不知道Bitcoinj会有这么多问题),开发者挑选的处理方案是呈现问题时重置区块链数据(ResetBlockchain)。
  几个月前曾经发生过的MultiBit找零地址私钥丢掉的问题,开发者Jim618也挨了不少骂,但他其实也挺冤的。您假如仔细看看代码就会发现,程序本身是完全不会发生私钥丢死的情况的。问题就在于,该用户有许多钱包文件,每个钱包文件又有许多地址,每个地址上的买卖应该也不少,这就会放大各种问题呈现的概率,由于会有更多、更慢的钱包文件全读、全写操作,以及频繁的修复数据和偶然呈现的ResetBlockchain操作,这其实才是导致此灾祸的本源。
  Jim618的终究处理方案是在新版MultiBit中提供了一个检测私钥的功用,咱们团队则是在比太钱包v0.0.8及之前的版别中将加密后的私钥在手机ROM中额外备份一份,以保证用户的私钥安全,这都是不得不做的权宜之计。
  由于Bitcoinj的架构会导致严峻的功用问题,而功用为题又会导致许多“莫名其妙”的过错,小概率事件下乃至有或许会导致“灾祸”,终究咱们决定,从头规划并开发Bitherj。
  Bitherj的架构是联系模型的(根据SQLite数据库引擎)、更安稳、更牢靠、更高功用的Java言语比特币协议库,咱们会尽或许坚持它与Objective-C言语版别的Bitheri坚持一致,而且不断改进和发展这两个库。
  假如您也是一位比特币钱包开发者,在根据Bitcoinj开发时遇到了许多乖僻问题,无妨与咱们团队联系,咱们在Bitcoinj上所纠结过的“坑”乃至比Jim618还要多,您所遇到的问题咱们应该早就遇到、并尝试处理过,咱们团队之前的经验应该能对您有所协助。
  假如您是位普通用户,您应该了解修复买卖数据和重置区块链发生的原因,并保管好您的私钥。毕竟关于比特币来说,私钥意味着一切。
  感谢您的阅览!
  比太钱包团队

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注