深入淺出:從一筆比特幣交易的生命周期看懂區(qū)塊鏈技術

9 評論 27261 瀏覽 65 收藏 31 分鐘

為什么要寫這篇文章?最近看了許多解釋區(qū)塊鏈的文章,發(fā)現(xiàn)很多文章要么過于概念化或談及一些應用前景和行業(yè)判斷,要么又過于專業(yè)晦澀,使得很多沒有技術底子的小伙伴難以真正理解區(qū)塊鏈技術。由于以上的原因,我希望通過一筆比特幣交易的完整生命周期來解釋比特幣中的區(qū)塊鏈技術。在這樣具體流程的場景下,我相信會更容易理解區(qū)塊鏈。

基本常識:

  • 區(qū)塊鏈不等于比特幣,區(qū)塊鏈只是比特幣系統(tǒng)用來記錄交易信息的賬簿;
  • 比特幣沒有賬戶余額的概念,所有的交易只記錄資金的來源和去向,所謂賬戶余額是區(qū)塊鏈中計算出來的結果;
  • 挖礦獎勵是為了維護整個系統(tǒng)鼓勵人們利用自己設備的算力資源來共同驗證每筆交易的有效性而給予的獎勵;

交易的完整過程:從創(chuàng)建新交易到新區(qū)塊產生

假設一筆比特幣交易 A 一旦被創(chuàng)建,它的生命周期就開始了。隨后,交易 A 會被一個或者多個簽名加密(這些簽名用來說明交易 A 的資金流向是被資金的擁有者所許可的)。而后,交易 A 被廣播到比特幣網(wǎng)絡中,最快收到廣播信息的是相鄰的2-3個節(jié)點,這些節(jié)點都會參與驗證這筆交易,于此同時將交易在網(wǎng)絡中再次進行廣播,直到這筆交易 A 被網(wǎng)絡中大多數(shù)節(jié)點(所有下載比特幣客戶端的設備都有可能成為這樣的節(jié)點)接收。

最終,交易 A 被一個正在參與挖礦的節(jié)點驗證,交易 A 連同其它一些近期被創(chuàng)建的交易一起被打包到一個區(qū)塊 B 中,并被添加到區(qū)塊鏈上,這時整個區(qū)塊鏈就被延長并新增了一個區(qū)塊 B 。區(qū)塊 B 獲得 6 次以上的“確認”時就被認為是不可撤銷的,因為要撤銷和重建六個區(qū)塊需要巨量的計算,交易被打包在一起放進區(qū)塊中時需要極大的計算量來證明,但只需少量計算就能驗證它們已被證明。

我們將上面的交易過程描述簡單細分為以下 6 個步驟:

  1. 產生新交易
  2. 簽名加密
  3. 交易在比特幣網(wǎng)絡中傳播
  4. 整合交易&構建新區(qū)塊
  5. 挖礦
  6. 新區(qū)塊連接到區(qū)塊鏈

接下來,我們將詳細分析 6 個交易步驟中的具體細節(jié)和所采用到的底層技術,在解釋每個步驟和具體的概念時,我都將舉出適當?shù)睦觼韼椭斫猓绻廊粵]有讀懂,那肯定是你看的太快了……

01 產生新交易

當隔壁老王想要將自己錢包中的一個比特幣轉賬給老張時,這個交易就被老王的錢包所構建了。

將一筆比特幣交易理解成紙質支票有助于我們的理解,一筆比特幣交易是一個有著貨幣轉移目的工具, 如同當收款人或持票人拿著支票到銀行時,銀行會無條件支付其規(guī)定數(shù)量的金額。并且交易發(fā)起人并不一定是簽署該筆交易的人。

比特幣交易可以被任何人在線上或線下創(chuàng)建,即便創(chuàng)建這筆交易的人不是這個賬戶的授權簽字人。就像一家企業(yè)中秘書開出的這張支票(發(fā)起交易),需要等待Boss簽署該筆交易(數(shù)字簽名)。

有以下 4 個概念需要展開理解,用以更加深入地理解“新交易構建”的一些細節(jié):

  • UTXO
  • 交易輸出
  • 交易輸入
  • 交易費

UTXO

