鏈聞 ChainNews:

本文比較詳細的描述區塊鏈利用分佈式部署 P2P 網絡和同步更新方式,以解決傳統中心化網絡部署方式所帶來的衆多問題。並且從技術角度,具體分析瞭如數字加密、P2P 網絡等區塊鏈的核心技術。

來源 | 樂晴智庫精選

作者 | 深度行業研究

區塊鏈的出現主要解決的是傳統中心化網絡部署方式所帶來的衆多問題,包括 :

1) 交易非公開化,中心節點掌握分佈節點信息,分節點不掌握其他節點信息 ;

2) 系統安全性取決於中心節點安全性,中心節點存在道德風險,可利用大數據進行數據變現,存在隱私泄露風險 ;

3) 系統風險性隨着網絡規模擴大而上升 ;

4) 中心節點維護系統運行涉及較高成本等。

源於比特幣,區塊鏈利用分佈式部署 P2P 網絡和同步更新完成了對於以上問題的解決 :

1) 分佈式方面:

區塊鏈每個節點掌握各個節點信息,信息可以採用匿名化原則,但交易公開,且系統內交易批准取決於所有節點共識性原則,規則對於所有節點公平且強制,因此,隨着網絡規模擴大,系統風險性反而下降 ;

2) 同步更新方面:

由於每個節點都存有過去所去所有交易的歷史記錄,且每 10 分鐘交易所組成的比鄰區塊之間存在邏輯嵌套關係,故隨着時間推移,交易增多,每個節點內同步更新的鏈條愈發變長,愈發難以被篡改。

比特幣完成了區塊鏈「從 0 到 1」的誕生,比特幣區塊鏈交易簡易流程:

1) 交易定義

公共鑰匙加密 (PublicKeyCryptography)。比特幣區塊鏈 PKC 目前爲每位網絡參與者提供兩把鑰匙,一個爲其他用戶所知的公匙 (相當於用戶用戶名),一個只爲用戶自己所知的私匙 (相當於用戶密碼),任何有你公匙的參與者可以給你發送一條加密信息,該信息只有你可以讀到。

使用私匙,發信人可以在加密信息中進行數字簽名,向收信人證明發信人是你自己。KPC 採用橢圓不對稱加密技術,安全性較強。

如何發送比特幣 ? 例 : A 向比特幣區塊鏈網絡中發送一條或多條信息, A 在信息中指名發送人和收件人的地址。對於每個收件人地址,A 指名發送的比特幣數量。

A 在信息中利用私匙對信息進行數字簽名,向收件人證明身份。信息發送後,A 等待比特幣區塊鏈網絡對於信息進行驗證和確認。

2) 單節點交易覈查

A 的交易信息發送後,當比特幣區塊鏈網絡內任一節點上的機器收到了信息,其開始做以下處理 :

檢查該機器自身是否已經處理過此次交易 (確定交易唯一性); 檢查交易涉及地址是否合法有效 ; 檢查數字簽名,以確保原發信者是 Input 地址合法有效的擁有者 ; 檢查發件人這筆比特幣有沒有在別的地方被花費提取過 ; 檢查發件人比特幣數量至少是和收件人預收的比特幣數量相同 (Input>Output,任何不同差額爲手續費用)。

如果以上檢查沒有問題,節點將交易標註成有效,將其列入「未確認交易」名單。

然後將信息廣播至網絡內其它節點,網絡內衆節點開始對交易進行節點共識驗證,並在網絡中進行廣播。進行單點驗證的礦工可以獲得一小部分比特幣獲得獎勵。

3) 加入區塊,區塊創造

該筆交易被一個挖礦節點驗證,驗證成功後會被添加到區塊中。每個節點要正確無誤的給這十分鐘的每一筆交易蓋上時間戳並記入最新的區塊中,所以每個區塊包含過去十分鐘的所有交易。

4) 節點共識驗證

