區塊鏈入門

Pink0453發表於2018-06-25

1.區塊鏈簡介

     區塊鏈英文Blockchain,字面意思就是(交易資料)塊(block)的鏈(chain)

  2008年中本聰發表<<比特幣:一種點對點的電子現金系統>>

  技術:實際在中本聰的論文中並沒有提到區塊鏈這種概念,只介紹了P2P.密碼學.共識機制.激勵機制.貨幣理論這些技術上的問題,所以說區塊鏈起源於比特幣,是多種技術的整合的結果.

  概念:區塊鏈是一種分散式賬本,一種通過去中心化.去信任的方式集體維護一個可靠資料庫的技術方案

  特點:區塊鏈幾乎不可被篡改的資料庫,分散式不僅體現為資料的分散式儲存,也體現為資料的分散式記錄,由系統參與者共同維護

  開放,共識

  任何人都可以參與到區塊鏈網路,每一臺裝置都能作為一個節點,每個節點都允許獲得一份完整的資料庫拷貝.節點間基於一套共識機制,通過競爭計算來共同維護一個區塊鏈.任一節點失效,其餘的節點仍然能正常工作.

  去中心,去信任

  區塊鏈由眾多節點共同組成一個端到端的網路,不存在中心化的裝置和管理機構.節點之間資料交換通過數字簽名技術進行驗證,無需相互信任,只要按照系統既定的規則進行,節點之間不能也無法欺騙其他節點

  交易透明,雙方匿名

  區塊鏈的執行規則是公開透明的,所有的資料資訊也是公開的,因此每一筆交易都是對所有節點可見的.由於節點與節點之間是去信任的,因此節點之間無需公開身份,每個參與者的節點都是匿名的.

  不可篡改,可追溯

  單個甚至多個節點對資料庫的修改無法影響其他節點的資料庫,除非能控制整個網路中超過一半的節點同時修改.區塊鏈中的每一筆交易都通過密碼學方法與相鄰兩個區塊串聯,因此可以追溯到任何一筆交易的前生今世

2.區塊鏈的分類 

    公共鏈:
    無官方組織及管理機構,無中心伺服器,參與者按照系統的規則自由接入網路,不受控制,節點間給予共識機制展開工作.
    私有鏈:
    建立在某個組織,機構,或者企業內部等,系統的運作規則根據企業的要求進行設定,修改甚至是讀取許可權僅限於少數節點,同時仍保留著區塊鏈的真實性和部分去中心化得特性
    聯盟鏈:
    由若干機構聯合發起,介於公有鏈和私有鏈之間,部分去中心化
    側鏈:
    同樣的幣種,不同的區塊鏈
    互聯鏈:
    不同的區塊鏈之間結合,形成更大的區塊鏈.

    

3.區塊鏈技術基本概念

資料區塊:


挖礦與分叉:

    所謂挖礦為窮舉隨機數演算法,參與者把上個區塊的雜湊值加上10分鐘內的交易全部打包,再加上一個隨機數x(自己窮舉),算出一個256位的字串雜湊值,讓該值小於比特幣網路中給定的一個數,這個數越小,計算出來越難(挖礦難度值).系統每隔2週會根據上一週期的挖礦時間來調整挖礦難度,來調節生成新區塊的生成時間穩定在10分鐘左右.為了避免震盪,每次調整的最大幅度為4倍

    需要說明的是,可能會出現不同地區的礦工幾乎同時挖出2個新區塊加以連結的情況,這時主鏈上就會出現分叉,系統並不會馬上確認哪個區塊不合理,而是約定後續礦工總是選擇累計工作量證明最大的區塊鏈.因此,當主鏈分叉後,後續區塊的礦工將通過計算和比較,將其區塊連結到當前累計工作量證明最大化的備選鏈上,形成更長的新主鏈,並自動拋棄分叉處的短鏈,從而解決分叉問題.

時間戳和不可篡改性:

    時間戳是從1970年01月01日 00時00分00秒(格林威治時間,北京時間08:00:00)
開始的總秒數。
    時間戳作為存在性證明,增加了時間的維度,保證不可篡改、不可偽造

分散式資料庫:

    每個區塊就像記賬本一樣,記錄了所有的交易資訊永久的嵌入了資料區塊中供被人查詢.這些資料儲存在網路上每一個節點中組成了堅韌的分散式資料庫系統.任何一個節點的資料被破壞都不會影響整個資料庫的運轉,因為健康節點中都儲存了完整的資料庫.

UTXO交易模式:

    


    請轉到http://8btc.com/article-4381-1.html,作者寫的非常詳細,本人不再贅述.

雜湊函式:

    一種將輸入的位元組資料雜湊化不可逆函式(對映),
    相同的資料輸入將得到相同的結果
    輸入資料只要稍有變化則將得到一個千差萬別的結果,結果無法預測
    正向計算(由資料計算其對應的Hash值)十分容易
    逆向計算(俗稱“破解”,即由Hash值計算出其對應的資料)極其困難

