日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

比太錢包為什么從 Bitcoinj 切換到了 Bitherj ?比太錢包從 Bitcoinj 切換到了 Bitherj原因是什么?

比太錢包安卓版從v0.0.9開始不再基于Bitcoinj,而是使用了我們自行開發(fā)的Java語言比特幣協(xié)議庫Bitherj 。這其實(shí)是個很無奈的選擇,我們也不想“重新發(fā)明輪子”,不過沒辦法,因?yàn)椤癟oo Fragile!”(借用Mike Hearn對bitcoind的評價),我們不得不開發(fā)一套全新的Bitherj來更好的為比太錢包用戶提供服務(wù),這很辛苦,但卻值得 。

比太錢包為什么從 Bitcoinj 切換到了 Bitherj ?比太錢包從 Bitcoinj 切換到了 Bitherj原因是什么?


Bitcoinj的問題如下:
1. 架構(gòu):
對于SPV輕錢包模型來說,普通用戶并不關(guān)心整個區(qū)塊鏈上的全部交易,而只關(guān)心與自己相關(guān)的(和依賴的)比特幣交易 ?;谝稽c(diǎn),在設(shè)計輕錢包架構(gòu)時,應(yīng)更多的考慮使用關(guān)系模型而非序列化模型存儲數(shù)據(jù) 。
但Bitcoinj并沒有這么做,Bitcoinj的架構(gòu)中,無論是緩存的區(qū)塊鏈SPV頭文件,還是錢包文件,都使用了谷歌自己的序列化方式進(jìn)行讀寫,這其實(shí)是導(dǎo)致很多問題的根源 。
2. 性能:
由于Bitcoinj的架構(gòu)設(shè)計,使得所有錢包文件的讀寫都必須是通過谷歌的序列化方式全讀、全寫,這對于只有一個錢包、一個地址且交易很少的用戶來說可能還好(出問題的概率會低得多),但對于有多個錢包、多個地址的用戶來說,就可能會成為性能“災(zāi)難”,錢包越多、地址越多、交易越多,就越是災(zāi)難 。
另外,由于Confidential模型的設(shè)計,使得在每一個新塊到來的時候,所有錢包所有地址上的所有交易都需要進(jìn)行更新,哪怕這個新塊與任何一個地址上的任何一個交易都無任何關(guān)系,都需要把所有的錢包文件序列化的讀到內(nèi)存中,更新完所有的條目,再序列化的寫回文件,這就是Bitcoinj性能問題的根源 。
3. 錯誤:
因架構(gòu)不合理所導(dǎo)致的性能問題,如果結(jié)果僅僅是性能較差,那還算是在可以忍受的范疇 ??蓡栴}就在于,這種性能瓶頸可能會導(dǎo)致Bitcoinj的各種運(yùn)行錯誤,某些情況下,甚至?xí)霈F(xiàn)“致命”的后果 。
正因?yàn)橐庾R到了嚴(yán)重的性能問題,Bitcoinj的作者不得不妥協(xié)的設(shè)計了兩套獨(dú)立的寫文件線程,一套高優(yōu)先級的寫線程用于寫入那些比較重要的數(shù)據(jù)(比如通過廣播收到了新交易等),一套低優(yōu)先級的寫線程用于延時同步各個錢包文件與SPV區(qū)塊頭文件 。
這使得Bitcoinj的錢包文件讀寫非常容易出錯,經(jīng)常是錢包文件與塊頭不一致,錢包文件內(nèi)的交易之間狀態(tài)不一致,各個交易的各種狀態(tài)都頻繁的處于正確、錯誤的來回切換之中,這次寫文件沒準(zhǔn)給寫對了,下一個延時的寫操作沒準(zhǔn)又給改錯了 。
此類問題,對于開發(fā)人員來說是非常頭疼的,因?yàn)槟阃耆珶o法依賴某一個值是否可靠,你只能盡可能的用其它方式來判斷錢包的狀態(tài)、交易的狀態(tài)是否正確,如果發(fā)現(xiàn)不正確,再想方設(shè)法的用繞過Bitcoinj的方式去修改數(shù)據(jù)甚至是重置區(qū)塊鏈數(shù)據(jù)(ResetBlockchain) 。
大部分人對于上述問題可能完全沒有任何概念,但MultBit的開發(fā)者Jim618應(yīng)該和我們團(tuán)隊(duì)一樣,對這些問題深有感觸 。如果您閱讀過一些MultiBit的代碼或者比太錢包安卓版v0.0.8之前的代碼,就會發(fā)現(xiàn),我們都寫了很多方法,專門用來繞過Bitcoinj中可能存在的缺陷,而這些缺陷都是明確的、可復(fù)現(xiàn)的、但卻幾乎不可能在Bitcoinj的架構(gòu)上解決的(我們團(tuán)隊(duì)從MultiBit上借鑒了很多,特此感謝) 。
MultiBit和比太都采用了非常多的迂回手段盡可能避開Bitcoinj中的架構(gòu)陷阱,雖然已經(jīng)能夠在大部分情況下解決很多問題,但還是不能根治 。而另一個基于Bitcoinj的安卓手機(jī)錢包Bitcoin-Wallet,因?yàn)樗膯五X包、單地址模型,使得出現(xiàn)此類問題的概率大大降低(該應(yīng)用的開發(fā)者本人甚至可能都不知道Bitcoinj會有這么多問題),開發(fā)者選擇的解決方案是出現(xiàn)問題時重置區(qū)塊鏈數(shù)據(jù)(ResetBlockchain) 。

推薦閱讀