經過查詢網上的一些資料,簡單整理了一些區塊鏈的知識,旨在整理本身所學內容,梳理知識框架。算法
區塊鏈的定義數據庫
簡單來講,區塊鏈是由節點參與的分佈式數據庫系統,最主要的的特色是不可更改,不可僞造。安全
從另外一個角度來講,區塊鏈是由一串使用密碼學方法產生的數據塊組成的。每個區塊都包含了上一個區塊的哈希值,從創世區塊開始鏈接到當前區塊,造成塊鏈。每個區塊都確保時間順序在上一個區塊以後產生,不然前一個區塊的哈希值是未知的。當出現同時產生兩個區塊A和B時,根據中本聰提到的,每一個節點先收到哪一個就追隨哪一個(提早驗證過),這個時候就會出現AB分叉,可是此時兩個區塊都是正確的。當一個新的區塊C被廣播出來,假如區塊C承認區塊A,A+C會成爲最長的鏈,而節點始終都將最長的鏈視爲正確鏈,而且持續工做和延續它,所以,收到區塊C的廣播後,以前承認區塊B的節點就會承認C,而且下載區塊A,將C做爲本身追隨的對象。網絡
區塊鏈也指代基於區塊鏈結構實現分佈式記帳技術,包括分佈式公式、隱私與安全保護、點對點通訊技術、網絡協議以及智能合約。架構
簡單介紹一些區塊鏈中經常使用的術語:框架
交易(Transaction):指一次對帳本的操做,致使帳本中狀態的一次改變(如添加一條轉帳記錄)。分佈式
區塊(Block):記錄一段時間內發生的交易和狀態結果等,是對當前帳本狀態的一次共識。區塊鏈
鏈(chain):由區塊按照當前發生順序串聯而成,是整個帳本狀態變化的日誌記錄。spa
若是把區塊鏈系統看做一個狀態機,而每次交易意味着一次狀態的改變,生成的區塊就是參與者對其中狀態改變結果(交易致使的)的共識。日誌
區塊鏈的結構
由上圖能夠看到一個區塊由兩個部分組成:區塊頭和區塊體。其中區塊頭包括版本號、上一個區塊哈希值、Merkle根節點、時間戳、難度值、隨機數。而區塊體存儲交易數據。
大小 | 字段 | 描述 |
4字節 | 版本 | 版本號,用於跟蹤軟件/協議的更新 |
32字節 | 上一個區塊哈希值 | 引用區塊鏈中父區塊的哈希值 |
32字節 | Merkle根節點 | 該區塊中交易的merkle樹根的哈希值 |
4字節 | 時間戳 | 該區塊產生的近似時間(精確到秒的Unix時間戳) |
4字節 | 難度目標 | 該區塊工做量證實算法的難度目標 |
4字節 | Nonce | 用於工做量證實算法的計數器 |
區塊頭組成如上表
區塊鏈應用場景
從計算特色上,區塊鏈技術有三種典型的演化場景,數字貨幣、分佈式應用引擎、帶權限的分佈式帳本
按照節點的參與方式的不一樣,區塊鏈技術能夠分爲三大類:公有鏈、聯盟鏈、私有鏈
公有鏈,顧名思義,任何人均可以參與使用和維護,參與者多爲匿名。典型的如比特幣和以太坊區塊鏈,信息是徹底公開的。
若是進一步引入許可機制,能夠實現私有鏈和聯盟鏈兩種類型。
私有鏈,由集中管理者進行管理限制,只有內部少數人能夠使用,信息不公開。通常認爲跟傳統中心化記帳系統的差別不明顯。
聯盟鏈則介於二者之間,由若干組織一塊兒合做(如供應鏈機構或銀行聯盟等)維護一條區塊鏈,該區塊鏈的使用必須是帶有權限的限制訪問,相關信息會獲得保護,典型如超級帳本項目。在架構上,現有大部分區塊鏈在實現都至少包括了網絡層、共識層、智能合約和應用層等分層結構,聯盟鏈實現往還會引入額外的權限管理機制。