當前位置:編程學習大全網 - 源碼破解 - 關於比特幣的謎題(完結)

關於比特幣的謎題(完結)

妳可曾想過: 為什麽礦機算力越大越好?(既然是解數學題那為什麽不是拼誰的算法厲害啊餵!) 比特幣的數量總和為什麽是2100萬? 比特幣盜竊是怎麽回事? 我不玩比特幣,就真的與比特幣無關了嗎…… ?

關於大眾不再感到陌生的比特幣,背後還有許多巧妙之處。本文介紹了比特幣的基本原理和主要原則,並結合對部分技術細節的剖析,來對上述的壹些疑問作出解答。全文較長,約7000字,閱讀時間約為22分鐘,建議收藏後閱讀?

文章可以分成以下幾個部分:

* 比特幣先驗知識

-- 密碼學相關

-- 比特幣重要概念

* 交易的生命周期

* 區塊鏈的構成

* 區塊鏈的生長

?-- “挖礦”的數學本質

?-- “礦工”的收益

* 比特幣的***識機制

? -- 比特幣的去中心化***識

? -- “最長鏈優先”原則

* 比特幣安全性

比特幣作為第壹個去中心化的數字貨幣,其設計中運用了不少的密碼學相關知識,主要包括非對稱加密技術、哈希函數等等。理解這些密碼學知識,能幫助我們更好地理解比特幣中的壹些概念及規則。

以下是比特幣的壹些定義及概念解說,了解過的小夥伴們可以直接跳過~

在比特幣這個創新的支付網絡中,壹個交易的生命周期大概可以分為幾個階段:創建、傳播和被驗證交織、被打包進區塊記錄到區塊鏈中、獲得更多的確認。圖1對這幾個階段做出了示意。

註:

1?壹個支付方A在發起壹個比特幣交易時,會使用自己的私鑰對交易信息的哈希值進行簽名。因此A向全網廣播的內容除了交易信息之外,還有自己的公鑰信息、對消息的簽名。其他礦工只要利用A的公鑰即可對這個交易進行驗證,判斷是否真的由A創建。

2?”交易傳播和交易驗證“交替意味著 各個節點基於壹定的規則獨立驗證每個交易(***識基礎1) , 壹個節點只有認為這個交易有效才會把它繼續傳播出去。

比特幣的底層技術是區塊鏈。區塊鏈系統是壹種分布式***識系統,區塊鏈網絡中所有的參與節點將就交易的狀態達成壹致。

區塊鏈到底是什麽呢?妳可以把它理解成壹種分布式的交易的***享賬本,以區塊為基本單位鏈接在壹起。交易信息將被整理並打包記錄在區塊中。每壹個區塊,包含區塊頭,以及緊跟其後的交易列表。區塊頭包含3個區塊元數據集合:前序區塊哈希(嚴格來說是前序區塊頭哈希,因為只有區塊頭被用於哈希運算)、元數據集(包括難度、時間戳、隨機數等)、壹個基於加密哈希來高效概括區塊中所有交易的默克爾樹(merkle tree)。了解這個結構,將幫助我們更好地理解挖礦的數學本質。

妳可能聽說過“挖礦”這個詞,或者聽說眾人爭相購買挖礦機器來發家致富。但讓人疑惑的是:都說打包區塊的本質是解數學難題,但單憑那些看似簡陋的機器嗡嗡嗡瘋狂耗費電力,就能確保自己解出比特幣難題的勝率高了嗎?比特幣技術原理中,礦工們解決的數學題,難道是壹個暴力破解題?

看了壹圈,發現礦工們解決的題,還真有點暴力破解的意思,每次嘗試解題的過程幾乎都是茫茫然、去碰運氣的。拼的是誰足夠幸運,也拼誰算的足夠快;算的快了麽,試錯次數多,自然勝算也就大了。

解題的背景是這樣的—— 挖礦節點通過基於工作量證明算法(Proof-of-Work,POW)的證明運算,獨立將交易匯聚到新區塊中(***識基礎2)。 當礦工從網絡中接收到壹個新的區塊的時候,他發現自己已經在上壹輪競爭中失敗了,所以立即開始新區塊的挖礦過程。為了創建壹個新的區塊,他從內存池中選擇交易來填充區塊(加入區塊的第壹筆交易是壹個“鑄幣交易”,3.2節會給出詳相關細節)。接下來是填充字段來創建區塊頭(包括前序區塊的區塊頭哈希、交易的默克爾樹(Merkel樹)、時間戳、難度目標值、隨機數),然後開始計算這個新區塊的工作量證明。

