1. 程式人生 > >揭祕比特幣與區塊鏈基礎技術原理

揭祕比特幣與區塊鏈基礎技術原理

作者:李豔鵬,現任螞蟻金服高階技術專家,著有《分散式服務架構:原理、設計與實戰》和《可伸縮服務架構:框架與中介軟體》,曾經在易寶支付、花旗銀行、甲骨文、新浪微博、路透社等大型IT網際網路公司擔任技術負責人和首席架構師的工作,現專注於區塊鏈平臺的研發與推廣,擅長大規模高併發的線上與線下相結合的第三方支付平臺的架構規劃與實施。

1 背景

對於當下流行的電子貨幣-比特幣系統,朋友圈裡有很多介紹性的文章,也有人試圖通過漫畫來生動的解釋比特幣的特性,但是始終不得要領,總是有些問題想不清楚,為了弄清楚這些問題,最近深入的研讀了幾本比特幣的書籍以及中本聰本人發表的比特幣論文,感覺茅塞頓開,迫不及待的與大家分享我的理解,希望與大家共同探討、共同進步。

2 比特幣

比特幣是一種利用點對點技術實現的電子現金系統,它允許一個組織直接與另外一個組織進行線上支付,而不需要中間的權威的清算機構。

在比特幣的世界裡,如果你想擁有比特幣,你需要申請一個比特幣地址,就像你到銀行存款,需要開立一個賬戶,然後,你就擁有這個賬號,有了自己的賬號,你可以向你的賬號存款,別人也可以給你的賬號轉賬,當你需要提款的時候或者給別人轉賬的時候,你需要出示一個能夠開啟這個地址的鑰匙,也就是你的私鑰,就像你在ATM上取款的時候需要提供密碼一樣。

與銀行發行的法定貨幣不同,法定貨幣的發行是由各國央行來統一管理的,大家都相信央行是靠譜的,不會記錯賬,也不會被人攻擊。然而,比特幣的發行並不需要央行這樣的權威機構,它允許一筆交易從一個組織直接結算給另外一個組織,省去了權威機構結算的環節,提高了交易和結算的效率,節省了交易的成本,尤其是跨境交易的成本。

一個點對點的線上交易系統如何保證交易的匿名性、正確性、不可篡改性?又是如何防止雙重支付和防止作弊和攻擊的呢?

下面的章節將為大家通過最通俗的語言解開比特幣的神祕面紗,讓你從邏輯上理解比特幣是如何工作的,讓學習比特幣不留死角,讓比特幣的方方面面清晰的呈現在你的腦海裡。

3 區塊鏈

3.1 區塊鏈是如何儲存的?

對於一個現金賬戶系統,首先要解決的是如何記賬,把賬記在哪裡,賬戶如何儲存等。例如,你在中國銀行存款,中國銀行為你開立賬戶,你的賬戶就儲存在中國銀行的伺服器上,而你在建設銀行存款,建設銀行為你開立賬戶,你的賬戶就儲存在建設銀行的伺服器上。如果你需要轉賬給同一個銀行的其他人的賬戶,你需要通過這個銀行為你轉賬和結算,如果你需要轉賬給其他銀行的其他人的賬戶,你需要通過銀聯為你轉賬和結算,儘管一個普通使用者感知不到如此多的過程,不過這些步驟確實是存在的,從這個過程中我們看到記賬的賬戶系統是專用的,是中心化的,歸某一個組織所有並維護,通常這個組織是權威的、可信賴的。

而比特幣並沒有中心化的記賬系統,而是通過分散式的區塊鏈來記載比特幣的擁有權和交易資訊。每個比特幣的參與者都擁有一份相同的區塊鏈副本,區塊鏈包含著多個隨著時間排序的塊,後一個塊通過雜湊指標指向前一個塊,形成一個鏈,從鏈的頂端通過這個指標,可以一直找到底端第一個塊,第一個塊成為創世紀塊。每個區塊記錄著前一個區塊的雜湊雜湊值,實際上是前一個節點頭的雜湊雜湊值,如果想改變一個區塊包含的交易,必須改變這個區塊之後所有的交易,由於每個區塊的產生是需要條件和時間的,並且條件相當苛刻(後續會在共識機制相關的文章中詳細說明),因此,一個區塊一旦產生,並且被區塊鏈的節點所接受,並且在這個節點之後又產生了一定數量的區塊,那麼這個區塊基本是不可篡改的。

