從名字上可以看出“區塊鏈”是由“區塊”和“鏈”組成的。壹個個的區塊(數據塊)通過某種方式連接在壹起就形成了壹個區塊鏈。
區塊數據包含哪些呢?通過什麽方式連接在壹起呢?
可以看到區塊中包含區塊頭和前個區塊頭的哈希值,這樣就確定了所有的區塊可以按照壹定的順序鏈接在壹起。其中哈希值是按照哈希加密的函數來實現的。在C/C++語言中有指針這個概念:指針就是地址,壹塊內存數據在內存中的地址。區塊鏈也是根據類似的概念把每個區塊的哈希值作為下壹個區塊的地址。
什麽是哈希值?
哈希值就是壹組數據的“摘要”,是通過哈希加密算法生成的壹組字符串。而且秘鑰有壹組秘鑰,公鑰和撕咬,公鑰提供給外界來加密數據,用來解密數據。通過公鑰加密好的數據,只能通過私鑰來解密,即使別人有拿到數據有公鑰也無法解密數據。這樣就保證了數據安全性。私鑰也可以作為這個節點的唯壹身份驗證,這樣就保證了每個節點的隱私,實現了匿名。如果其中壹個節點修改了其中的某部分數據,那麽這個區塊的哈希值就會發生變化,從而導致後面的所有區塊都會發生變化,當這個區塊把修改好的數據通知其他區塊時,其他的區塊發現發過的數據與自己保存的數據不壹致,就拒絕接受數據寫入自己的賬本中。從而保證了數據的壹致性。
什麽是去中心化?
通常大家所有的QQ、微信等,都是有壹個後臺服務器的,統壹的處理各個手機傳過來的數據,通過服務器統壹來處理。區塊鏈技術就是取消統壹的服務器處理,每個節點即使客戶端又是服務器。當某個節點通過網絡發送數據後,其余的節點接收到數據然後通過壹系列的驗證,確認數據沒有問題後,寫入到自己的區塊中。這個節點就是服務器,其他節點就是客戶端。同樣的,當這個節點接收到數據後,其他某個節點就是服務器,這個節點就是客戶端。這樣做的好處就是去除了服務器,每個節點可以獨立的處理數據,節約成本。
如何保持數據壹致性?
所謂數據壹致性就是所有節點的數據或者狀態在同壹時刻保持壹致。區塊鏈的本質是壹個分布式的應用軟件,如果是中心化的場景,達成壹致是不成問題的,因為只有個數據備份。分布式環境中,是通過網絡來傳遞數據,而且在網絡環境中可能是不可靠的、延時甚至出現故障、關機重啟等各種各樣影響數據壹致情況。
FLP定理 :不要浪費時間去為了異步分布式系統設計在任意場景下都能實現***識的算法,在允許節點失效的情況下,純粹異步系統無法確保壹致性在有限的時間完成。
CAP定理:分布式計算系統不可能同時確保壹致性、可用性和分區容錯性,這三者不可能兼得。