每個礦工節點需通過解 SHA256 的算法來競爭過去十分鐘區塊的合法記賬權,並爭取得到 12.5 個比特幣的獎勵 (該數量基本是每四年遞減一半,目前已挖出 1600 萬以上比特幣)。

若一個礦工節點解開了這十分鐘的 SHA256 難題,其將向全網公佈其這十分鐘區塊記錄的所有蓋時間戳交易,並由全網其他礦工節點核對。

5) 區塊成鏈

全網其他礦工節點核對該區塊記賬的正確性 (因爲他們同時也在蓋時間戳記賬,只是沒有競爭到合法區塊記賬權,因此無獎勵),沒有錯誤後他們將在該合法區塊之後競爭下一個區塊,這樣就形成了一個合法記賬的區塊單鏈,也就是比特幣支付系統的總賬—區塊鏈。

一般來說,每一筆交易,必須經過六次區塊確認,也就是六個十分鐘共計 60 分鐘,才能最終在區塊鏈上被承認合法交易。

比特幣區塊鏈本身是一種全球分佈式數據庫,最大的特點是沒有中央管理員,因此無法被單一方所控制,但同時可以做到交易傳輸數據的可信性。

網絡節點 (nodes) 爲礦工,負責承載網絡運輸任務,同時其負責交易的驗證以及信息記錄儲存。

個人用戶,商家等可以通過錢包和交易所形式介入比特幣區塊鏈網絡,但其不涉及區塊鏈的交易驗證和記錄儲存。

區塊鏈核心技術之一:數字加密

比特幣的所有權通過數字密鑰、比特幣地址和數字簽名予以確認,比特幣錢包中只有密鑰,不包含比特幣。

由於每筆交易需一個有效簽名才能被處理存儲,因此擁有密鑰相當於擁有了帳戶中比特幣的所有和控制權。

公私鑰爲 1 對 1 成對出現,公鑰相當於用戶名,私鑰相當於密碼,私鑰爲隨機生成的數字,通過不可逆橢圓曲線運算加密函數運算出公鑰,公鑰經過哈希函數運算得出一個比特幣地址,可公開且分享。

區塊鏈核心技術之二:P2P 網絡

擁有去中心化、抗攻擊、協助傳輸、韌性強的特點。

區塊鏈核心技術之三:區塊和鏈

挖礦流程 (1/2)

挖礦由礦工型節點共同參與,由於需要保證節點之間的同步,所以新區塊的添加速度不能太快。

因爲每個區塊的後面,只能跟着一個區塊,礦工永遠只能在最新區塊的後面,生成下一個區塊。

因此若區塊添加速度過快,就會出現剛剛同步了一個區塊並準備基於其生成下一個區塊,別的節點又有新區塊生成的情況。因此比特幣區塊鏈白皮書協議中設置故意讓添加新區塊變得較困難—平均每 10 分鐘,全網才能生成一個新區塊。

需注意,這種產出速度並非由白皮書硬性命令規定,而是通過使海量計算成爲得出有效 Hash 的先決條件,從而控制區塊產生時間約爲 10 分鐘。

目標值 (TheTarget):

解密的過程爲各個礦工在區塊頭所包含的疊加內容 (參見「區塊頭」部分) 基礎上放置隨機數字鏈 (工作量,ProofofWork),經過 SHA256 反覆計算後達成目標值。

礦工解密運算 Hash 的有效性跟目標值密切相關,只有小於目標值的 Hash 纔有效,不然則無效,必須重算。

每個區塊頭包含一個難度係數,此值決定了計算 Hash 難度。區塊鏈協議規定,使用一個常量除以難度係數 (Target=TargetMax/Difficulty),可得到目標值。難度係數越大,目標值就越小。

隨着全網算力提升,難度係數快速上升。例,第 10000 個區塊難度係數爲 14,484.16,而第 504,000 個區塊難度係數已上升爲 2,227,847,638,503.63。

爲了將產出速率恆定在十分鐘,比特幣區塊鏈白皮書內設計了難度係數的動態調節機制。難度係數每兩週 ( 2016 個區塊) 調整一次。