區塊鏈示意圖如下:

從上圖可見,區塊鏈是由多個區塊組成,每個區塊是由區塊頭和區塊體組成的,每一個區塊頭包含著區塊的元資訊,同時也包含一個指向前一個區塊頭雜湊值的指標,這個指標是防止區塊鏈被篡改的關鍵資訊。區塊體包含比特幣的交易資訊,第一個交易是特殊交易,是獎勵給挖礦節點的酬勞,這也是唯一一種可以產生比特幣的方式,也就是發行比特幣的方式,其餘的交易都是轉賬交易,比特幣從一個地址支付給另外一個地址,這也是實現比特幣價值轉移的唯一方式。總結來看,比特幣只有發行和轉賬兩種交易,比特幣產生以後只能從一個人轉賬給另外一個人,而不能憑空消失,比特幣發行的總量是有限的,一共2100萬,因此是一種通縮性貨幣,後續我們會在相關的文章中詳細介紹位元並的通縮特性。

3.2 比特幣的擁有者如何證明自己擁有比特幣?

上一節介紹了區塊鏈的儲存,區塊鏈實際上是比特幣的賬本,記錄著誰擁有多少比特幣,只不過這個賬本是儲存在網際網路上的、分散式的,並不是由一箇中心機構或者伺服器來儲存。有了賬本,剩下的問題就是比特幣的擁有者如何證明自己擁有比特幣?就像你在銀行開立了一個賬戶,等你想給其他人轉賬的時候,你需要在ATM上插入卡,然後輸入密碼。卡就相當於比特幣的地址,密碼就相當於比特幣的祕鑰,有了正確的地址和祕鑰,就可以對外宣稱自己對比特幣的擁有權,就可以把比特幣轉賬給其他人來做一筆轉賬交易。

在ATM上提取一筆現金,輸入密碼解鎖賬戶,我們相信ATM機不會洩露密碼。那麼在比特幣的世界裡,我們如何通過私鑰來校驗一個地址上的比特幣的歸屬權呢?

比特幣的歸屬權是通過加密領域技術來實現的,我們先來了解下加密領域的原理,加密領域大體上經過了3個階段,第一個階段拼演算法,把加密邏輯寫在一個非常高深的程式碼裡,後來發現無論把多麼複雜的邏輯寫在程式碼裡,總有高手可以破解。於是產生了對稱祕鑰加密,對稱祕鑰加密通過一個對稱的祕鑰進行加密資料,然後傳輸或者儲存,需要的時候再通過同一個祕鑰進行解密還原原來資料,缺點是祕鑰是共享的,無法安全的儲存祕鑰,尤其是跨組織的場景。後來,聰明的安全科學家們發明了非對稱加密演算法,例如:RSA,非對稱演算法擁有一對祕鑰,一個公鑰和一個私鑰,私鑰可以推匯出公鑰,但是公鑰不能推匯出私鑰,公鑰加密的資料私鑰可以解密,私鑰加密的資料公鑰可以解密,如果組織A向組織B傳遞資料,那麼組織A使用公鑰進行加密,組織B使用私鑰進行解密,因此,組織B需要小心的儲存好私鑰,而公鑰是公開的,這是典型的非對稱加密場景,能夠有效的防止資料被偷窺、被篡改。非對稱加密還有另外一個場景,就是簽名,簽名是加密場景的逆向場景,商戶B通過自己的私鑰加密資料,然後把加密的資料傳遞給商戶A,商戶A通過公鑰進行解密,如果解密的資料正確,則說明資料是由A傳送的,有效的保證了資料的防篡改,從這兩個場景我們看到,公鑰是公開的,可發給任何人,私鑰是私密的,用來解密或者簽名的。

比特幣證明歸屬權的示意圖如下:

從上圖可見,現實生活中我們用鑰匙開啟鎖頭,我們用密碼在ATM上提取現金,那麼在比特幣系統裡,我們通過祕鑰來實現比特幣的轉賬,實現價值的轉移。