這個計算的過程簡單來說是對區塊頭部進行兩次sha256運算,得到壹個RESULT,如果這個RESULT滿足特定要求,這個人才能算是算對了、才有權利去記賬。滿足要求的RESULT被稱為“工作量證明”(中本聰論文中稱為“proof of work”)。

關於這個計算過程,強調以下幾點:

第壹,區塊頭部,包含了前序區塊頭部的哈希、本區塊交易信息的默克爾樹、時間戳、難度目標值、隨機數等信息(見圖2)。

第二,哈希運算具有“知道y,無法推出使得h(x)=y成立的x”、“即使輸入只改變壹點點,輸出也會差很多”、“利用任意長度的數據作為輸入,生成壹個固定長度的確定結果”的特性。所以大家也不知道什麽樣子的輸入才能產生自己想要的結果,礦工只能不斷嘗試。

第三,前面說到,區塊頭哈希值需要滿足壹個特定要求才能成為工作量證明——小於某壹閾值,或者說哈希值含有給定前綴。閾值的大小求和挖礦難度有關:挖礦難度是壹個動態參數,其值越大,則閾值越小,說明哈希值符合要求的概率更小,礦工每次計算能成為工作量證明的概率越小。比特幣有壹個自我調節過程——通過對現有的挖礦算力情況進行估算,來對應調整挖礦難度,可以保證區塊鏈每十分鐘出壹個塊,達到控制發行速度的目的。(這個過程的基本思想類似產品筆試的數據估算題,根據“壹個提供、壹個需要“的思路去構造壹個等式,然後求解等式壹邊的壹個因子;想了解挖礦難度系統和調整方式的同學可以進壹步查閱~)

綜合以上三點來看,為了產生工作量證明,用戶基本上會通過調整隨機數來碰運氣(因為其他字段基本不變)、進行多次運算直至符合要求,別無他法。如此壹看,隨機數就具有“幸運數字”的意味了。因此,平均來講,誰計算的能力越強(嘗試的次數越多),就更有希望打包塊。

妳可能會想,礦工這麽心甘情願地消耗算力去維護區塊鏈,是受到怎樣的利益驅使呢?簡單來說,礦工的收益來源有二:1、計算出工作量證明,創造壹個新區塊所獲得的新幣獎勵;2、記賬礦工費。

當礦工找到工作量證明、打包壹個新區塊,並把區塊傳送給他的所有對等節點。 每壹個挖礦節點都獨立驗證新區塊、把合格的新區塊整合進區塊鏈(***識基礎3) ,並把這個區塊繼續傳給自己的對等節點。結果是,只有經過驗證的區塊才會在網絡當中廣泛傳播,保證了誠實礦工挖出的新區塊能被區塊鏈所接納。挖礦成功的個體節點或集體節點,可以同時獲得新幣獎勵和記賬礦工費。

新幣獎勵類似於貨幣的發行,其遵循規則是,第壹個四年每壹個新區塊產生50btc,第二個四年每壹個新區塊產生25btc,第三個四年每個新區塊產生12.5btc,如此周期指數遞減。按照等比數列求和可知,到2140年,比特幣產生的總和約為21000000(所以說比特幣數量有限,天生緊縮)。屆時,不再隨區塊的產生增加新的比特幣,礦工不再擁有第壹項收益。但現實中,由於挖礦成本高昂,挖礦成功的往往是是壹個礦池的所有參與者。收益被分給礦池地址,礦池按照組內算力貢獻比例來分攤收益的。

記賬礦工費又稱交易費用,以交易輸入和交易輸出之間的差值的形式存在;壹個區塊的總交易費用是對加入區塊的所有交易的(交易輸入-交易輸出)求和。壹般來說,礦工費越高的交易,會越快被處理。而礦工費在這裏起到兩個作用,壹個是獎勵礦工,另壹個是防止主鏈濫用(防止大家發送交易垃圾信息,因為提出交易是有壹定代價的)。

