比特幣網絡是中本聰做爲一個實驗性的網絡提出來並運行的。沒想到的是這一個實驗性質的網絡,竟然成了如今虛擬貨幣世界的龍頭老大。這個結局估計是中本聰本人都沒有想到過的。java
既然是一個實驗性的網絡,那麼比特幣網絡中又隱藏着哪些痛點呢?快來看看吧。程序員
比特幣網絡是基於P2P架構的。在整個比特幣網絡中可能有成千上萬的節點。算法
那麼問題來了,這麼多節點的網絡,還會受到攻擊嗎?會受到什麼類型的攻擊呢?spring
下面講三種攻擊方式方式:安全
「自私的礦池」還必須監視其它礦池,預測他們何時發現新的區塊。當」誠實的礦池」廣播發現一個新塊的時候,」自私的礦池」還必須發動一個Sybil Attack(女巫攻擊)以搶先讓他們偷挖的區塊獲得網絡的認可。區塊頭固然有時間戳,」自私的礦池」還必須有足夠的Sybil節點來報告是」自私的礦池」先發現區塊,這樣網絡會接受報告並獎勵」自私的礦池」。網絡
若是這個時候網絡接收到大量的小額交易,那麼那些真正的大額交易就會被阻塞。架構
更多精彩內容且看:分佈式
空塊的意思就是塊中不包含任何交易。spring-boot
那麼空塊是怎麼產生的呢?假如咱們有兩個A,B礦池。區塊鏈
A礦池產生塊後,把新塊傳遍全網是須要時間的。
B礦池收到A礦池新塊的基本數據後,爲充分利用算力,不等新塊裏的交易數據傳完,就開始算下一個塊了。
在傳輸交易數據的期間,B礦池有必定機率算出下一個塊,這時候B礦池不知道哪些未確認交易已經被A礦池打包進前一個塊,爲避免打包了同一個交易,致使交易衝突,塊被拒,B礦池就不會打包任何交易。
這就是空塊的來歷。
若是你們去查看比特幣區塊鏈的歷史,能夠發現(從區塊364188到345469)一共18720個區塊,其中只有1個交易(即coinbase交易)的有422個。
比特幣區塊鏈是全球的、分佈式的、有限容量的、代價昂貴的系統。每一筆交易的價值含量是不同的,當塊容量不夠用時,咱們應該保障高價值的交易進塊。高價值的交易有意願有能力支付足夠高的網絡手續費,從而得到足夠高的優先級進塊。
隨着比特幣的繁榮,交易數量會愈來愈大,有限的塊容量會使得低價值的交易(例如發送1分錢)永遠沒法進塊,由於低價值的交易不可能支付高網絡手續費。
進而網絡退化爲清算系統,低價值含量交易被趕出,這些交易由第三方記帳系統進行代替完成。
在閃電網絡出現以前,第三方記帳系統主要是鏈外錢包提供商。用戶信任某第三方錢包平臺,把比特幣存入其中,同一平臺用戶之間轉帳僅帶來帳戶餘額變動,並不會產生比特幣交易。
現金系統意味着全部交易均應該進入區塊,那麼當塊容量不夠用時,則應該及時提升塊體積限制,對系統進行擴容。短期可能發生交易入塊堵塞,但長期來看全部交易應該都可以入塊。人人都享有比特幣系統帶來的巨大便利和優點。
爲了解決區塊鏈容量的問題,比特幣在2017年8月24日引入了隔離見證。
再來回顧一下上圖的比特幣中區塊鏈中交易的構造。
每一個交易的的input中都包含了一個ScriptSig,這個ScriptSig主要是用來作交易驗證的,只對須要驗證交易的礦工來講是有意義,對於普通用戶來講這個ScriptSig是徹底不須要的。
而隔離見證就是把這個ScriptSig剔除到了交易以外。從而擴大了可容納的交易數量。
同時把ScriptSig剔除到了交易以外還有一個好處就是避免了交易延展性攻擊(Transaction Malleability)。
延展性的意思是一個東西變形了,但其本質是不變的。對於交易來講,ScriptSig中包含的簽名,實際上是能夠變化的。從而致使整個交易的變化,最後致使Transaction ID的變化。
由於Transaction ID是對整個交易作的一個Hash。
爲何簽名是能夠變化的呢?
由於對某一種簽名算法來講,可能有好幾種簽名方式,從而多種簽名方式都是正確有效的簽名。可是最終會致使交易id的變化。
假設有這樣一種狀況。 小明在火幣網發起了一筆提現交易。當這筆交易被廣播到網絡中,而且尚未被打包到區塊中的時候。
小明監聽到了這個交易,並對這個交易的簽名作了微調,從而生成了一筆新的交易,發送到比特幣網絡中。
最終比特幣網絡接收了小明修改過的交易。
可是,這個時候小明能夠向火幣網投訴沒有收到交易。火幣網的客服會根據以前的交易id去查詢這筆記錄,固然是查不到的。最終火幣網會賠償小明一筆費用。因而,小明就攻擊成功了。
比特幣的區塊鏈大小是一直在增長的,其實不光是比特幣,全部的區塊鏈網絡都會存在這個問題,由於每一個區塊鏈的節點都須要保存全部的鏈上信息。
咱們看下區塊鏈的大小,2020年,一個全節點的大小就會超過250G!
對於比特幣而言,挖礦自己就是一種投票,本來的構想就是以CPU爲單位用算力進行投票來確保系統的安全。可是隨着「聰明」的技術人員們將CPU換成GPU,而後到FPGA,再到ASIC礦機,這條路已經和原來的初衷漸行漸遠。
任何一個在比特幣社區的人都會發現,持有比特幣的人和挖礦的人成爲徹底不一樣的兩我的羣。比特幣的礦工羣體彷彿已經和社區徹底割裂開來,許多礦工可能徹底不瞭解比特幣的生態,他們甚至不關心比特幣的將來。
因此每一年均可以看到一些奇怪的景象,持有比特幣的社區不得不經過譴責和呼籲,要求某些礦池把算力降下來,以避免嚴重影響比特幣的發展。
而這些礦池也會表示本身是基於道德和覺悟來下降本身的份額。任何一個持有比特幣的人,難道不對這種景象感到怪異麼,比特幣的命運居然是掌握在並不必定關心比特幣命運的人手上。
這彷佛有點相似於,一個公司的命運並非那些持有公司股份的股東來決定的,而是那些有可能根本不擁有股份,而只要有錢的人來決定的,也就是金融世界中的那些「門口的野蠻人」。那些持有比特幣的人徹底沒法對比特幣的將來作出本身的決定。咱們彷彿從中本聰設定的一CPU一票的文明世界,一會兒淪爲純粹是靠蠻力,看誰力氣更大的原始社會。
比特幣在發展初期主要是依靠以中本聰爲核心的技術團隊制定相關技術標準和研發比特幣錢包。可是隨着中本聰退出比特幣界,這方面的任務就逐漸轉移到比特幣基金會。
比特幣基金會是一個負責協調比特幣發展的非營利機構。他們除了負責開發比特幣錢包以外,還參與推廣比特幣理念和應用、教育市場以及和政府溝通等事項。因爲基金會自己是非營利機構,只能依靠捐款來運做。可是比特幣世界上大量的資金都投入到礦機中,而開發者很難從比特幣發展中獲利。
開發者每每面臨一個兩難的困境,因爲比特幣已經在全世界得到必定程度的承認,它的客戶端被全球幾百萬人在使用,可是它的早期核心開發者已經不知所蹤,讓後續的開發者不敢改動核心代碼,只能在外圍作一些修補。由於一旦修改核心代碼,任何的小問題均可能引發全球比特幣網絡的癱瘓(這在比特幣發展過程當中已經出現過),而沒有太多的開發者願意承擔這樣的風險。可是若是可以改動成功而且穩定運做,開發者除了得到社區的掌聲以外,並不能得到任何實際上的利益。
而且是否使用新版本客戶端的決定權在比特幣礦工的手上,因此任何對礦工不利的修改都不可能經過,即便比特幣基金會也無能爲力,因此也致使開發者沒有足夠的熱情去修改。在這種狀況下,比特幣客戶端在發展了多年以後仍是停留在很是原始的狀態,不只不適合普通人使用,並且徹底不像一個互聯網時代的軟件。中本聰本來設想的社區衆多開發者不斷修改系統,出現像Linux同樣,經過社區協力來推進系統順應時代發展的狀況並無出現。
那麼對於區塊擴容的問題,其實如今已經有了兩個比較好的解決辦法。
第一個就是閃電網絡:
閃電網絡能夠看作是一個臨時記帳系統,好比說A和B直接有不少的交易,那麼他們能夠先在區塊鏈中構建一個通道。
後面全部的交易都在這個通道中進行(能夠經過智能合約的形式),只有通道關閉的時候,二者的交易纔會正式更新到比特幣網絡中。
這樣就爲A和B節約了很多的交易費用。
還有一個叫作側鏈技術
側鏈技術其實是在比特幣網絡以外又構建了一個鏈。比特幣網絡只作清算使用。
固然,爲了解決比特幣的問題,第二代甚至是第三代區塊鏈技術平臺都出現了。感興趣的朋友能夠繼續關注我後續的更新。
本文介紹了區塊鏈網絡中的困境和一些解決辦法,但願你們可以喜歡。
本文做者:flydean程序那些事本文連接:http://www.flydean.com/bitcoin-in-trouble/
本文來源:flydean的博客
歡迎關注個人公衆號:程序那些事,更多精彩等着您!