UTXO易于理解的說就像是賬戶的余額。它是比特幣交易的基本單位,是未經使用的一個交易輸出,Unspent Transaction Output,簡稱UTXO,“未花費的交易輸出”。UTXO不能再分割,1 個UTXO可以是 1“聰” 的任意倍,就像美元可以被分割成“美分”一樣,“分”就不可以再分割了。UTXO被記錄于區(qū)塊鏈中,比特幣網(wǎng)絡監(jiān)測著以百萬為單位的所有可用的UTXO。

假設隔壁老王此時擁有 1.9 比特幣,當隔壁老王接收到 0.1 比特幣時,這個金額被當作UTXO記錄到區(qū)塊鏈里,現(xiàn)在老王一共擁有的 2 比特幣,同樣都被當作UTXO分散到數(shù)百個交易和數(shù)百個區(qū)塊中。實際上,并不存在一個儲存比特幣的地址或賬戶余額的地方,只有被老王(所有者)鎖住的、分散的UTXO。

因此,“隔壁老王的比特幣余額”這個概念,是通過掃描區(qū)塊鏈并聚合所有屬于該用戶的UTXO來計算該用戶的余額。

交易的輸出

一筆比特幣交易是一個含有輸入值和輸出值的數(shù)據(jù)結構,其中包含了將一筆資金從初始地址(輸入)轉移至目標地址(輸出)的代碼信息:版本規(guī)則、輸入&其數(shù)量、輸出&其數(shù)量、時間戳。

每一筆比特幣交易創(chuàng)造輸出,輸出都會被比特幣賬簿記錄下來。所有的輸出都能創(chuàng)造一定數(shù)量的可用于支付的比特幣(也就是UTXO)。這些UTXO會被整個網(wǎng)絡所識別記錄,其所有者可在未來的交易中使用它們。給隔壁老王發(fā)送比特幣實際上是創(chuàng)造新的UTXO,并且能被他用于新的支付。

交易的輸入

交易輸入是指向UTXO的指針,當用戶付款時,他的錢包通過選擇可用的UTXO來構造一筆交易。

例如:隔壁老王想要支付0.015比特幣,他的錢包應用會選擇一個 0.01 UTXO和一個 0.005 UTXO,使用它們加在一起來得到想要的付款金額。

交易費

大多數(shù)交易包含交易費,這是為了在網(wǎng)絡安全方面給比特幣礦工一種補償。大多數(shù)錢包自動計算并計入交易費,交易費被挖出這個區(qū)塊的礦工得到,并且記錄在這個交易的區(qū)塊鏈中。交易的數(shù)據(jù)結構沒有交易費的字段,意味著你無法從交易信息中直接看到交易費的金額。

例如:隔壁老王想要消費支付0.015比特幣,為了自己的交易被礦工優(yōu)先處理,他愿意支付0.001比特幣作為交易費,那么老王的錢包至少需要從區(qū)塊鏈記錄中整合至少0.016比特幣的UTXO。假設他的錢包有一個0.2比特幣的UTXO可用,那么這筆新的交易就會產生一個0.2比特幣的輸入,和兩個輸出:一個是0.015比特幣的消費金額被支付給目標地址,另一個0.184比特幣的輸出作為找零支付給老王的錢包地址,其中有0.001比特幣未分配,就是“隱藏的”交易費用。

值得說明的是:一定要定義清楚0.184比特幣是一個指向老王自己錢包的輸出,這樣找零才會有效“退回”給老王的錢包,否則0.184比特幣也都將成為交易費,被礦工挖到這份驚喜的“紅包”。

02 簽名加密

一筆比特幣交易一旦被創(chuàng)建,它就會被資金所有者(可能存在多位所有者)簽名。如果它是合法創(chuàng)建并簽名的,則該筆交易現(xiàn)在就是有效的。它包含資金轉移時所需要的所有信息。用戶的私鑰用于生成支付比特幣所必需的簽名,來證明資金的所有權,這樣的簽名加密是為了確保交易內容不被篡改。這和前面介紹的紙質支票的授權簽字效果相同。

網(wǎng)絡中節(jié)點收到交易信息后,會對交易的合法性進行檢查,資金所有者的簽名加密是重要的驗證依據(jù),檢查都通過后,則將交易標記為合法的未確認交易,才會在網(wǎng)絡中進行廣播。

