什么是區塊鏈blockchain

    區塊鏈是一個虛擬分類帳,其中每條記賬明細記錄都是一個區塊,這些記錄在網絡中分發給每個人,他們可以讀和追加,但不能修改,增刪改查CRUD中無法進行刪和改,如果想刪改,就追加一條新記錄對原來數值進行沖抵,比如財務做賬時前面“借入錯”一筆賬,后面就追加一條“貸出”一筆相同金額的記錄沖抵;又比如上市公司經常發布季度報表修正,上個月盈利500萬(中國上市公司賣一套房),次月發布公告,上個月盈利修正為300萬,這類似說出的話如同潑出去的水,不能收回了,不能用橡皮擦去修改,財務中如果你想像改數據庫記錄一樣使用SQL的update去修改記錄,涂改財務賬本屬于犯罪。區塊鏈中區塊就是這樣一條記錄鏈接到上一條記錄,如同幼兒園小朋友手拉手,一個盯著一個,如同一個鏈表LinkedList,這樣任何人無法篡改這個鏈,當然這種高度串行化如同事務ACID的串行化一樣造成性能限制,因此制約區塊鏈的廣泛應用的一個瓶頸就是它的吞吐量和并發性能,這些都是其高度事務安全導致的的犧牲方面。

    區塊鏈它其實也是一個保證高一致性的分布式事務數據庫,維護一個不斷增長的有序的事務(transaction)記錄列表,它的分布式事務實現與集中式的數據庫分布式事務實現不同,后者通常以Paxos或Raft進行共識凝聚,最終將所有服務器節點的狀態修改成一致狀態;區塊鏈的分布式事務機制也與傳統的2PC兩段式事務機制不同,后者主要依靠對事務參與者資源進行鎖定實現的,區塊鏈的事務機制非常類似于事件溯源Event Sourcing的事務機制。區塊鏈不但保證交易的高度事務完整性,還同時結合或耦合了安全加密算法,這種一體化的設計非常適合和錢有關各種轉賬交易、智能合約或加密貨幣等應用。

    區塊鏈中每個塊包含一個頭部和一個正文:

       這些是每個塊具有的數據。除此之外,每個塊都有一個由開發人員定義的最大字節數。達到此最大大小時,此塊將添加到區塊鏈中,并開始創建新區塊。

塊號BlockNumber

      區塊鏈中的每個區塊都有一個代表區塊在整個鏈中位置的數字,鏈中的第一個塊有一個特殊的名稱,它們被稱為genesis塊,也就是起始塊,創世塊。

前一塊號PrevBlockHash

   每個塊在頭部中都有前一個塊哈希號的引用,這非常重要,因為這就是區塊鏈保持一致并控制不變性的方式,創世塊沒有任何引用前一個塊的內容,因為它是第一個塊。

MerkleRoot

      merkleRoot是塊內所有事務的散列結果,如果在塊內部更改了任何內容,則此哈希值也會更改并使更改的塊和下一個塊無效。
      現在你可以想想:為什么這個字段被稱為MerkleRoot而不是blockHash?這是因為比特幣使用Merkle樹算法從塊的數據生成哈希值的。

nonce

     這是一個與塊的挖掘過程相關的32位數字。此數字僅用于查找與區塊鏈難度相匹配的哈希值

CreationTimestamp

     這是塊創建的時間戳。

數據

     這是所有交易數據的保留位置。

哈希

哈希算法實際上取決于區塊鏈的每個實現,比特幣使用長度為256位的SHA-256(安全哈希算法)。

 

區塊鏈

      區塊鏈通過prevBlockHash將塊鏈接在一起:

    merkleRoot值是從Data信息生成的,如果有任何變化,merkleRoot也會改變,并且在更改的塊之后鏈接prevBlockHash的其余塊將不再有效。這就是區塊鏈不可變的原因。

工作證明

    工作證明對于區塊鏈是一個重要特征,而且是必須的;區塊鏈中其他經常被提及特征(如安全性)反而是次要的,雖有用但非必須。

    任何分類賬都絕對需要順序。一個人不能花沒有收到的錢,也不能花已經花了的錢。區塊鏈交易(或稱區塊鏈事務)必須明確順序,并且不需要可信任的第三方來協調順序,這就是前面講的分布式事務機制。如果交易是由世界各地的匿名參與者產生的,并且沒有中心化組織負責交易之間的順序排列(不同于集中式的分布式事務數據庫),但事實確實需要一個排序,那么該怎么辦呢?雖然一個交易(或塊)可能包括時間戳,但這些時間戳怎么可信?

    在分布式系統中不可能將事件與時間點關聯起來,這是一個未解決的問題,直到中本聰發明了區塊鏈的工作證明這個解決方案之后,分散的分類帳才可能得以實現。

    區塊鏈的工作證明是一個符合某個要求的SHA-2哈希值,這個值是非常難以找到的。困難之處在于哈希小于一個特定數字,數字越小,輸入值越稀少并且發現它的難度就越高。它被稱為“工作證明”,就是因為已知具有這種哈希的值已經非常罕見,這意味著找到新的這樣的值需要大量的試錯,即“工作”。反過來,這意味著 消耗"時間"。比特幣尋找難度是動態調整的,這樣每十分鐘平均能找到一個正確的哈希值。

    也就是說,區塊鏈沒有辦法決定誰最快算出哈希值(因為每個參與者的服務器時鐘不可能像對手表那樣對得精確),那么延后一段時間比如10分鐘,誰先算出誰獲勝,然后迅速繁衍,誰的鏈越長越有優勢,這是對于10分鐘內可能有兩個獲勝者的附加判斷條件。

相關文章

用Javasctipt代碼簡單模擬解釋區塊鏈概念

從CRUD編程切換到事件溯源和區塊鏈編程

程序員眼中的區塊鏈

區塊鏈的工作證明其實是一個分布式時鐘

Hyperledger Fabric v1架構簡介

區塊鏈的幾種共識算法簡介

分布式共識如何運作?

分布式事務 #區塊鏈 #事件溯源

一级黄色录像影片 夫妻性生活影片 免费在线观看 一级a做爰片