礦工的收益以什麽樣的形式被驗證呢?這裏不得不提到 “鑄幣交易” 。每個計算機節點在進行工作量證明計算之前加入區塊的第壹筆交易,正是“鑄幣交易”。這個交易從無到有生成比特幣,其金額是新幣獎勵與記賬礦工費的總和,被支付到挖礦礦工自己的比特幣地址。如果礦工找到了壹個工作量證明使區塊有效,他就贏得了這個獎勵,因為他構造的“鑄幣交易”生效了。

關於鑄幣交易和“新幣獎勵”,之前有壹個讀者問我:壹個礦工把自己挖到新區塊的消息公布出去,他的工作量證明 不會被別人剽竊 嗎?

個人認為,至少“鑄幣交易”能防止這件事情發生。讓我們來重申壹下計算工作量證明的過程——壹個礦工E在新區塊裏加入了獎賞自己的“鑄幣交易”,並利用時間戳、前序區塊頭哈希、隨機數、本區塊交易的merkle樹等信息計算出壹個符合要求的工作量證明。

在這個過程中,merkle樹啥樣子,取決於包括“鑄幣交易”在內的本區塊所有交易信息。因此可以把鑄幣交易視為工作量證明的間接變量之壹。那麽,即使其他人拿到了E的工作量證明,這個工作量證明也是帶有E的印記的、與獎賞E的鑄幣交易相關的,別人根本無法納為己用。

妳還可以通過設想以下的場景來加深對***識基礎2“挖礦節點通過基於工作量證明算法的證明運算,獨立將交易匯聚到新區塊中”的理解。

為什麽壹個挖出新區塊的礦工不悄悄使個心眼,在創建區塊之初就把鑄幣交易的金額設成1000BTC呢?原因在於每個節點都是基於相同的規則來獨立驗證區塊的。礦工必須創建完美的、符合公***規則的、正確依據工作量證明方法的區塊;而壹個無效的鑄幣交易會導致整個區塊無效,並被其他節點拒絕,永遠無法成為賬本的壹部分。可以預想,為了生成這個工作量證明,礦工們已經投入了巨大的算力和電量去挖礦,如果涉嫌欺詐而被否決,其為挖礦付出成本都付諸東流。

綜上所述,礦工不能冒領他人的獎勵,而拿到獎勵的礦工也必須只能拿取符合規定的數額。

比特幣的卓越之處,在於建立了壹種去中心化的自發***識。這種***識是自發產生的,是成千上萬在網絡中遵循著***同規則的節點,在異步交互中形成的,不依賴於任何中央機構的調解和幹涉。

關於比特幣的4項主要***識基礎,本文在講解對應細節時有提及,下面做壹個整合:

?這四個過程相輔相成、互相作用,形成了自發的全網***識,促使全網節點組合出可信、公開、權威的總賬。?

妳可能會想,比特幣是壹個去中心化的、基於大眾信任的、依靠眾人力量運轉的壹個東西。萬壹有壹部分礦工被壞人收買了咋辦呢?“51%攻擊”指的又是什麽?比特幣交易所要求的“6個確認”又是怎麽回事?

這裏首先要提到比特幣的壹個規則“ 最長鏈優先 ”。意思是, 比特幣的賬單鏈在出現分叉的時候,每個礦工會獨立選擇長(累積了最多工作量證明)的鏈條,在上面繼續挖礦工作(***識基礎4) 。

這個原則主要涉及到兩個問題:

當有兩個礦工A和B同時挖礦成功(算出符合要求的數學答案)時,他們分別把自己計算出來的工作量證明作為下壹個塊的前序區塊哈希,生成壹個塊銜接到原有的鏈後面,由此出現了兩個分支。

這個時候,這兩個成功的礦工廣播了自己打包成功的消息。由於區塊鏈是壹個去中心化的數據結構,區塊消息到達不同節點的時間點不壹致,故不同的節點可能擁有不完全壹樣的區塊鏈視圖——有的礦工會先收到A的消息,有的則先收到B的消息。為了解決這個問題,收到消息的礦工們遵循壹個原則:選擇並嘗試延長最長的鏈。

因此,這兩條分支會各自成長壹小段時間,直到他們的長度出現差異(不可能長度壹直相同),比如說其中壹條鏈的礦工們,更快地打包在支鏈後面又加上壹塊。按照“最長鏈優先“的規則,較短的鏈會被拋棄,原本工作在短鏈上的礦工們都回到長鏈上工作。