有以下 4 個概念需要展開理解,用以更加深入的理解“簽名加密”的一些細節(jié):

  • 私鑰
  • 公鑰
  • 錢包
  • 交易腳本

私鑰

一個比特幣錢包中包含一系列的密鑰對,每個密鑰對包括一個私鑰和一個公鑰。私鑰是一個數(shù)字,通常是隨機產生的。一個比特幣地址中的所有資金的控制取決于相應私鑰的所有權和控制權。私鑰必須保密,因為一旦被泄露,相當于該私鑰保護下比特幣也就丟失了。

通過在一個密碼學安全的隨機源中取出一串隨機字節(jié),對其使用SHA256哈希算法進行運算,生成了一個256位的數(shù)字,這樣的一個數(shù)字就可以作為私鑰。以十六進制格式表示一個隨機生成的私鑰,即:

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

公鑰

通過橢圓曲線算法可以從私鑰計算得到公鑰,這是不可逆轉的過程。由公鑰經過單向的加密哈希算法生成的比特幣地址以數(shù)字“1”開頭,在交易中比特幣地址就是收款人的地址。

錢包

比特幣錢包是私鑰的容器,錢包只包含私鑰而不是比特幣,每一個用戶有一個包含多個私鑰的錢包。錢包中包含成對的私鑰和公鑰,用戶用這些私鑰來簽名交易。

其中一種常見且典型的錢包就是使用“助記碼詞匯”做為種子,而生成私鑰的錢包。這樣的單詞的序列可以重新創(chuàng)建種子,并重新創(chuàng)造錢包以及所有私鑰。在首次創(chuàng)建錢包時,帶有助記碼的錢包應用程序將會向使用者生成一個12至24個單詞,單詞的順序就是錢包的備份。

交易腳本

交易腳本是檢驗交易是否合法的核心機制。一般每個交易都會包括兩個腳本:輸出腳本,scriptPubKey和輸入腳本,scriptSig。

輸出腳本一般由付款方對交易設置鎖定,用來對收款方進行權限控制,例如限制必須是某個公鑰 (比特幣地址) 的擁有者才能花費這筆交易。

輸入腳本 (簽名腳本) 常常含有一個被用戶的私鑰生成的數(shù)字簽名,用來證明自己可以滿足交易輸出腳本的鎖定條件,即對某筆交易中比特幣資金的擁有權。

值得注意的是:比特幣交易的輸入和輸出并非只是簡單對應了付款人的私鑰和收款人的公鑰地址,而是還包含了更多的內容,通過腳本可以直接驗證交易的有效性,并且實現(xiàn)了更多復雜的交易方式,比如“多重簽名腳本”,保證只有自己和第三方錢包共同簽名后才可動用輸出,這樣保證了黑客在攻擊了第三方錢包后也無法花掉用戶的比特幣。

03 交易在比特幣網(wǎng)絡中傳播

一筆交易需要傳遞至比特幣網(wǎng)絡,才能被傳播,也才能加入?yún)^(qū)塊鏈中。一筆比特幣交易只是300到400字節(jié)的數(shù)據(jù),一旦交易被發(fā)送到任意一個連接至比特幣網(wǎng)絡的節(jié)點,這筆交易將會被該節(jié)點驗證。如果交易被驗證有效,該節(jié)點將會將這筆交易傳播到這個節(jié)點所連接的其他節(jié)點。

無論交易是否被節(jié)點驗證有效,交易發(fā)起者會收到一條回執(zhí)消息,包含了此筆交易是否被接受的返回信息。在幾秒鐘之內,一筆有效的交易就會呈指數(shù)級擴散的效率在網(wǎng)絡中傳播,直到所有連接到網(wǎng)絡的節(jié)點都接收到它。

值得注意的是:每一個節(jié)點在傳播每一筆交易之前均進行獨立驗證。因此,一個異常交易所能到達的節(jié)點不會超過一個。所以,比特幣網(wǎng)絡能有效抵御入侵,避免垃圾信息的濫發(fā)和有效拒絕服務攻擊。

有以下 4 個概念需要展開理解,用以更加深入的理解“交易傳播”的一些細節(jié):

  • 客戶端
  • 完整節(jié)點
  • 輕量節(jié)點 (SPV) 節(jié)點
  • 挖礦節(jié)點

客戶端

