區塊鏈系列教程之:比特幣的問題

簡介

比特幣網絡是中本聰作為一個實驗性的網絡提出來並運行的。沒想到的是這一個實驗性質的網絡,居然成了現在虛擬貨幣世界的龍頭老大。這個結局估計是中本聰本人都沒有想到過的。

既然是一個實驗性的網絡,那麼比特幣網絡中又隱藏着哪些痛點呢?快來看看吧。

攻擊比特幣網絡

比特幣網絡是基於P2P架構的。在整個比特幣網絡中可能有成千上萬的節點。

那麼問題來了,這麼多節點的網絡,還會受到攻擊嗎?會受到什麼類型的攻擊呢?

下面講三種攻擊方式方式:

  1. 共識攻擊(51%攻擊): 如果一個人的挖礦算力,超過了全網算力的51%,就可以隨意決定虛擬貨幣網絡區塊的內容,比如撤銷交易或者製造虛擬交易等等,這意味着,整個虛擬貨幣的網絡就此崩潰,所有虛擬貨幣的資產將掌握在這個持有51%算力的人手裡。

  2. 自私挖礦攻擊: 所謂自私挖礦,是指當一個」自私的礦池」挖到新的區塊,在必須提交到網絡節點之前,他們一直私下保存。該理論的依據是」自私的礦池 「保持了區塊的私密性,讓其餘的網絡算力浪費資源去挖掘,這樣」自私的礦池」在挖下一個區塊的時候就取得先機。

    「自私的礦池」還必須監視其它礦池,預測他們什麼時候發現新的區塊。當」誠實的礦池」廣播發現一個新塊的時候,」自私的礦池」還必須發動一個Sybil Attack(女巫攻擊)以搶先讓他們偷挖的區塊得到網絡的承認。區塊頭當然有時間戳,」自私的礦池」還必須有足夠的Sybil節點來報告是」自私的礦池」先發現區塊,這樣網絡會接受報告並獎勵」自私的礦池」。

  3. 服務拒絕攻擊: 大量發送小額交易,擁塞網絡。我們要知道比特幣網絡的處理能力是非常非常弱的。每10分鐘出一個塊,一個塊的大小是1M(當然,現在搞了個隔離見證好像容量提高了),塊的大小有限,最終導致塊中的交易是有限的。從而就限制了比特幣網絡的交易處理速度。

    如果這個時候網絡接收到大量的小額交易,那麼那些真正的大額交易就會被阻塞。

空塊問題

空塊的意思就是塊中不包含任何交易。

那麼空塊是怎麼產生的呢?假如我們有兩個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程序那些事

本文鏈接://www.flydean.com/bitcoin-in-trouble/

本文來源:flydean的博客

歡迎關注我的公眾號:程序那些事,更多精彩等着您!