1. 程式人生 > >區塊鏈學習入門簡介(一)

區塊鏈學習入門簡介(一)

         區塊鏈入門簡單記錄,參照了很多網上的資源,本篇目的是瞭解區塊鏈是在做一個什麼樣的事情以及其特點。

近年來,區塊鏈技術正在經歷快速發展,由於其具有:去中心,無需信任系統(第三方),開放性,不可篡改等特點使其在金融,電子商務,存在證明,身份驗證,檔案儲存等多個領域具有非常廣泛的應用前景。自2015年9月,13家頂級銀行達成比特幣技術,支援金融部署區塊鏈就能夠看出一些端倪。區塊鏈將成為新時代的一大金融新契機。加之區塊鏈金融峰會的舉辦,更是將這種可能推上了新的高度,自從2016年1月20日,中國人民銀行在數字貨幣研討會上表示高度重視區塊鏈(Blockchain)等技術帶來的新機遇和挑戰,並爭取早日推出央行發行的數字貨幣以來,區塊鏈的概念在國內越發火熱,吸引了金融機構空前的關注。

什麼是區塊鏈?

         談到區塊鏈就要從比特幣開始說起,區塊鏈(Blockchain)是比特幣的底層技術,像一個數據庫賬本,記載所有的交易記錄。首先,不要把比特幣當成一種貨幣,而是一個總賬。它是個電子總賬,網路上的每個參與者的電腦都有一份總賬的備份,並且所有的備份都是實時的持續的更新、對賬以及同步著。而這個總賬相當於我們現在的資料庫的功能,儲存著相應的資訊,在比特幣網路中它儲存著交易記錄。這個總賬是由一個個資料塊(稱之為區塊)串接起來的(相當於資料結構中的一個單鏈表),每個資料塊中包含了一次比特幣網路交易的資訊,通過使用密碼學方法進行計算與加密,用於驗證其資訊的有效性(防偽)和生成下一個區塊。而由一個個這樣的區塊串聯起來的資料塊鏈我們稱之為區塊鏈。而這個區塊鏈中記錄著我們所有的資訊,他並不是又某個人或某個團體進行維護,而是全網每個節點都遵循一種共識機制共同去維護。

         區塊鏈是一種類似於NoSQL(非關係型資料庫)這樣的技術解決方案統稱,並不是某種特定技術,能夠通過很多程式語言和架構來實現區塊鏈技術。並且實現區塊鏈的方式種類也有很多,目前常見的包括工作量證明,權益證明,股份授權證明機制等。

區塊鏈相關名詞和概念:

區塊(Block)是區塊鏈中的一條記錄,包含並確認待處理的交易。

挖礦(Mining)指通過計算形成新的區塊,是交易的支持者利用自身的計算機硬體為網路做數學計算進行交易確認和提高安全性的過程。以比特幣為例:交易支持者(礦工)在電腦上執行比特幣軟體不斷計算軟體提供的複雜的密碼學問題來保證交易的進行。作為對他們服務的獎勵,礦工可以得到他們所確認的交易中包含的手續費,以及新建立的比特幣。

共識機制

顧名思義,就是在一個問題上達成共識的一套方法。在區塊鏈中,共識機制也是區塊鏈的底層技術,也是最為重要的技術。它的存在就是為了完成節點間資訊同步,交易的確認,網路執行等重要任務。

HASH值

通過雜湊函式運算,從而對映成的二進位制的值稱為雜湊值。任何檔案都可以被對映(生成)為一段雜湊值,比如一段文字,視訊,檔案,照片等等。強調下,雜湊運算不是一種加密手段,因為它是不可逆的運算過程,無法解密。

數字簽名

加密的簽名是一個讓人可以證明所有權的數學機制。就像日常生活檔案中的手寫簽名一樣,即能證明所屬權的唯一標識。在區塊鏈中,普遍用私鑰進行簽名。

私鑰(Private Key)是一個證明你有權從一個特定的錢包消費電子貨幣的保密資料塊,是通過數字簽名來實現的。

去中心化

由於使用分散式核算和儲存,不存在中心化的硬體或管理機構,任意節點的權利和義務都是均等的,系統中的資料塊由整個系統中具有維護功能的節點來共同維護。

開放性

系統是開放的,除了交易各方的私有資訊被加密外,區塊鏈的資料對所有人公開,任何人都可以通過公開的介面查詢區塊鏈資料和開發相關應用,因此整個系統資訊高度透明。

自治性

區塊鏈採用基於協商一致的規範和協議(比如一套公開透明的演算法)使得整個系統中的所有節點能夠在去信任的環境自由安全的交換資料,使得對“人”的信任改成了對機器的信任,任何人為的干預不起作用。