bitcoin.org可以下載標準客戶端,即比特幣核心,也叫“中本聰客戶端”(satoshi client)。它包括了比特幣系統(tǒng)的所有內容:錢包功能、整個交易賬簿(區(qū)塊鏈)的完整拷貝、交易確認引擎,P2P比特幣網(wǎng)絡中的一個完整網(wǎng)絡節(jié)點。

完整節(jié)點

保有一份完整的、最新的區(qū)塊鏈拷貝的節(jié)點被稱為“完整節(jié)點”。完整節(jié)點能夠獨立自主地校驗所有交易, 而不需借由任何外部參照。

輕量節(jié)點 / SPV節(jié)點

只保留了區(qū)塊鏈的一部分,通過一種名為“簡易支付驗證(SPV)”的方式來完成交易驗證的節(jié)點被稱為“SPV節(jié)點”, 又叫“輕量節(jié)點”。越來越多的用戶錢包都是SPV節(jié)點,尤其是運行于智能手機等資源受限設備上,這些設備沒有空間存儲完整的 150G 大小的區(qū)塊鏈。

挖礦節(jié)點

挖礦節(jié)點通過運行在特殊硬件設備上的工作量證明算法,以相互競爭的方式創(chuàng)建新的區(qū)塊。一些挖礦節(jié)點同時也是全節(jié)點,保有區(qū)塊鏈的完整拷貝;還有一些參與礦池挖礦的節(jié)點是輕量級節(jié)點,它們必須依賴礦池服務器維護的全節(jié)點進行工作。

04 整合交易&構建新區(qū)塊

驗證交易后,每個比特幣網(wǎng)絡節(jié)點會將這些交易添加到自己的內存池中,內存池也稱作交易池,用來暫存尚未被加入到區(qū)塊的交易記錄。而挖礦節(jié)點除了收集和驗證交易以外,還會將這些交易打包到一個候選的區(qū)塊中。

挖礦節(jié)點需要為內存池中的每筆交易分配一個優(yōu)先級,并選擇較高優(yōu)先級的交易記錄來構建候選區(qū)塊,在區(qū)塊被填滿后,內存池中的剩余交易會成為下一個區(qū)塊的候選交易。例如,一個挖礦節(jié)點從內存池中整合到了全部的交易,新的候選區(qū)塊包含有418筆交易,總的礦工費為0.09094925個比特幣。

現(xiàn)在既然創(chuàng)建好了一個包含418筆交易的候選區(qū)塊,挖礦節(jié)點就準備拿它來挖礦。

有以下 4 個概念需要展開理解,用以更加深入的理解“整合交易”的一些細節(jié):

  • 臨時未驗證的交易池
  • 交易優(yōu)先級
  • 區(qū)塊結構
  • 礦池

臨時未驗證的交易池

比特幣網(wǎng)絡中幾乎每個節(jié)點都會維護一份未確認交易的臨時列表,被稱為內存池或交易池。節(jié)點們利用這個池來追蹤記錄那些被網(wǎng)絡所知曉但還未被區(qū)塊鏈所包含的交易。交易池是存儲在本地內存中,并不是存儲在硬盤里,因此不同節(jié)點的兩池內容可能有很大差別。

交易優(yōu)先級

挖礦節(jié)點需要為內存池中的每筆交易分配一個優(yōu)先級,并選擇較高優(yōu)先級的交易記錄來構建候選區(qū)塊。交易的優(yōu)先級是由交易輸入所花費的UTXO的交易創(chuàng)建時間決定,交易輸入值高且創(chuàng)建時間較早的交易比那些較新且輸入值小的交易擁有更高的優(yōu)先級。

區(qū)塊中用來存儲交易的前50K字節(jié)是保留給較高優(yōu)先級交易的,如果區(qū)塊中有足夠的空間,高優(yōu)先級的交易行為將不需要礦工費。礦工費越高,交易被處理的優(yōu)先級也越高。

區(qū)塊結構

區(qū)塊是一種聚合了交易信息容器的數(shù)據(jù)結構。由區(qū)塊頭和區(qū)塊主體組成,區(qū)塊頭是80字節(jié),而平均每個交易至少是250字節(jié),而且平均每個區(qū)塊至少包含超過500個交易。