若 2 周內,區塊平均生成速度是 8 分鐘,就意味着比法定速度快了 20%,因此難度係數就要調高 20%; 若平均生成速度是 12 分鐘,就意味着比法定速度慢了 20%,難度係數就要調低 20%。

隨機數 (TheNonce):

隨機數爲只能使用一次的密碼數字,若礦工通過哈希運算產生了一個大於目標數的哈希值,則其需選擇隨機值重新進行計算,直到找到小於或等於目標數的哈希值。

更具體和直接解釋整個流程 (3) 挖礦流程 (2/2)

MerkleRoot 是區塊頭部分內的 Hash 值,代表了區塊體部分內的所有交易。在比特幣區塊鏈中,每筆交易產生後,都已經被 Hash 成一段代碼並廣播給各節點。

在各節點的區塊中,可能包含數百筆到數千筆的交易,因此,爲節省儲存空間並減少資源耗費,比特幣區塊鏈的設計原理採用 MerkleTree 機制,讓這些數百到數千筆的交易 Hash 值經由兩兩一組形成一個新 Hash 值的方式,不斷重複進行,直到最後產生一組最終的 Hash 值,也就是 MerkleTreeRoot,這個最終的 Hash 值便會被記錄到 BlockHeader 中,只有 32 Bytes 的大小。

MerkleTree 機制可大幅減少資料傳輸量與運算資源消耗,驗證時,只需驗證這個 MerkleTree 的 Root 值即可。

分叉和六度認證

分叉 :

區塊鏈中,每個子區塊只有一個父區塊,但當不同的礦工發現不同的區塊時 (兩個礦工同時解出了 SHA256 算法,並進行全網廣播),會出現一個父區塊暫時擁有很多子區塊的情況,這種情況被稱爲分叉。

在任何區塊裏,第一條都沒有轉出地址,就是所謂的 CoinBase (挖礦交易),沒有任何人付給礦工這筆錢,礦工只是理所應當的寫上自己獲得了 12.5 比特幣。

若所有節點皆認可礦工這樣寫,則礦工得到該筆挖礦收入。不同的礦工在填寫區塊的時候,數據一定是不一樣的,因爲每個礦工的第一條肯定不一樣,礦工只會把挖礦收入轉入自己的地址。

所以比如說礦工 A 的 CoinBase 是「 A 獲得了 12.5 比特幣」,礦工 B 的 CoinBase 是 「 B 獲得了 12.5 比特幣」。

由於每個礦工的區塊數據皆不同,所以他們解題得出的結果也是不一樣的,都是正確答案,只是區塊不同。

由於距離遠近,不同的礦工看到這兩個區塊是有先後順序的。通常情況下,礦工們會把自己先看到的區塊複製過來,然後接着在這個區塊後開始新挖礦工作。

從分叉的區塊起,由於不同的礦工跟從了不同的區塊,在分叉出來的兩條不同鏈上,算力存在差別,形象地說,就是跟從兩個鏈礦工的數量是不同的。

由於解題能力和礦工的數量成正比,因此兩條鏈的增長速度也會不一樣。一段時間後,總有一條鏈的長度要超過另一條。

當礦工發現全網有一條更長的鏈時,其就會拋棄他當前的鏈,把新的更長的鏈全部予以複製,在這條鏈的基礎上繼續挖礦。所有礦工都這樣操作,這條鏈就成爲了主鏈,分叉出來被拋棄掉的鏈就消失。

最終網絡內只有一條鏈會被保留,成爲真正賬本,其他分鏈皆爲無效。交易區塊所引伸的區塊「長度」越長 (包含算力越強),越不容易被網絡內其他節點所改變或否認,一般來說一筆交易要經過 6 次確認纔會被最終記錄下來,「六級」是比特幣用戶所認可的最終確認等級。

更多精彩內容,關注鏈聞 ChainNews 公衆號(id:chainnewscom),或者來微博@ 鏈聞 ChainNews 與我們互動!轉載請註明版權和原文鏈接!