區塊鏈基礎
阿新 • • 發佈:2018-11-10
區塊鏈基礎
一.區塊鏈的產生
- 密碼朋克:通過匿名性來保護隱私安全
- 不可篡改的檔案記錄:利用時間戳加蓋到檔案內容中,證實資料的真實存在性與不可篡改性
- 初代加密貨幣:現有區塊鏈加密貨幣的前身
二.區塊鏈發展歷史
- 2009 比特幣的創世區塊產生。1.0
- 2014年左右 以太坊誕生。2.0
- 2018年中期,EOS主網上線。3.0
- Fabric
三.區塊場景概念
- 數字貨幣:可以與現金等價交換,理論上擁有現金流的一切功能和屬性(與虛擬貨幣的區別),數字特性(與現金流的區別)
- ICO:產生一個專案亮點,認可它價值和發展潛力,希望籌集資金去實現這個專案。
- 韭菜:被坑散戶或大戶(一部分的投資人)
- 電子錢包:在電子商務購物活動中常用的支付工具
四.什麼是區塊鏈(定義)
- 區塊是一種集成了點對點傳輸協議、現代密碼學、共識演算法、分散式資料儲存等成型技術新的應用模型
五.區塊鏈的特點
- 可追溯
- 不可篡改
- 去中心化
- 完整備份:區塊鏈具有完整的分散式儲存特性
- 歷史記錄:被儲存的資料擁有完整的歷史記錄,可以快速的檢視以及復原
- 交易廣播:一次交易分發給網路的其它節點,同步接收
六.區塊鏈中、加密貨幣(bitcoin, eth, eos…)的特點
- 獨立性:所有貨幣都是獨立的存在
- 唯一性:地址、交易ID都有不重複的唯一性
- 匿名性:賬戶和個人資訊沒有關聯,所有交易全程加密
- 不可偽造(篡改):基於加密與時間戳,全程不可篡改
七.區塊鏈核心技術
- 點對點傳輸協議:在網路中的資料流通
- 現代密碼學:公私鑰簽名、安全
- 共識演算法:資料一致性
- 分散式資料儲存:實現去中心化的重要技術依據
八.區塊鏈核心概念
1.區塊鏈
- 區塊鏈本質上是一個分散式的賬本,通過共識演算法來決定誰能搶到記賬權。區塊鏈以區塊為單位,以區塊產生時間為順序進行連線,每一個當前區塊中都儲存了上一個區塊的雜湊值。區塊中儲存的是交易資料。所以交易都可以區塊鏈中進行追溯,賬本只可以追加,不能篡改。
2.區塊結構:
a.區塊頭
- Merkle
- 隨機數
- 當前區塊雜湊
- 前區塊雜湊
- 區塊號碼
- 時間戳
b.區塊體
- 交易資料
3.分散式資料庫
- 區塊鏈中的區塊都會儲存在每一個節點中,所有的節點就組成了一個分散式資料庫,任何一個節點出現問題都不會影響到其它節點,因為其它節點都儲存了完整的資料
4.節點
- 節點可以理解成一個執行區塊鏈軟體的計算機
- 分類
- 全節點:儲存了完整的區塊鏈的副本
- 輕節點:不儲存所有的區塊,需要依賴全節點進行驗證
- 挖礦節點:帶有挖礦功能的節點,專門處理交易驗證(挖礦),儲存了完整的區塊鏈副本
5.挖礦
- 說明:區塊是在挖礦的過程中產生的
- 概念:窮舉隨機數的演算法,把上一個區塊的雜湊加上10分鐘之類產生的所有交易再加上隨機數通過雜湊256產生一個雜湊值,只要隨機數滿足一定的條件,就可以搶到此次交易的記賬權。新產生的節點需要進行廣播,讓其他節點進行驗證,防止造假。
6.分叉-挖礦分叉
- 兩個或者多個礦工,同時完成了工作量證明,就會同時產生兩個新的區塊,形成分叉
- 解決方案:不同的礦工跟隨了不同區塊,由於不同的鏈上面,算力是有區別,也就是說,礦工的數量是不一樣的。
- 由於礦工數量與算力成正比,最終會導致鏈的增長速度會不同,在經過一段時間之後,會出現其中一條鏈更長,最終,礦工在發現更長的鏈之後,會去同步更長的鏈上面的區塊資料,丟棄原來的鏈。
7.分叉-升級分叉
- 礦工遵從不同的機制(規則)導致的分叉
- 硬分叉:如果區塊鏈共識規則改變的情況下,規則不允許前向相容,舊節點沒有辦法認可新節點產生的區塊。
- 軟分叉:如果區塊鏈共識規則改變的情況下,規則允許前向相容,舊節點可以相容新節點產生的區塊。
8.時間戳與不可篡改
- 在區塊鏈系統中,獲得記賬權的節點在鏈節區塊時,在區塊頭中加蓋時間戳,記錄區塊上鍊的時間
- 時間戳可以證明特定的資料在特定的時間的存在
9.交易
- 概念:一筆資產在參與者之間的轉移,比如數字貨幣等等
- 內容:
- 交易金額 : 轉移的資產量
- 傳送者:資產的傳送方
- 接收者:資產的接收方
- 交易的ID(HASH):交易的唯一標識,通常用hash表示
10.UTXO(unspent transaction output)交易模式
- 未花費的交易輸出:比特幣獨有的交易模式,比特幣交易過程中的基本單位
- 結構 (輸入與輸出)
- 創世區塊:區塊鏈裡面第一個區塊,建立創世區塊產生的交易與挖礦產生的交易沒有輸入
- 輸出(Tx_Out):資金去向
- 輸入(Tx_In):資金來源
11.雜湊
- 將任意原始資料(交易記錄)通過指定的雜湊函式,編碼為特定長度的,由數字和字母組成的字串
- 在區塊鏈中的使用:對交易資料進行壓縮編碼,生成雜湊字串
- 特點
- 時間正相關:輸入的源資料越長,雜湊函式的處理時間就越長
- 輸入值即使只相差一個字元,結果也會天差地別
- 不可逆:雜湊值幾乎不可能反推出源資料
12.Merkle樹
- Merkle樹可以是二叉樹,也可以是多叉樹,它具有樹的所有特點。
- 在區塊鏈中的作用:快速校驗和歸納交易資料的完整性
- Merkle樹支援SPV(簡化支付驗證),可以在不執行完整的網路節點的情況下去對交易資料進行驗證。
- 在區塊鏈中,Merkle可以極大的提高查詢效率,區塊頭只需只需要儲存一個Merkle根的雜湊值,不需要儲存所有的交易資料。
13.雙重支付(雙花)
- 雙花:利用數字貨幣的數字特性,完成兩次或者多次支付
- 傳統貨幣具有客觀存在的唯一性,天然可以避免雙花
- 比特幣中,通過UTXO交易模式以及數字簽名驗證來避免雙花。
- 區塊鏈中需要達成只通過分散式節點之間的相互驗證與共識機制來避免雙花,同時完成價值轉移。
- 傳統的虛擬貨幣支付依賴於可依賴的第三方機構提供保證
14.P2P(點對點傳輸)
- 通過對等網路分配工作任務的分佈應用架構
- 迅雷採用的就是P2P
- 網路中所有節點都是同等地位,不存在任何一箇中心化節點,也不存在層級結構,每個網路都會承擔驗證區塊資料等功能
- 網路節點根據儲存資料量的大小分為全節點和輕量級節點
- 輕量級節點:儲存部分資料資訊
- 優點:資料量小
- 缺點:不能獨立驗證交易資料,安全相對而言比全節點要低
- 全節點:儲存了創世區塊產生以來的所有區塊資料。
- 優點:可以獨立進行交易的資料驗證。安全性極高
- 缺點:資料量太大
- 輕量級節點:儲存部分資料資訊
15.加密演算法:通過一種演算法手段對原始資訊進行轉換,資訊接收者通過金鑰進行解密
- 對稱加密:加密和解密使用相同的金鑰
- 非對稱加密
- 採用公鑰和私鑰進行加密
- 公鑰是公開的,任何人都可以擁有,私鑰是保密的,只有加密者擁有。
- 無法用公鑰反推出私鑰
16.數字簽名:在需要傳送的資訊後面加上一段內容,作為傳送者的證明,另外還可以證明資訊沒有被修改
17.區塊鏈分類
- 公有鏈:真正意義上的去中心化分散式區塊鏈,任意節點可以隨時、隨地加入到一個公鏈的網路中。匿名性強,任何參與都可以在其中寫入、讀取、驗證交易資料。代表比特幣、以太坊……
- 私有鏈:部分中心化的區塊鏈,具有分散式的特點。中心節點可以指定參與者(交易驗證等)
- 應用:私鏈可以在公司、機構、組織內部進行使用。
- 聯盟鏈:部分去中心化模式,擁有許可權控制設定的功能。
- 優勢:降低結算成本和時間,提升效率,同時繼承去中心化的優點,減輕壟斷壓力。
- 代表:超級賬本(Fabric)
九.區塊鏈架構特點
- 去中心化:區塊鏈中的資料傳輸、驗證等過程全都基於分散式系統,整個網路中沒有中心機構的存在。
- 可靠資料庫:區塊鏈系統中,資料庫採用分散式儲存,任何一個節點都有一份完整的資料拷貝。參與系統的節點越多,資料庫的安全性越高。
- 開源可程式設計:開源-區塊鏈系統基本都是開源的,公鏈程式碼高度透明,資料和程式對所有人公開。任何人都可以通過官方提供的介面查詢資料。可程式設計-區塊鏈提供靈活的腳本系統(比特幣),支援使用者建立高階智慧合約,TOKEN,去中心化的應用。
- 集體維護:區塊鏈中的資料由整個系統中所有具有記賬功能的節點共同維護,任何一個節點被破壞都不會影響整個系統的運作。
- 安全可信:現代密碼學使得交易無法被偽造和篡改。通過分散式系統與共識來抵禦攻擊,具有極高的安全性。
- 準匿名性:採用公鑰相關的地址作為標識, 不需要傳統的CA證書等,也就不需要確認身份。使用者只需要公開地址,不需要公開自己的身份。
十.區塊鏈典型應用分析
比特幣
1.特點:
- 總量2100W,永不增發
- 獎勵一開始挖出的區塊獎勵50個比特幣,逐年減半
- 通過P2P分散式技術實現,無中心控制節點,所有節點都可以自由出入網路
2.全球節點:https://bitnodes.earn.com/
- 當前節點9763
3.比特幣架構
前端
錢包:儲存使用者私鑰,管理使用者餘額,提供比特幣交易(支付、轉賬等)功能。
分類
a.使用者端:桌面錢包
- 離線錢包:USB裝置,紙錢包,可以有效防範黑客通過網路攻擊盜竊私鑰。
- 薄錢包:不會下載整條區塊鏈,採用SPV等方式來驗證與使用者相差的支付交易。靈活性較高,安全性相對較低
- 厚錢包:下載整條區塊鏈,可以進行完整交易,優勢是安全,但有比較的驗證成本。
b.決定性
- 決定性錢包:所有的私鑰全部由一個私鑰種子通過單身雜湊演算法生成
- 普通決定性錢包:由私鑰種子一次性生成所有的私鑰
- 層次決定性錢包:由私鑰種子生成父私鑰、父私鑰生成子私鑰
- 決定性錢包優點:備份方便,只要有私鑰種子,就可以一次性恢復所有私鑰
- 非決定性錢包:直接儲存私鑰,私鑰直接儲存在DB上面
HTTP/JSON RPC API:比特幣提供的介面,供外部通過介面來訪問或者控制比特幣節點
節點後臺
- 功能:負責參與比特幣網路中的通訊互聯,維護區塊鏈,驗證區塊、交易……
- 後臺程式主要由bitcoind與挖礦節點程式構成
- 指令碼引擎
位元私鑰、公鑰、地址
1.通過隨機數生成私鑰:作業系統隨機函式
2.採用Sec256k1橢圓加密演算法生成公鑰
3.生成地址
- 以公鑰作為輸入,進行SHA256(雜湊), 再進行RIPEMD160(雜湊)再通過Base58Check生成比特幣地址。
- 比特幣區塊結構
- 比特幣區塊校驗
- 格式
- 難度
- 時間
- 大小
- 交易:UTXO
比特幣交易
1.交易結構
- 輸入
- 輸出
- 交易ID(hash)
2.輸入輸出
- 每筆交易的輸入必定來源於上一筆交易的輸出
以太坊
- 一個去中心化的DAPP開發平臺
- 智慧合約:擁有自我校驗與自我執行的協議
- 共識:POW(EThash)
EOS
與以太坊的比較:
- TPS有了極大的提高,以太坊上面每個DAPP都會消耗整條鏈的資源
- EOS不再是單純公鏈,它算是一個區塊鏈的基礎架構,開發者可以自由在EOS上建立公鏈,鏈與鏈之間不影響彼此的資源使用,因此,不會出現單個應用佔用的資源太多而使得網路擁堵
- EOS上面轉賬或者呼叫智慧合約,不需要消耗EOS代幣
- EOS共識演算法採用的是DPOS,BFT-DPOS
超級賬本
1.Fabric:聯盟鏈,由linux基金會發起
2.Fabric不發行加密貨幣
3.目標:實現一個許可權區塊鏈的底層基礎框架。
4.Fabric:
- 身份服務:Fabric與比特幣、以太坊最大的區別在於Fabric具有身份識別能力
- 策略服務:提供訪問控制,授權等一系列功能,Fabric交易通常需要參與方具有相關的許可權才能進行。
- 區塊鏈服務:提供構建分散式賬本的基礎能力以及資料傳輸,共識達成等底層功能
- 智慧合約:驗證節點上執行的分散式交易程式,用於自動執行特定的業務規則。
5.上層結構
- API:程式設計介面
- SDK:軟體開發工具
- CLI:命令列工具