資訊不可篡改

  一旦資訊經過驗證並新增至區塊鏈,就會永久的儲存起來,除非能夠同時控制住系統中超過51%的節點,否則單個節點上對資料庫的修改是無效的,因此區塊鏈的資料穩定性和可靠性極高。


區塊鏈的大體工作流程:

拿比特幣來說大體的流程是:

第一步:每一筆交易為了讓全網承認有效,必須廣播給每個節點(node:也就是礦工);

第二步:每個礦工節點要正確無誤的給這十分鐘的每一筆交易蓋上時間戳並記入那個區塊(block);

第三步:每個礦工節點要通過解SHA256難題去競爭這個十分鐘區塊的合法記賬權,並爭取得到二十五個比特幣的獎勵(頭四年是每十分鐘五十個比特幣,每四年遞減一半);

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

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

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

區塊鏈解決的重要問題:

1 “雙花”問題:

所謂“雙花”難題,是指在區塊鏈加密技術出現之前,加密數字貨幣和其他數字資產一樣,具有無限可複製性,如果沒有一箇中心化的媒介機構,人們沒有辦法確認一筆數字現金是否已經被花掉。因此,在交易中必須有一個可以信貸的第三方來保留交易總賬,從而保證每筆數字現金只會被花掉一次。中本聰通過使用區塊鏈蓋時間戳併發布全網的方式,保證每筆貨幣被支付後,不能再用於其他支付。當且僅當包含在區塊中的所有交易都是有效的且之前從未存在過的,其他節點才認同該區塊的有效性。

拜占庭將軍問題

拜占庭將軍問題是一個協議問題,拜占庭帝國軍隊的將軍們必須全體一致的決定是否攻擊某一支敵軍。問題是這些將軍在地理上是分隔開來的,並且將軍中存在叛徒。叛徒可以任意行動以達到以下目標:欺騙某些將軍採取進攻行動;促成一個不是所有將軍都同意的決定,如當將軍們不希望進攻時促成進攻行動;或者迷惑某些將軍,使他們無法做出決定。如果叛徒達到了這些目的之一,則任何攻擊行動的結果都是註定要失敗的,只有完全達成一致的努力才能獲得勝利。

為了解決這個問題,數學家設計了一套演算法,讓將軍們在接到上一位將軍的資訊之後,加上自己的簽名再轉發給除自己之外的其他將軍。在這樣的資訊連環週轉中,將軍們可以在不找出叛徒的情況下達成共識,從而保證得到的資訊和作出的決策是正確的。

區塊鏈通過為傳送資訊加入了成本,也就是基於計算一個隨機雜湊演算法得到遺傳64 位的隨機數字和字母組成的字串的“工作量證明”,並加入了一個隨機元素以保證在一個時間只有一個將軍可以進行廣播,解決了這個問題。

儘管單個雜湊值用現在的計算機可以幾乎即時的計算出來,但只有一個前13個字元是0的雜湊值結果可以被比特幣系統接受成為“工作量證明”。這樣一個13個0的雜湊值是極其不可能與罕見的,並且在當前需要花費整個比特幣網路大約10分鐘的時間來找到一個。在一臺網路中的機器隨機的找到一個有效雜湊值之前,上十億個的無效值會被計算出來,這就是減慢資訊傳遞速率並使得整個系統可用的“工作量證明”。那臺發現下一個有效雜湊值的機器(或者說在我們類比中的城邦),把所有的之前的資訊放到一起,附上它自己的,以及它的簽名/印章/諸如此類,並向網路中的其他機器廣播出去。只要其他網路中的機器接收到並驗證通過了這個13個0的雜湊值和附著在上面的資訊,他們就會停止他們當下的計算,使用新的資訊更新他們的總賬拷貝,然後把新更新的總賬/區塊鏈作為雜湊演算法的輸入,再次開始計算雜湊值。雜湊計算競賽從一個新的開始點重新開始。如此這般,網路持續同步著,所有網路上的電腦都使用著同一版本的總賬。最後,在個人向網路輸入一筆交易的時候,他們使用內嵌在比特幣客戶端的標準公鑰加密工具來同時他們的私鑰以及接收者的公鑰來為這筆交易簽名。這對應於拜占庭將軍問題中他們用來簽名和驗證訊息時使用的“印章”。因此,雜湊計算速率的限制,加上公鑰加密,使得一個不可信網路變成了一個可信的網路,使得所有參與者可以在某些事情上達成一致(比如說攻擊時間、或者一系列的交易、域名記錄、政治投票系統、或者任何其他的需要分散式協議的地方)。