編者注:這么說可能更順一點。在設計上,(除了第一個區塊)每個區塊都必須指定自己要承接的上一個區塊;結合著這上一個區塊的內容,我們可以用密碼學哈希函數設計出一種計算難題:要求通過改變輸入來使得哈希函數的結果符合一定的形式要求(比如小于某個值)。因為哈希函數的結果是隨機的,而且在計算上是單向的(不可能通過 y 反推出 x),因此,找出符合要求的解的唯一方法就是暴力運算。找出了這樣的一個解之后,找到解的節點就可以廣播相應的區塊、要求其它節點接受了。
而上面這個 “10 分鐘”,即是比特幣的 “區塊間隔”(或者說 “出塊時間”)。不同的區塊鏈往往有不同的出塊時間。
關于密碼學哈希函數,可看:《Emoji 表情帶你秒懂哈希函數》
這時,可能會有善于提問題的同學舉起小手手問:要是碰到兩個節點同時解決了問題,并把他們的塊都發送到網絡,這時可怎么辦?
在這種情況下,兩個區塊都廣播到網絡中了,其他節點就在自己先收到的區塊上開始繼續加塊。但是,比特幣協議要求每一個節點都在其可見的最長鏈上加塊,因此,若不清楚哪一個是最新區塊(兩個塊同時被挖出),一旦某一個區塊后面的區塊得以挖出,根據最長鏈規則,該問題即可解決。
-圖 7. 鏈頂端的模糊性解決邏輯-
由于同時挖出區塊的可能性很低,也幾乎不可能在每一個高度都有多個區塊同時挖出。所以,整個區塊鏈就會在一條每個節點都同意的鏈上迅速穩定下來。
但 “哪個區塊是區塊鏈的頂端” 的分歧又給了詐騙者可乘之機。如果交易恰好在非最長鏈中(如圖 7 的區塊 B),一旦(最長鏈)挖出了下一區塊,在該區塊中的這單交易和其他交易將復歸為 “未確定的交易(狀態)”。
數學競賽保護著在比特幣區塊鏈的系統中的交易,簡言之,每個攻擊者無疑都在單挑整個網絡。
讓我們來看看這個例子,瑪麗是怎么利用鏈條頂端的模糊性進行 “雙花攻擊” 的?,旣愞D一些錢給約翰,約翰知道后就發貨給瑪麗。因為節點總采用最長鏈規則來確認交易,所以,如果瑪麗能夠挖出一條更長的鏈,同時撤回上述交易,那么約翰就會錢貨兩空。
-圖 8. 瑪麗的 “雙花攻擊” -
那系統怎么預防這種詐騙的呢?每個區塊會引用前一區塊的區塊 ID(詳見六6)。前一區塊的 ID 也是密碼學謎題的一個元素,節點(“礦工”)要解決這個難題才能將后續區塊上鏈。因為解一個難題并把新區塊放上鏈需要大量隨機的猜測,所以預先計算一連串區塊是極其困難的。在這個數學競賽中,以一敵眾的瑪麗暫時搶先放置了下一個區塊,不過,離她的如意算盤還早著了――她幾乎不可能連續地解決第二個、第三個、第四個......畢竟她的對手是整個網絡呀!
如果瑪麗用跑得超級快的電腦和整個網絡杠呢?答案還是一樣滴。由于網絡上有千千萬萬個對手,不管瑪麗用的是多么多么快的電腦,瑪麗在進行雙花攻擊時,需要接二連三地解決數學題,這還真滴不太可能(可不要怪我打擊人哦)。
瑪麗需要控制全網絡 50% 的計算能力,才有 50% 可能性趕在其他節點之前解開一個區塊。即使在這種情況下,她也僅有 25% 可能性可以連續出兩個區塊。簡單地說,她需要連續出的區塊越多,她成功的可能性就越小。再敲一下小黑板――在比特幣區塊鏈系統中的交易受這種數學競賽 “護體” ,攻擊者無疑是以卵擊石。
因此,隨著時間推移,交易也會更為安全。舉個例子,那些一小時前確認并保存在區塊中的交易比十分鐘前確認的交易更加的安全。由于區塊平均每十分鐘會增加一個,那么在一小時前保存在區塊當中的交易早已確認,變得不可逆了。
-圖 9. 區塊鏈的交易安全性-
比特幣挖礦
要發送比特幣的時候,你需要引用一筆接收者為你的錢包的資金。這適用于網絡中的每一交易。
編者注:這就是所謂的 “UTXO”,即在比特幣系統中,錢不像我們的銀行賬戶那樣是以數字的形式存在的,而是以一張票據(note)的形式存在的。當你要轉賬時,你等于是要把票據拆成(或補成)一筆特定數額的票據,然后用只有提供接收者私鑰才能解鎖的方式給這筆資金上鎖。接收方日后要花這筆錢的時候也是如此:用自己的私鑰解鎖。
此文由 中國比特幣官網 編輯,未經允許不得轉載?。?a href="http://www.huohuxiazai.com/">首頁 > 比特幣行情 » 科普 | 區塊鏈的運作方式(注釋版)