更具體來講,一筆比特幣交易會把一定數量的指令碼鎖定在一個地址,宣告擁有這個地址的使用者會通過密匙的簽名來證明自己擁有這個地址,然後,花費這筆比特幣,這筆比特幣被花費後並不會消失,會被鎖定在其他人的地址上,其他人可以使用同樣的方法來花費這筆比特幣。

從上面的過程,我們總結了兩個動作,鎖定與解鎖,這和我們平時鎖鎖頭和開鎖頭是對應的,在比特幣系統裡是通過鎖定指令碼和解鎖指令碼來實現的。

  1. 鎖定指令碼把比特幣關聯在一個比特幣地址上,證明了比特幣歸屬這個地址。
  2. 解鎖指令碼提供證明,證明這個地址歸我所有,這個比特幣也歸我所有,我可以用來支付。

下面我們舉一個例子詳細說明:

使用者Alice在比特幣裡地址A上擁有10個比特幣,Alice與Bob想做一筆交易,Bob把自己家的汽車賣給了Alice,Alice需要向Bob支付10個比特幣,Bob的比特幣地址是B。

在之前的交易中,Alice擁有的10個比特幣被鎖定在Alice的比特幣地址A上,其來源可能是挖礦所得或者別人轉賬而來,我們會在後續詳細描述如何獲得比特幣,這裡我們只關注證明Alice擁有比特幣的交易的鎖定指令碼。

鎖定指令碼的邏輯格式為:

比特幣數量 來源 鎖定地址
10 挖礦所得 地址A

如果想花費這個鎖定指令碼,需要的解鎖指令碼如下:

解鎖地址 解鎖
地址A 地址A的公鑰、地址A用私鑰對前一區塊頭雜湊雜湊值的簽名

具體的解鎖過程如下:

  1. 使用地址A的公匙推匯出地址,與地址A對比,如果一致則證明公匙提供正確,進入下一步。
  2. 使用地址A的公匙解密簽名,如果獲得的值與前一區塊的雜湊雜湊值一致,則證明解鎖成功,可以花費地址上的10個比特幣。

其實,鎖定和解鎖指令碼是通過逆波蘭表示法的基於堆疊的指令碼實現的,由於本文篇幅有限,這裡不展開介紹,會在後續的文章中詳細介紹鎖定和解鎖指令碼的原理和流程。

4. 挖礦

上一節介紹了比特幣使用分散式儲存的區塊鏈作為記賬系統,也解決了大家關於如何宣告比特幣的擁有權,以及把比特幣支付給其他人的過程。現在我們遇到了新的問題,既然區塊鏈是分散式的記賬系統,每個參與的節點都有一份拷貝,那麼誰來負責把一筆交易記到區塊鏈呢?

這不得不引入一個新的概念,就是共識機制,比特幣是通過工作量證明的共識機制來決定記賬權的,通俗來講,誰證明了自己的工作量最大,誰就負責記賬。

工作量證明示意圖如下:

工作量大小是通過計算符合某一個標準的比特幣區塊頭的雜湊雜湊值來體現的。試圖爭奪記賬權的節點稱為挖礦節點,挖礦節點會把網路節點上發來的交易進行驗證(網路傳播機制會在下一節中介紹),驗證後會存入緩衝區,形成一定的交易儲存結構(交易使用Merkle樹儲存,後續問斬各種介紹),放在區塊體中,然後根據區塊的基本資訊構造區塊頭,區塊頭通常包含前一個區塊的雜湊雜湊值、Merkle根(後續文章會詳細介紹)、時間戳、難度目標、以及一個填充的隨機值。這裡面的隨機值是隨機產生並且填充的,挖礦過程就是求出一個能夠填充本區塊頭的隨機值,讓區塊頭的雜湊雜湊值符合某一個標準,例如:雜湊雜湊值的前某些位為0,難度目標就是用來表達雜湊雜湊值標準的難度係數,可以通過概率演算法計算出難度值與挖礦成功的可能性。

