第一章 區塊鏈技術入門
1.1區塊鏈前世今生
1.1.1 密碼朋克(Cypherpunk)
郵件組: 密碼 數學 計算機技術 等
wiki解密創始人: 阿桑奇
BT下載作者 : 布萊姆-科恩
萬維網創始人 : 蒂姆伯納斯-李
智能合約概念的提出者: 尼克 薩博
Facebook創始人之一: 肖恩帕克
比特幣的創始人: 中本聰 (比特幣白皮書: 一個點對點的電子現金系統-去中心化)
1.1.2區塊鏈: 一系列技術的集合
作用:存儲信息。任何需要保存的信息都可以寫入區塊鏈,也可以從里面讀取,就像一個數據庫。
比特幣系統里面的數據是以一個個的區塊來存儲的,並且通過hash的方式,把一個個區塊鏈接起來形成一個區塊的鏈條。
特點:
- 無中心化 :沒有管理員 無需添加額外審核
- 分布式數據庫
- 能耗大,非常浪費資源
1.1.3 應用場景
資產: ICO 數字資產發行、支付、交易、結算
記賬:股權交易、供應鏈金融、商業積分
不可篡改(區塊鏈不可篡改的特點): 溯源、重酬、醫療證明、存在性證明
點對點特點: 共享經濟 、 物聯網
隱私:匿名交易
1.2區塊鏈前景
任何人都可以架設服務器,加入區塊鏈網絡成為其中一個節點。可以向任何一個節點,寫入/當前數據,因為最后所有數據都會同步到區塊鏈網絡中保持一致。
1.3比特幣是什么
1.3.1 比特幣
比特幣:數字貨幣 每10分鍾記賬一次
貨幣: 貨幣是可以承載價值的一般等價物
一般等價物: 任何可以作為具有交易價值的物品
金屬貨幣—>銀票—〉法幣 ——》一串數字(虛擬貨幣)
數字貨幣: 共識 具有共識的虛擬貨幣
1.3.2 特點
信任性:財產只受自己控制 (私密鑰匙)
無通脹性:不會因為發行過多而貶值
比特幣的總量不變性:2100萬個
無假鈔 :
流通性: 流通性好,全球無縫流通。免去中間商和中心化直接點對點交易
去中心化記賬系統:
中央服務器存儲所有數據 !=》 存在比特幣網絡每一個節點里
1.4比特幣原理
1.4.1 賬本如何驗證
Hash
哈希函數: Hash(原始信息) = 摘要信息
Hash就是 計算機可以對任意內容,計算出一個長度相同的特征值。
區塊鏈的長度:256位 ,原始信息不同對應的Hash值一定不可能相同!
解析: 原始信息 通過Hash操作之后,對任何的原始信息,得到一個簡短的摘要信息
Hash特點:
- 同樣的原始信息用同一個哈希函數總能得到相同的摘要信息
- 原始信息任何微小的變化都會哈希出面目全非的 摘要信息
- 從摘要信息無法逆向推算出原始信息
- 區塊與Hash是一一對應的,每個區塊的Hash都是針對 區塊頭 計算的
摘要信息保存起來形成了區塊
區塊
區塊鏈由一個個區塊block組成。區塊很像數據庫的記錄,每次寫入數據,就是創建一個區塊。
ex:區塊頭( 序號 、時間戳、
Nonce值、Hash值、當前區塊體的hash,上一個區塊的Hash值等...) +區塊體(交易記錄)
Nonce值:記錄Hash重算的次數。第100000個區塊的NOce值是 274148111,即計算了2.74億次,才得到一個有效的Hash值。
區塊鏈計算公式:
hash = SHA256(區塊頭)
hash值 由區塊頭唯一決定,SHA256是區塊鏈的Hash算法
ps:若當前區塊的內容變了,或者上一個區塊的hash變了,一定會引起當前區塊的Hash改變。
重大意義: 如果有人修改了一個區塊,該區塊的hash值就變了,為了讓后面的區塊能繼續鏈接到它,就必須同時修改后面所有的區塊,否則被改掉的區塊就脫離整個區塊鏈。
基於這類聯動機制,區塊鏈保證了自身的可靠性,數據一旦寫入就無法被篡改。
兩個賬本的合並:把第一個賬本的Hash值作為原始信息的一部分,與第二個賬本的原始信息和在一起進行Hash運算操作。
對比第二個Hash值是否一致的驗證。對上了說明第二個賬本的信息和第一個摘要的信息都是正確的。
第二個賬本:形容又一個 區塊 (( 序號 、時間戳、Hash值) +交易記錄)
區塊鏈:每一個節點在核對數據的時候,只需要核對最后一個區塊的摘要信息。信息能夠核對上,說明整個區塊鏈的賬本是正確的。完成高效的賬本驗證。
1.4.2 所有權問題
賬號: 地址表示
1.4.2.1 轉賬記錄:
{ “付款地址”:“xxxxx”
“收款地址” :“yyyyy”
“金額” : “2 btc"
}
1.4.2.2 密碼 —>私鑰
一個地址對應一個私鑰
誰擁有這個私鑰 ,誰就能用於支付。私鑰泄露 比特幣就會丟失。
無法重新獲取,賬號和密碼不能互相推導。
1.4.4.3 非對稱加密技術(交易簽名)
————不泄露私鑰的情況下,證明 擁有某個地址的私鑰
- 對交易進行hash得到交易的摘要
- 用私鑰對摘要進行簽名
1.4.4.4 簽名過程:
- 對原始信息進行Hash計算 得到摘要信息
用摘要信息和 私鑰 進行 簽名操作 sign ——得到簽名信息
付款節點:
循環廣播交易內容: 交易的 原始信息、交易的簽名 信息、交易的金額
- 交易的節點 分發給 周圍的節點,讓周圍的節點一起驗證信息 ,整個廣播循環操作
- 相鄰節點收到廣播后,驗證通過后,再次與之相鄰的節點進行廣播,進行驗證操作。
與相鄰的節點進行廣播驗證后:
驗證簽名的信息是否是付款方 用私鑰對原始信息 簽名產生的
1.4.4.5 驗證
驗證運算 :
原始交易 信息的摘要 一致 說明 是地址私鑰所有者發出的
驗證通過 並寫入賬本 並再次廣播
1.4.4.6 簽名及驗證
簽名 和 驗證 是逆運算
付款的地址 是 公鑰
簽名的過程 是對摘要進行加密的過程: 通過摘要和私鑰 得到簽名信息
驗證的過程 是解密的過程 :付款方地址和簽名信息進行解密, 得到交易的摘要
ps: 賬本 不包含任何個人信息
1.4.3 為什么記賬(挖礦)
記賬 :Hash打包過程
記賬 需要消耗資源,記賬操作完成會獲得系統12.5 btc的獎勵
挖礦——工作量證明
1個比特幣 相當於 4w+ 人民幣 ,一次記賬相當於能獎勵 50W+ rmb
1.4.3.1 規則
- 一段時間內 只可以有一個人可以記賬成功 (10分鍾左右)
-
通過解決密碼學難題(即工作量證明)競爭獲得唯一記賬權
- 其他節點 復制記賬結果
-
使用一個常量 除以/難度系數 = 目標值 ; target = targetMax / difficulty。只有小於目標值餓Hash才是有效值 (難度系數越調越高目標值越來越小,導致采礦越來越難)
- 難度系數動態調節機制; 即是如果每兩周調節一次,發現生成速度比法定速度快10%則難度系數增加10% ,反之亦然
為了保證節點之間的同步,所以區塊鏈的添加速度不能太快。
1.4.3.2 工作量證明
Hash(上一個hash值,交易記錄集) = 新的Hash值
提高難度:
Hash(上一個hash值,交易記錄集,隨機數) = 0000..開頭新的Hash值【直到找到一個以若干個0開頭hash值】
率先找到一個符合條件的hash值,就能獲得一個唯一的記賬權
交易記錄集
- 收集廣播中還沒有被記錄賬本的交易
- 交易的有效性驗證
- 添加一筆給自己轉賬的交易(挖礦獎勵12.5btc)
hash值是 16進制 字符串
得到一個0 的概率 是 1/16
得到兩個0 的概率 是 16*16
得到 18個0 的概率 是 16的 18次方的 hash運算
1.4.4 以什么為基准--共識機制
思考: 兩個節點同時完成工作量證明,使用誰的區塊?
節點工作量只有在其他的節點認同其有效的
1.4.4.1 區塊鏈的分叉
上面提到的問題,如果兩方同時向區塊鏈寫入數據,雙方都鏈接着前一個區塊,就形成分叉,這時采用哪個區塊?
答:
新節點總是采用最長的那條區塊鏈。若分叉,參考哪個分支在分叉點后面,先達到6個新區塊(“
六次確認”。新區塊的生成速度由計算能力決定,擁有大多數計算能力的那條分支,就是被選中的區塊鏈比特鏈,沒被選中的作為備選鏈。
1.4.4.2 共識機制
采用累計工作量最大的區塊鏈 是主鏈 或是說難度最大的區塊鏈
機制:
保證 區塊鏈 比特幣在最大的鏈上進行工作
1.5 比特幣其他
- 比特幣P2P網絡
- 區塊結構Merkle樹
- 比特幣UTXO及交易腳本(未發費的交易輸出)
- 比特幣白皮書