換言之,分叉只是不同節點暫時的不壹致現象,當新區塊被加入到其中某壹分支時,最終收斂將解決這壹個問題。[讀者可以思考壹下,為什麽區塊鏈被設置成每十分鐘挖出來壹個塊:如果時間短了,是不是就增加了分支產生的次數?如果時間長了,是不是交易結算的效率就太低了?]

雙重支付的本質其實也是區塊鏈的分叉,但這種分叉卻是“非自然惡意蓄謀”的產物。

我們假設小敏是密謀雙重支付的壹方,她把自己僅有的10BTC先給小強、交換壹塊黃金,待這條交易信息P被打包進區塊Q後,她從小強手中拿到了黃金。這時,小敏使了個心眼,她想偷偷抹去、篡改區塊Q上的交易信息P,“白嫖”這塊黃金。為了實現這樣的目的,根據“最長鏈優先”法則,小敏必須剔除該筆交易P後、重新進行結算工作,集中算力來形成分叉,並讓分叉以更快的增速超過並取代Q所在的主鏈。如果小敏確實能讓分叉更長,分叉就成為了主鏈,其他節點也會轉向新主鏈上繼續工作。這樣,小強付出了黃金,卻沒有收到這10個比特幣,“賠了夫人又折兵”。

在這個過程中,小敏需要和原鏈進行“抗爭”,使新分叉成為最長的主鏈,這被稱為“***識攻擊”。“***識攻擊”本質上是對下壹區塊的爭奪,攻擊方越“強壯”、哈希算力越大,就越容易成功。

“***識攻擊“成功的可能性有多大呢?

大多數比特幣交易所規定,壹個交易傳送到區塊鏈上後需要6個「確認」來完成驗證該筆交易。這壹規定的根據是,假設意圖造假的礦工擁有10%的算力(挖礦成功概率0.1),那麽造假礦工要構造另壹條偽鏈實施長度超越,必須至少成功挖礦6次。那麽原鏈被取代、被拋棄的概率約為0.1的6次方,趨近於0。妳可以把比特幣理解為地質構造層,表層可能因為季節變換而有所改變,甚至可能被風刮走,但壹旦深入到地下,地質層就能更加穩定、不受幹擾。

而假設有壹群擁有了51%算力的礦工,他們控制了壹半以上的全網哈希算力,可以故意在區塊鏈中制造分叉、進行雙重支付交易 。但事實是,全網哈希算力的大量增加,個體礦工幾乎不可能控制哪怕1%的哈希算力了(但礦池帶來的算力集中化控制,存在壹定的風險)。更何況,如果真有擁有如此強大算力的組織,他完全可以憑借自己強大的算力投入到挖礦中去獲取開發新區塊所獲的的比特幣獎勵,誠實挖礦比雙花更有利可圖。

盡管實際上並未出現51%攻擊的問題,但不可否認的是,算力的集中違背了比特幣去中心化這壹初衷,並成為其繼續發展的壹大隱患。

壹個系統的安全性,往往取決於系統安全的最薄弱環節,這也就是所謂的“木桶原理“。與區塊鏈系統相關的安全性問題包括但不限於以下幾項:

(1)在區塊鏈上被廣泛使用的公鑰系統基本上是安全的,但量子算法在理論上能夠破解公鑰系統;因此,區塊鏈的算法安全性是相對的。

(2)區塊鏈協議本身存在邏輯缺陷,例如受到黑客攻擊的區塊鏈系統***識機制。

(3)所有數字貨幣系統高度依賴私鑰,私鑰在存儲、使用方面的安全性成為區塊鏈系統安全性中至關緊要的壹環。

盡管區塊鏈是去中心化系統,但目前絕大多數數字交易所卻是中心化的,存在著人為安全漏洞及技術安全漏洞。這些數字交易所擁有存放大量加密貨幣的私鑰,這對於黑客來說無疑是最矚目的目標;只要黑客偷走了這些私鑰,就可以獲取到這些加密貨幣。

作者會繼續閱讀相關資料、不斷完善本文,目標是完成壹篇通俗易懂的比特幣科普文章。:)

**本文系網上信息與個人理解的結合,如有偏差及誤讀,歡迎讀者指出。也歡迎給出關於文章結構上的指導~

  • 上一篇:男生和女生壹起互動的遊戲
  • 下一篇:小學生長度單位換算表
  • copyright 2024編程學習大全網