Mekle樹:


一種雜湊二叉樹(根節點、父節點、子節點、葉子節點)

可以快速校驗大規模資料的完整性

在比特幣網路中,Merkle 樹被用來記錄區塊中所有的交易資訊,最終生成這個區塊

所有交易資訊的一個統一的雜湊值,任何一筆交易資訊的改變都會使得 Merkle 樹改變.

Merkle樹與spv:

SPV: 簡化支付驗證協議

SPV節點: 不需要維護一條完整的區塊鏈, 而通過Merkle路徑去驗證交易的存在。

Merkle樹詳細分析: https://blog.csdn.net/qaz540411484/article/details/80806363

雙重支付:

    雙重支付問題又稱雙花問題,即利用貨幣的數字特性用同一筆錢支付兩次或者多次.

    傳統金融的貨幣體系既有物理實體所以可以避免.

    但在其他的電子貨幣體系中,則需要可信的第三方機構監管.

    區塊鏈技術則在去中心化的系統中不借助任何第三方只通過分散式節點之間的相互驗證和共識機制,有效的解決了雙重支付問題.

    通過區塊連結形成的時間戳技術加上驗證比特幣是否滿足UTXO和數字簽名,避免了雙重支付問題,在資訊的傳輸的同時完成了價值轉移.

    如果有人用同一筆UTXO構造了兩筆付給不同的交易方,則比特幣客戶端只會轉發最先被偵聽到的.礦工會選擇將那筆交易包入未來的區塊,當其中一筆交易所在的區塊後5個區塊,這筆交易已經得到了6個區塊的確認.在比特幣的區塊鏈上,通常做法是6個確認過後被雙花的概率很小.按照中本聰白皮書的計算,6個確認後雙花的概率大概0.024%.

P2P網路:

   

詳情見:

加密演算法:

    

對稱加密演算法在加密和解密時使用的是同一個祕鑰
例如:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES
金鑰可能會洩露

非對稱加密演算法需要公鑰、私鑰進行加密和解密
例如:RSA、 ECC(橢圓曲線加密演算法) 、Elgamal、揹包演算法、Rabin、D-H、
不需要廣播私鑰,安全性更高,但是計算難度、複雜度更高


區塊鏈這裡主要討論非對稱加密演算法即ECC(橢圓曲線加密演算法)

數字簽名:

    數字簽名涉及到一個雜湊函式、傳送者的公鑰、傳送者的私鑰。
    數字簽名有兩個作用:
    一是能確定訊息確實是由傳送方簽名併發出來的
    二是數字簽名用到的雜湊函式能確定訊息的完整性

    

比特幣隱私模型:

    基於匿名交易(公鑰地址)

4.區塊鏈交易流程

第一步:所有者A利用他的私鑰對前一次交易(比特幣來源)和下一位所有者B簽署一個數字簽名,並將這個簽名附加在這筆交易的末尾,製作成交易單.(要點:B以公鑰作為接收方的地址;A的私鑰簽名)(基於UTXO模型)

第二步:A將交易單廣播至全網,比特幣就傳送給了B,每個節點都將收到的交易資訊納入本地池,等待生成新區快(要點:對B而言,這筆交易在比特幣錢包可以即時看到,但直到區塊確認成功後才可以使用)

第三步:節點收到交易單後對交易進行驗證:交易必須由交易發起者簽名,交易發起者有足夠的餘額可以支付;然後,通過解一道數學難題去獲得建立新區塊的權利,並爭取到比特幣的獎勵(新比特幣會在此過程中產生)(要點:礦工通過解數學難題挖礦將交易打包到新的區塊中)

第四步:當一個節點找到解(符合條件的隨機數)時,它就向全網廣播該區塊記錄的所有蓋時間戳的交易,全網其他節點收到後進行核對(要點:時間戳用來證實特定區塊必然與特定時間是的確存在的;比特幣網路採取從5個以上節點時間的中位數作為時間戳)(驗證比對區塊頭的Merkle樹根的hash值)

第五步:全網其他節點核對該區塊的正確性,沒有錯誤後他們將在該合法區塊之後競爭下一個區塊,這樣就形成了合法記賬的區塊鏈(要點:每個節點都儲存著一套相同的公共賬本;一筆交易從支付到最終確認成功,得到6個區塊確認之後才能真正到賬)


5.資料結構

    區塊鏈:區塊鏈以區塊為單位組織資料;全網所有的交易記錄都以交易單的形式儲存在全網唯一的區塊鏈當中


    區塊:區塊是一種記錄交易的資料結構;區塊是由區塊頭和區塊主體組成的,區塊主體只記錄前一段時間內的所有交易資訊,區塊鏈的大部分功能都由區塊頭實現

    區塊頭:


創世區塊:



區塊形成過程:


7.共識機制

以下介紹比特幣的共識,詳細請移步:https://blog.csdn.net/qaz540411484/article/details/80811641


8.區塊鏈主要應用場景


相關文章