區(qū)塊頭包含三組元數(shù)據(jù):

  1. 用于連接前面的區(qū)塊、索引自父區(qū)塊哈希值的數(shù)據(jù);
  2. 挖礦難度、Nonce(用于工作量證明算法的計數(shù)器)、時間戳;
  3. 能夠總結并快速歸納校驗區(qū)塊中所有交易數(shù)據(jù)的Merkle(默克爾)樹根數(shù)據(jù)。

礦池

改變了原來挖礦獎勵由一個勝出礦工獨自獲得的狀態(tài),采用團隊協(xié)作方式來集中算力進行挖礦,對產出的數(shù)字貨幣按照算力進行分配。

采礦成為一項團隊運動,一群礦工于2010年12月16日一起在slush礦池挖出了它的第一個區(qū)塊。根據(jù)其所貢獻的工作量,每位礦工都獲得了相應的報酬。此后的兩個月間,slush礦池的算力從1 400Mhash/s增長到了60Ghash/s。

05 挖礦

現(xiàn)在既然已經創(chuàng)建好了一個候選區(qū)塊,挖礦節(jié)點就準備拿它來挖礦。礦工們爭相完成一種基于加密哈希算法的數(shù)學難題,獲勝者有權在區(qū)塊鏈上進行交易記錄并得到獎勵。每 10 分鐘左右生成一個不超過 1 MB 大小的新區(qū)塊,這個區(qū)塊記錄了這 10 分鐘內發(fā)生并驗證過的交易內容。礦工們在挖礦過程中會得到兩種類型的獎勵:創(chuàng)建新區(qū)塊的新幣獎勵,以及區(qū)塊中所含交易的交易費。

一旦某一個挖礦節(jié)點在算力競爭中勝出,優(yōu)先得到了數(shù)學難題的答案,會立刻將這個區(qū)塊發(fā)給它的所有相鄰節(jié)點,這些節(jié)點在接收并獨立驗證這個新區(qū)塊后,也會繼續(xù)傳播此區(qū)塊,每個節(jié)點都會將它作為新區(qū)塊加到自身節(jié)點的區(qū)塊鏈副本中。

有以下 3 個概念需要展開理解,用以更加深入的理解“確認交易”的一些細節(jié):

  • 工作量證明
  • 創(chuàng)幣交易
  • Coinbase獎勵和礦工費

工作量證明

Proof of Work,通過計算來猜測一個數(shù)值(nonce)。具體到比特幣,礦工必須要在滿足全網(wǎng)目標難度的情況下求解SHA256算法。優(yōu)先完成工作量證明的礦工可以獲得比特幣獎勵。保證在一段時間內,系統(tǒng)中只能出現(xiàn)少數(shù)合法提案。

哈希問題具有不可逆的特點,只有通過暴力計算找到問題的答案。一旦獲得符合要求的nonce,說明在概率上是付出了對應的算力。誰的算力多,誰最先解決問題的概率就越大。

創(chuàng)幣交易

區(qū)塊中的第一筆交易是筆特殊交易,稱為創(chuàng)幣交易或者Coinbase交易,這個交易是挖礦節(jié)點構造并用來獎勵礦工們所做的貢獻的。

  • 創(chuàng)幣交易的輸入:創(chuàng)幣交易于其他交易的不同點在于其交易輸入沒有UTXO,也沒有“輸入腳本”。這個字段被Coinbase數(shù)據(jù)替代,除開始的幾個字節(jié)外,礦工可以任意使用Coinbase的其他部分,隨意填充任何數(shù)據(jù)。因此,中本聰在創(chuàng)世區(qū)塊的Coinbase中填入了這樣的數(shù)據(jù) “The Times 03/Jan/ 2009 Chancellor on brink of secondbailout for banks”。
  • 創(chuàng)幣交易的輸出:由挖礦勝出的礦工構建并將創(chuàng)幣獎勵和礦工費一起支付給了自己的比特幣錢包地址。

Coinbase獎勵和礦工費

礦工們在挖礦過程中會得到兩種類型的獎勵:創(chuàng)建新區(qū)塊的新幣獎勵,以及區(qū)塊中所含交易的交易費。比特幣的貨幣是通過挖礦發(fā)行的,大約每四年減少一半。2009年1月每個區(qū)塊獎勵50個比特幣,到2012年11月減半為每個區(qū)塊獎勵25個比特幣,現(xiàn)在每個新區(qū)塊獎勵12.5個比特幣。比特幣挖礦獎勵以指數(shù)方式遞減,直到2140年所有的比特幣全部發(fā)行完畢,不會再有新的比特幣產生。

