官术网_书友最值得收藏!

◇區塊鏈的運行機制

區塊鏈網絡是一個分布式網絡,網絡中存在眾多節點,每個節點都參與數據維護。一旦有新的數據加入,所有的節點都會對數據進行驗證,節點間必須對處理結果達成一致,才能將新加入的數據成功地寫入各自維護的區塊鏈中,讓網絡中每個節點都擁有一套完全一致的數據記錄。那么,區塊鏈是怎么工作的呢?下面,我們就以比特幣的一筆交易為例來說明區塊鏈的工作過程。

1.身份驗證

在區塊鏈網絡中沒有中心機構對節點進行認證,首要解決的問題是對節點的身份進行驗證。在比特幣區塊鏈系統中,是使用一對密鑰來完成驗證的。

創建比特幣賬戶時,會生成公鑰和私鑰,私鑰用于數字簽名,確認交易所有權;公鑰則是私鑰通過算法生成的,還是對外公開的,此過程不可逆,即無法通過公鑰推算私鑰。

用公鑰對數據進行加密后,只有對應的私鑰才能解密;用私鑰加密,只有對應的公鑰才能解密。在區塊鏈系統中,就是使用唯一匹配的私鑰和公鑰來完成加密、解密和身份驗證的,舉個例子:

Alice向Bob發送消息“Hello Bob”。

首先,用Bob提供的公鑰對信息進行加密形成密文,Bob使用自己的私鑰對密文進行解密;解密后的結果如果是“Hello Bob”,則證明這個消息是正確的。

其次,還提供了簽名機制,Alice可以用自己的私鑰對消息進行簽名,Bob則要通過Alice提供的公鑰進行驗簽,從而證明該消息的發送者是Alice。

2.交易確認

如果某個節點發起一筆交易,交易不會被立刻添加到區塊鏈中,首先會對交易余額進行校驗。可是,在區塊結構中,并沒有記錄賬戶余額,如何才能知道交易方有足夠的余額呢?在比特幣交易網絡中,貨幣的所有權是通過驗證歷史交易信息來核實的。

例如,Alice要給Bob發送1個BTC, Alice必須援引之前收到這個或更多的比特幣的歷史交易信息,即“進賬”; Bob會查看那些進賬,確保Alice是真正的接收者,確保進賬數額為1個BTC或更多。如果一筆交易已被使用過一次,該筆交易就會被認為是已消費,且不能被再次使用。

如果Alice的賬戶通過了驗證,則該筆交易就是合法交易,Bob會將交易信息保存在事務池(或內存池)中,廣播給其他節點;其他節點接收到交易信息后,也會進行同樣的校驗操作。

3.交易記錄

當某一個節點獲得記賬權后,會將交易納入區塊,在區塊上加蓋時間戳,并記錄到自己維護的區塊鏈中;然后,將該區塊進行全網廣播,其他節點接到廣播后,將區塊記錄到各自維護的區塊鏈中。

上例中Alice給Bob的轉賬完成,交易信息被記錄到區塊鏈上,無法更改。

4.雙重支付和分叉

比如,Alice賬戶有一個未消費的BTC, Alice將這個BTC同時發送給Bob和Tom,就是“雙重支付”或“雙花”。如果兩筆交易被先后驗證,例如,給Bob的交易通過驗證,那么給Tom的交易就會驗證失敗,反之亦然。如果兩筆交易被同時驗證,都被認為是有效交易,接入區塊鏈時,就會暫時出現分叉情況,如圖4-1所示。

圖4-1 兩筆有效交易接入區塊鏈時出現的分叉情況

之后的區塊認同哪個區塊,就會在哪個區塊后面延續。比特幣規定,選擇最長的那條鏈進行擴展,所以一旦有新的區塊加入,就會沿著最長的鏈延續,較短的那條鏈上的區塊就會被拋棄,對應的交易也將失效,失效的交易就要承擔相應的損失。

主站蜘蛛池模板: 满洲里市| 临海市| 泽库县| 陇西县| 化州市| 岳普湖县| 东至县| 察隅县| 潜山县| 长沙县| 天水市| 阳谷县| 武定县| 敦化市| 罗田县| 吉木乃县| 彰武县| 龙口市| 广东省| 栾城县| 肥城市| 青岛市| 定西市| 连平县| 常熟市| 阿拉善左旗| 宁波市| 双城市| 玛纳斯县| 当雄县| 新建县| 连山| 清远市| 潜山县| 比如县| 杨浦区| 扎鲁特旗| 泗阳县| 云南省| 浏阳市| 梧州市|