一、區塊鏈基本技術
區塊鏈:區塊鏈是一種單向鏈式結構,由區塊連接而成。
第一個區塊稱為創始區塊。
除了創始區塊外,每個區塊中都保留了上一個區塊的Hash地址(區塊的唯一標識),通過引用上一個區塊的Hash地址,區塊間形成了鏈式關系,從而形成了區塊鏈。
(一)區塊(區塊頭+區塊體)
其中區塊的大小被限制在1M以內(為了防止資源浪費和DOS攻擊),區塊頭的大小被固定為80個字節。
一個區塊包含兩個部分:
1、區塊頭
區塊頭中記錄了版本號、上一個區塊的Hash地址、merkle根、區塊創建時間戳、區塊的工作量難度目標以及用于計算目標的參數值。
2、區塊體
區塊體區塊體存儲著這個區塊的詳細數據(Data:交易數量以及交易數據),這個數據包含若干行記錄,可以是交易信息,也可以是其他某種信息。區塊與Hash是一一對應的,Hash可以當做是區塊的唯一標識。
1、時間戳
時間戳是什么?時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。
1、區塊鏈通過時間戳保證每個區塊依次順序相連。時間戳使區塊鏈上每一筆數據都具有時間標記。
2、時間戳的組成是一個經加密后形成的憑證文檔
3、時間戳產生的過程為:用戶首先將需要加時間戳的文件用Hash編碼加密形成摘要,然后將該摘要發送到DTS,DTS在加入了收到文件摘要的日期和時間信息后再對該文件加密(數字簽名),然后送回用戶。
它包括三個部分:需加時間戳的文件的摘要;DTS收到文件的日期和時間;DTS的數字簽名。一般來說,時間戳產生的過程為:用戶首先將需要加時間戳的文件用編碼加密形成摘要,然后將該摘要發送到鏈上,在加入了收到文件摘要的日期和時間信息后再對該文件加密(數字簽名),然后送回用戶。
時間戳的這種設計,使得更改一條記錄的困難程度按時間的指數倍增加,越老的記錄越難更改。這是因為,如果改動某個區塊里的一條記錄,意味著該區塊原來的默克爾樹根失效了,需要改動區塊頭,該區塊的數字指紋隨之失效。又由于下一個區塊的區塊頭包含這個哈希指針,這就意味著下一個區塊也需要改動。如此直到最新的那個區塊。
3、Merkle樹
4、擴容
(二)數據結構
1、鏈表+hash散列
【鏈表】
? ?為了更好的理解:將鏈表和數組進行比較
特征一:
數組空間的內存地址是連續的
鏈表節點的內存地址是不連續的
特征二:
鏈表長度可以根據需求改變大小
但是數組長度是固定的
【鏈表示意圖】
1、鏈表示意圖和火車相似
2、每個車廂稱為節點,鏈表節點
3、第一個節點稱為頭節點,最后一個稱為尾節點
貓說:區塊鏈可以用鏈表去維護,當然也可以用數組去維護
【hash散列】
2、區塊高度+區塊標識
區塊高度指的是:?區塊鏈接在主鏈的個數,也就是連接在區塊鏈上的區塊數。
【貓說】:區塊高度是區塊的標示符(不唯一),區塊有兩個標示符,一是區塊頭的哈希值,二是 ? ? ? ? ? ? ? ? ? ? 區塊高度
【作用】
哈希值: ? 溯源區塊, 區塊哈希值可以唯一、明確地標識一個區塊,并且任何節點通過簡單地對區塊頭進行哈希計算都可以獨立地獲取該區塊哈希值
區塊高度:指該區塊在區塊鏈中的位置?
【貓說】:區塊高度并不是唯一的標識符。雖然一個單一的區塊總是會有一個明確的、固定的區塊高度,但反過來卻并不成立,一個區塊高度并不總是識別一個單一的區塊。兩個或兩個以上的區塊可能有相同的區塊高度,在區塊鏈里爭奪同一位置,失敗方的區塊會被拋棄掉
3、分叉
8、有向無環圖/纏結Tangle
(三)加密算法
? ? ? ? ? ? ? ? ? ? 1、什么是加密/非對稱加密
2、數字簽名/數字身份/數字證書
3、哈希函數
4、RSA/橢圓曲線加密算法
5、環簽名
6、混幣服務
7、零知識證明
(四)分布式技術
1、節點/全節點
2、點對點通訊
3、分布式存儲
(五)共識機制
1、什么是共識機制
2、POW
3、POS
4、DPOS
5、51%攻擊
6、拜占庭將軍問題
7、改進型實用拜占庭容錯PBFT