例如:隔壁老王的挖礦節(jié)點構造了一個創(chuàng)幣交易,支付給自己12.59094928枚比特幣,其中12.5個比特幣是Coinbase獎勵,0.09094928比特幣是礦工費。

06 新區(qū)塊連接到區(qū)塊鏈

比特幣交易生命周期的最后一步是將新區(qū)塊連接至有最大工作量證明的鏈中。一個節(jié)點一旦驗證了一個新的區(qū)塊,它將嘗試將新的區(qū)塊連接到到現(xiàn)存的區(qū)塊鏈組裝起來。

節(jié)點維護三種區(qū)塊:第一種是連接到主鏈上的區(qū)塊,第二種是從主鏈上產生分支的(備用鏈)區(qū)塊 ,最后一種是在已知鏈中沒有找到已知父區(qū)塊的。在驗證過程中,一旦發(fā)現(xiàn)有不符合標準的地方,驗證就會失敗,區(qū)塊會被節(jié)點拒絕并不會加入到任何一條鏈中。

如果節(jié)點收到了一個有效的區(qū)塊,而在現(xiàn)有的區(qū)塊鏈中卻未找到它的父區(qū)塊,那么這個區(qū)塊被認為是“孤塊”。孤塊會被保存在孤塊池中,直到它們的父區(qū)塊被節(jié)點收到。

每一個節(jié)點總是選擇并嘗試延長代表累計了最大工作量證明的區(qū)塊鏈,也就是最長的或最大累計難度的鏈,只要所有的節(jié)點選擇最長累計難度的區(qū)塊鏈,整個比特幣網(wǎng)絡最終會收斂到一致的狀態(tài)。

有以下 4 個概念需要展開理解,用以更加深入的理解“新區(qū)塊連接到鏈”的一些細節(jié):

  • 創(chuàng)世區(qū)塊
  • 難度目標與難度調整
  • 區(qū)塊鏈的分叉
  • 區(qū)塊瀏覽器

創(chuàng)世區(qū)塊

區(qū)塊鏈里的第一個區(qū)塊創(chuàng)建于2009年,被稱為創(chuàng)世區(qū)塊。它是區(qū)塊鏈里面所有區(qū)塊的共同祖先,這意味著你從任一區(qū)塊,循鏈向后回溯,最終都將到達創(chuàng)世區(qū)塊。

創(chuàng)世區(qū)塊的哈希值為:000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

在區(qū)塊瀏覽網(wǎng)站 (blockchain.info) 搜索這個區(qū)塊哈希值,你會發(fā)現(xiàn)這個哈希值來描述這一區(qū)塊內容的頁面:

難度目標與難度調整

比特幣的區(qū)塊平均每10分鐘生成一個。這就是比特幣貨幣發(fā)行速率和交易達成速度的基礎,必須始終保持恒定。隨著技術發(fā)展,計算機性能將飛速提升。此外,參與挖礦的人和計算機也會不斷變化。為了能讓新區(qū)塊的保持10分鐘一個的產生速率,挖礦的難度必須根據(jù)這些變化進行調整。

2009年12月30日,比特幣挖礦難度首次增長。尋找一個比特幣區(qū)塊需要整個網(wǎng)絡花費10分鐘來處理,每發(fā)現(xiàn)2,016個區(qū)塊時會根據(jù)前2,016個區(qū)塊完成的時間對難度進行調整。

New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)

區(qū)塊鏈的分叉

分叉發(fā)生在兩名礦工在較短的時間內,各自都算得了工作量證明解的時候。兩個礦工在各自的候選區(qū)塊一發(fā)現(xiàn)解,便立即傳播自己的“獲勝”區(qū)塊到網(wǎng)絡中,先是傳播給鄰近的節(jié)點而后傳播到整個網(wǎng)絡。