網路上的每一個礦機接收並驗證了一批交易,然後就開始進行挖礦,檢視計算滿足某一難度值的區塊頭的雜湊雜湊值,如果計算成功,則挖礦成功,向全網廣播挖礦所得,全網節點驗證後,把這個區塊連線到區塊的最上端,並且在全網達成一致。礦機需要反覆的試驗隨機填充值來進行求解,一般採用產生隨機數,嘗試把產生的隨機數填充到區塊頭,然後計算雜湊,後續文章會介紹礦機聯盟,礦機聯盟會把隨機數分成多個小區間,分配給聯盟中的成員,共同求解。

除了上面介紹的工作量證明機制,還有權益證明、股份制的權益證明共識機制等,後續我會在共識機制的專題文章中與大家分享。

5. P2P網路

前面兩節介紹了比特幣的賬戶體系和記賬機制,這節我們討論比特幣的分散式區塊鏈賬本是如何在網路上傳輸,交易又是如何在網路上傳輸並得到驗證的。

比特幣網路中的節點都是對等的,沒有中心化的伺服器,節點有不同的型別,不同的型別有不同的職責,我們會在將來的文章中詳細介紹,這裡我們只介紹全節點,也就是比特幣核心客戶端的工作機制。

比特幣中的全節點除了儲存完整區塊鏈,還具有礦工、錢包、路由節點等的角色,他們的職責如下:

  1. 礦工:就像挖礦的工人一樣,做的是體力活,不斷的嘗試在構造的區塊頭的隨機欄位上填充數字,來找到滿足一定標準的雜湊雜湊值,如果找到,把此區塊連線到區塊鏈的最上端,並且把合法的區塊鏈傳送給鄰接節點。
  2. 錢包:區塊鏈記載了創幣交易和轉賬交易,這有別於通常意義的賬戶系統,通常意義的賬戶系統記錄賬戶餘額,而區塊鏈裡面只記錄了交易,沒有餘額,錢包就是用來從區塊鏈中算出某個地址擁有區塊的餘額,如果你學過關係型資料庫,你可以把區塊鏈理解為資料庫的索引,也可以認為是一本書的目錄。
  3. 路由節點:負責在去中心化的網路環境中傳遞交易和區塊,一個節點建立一筆交易,併發送給相鄰的節點,相鄰的節點驗證後,再發送給相鄰的節點,很快會傳遍網路。如果一個節點通過挖礦,找到一個符合標準的區塊,這個節點也會用相同的方式傳遞給相鄰節點,然後相鄰節點再繼續傳播下去,讓網路的所有節點都達成一致。

P2P網路傳播的示意圖如下:

我們會在後續的文章中詳細介紹比特幣P2P網路的工作機制,包括節點分類、節點發現、節點連線和廣播等。

6. 總結

由於篇幅有限,本文介紹了比特幣的三大基礎概念,包括區塊鏈、挖礦與P2P網路,後續會對比特幣的方方面面進行詳細的說明,涉及到如何防止雙重支付、智慧合約、區塊鏈分叉、通縮特性、鎖定和解鎖指令碼、交易的Merkle樹儲存、交易的儲存格式、區塊鏈被攻擊的概率、挖礦難度與挖礦成功時間、更多的共識機制、創幣交易和轉賬交易、比特幣的效能、不同型別的挖礦節點、以及比特幣的應用場景等。

作者簡介:
李豔鵬,現任易寶支付產品中心首席架構師,著有《分散式服務架構:原理、設計與實戰》和《可伸縮服務架構:框架與中介軟體》,是【雲時代架構】技術社群的發起者,曾經在花旗銀行、甲骨文、路透社、新浪微博等大型IT網際網路公司擔任技術負責人和架構師的工作,現專注大規模高併發的線上和線下支付平臺的應用架構和技術架構的規劃與落地,負責交易、支付、渠道、出款、風控、對賬等核心支付系統的設計與實現,在移動支付、聚合支付、合規賬戶、掃碼支付、標記化支付等業務場景上有產品應用架構規劃與落地的實踐經驗。

關注“雲時代架構技術社群公眾號”獲得更多資訊。
雲時代架構技術社群公眾號

相關推薦

揭祕區塊基礎技術原理

