1.1 區塊鏈基本概念
阿新 • • 發佈:2018-12-22
- 區塊
- 概念:區塊就是一種資料結構
- 一個區塊包含一組經過驗證的交易, 驗證是一個檢查資產提供方的交易簽名的過程
- 區塊內容如下
- 區塊號碼,也就是區塊高度
- 當前區塊的雜湊值
- 默克爾樹根
- 時間戳
- 區塊大小
- 隨機數
- 交易列表
- 創世區塊:區塊鏈中的第一個區塊
- 鏈
- 每個區塊頭裡包含上一個區塊的區塊頭雜湊 值,形成一條單向鏈
- 區塊裡任何一個改動,都會使得鏈上它後面 的區塊頭產生相應的修改
- 節點
- 執行區塊鏈軟體的計算機
- 分類
- 全節點 :同步整個區塊鏈並對交易做驗證的節點,同時 中繼區塊的在網路上的傳播
- 輕節點 :不儲存所有區塊,依賴全節點做交易驗證
- 挖礦節點: 帶挖礦功能的全節點
- 挖礦
- 區塊是在挖礦的過程中產生的
- 什麼叫挖礦:窮舉隨機數演算法,把上個區塊的雜湊值加上10分鐘內的全部交易打包,再加上一個隨機數,算出一個256位的字串雜湊值,隨機數Nonce需要使雜湊值滿足一定條件,就可以獲得這個區塊的交易記賬權。新產生的區塊需要快速進行廣播,以便其它節點進行驗證,防止造假
- 分叉
- 分類
- 不同地區的兩個礦工,同時挖出兩個新的區塊加以連結,就會出現分叉(這個應該叫挖礦分叉)
- 解決方案:約定後續礦工選擇累計工作量證明最大的區塊鏈、具體如下:
- 由於不同的礦工跟從了不同的區塊,在分叉出來的兩條不同鏈上,算力是有差別的。形象地說,就是跟從兩個鏈礦工的數量是不同的。
- 由於解題能力和礦工的數量成正比,因此兩條鏈的增長速度也是不一樣的,在一段時間之後,總有一條鏈的長度要超過另一條。當礦工發現全網有一條更長的鏈時,他就會拋棄他當前的鏈,把新的更長的鏈全部複製回來,在這條鏈的基礎上繼續挖礦。所有礦工都這樣操作,這條鏈就成為了主鏈,分叉出來被拋棄掉的鏈就消失了
- 解決方案:約定後續礦工選擇累計工作量證明最大的區塊鏈、具體如下:
- 礦工遵從不同的機制(比如區塊鏈的升級),也會出現分叉(這裡可以稱為區塊鏈分叉)
- 分類
- 硬分叉:如果區塊鏈軟體的共識規則被改變,並且這種規則改變無法向前相容,舊節點無法認可新節點產生的區塊,即為硬分叉。 硬分叉要求所有節點升級到新的軟體,否則就會分開成兩條鏈,一條是符合新規則的新鏈, 一條是不符合新規則的老鏈。
- 軟分叉:如果區塊鏈的共識規則改變後,這種改變是向前相容的,舊節點可以相容新節點產生的區塊,即為軟分叉。軟分叉需要大部分的節點更新軟體以執行新的規則
- 分類
- 不同地區的兩個礦工,同時挖出兩個新的區塊加以連結,就會出現分叉(這個應該叫挖礦分叉)
- 分類
- 時間戳與不可篡改
- 在區塊鏈系統中,獲得記賬權的節點在連結區塊時需要在區塊頭中加蓋時間戳,用於記錄當前區塊的資料寫入時間。
- 時間戳可以作為存在性證明的重要引數,它能夠證明特定的資料在某個時刻是存在的,這是確保區塊鏈資料庫不可篡改,不可偽造的關鍵性因素
- 分散式資料庫
- 區塊鏈資料區塊中的資料會存放在每一個節點中,所有節點組成了一個分散式資料庫系統。任何一個節點被破壞都不會影響其它的健康節點,因為其他健康節點都儲存了完整的資料庫
- 交易
- 概念:記錄一筆資產在交易參與者之間的轉移 ,例如數字貨幣、存貨等
- 交易內容
- 數量(Amount): 總共轉移的資產量
- 輸入(Input): 需轉移的資產列表
- 輸出(Output):資產的接收方,包括接收數量,接收者的ID,以及一系列需要滿足的接收條件
交易ID(Hash): 交易的唯一標識,一般採用交易的雜湊值做標識
- UTXO交易模式
- 位元由特有的交易模式
- UTXO(Unspent Transaction Outputs)是未花費的交易輸出,在比特幣中,它是交易過程中的基本單位。
- 輸入與輸出
- 輸入(Tx_in):資金來源
- 輸出(Tx_out):資金去向
- 創世區塊和礦工所獲得資歷沒有輸入,其它每筆交易的輸入必須是另一筆交易沒有被使用的輸出,同時這一筆輸入還需要上一筆輸出地址所對應的私鑰進行簽名
- 雜湊
- 區塊鏈中的資料並不只是原始資料或者交易記錄,還包括它們的雜湊函式值,即將原始資料編碼為特定長度的、由數字和字母組成的字串後,記入區塊鏈。
- 雜湊函式的特點
- 雜湊函式的處理過程是單向的,通過處理過的輸出值幾乎不可能計算出原來的輸入值
- 輸入的資料越長,雜湊函式的處理時間就越長。
- 雜湊函式的輸入值即使只差一個位元組,其輸出結果也會天差地別。
- Merkle樹
- Merkle樹可以是二叉樹,也可以是多叉樹,它具有樹結構的所有特點
- Merkle樹在區塊鏈中的主要作用是快速歸納和校驗資料的完整性
- 在區塊鏈中使用Merkle樹可以極大的提高區塊鏈的執行效率和可擴充套件性,使得區塊頭只需要包含根雜湊值而不需要包含所有的底層資料。另外,Merkle樹支援SPV,也就是說它可以在不執行完整區塊鏈網路節點的情況下對交易資料進行檢驗
- 雙重支付
- 雙花:利用貨幣的數字特性完成再次或者多次支付
- 在傳統支付上面 ,由於金錢是物理實體,具有可觀唯一存在的屬性,所以可以避免雙重支付。
- 而在電子貨幣中,需要可信賴的第三方管理機構提供保證(銀行、支付寶等)(中心化機構)
- 區塊鏈技術在去中心化的系統中不借助任何第三方機構而只通過分散式節點之間的相互驗證與共識機制,有效的解決雙花問題,在資訊傳輸的同時完成了價值轉移。
- 比特幣中採用UTXO和數字簽名校驗來避免雙花
- P2P
- P2P(Peer-to-Peer network,對等網路)是一種在對等者之間分配任務和工作負載的分散式應用架構,是對等計算機模型在應用層形成的一種組網或者網路形式。
- 迅雷採用的就是P2P技術
- 區塊鏈系統是建立在IP通訊協議和分散式網路基礎上的, 不依靠傳統的電路交換,而建立於網路通訊之上,完全通過網際網路進行資訊交換。
- 網路中的所有節點都有同等地位,不存在任何中心節點或者層級結構,每個節點都會承擔網路路由、驗證資料區塊等功能。
- 網路節點根據儲存的資料大小分為全節點和輕量級節點
- 全節點:儲存了從創世區塊以來的所有區塊鏈資料,它的優點是進行資料校驗的時候不需要依靠別的節點,僅依靠自身就能完成校驗更新等操作,缺點是硬體成本很高
- 輕量級節點只需要儲存部分資料資訊,當需要別的資料時可以通過簡易支付驗證的方式向鄰近節點請求所需要的資料來完成驗證更新
- 密碼學
- 雜湊演算法
- 雜湊演算法主要是將任意長度的訊息壓縮為固定長度的二進位制串,輸出值稱為雜湊值,在現代密碼學中經常用於實現資料完整性和實體認證
- 區塊鏈通過雜湊演算法對一個交易區塊中的交易資訊進行加密,並把資訊壓縮成由一串數字和字母組成的雜湊字串
- 加密演算法
- 概念:加密簡單而言就是通過一種演算法手段將對原始資訊進行轉換,資訊的接收者能夠通過祕鑰對密文進行解密從而得到原文的過程
- 分類
- 對稱加密
- 非對稱加密
- 應用例項
- 數字簽名
- 數字簽名就是在資訊後面加上另一段內容,作為傳送者的證明並且證明資訊沒有被篡改。
- 步驟
- 傳送將資訊用雜湊演算法處理得出一個雜湊值
- 用私鑰對該雜湊值進行加密,得出一個簽名。
- 傳送者把資訊和簽名一起發給接收者。
- 接收者使用傳送的的公鑰對簽名進行解密,還原出雜湊值
- 通過雜湊演算法來驗證資訊的雜湊值和解密簽名還原出來的雜湊值是否一致
- 雜湊演算法
通過該方法鑑定資訊是否來自發送者或者驗證資訊是否被篡改