由于每個礦工的區(qū)塊數(shù)據(jù)都不一樣,所以他們解題得出的結果也是不一樣的,都是正確答案,只是區(qū)塊不同。區(qū)塊鏈在這個時刻,出現(xiàn)了兩個都滿足要求的不同區(qū)塊。不同的礦工看到這兩個區(qū)塊是有先后順序的,通常情況下,礦工們會把自己先看到的區(qū)塊復制過來,然后接著在這個區(qū)塊開始新的挖礦工作。這時分叉就產生了。

從分叉的區(qū)塊起,由于分叉的鏈上礦工的數(shù)量不同,因此算力也有差別,兩條鏈的增長速度也是不一樣的,總有一條鏈的長度要超過另一條。當?shù)V工發(fā)現(xiàn)全網(wǎng)有一條更長的鏈時,他就會拋棄他當前分叉的鏈,而繼續(xù)在更長的主鏈上進行挖礦工作。

區(qū)塊瀏覽器

用戶想要瀏覽區(qū)塊鏈信息,就得用區(qū)塊鏈瀏覽器。每一個區(qū)塊所記載的內容都可以從區(qū)塊鏈瀏覽器上進行查閱。區(qū)塊鏈瀏覽器可以說是區(qū)塊鏈信息瀏覽的主要窗口。

以太坊的區(qū)塊瀏覽器如下圖所示:

總結

比特幣挖礦通過人性解決了區(qū)塊鏈的維護問題,這也解釋了比特幣系統(tǒng)為什么能穩(wěn)定運行了8年,也使得比特幣成為區(qū)塊鏈技術如此眾多的應用中生命力最為旺盛的一個?!爸斜韭敗睂τ谌诵缘睦?,讓人們在為獲得利益的挖礦中,維持著這個系統(tǒng)的運轉。但礦機的出現(xiàn)使得比特幣的去中心化并不完美,所以對于比特幣的創(chuàng)新和改進也從未停止,想了解更多,可以閱讀我的上一篇文章《一篇文章,看透500多種數(shù)字貨幣哪些是真正有價值的技術創(chuàng)新》,介紹了如何進一步解決礦機對整個區(qū)塊鏈網(wǎng)絡帶來的影響。

深度理解區(qū)塊鏈技術

感興趣的同學可以進一步擴展閱讀:

  • 什么是橢圓曲線加密算法(secp256k1)?
  • 什么是SHA256和RIPEMD160?
  • 什么是P2SH (Pay-to-Script Hash)和多重簽名地址?
  • 什么是交易腳本,P2PKH( Pay-to-Public-Key-Hash)交易?
  • 什么是Merkle樹和簡單支付驗證(SPV)?

對于區(qū)塊鏈深度的數(shù)據(jù)結構和算法不在此繼續(xù)贅述了,歡迎關注“區(qū)塊鏈老垚”,天天分享區(qū)塊鏈。

 

本文由 @?區(qū)塊鏈老垚 原創(chuàng)發(fā)布于人人都是產品經理。未經許可,禁止轉載。

題圖來自 Pixabay,基于 CC0 協(xié)議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 非常棒,把區(qū)塊鏈運行的邏輯說的很明白了,這文章精品!就是老垚怎么不更新文章了呢?

    來自上海 回復
  2. 作為初學者,我覺得這是目前我看到過的最好的比特幣介紹文章。

    來自上海 回復
  3. 我了解區(qū)塊鏈已經有將近一年,可以說,這是我見過的寫區(qū)塊鏈科普寫的最好的一篇,不過評論中還是有大部分人看不懂,那估計是了解不夠多,如果我一剛開始就來看的話估計也會看不懂,但是有了點基礎之后來看這篇簡直覺得寫的太好了。

    來自浙江 回復
  4. 如何理解比特幣沒有賬戶余額的概念呢?用戶可以賺取比特幣,可以消費比特幣,理論上最后會存在余額???

    回復
  5. 寫的太深了,越看越蒙…. ??

    來自河南 回復
  6. 不明覺厲

    來自浙江 回復
  7. 我感覺寫此類文章的都是很懂這個領域的高手,都在試圖用自己的理解來解釋什么事區(qū)塊鏈,但我這個外行感覺每篇文章都差不多,不理解的還是沒理解。和一樓說的一樣,我等讀書還是太少~,感謝作者的精彩分享。

    來自北京 回復
  8. 成功的深入,但并未淺出,我等讀書還是太少,不懂 arrow:

    來自廣東 回復
  9. ??

    來自廣東 回復