作者:李豔鵬,現任螞蟻金服高階技術專家,著有《分散式服務架構:原理、設計與實戰》和《可伸縮服務架構:框架與中介軟體》,曾經在易寶支付、花旗銀行、甲骨文、新浪微博、路透社等大型IT網際網路公司擔任技術負責人和首席架構師的工作,現專注於區塊鏈平臺的研發與推廣,

Bitcoin Blockchain 區塊 基礎技術解釋

前言: 好長時間沒寫Blog了,因為都在搞Bitcoin這玩意,現在網上大部分都是些概念性的東西,真正的實質內容不多,聽到最多的詞就是去中心化,去第三方,這對於理解比特幣或是區塊鏈技術根本沒有半毛錢的幫助,因此我在這總結下關於比特幣的種種。 比特幣,區塊鏈簡述: 這個簡述

區塊

場景 不容易 但是 兩種 相差 對象 大堆 底層 發出 早上看到一則新聞,說比特幣可能要分裂比特幣現金,很多持有者可能會憑空多出很多財富,又聯想到前端時間微信群中討論的很火熱的區塊鏈的話題,記得當時有人曾說這可能是影響未來幾年最重要的技術之一,覺得為看懂未來趨勢,有必要再

區塊快速入門

區塊鏈本質上是一個去中心化的分散式賬本資料庫。 泛泛而談就是說,區塊鏈是比特幣的底層技術,而比特幣是一種區塊鏈。 1.具有以下三個性質的系統就是區塊鏈: (1)區塊鏈是一個放在非安全環境中的分散式資料庫(系統); (2)區塊鏈採用密碼學的方法來保證已有資料不可能被篡改; (3)區塊鏈採用共識演算

2.7 區塊:交易確認

Reward(獎勵) 有一件前面的章節中跳過了一個小細節,挖礦獎勵。現在我們準備實現這個。  這個獎勵也就是coinbase交易。當一個節點開始挖新的區塊時,它會把佇列中的交易並準備好coinbase交易放到區塊中。這筆coinbase交易也僅僅是一個包含了礦工的公鑰has

區塊的前世今生

問題 完成 出了 權限管理 沒有 防止 The 解決 授權   大家下午好,這裏是鏈客區塊鏈技術問答社區,現在為大家講解一下 區塊鏈:一種實時記錄全部交易的去中心化公開數據庫,在區塊鏈上進行支付時全網計算機共同查詢區塊鏈數據,共同驗證這筆支付交易是否有效。確認支付後將寫

區塊之間的關係

最近,比特幣和區塊鏈異常火爆,巨頭科技公司紛紛佈局區塊鏈,搶佔風口,加上許多媒體的報道,引起世人的廣泛關注。那麼比特幣和區塊鏈的關係究竟如何呢?比特幣 比特幣是一種數字加密貨幣,並非實體看得到摸得著的人

區塊的大眾科普文

pga 哈希算法 進行 具體步驟 tex 避免 sha 轉換 難題 後傳 很多朋友看了本文後,有一些不理解的地方,為了保持原文,我把問題解釋以及勘誤附在了最後。如果還沒有看過本文,請跳過這一節。如果看過了本文,就直接跳到本文最後的”問題解釋“那一節。這個”後傳“頗有C語言

下車, 區塊不死: 資本下一站, 請關註這些公司

區塊鏈ICO被封殺,比特幣也就隨之被普遍認為是“死了”。問題是下一步會怎樣?不管市場如何變化,資本是永遠不會“死”的。在這個流動性早就嚴重過剩的時代,人們實際上關心的並不是哪個項目的死與活,而是資本將會往哪個方向流動?這才是最具本質性的問題。這些年來隨著比特幣的炒作,多數人似懂非懂地都知道了另一個詞:區塊鏈。

以及區塊原理學習

管理 base58 分布式系 過程 現實社會 ali 同步 結果 計算   2018年春節過後區塊鏈技術一下子火爆起來了,本人也對該技術十分感興趣,因此想研究下區塊鏈技術的原理,看看區塊鏈背後那些技術值得去研究。由於自己缺乏實際的開發經驗和使用經驗,文中難免會有些理解不到位

雖老套但確屬乾貨 | 愛德華·斯諾登:我眼中的區塊

  譯者注:本文作者是本·維茲納(Ben Wizner),他是美國公民自由聯盟的律師,同時還是作家和公民自由倡導者。自2013年7月起,他一直擔任愛德華·斯諾登(Edward Snowden)的首席律師。本文以對話形式,向讀者展示了這個因揭露美國“稜鏡”計劃和“監聽門”的“英雄”

Blockchain(區塊)技術打造去中心化物聯網

比特幣和物聯網這兩個看上去似乎毫不相關的術語,隨著IBM&Samsung在15年2月份演示的ADEPT物聯網解決方案DEMO後,硬是把比特幣和物聯網結合在一起了。 本文就簡單剖析下比特幣和物聯網是否如何結合在一起的,以及它們的結合對未來物聯網又有怎樣的影響。 說明:本文為運維派原創,若你對

什麼是區塊

區塊是一堆交易記錄的集合,我們可以理解成普通記賬本中的一頁,每個頁面記錄很多不同的交易資訊,這些書頁按時間順序裝訂起來便是區塊鏈,分散式賬本便是區塊鏈技術的一種體現。        在比特幣網路中,每個10分鐘會將全網的交易打包起來,加上時間戳形成區塊,併入比特幣賬本,此賬本便是區塊鏈。打包是由各節點競爭來決

區塊 到底是什麼鬼?

作者 | 丹華 文章來源Gitchat,CSDN獨家合作釋出,點選「閱讀原文」檢視交流實錄 專場前言 在全球範圍內,比特幣和區塊鏈已經成為熱潮,有圖為證: 當前區塊鏈行業的現狀和矛盾是什麼? 簡單說,現狀是冰火兩重天。火的一

2015年在區塊方面最具影…

回頭看看,這又是比特幣發展精彩的一年,那我們自然是要評估一下最具影響力的個人了。 當然,今年不再只是關於比特幣的了:比特幣基礎技術 –  區塊鏈技術,也已經擁有了它自己的生命,機構對區塊鏈技術的興趣幾乎達到了狂熱的狀態。 這個行業需要有影響力的人物來為技術發展和監管問題指明方向,樹立意識,為嚴重的全

區塊的未來

很早就想寫一寫區塊鏈(Blockchain)技術,作為比特幣等一系列應用背後最核心的技術,它的前景充滿了各種可能和挑戰。最近身邊不少人感興趣,正好總結下。 起源和背景 相比區塊鏈,更多人都聽說過比特幣。其實最早 08 年的時候比特幣就已經問世了,但真正流行起來還是在

瞭解一下區塊,到底什麼是,什麼是區塊

比特幣區塊鏈無疑是當今業界的最熱門的。通過這篇部落格,我將盡力向大家介紹加密貨幣比特幣的概念,以及它如何創造我們稱之為區塊鏈的革命性技術。 這個問題經常引起混淆。這篇文章可以快速解釋和清理這方面的混亂! 什麼是比特幣? 在我們開始之前,讓我簡要介紹一下貨幣交易

區塊有關的網址彙總(不斷更新中)

比特幣 以太坊: 區塊情況、算力、還有各種API Zcash(ZEC) 市值查詢: 交易所: https://etherdelta.github.io/ ICO https://ico.info http://token.mar

一文看懂區塊

最近的比特幣病毒事件,使的比特幣,區塊鏈技術再次受到人們的廣泛關注。有人把它比做早期的網際網路技術,區塊鏈技術誕生於比特幣。本文簡單介紹比特幣及比特幣的底層技術區塊鏈,分析區塊鏈技術的特點及應用場景。 什麼是比特幣 特幣的概念最初由中本聰在2009年提出,根據中本聰的思

BitcoinBlockChain區塊技術

一、比特幣的歷史 比特幣現在大火,一枚7000多人民幣,遙想當年1萬枚才買一張價值25美元的披薩優惠券,如果上天能給我回到當年的機會的話,我一定買買買!!! 比特幣有很高的開採及投資價值,被我們中國人搞清楚這個事情後,於是資本湧入,它不火都不行,搞到現在全世界挖礦主力礦機