原創播客,如需轉載請注明出處。原文地址:https://www.cnblogs.com/crawl/p/10253564.html
----------------------------------------------------------------------------------------------------------------------------------------------------------
筆記中提供了必要的代碼示例,需要說明的是,大部分代碼示例都是本人所敲代碼並進行測試,不足之處,請大家指正~
本博客中所有言論僅代表博主本人觀點,若有疑惑或者需要本系列分享中的資料工具,敬請聯系 qingqing_crawl@163.com
-----------------------------------------------------------------------------------------------------------------------------------------------------------
-
前言
從最初開始學習 JavaEE,到自學大數據,現在實習在做區塊鏈方面的東西,也算是一邊實習,一邊學習。忙完了一陣工作,總結一下實習四個月來所學到的知識,希望能夠對自己和別人有所幫助。
-
比特幣
要說區塊鏈,我想先從從比特幣說起……
一、比特幣的基本信息
1. 什么是比特幣
1)比特幣系統:一個軟件,每個人都可以下載運行,大家都維護一個版本
2)比特幣:比特幣系統所維護賬本上的交易數字(為了完成支付功能而產生的交易數字)
3)區塊鏈:(簡單提一下區塊鏈)一個數字賬本,記錄各種交易數字,是伴隨比特幣在系統中流通而產生的概念
2. 比特幣和區塊鏈的關系
1)比特幣是區塊鏈技術的落地應用
2)區塊鏈是比特幣的底層支撐系統
3)區塊鏈是從比特幣中抽離出來的概念
二、比特幣區塊鏈使用的基本技術
1. Hash 算法(用於工作量的證明)
1)作用:將任意長度的輸入格式化為固定長度的 16 進制字符串
2)主流算法:MD5(128位)、sha256(256位)
3)性質
① 抗碰撞性:當知道一個 x,無法求出一個 y,使 x 和 y 的 Hash 值相同
② 原像不可逆性:根據 x 的 Hash 值無法求出 x
③ 謎題友好性:計算 Hash 的時候,沒有捷徑可走,若想計算出預定的 Hash 值,只能一次次的嘗試 (這是 pow 共識機制的基礎)
2. 密碼學(用於資產所有權和交易的驗證)
1)對稱加密:A、B 雙方使用同一把秘鑰
2)非對稱加密(生成公私鑰)
① 介紹:公鑰和私鑰一一對應,公鑰負責加密對外公開;私鑰用於解密和簽名,決不能外露
② 公鑰:用對方的公鑰加密,對方用自己的私鑰解密,因為私鑰自己持有,且公鑰無法解密,可以保證安全
③ 私鑰:簽名,保證數據來源,保證數據未被篡改,但不能保證數據安全
④ 常用算法:RSA、ECC
⑤ 特點:安全性高、加解密復雜、效率低
3. 編碼(用於網絡傳輸、生成地址等)
區塊鏈底層較為常用的編碼方式是 base64 編碼
4. p2p 網絡(點對點、端對端)
1)介紹:點對點技術,無中心的服務器,依靠用戶群交換信息的互聯網體系
2)特點:耐攻擊、高容錯、地位平等
5. 默克爾樹(用於快速交易驗證)
1)介紹:Merkle Tree,通常也被稱為 Hash Tree,是存儲 Hash 值的一棵樹,Merkle Tree 的葉子是數據塊的 Hash 值
2)特點:二叉樹
3)應用:可快速檢索,由其是在數量猛增時,搜索效率高(比特幣中可以用來校驗某一筆交易是否存在某個區塊中)
6. 工作量證明(Proof Of Work)
1)比特幣的 POW 要求運行一個 Hash 算法(sha256),找到一個符合要求的 Block Hash(Block Hash = sha256(區塊信息+隨機值n)),該 Hash 值由 n 個前導 0 構成,零的個數取決於網絡的難度值。要找到合理的 Block Hash 需要經過大量的嘗試計算,計算時間取決於機器的 Hash 運算速度。
2)工作量證明的過程:生成 Coinbase 交易,並與其他所有准備打包進區塊的交易組成交易列表,通過 Merkle Tree 算法生成 Merkle Tree Hash,把 Merkle Tree Hash 及其他相關字段組裝成區塊頭,將區塊頭的 80 字節數據(Block Header)作為工作量證明的輸入不停的變更區塊頭中的隨機數即 nonce 值,並對每次變更夠的區塊頭做雙重 SHA256 運算(即 SHA256(SHA256(Block_Header))),將結果與當前網絡的目標值做對比,如果小於目標值,則解題成功,工作量證明完成
三、比特幣的區塊結構
1. 區塊結構
比特幣的區塊結構由區塊大小、區塊頭、交易計數器、交易組成
2. 區塊頭
區塊頭的信息主要包括版本、父區塊頭的哈希值、Merkle根、時間戳、難度目標、Nonce
3. 區塊體(交易)
1)Coinbase 交易:第一條交易、挖礦交易(沒有支付人,只有收款人,即礦工);每一個區塊都有一個 Coinbase 交易
2)普通轉賬交易:每筆交易包括付款方、收款方、付款金額、手續費等
4. 完整結構圖
四、交易
UTXO(unspent transaction output):未消費輸出,是比特幣交易中最小的支付單元,不可分割,每一個 UTXO 必須一次性消耗完,然后形成新的 UTXO,存放在比特幣網絡的 UTXO 池中
- 區塊鏈
一、區塊鏈的基本信息
1. 什么是區塊鏈
伴隨比特幣而生,是一個分布式數據庫(本質);一種網絡底層協議(抽象);存儲引擎、計算引擎
2. 區塊鏈的特點
1)去中心化:所有參與其中的網絡節點共同維護,無需中心節點控制
2)不可篡改:一旦發出交易便不可再修改和刪除,每筆交易和每個區塊都有時間戳
3)匿名性:私鑰和地址是使用網絡的所有條件,無需身份驗證
4)可追溯性
二、區塊鏈協議
區塊鏈是一種網絡底層協議,可以分為數據層、網絡層、共識層、激勵層、合約層、應用層
1. 數據層
區塊鏈數據、鏈式結構、哈希函數、Merkel樹、非對稱加密、時間戳。數據層需要突破的是區塊容量的問題
2. 網絡層
P2P 網絡、傳播機制、驗證機制(自組網)
3. 共識層
共識機制:可以使所有的節點對某一狀態達成一致的方式,有共識機制去中心化才有意義,才具備可信度,否則只是數據共享。目前主流的共識機制有:POW、POS、DPOS、PBFT等
1)POW(Proof of Work):工作量證明
特點:算一道很難的謎題,系統給予挖礦獎勵;多勞多得
優點:
① 所有節點均可參與,記賬權公平的分派到每個節點,去中心化
② 多勞多得,礦工的積極性高
③ 安全性高,欺詐成本高,如果能夠欺詐成功,那么做誠實節點收益更大
缺點:
① 主流礦池壟斷嚴重,存在51%算力攻擊風險
② 浪費資源嚴重(2018年底消耗全球0.5%的電量)
③ 持幣人沒有話語權,算力決定一切
④ 網絡性能低,共識時間長
項目:比特幣、以太坊、比原鏈等
2)POS(Proof of Stake):股權證明,根據持有貨幣的量和時間來發利息(幣天銷毀)
特點:
① 不挖礦,依靠幣齡(持幣數量 * 持有天數)決定記賬權,利息即為獎勵
② 按錢分配,錢生錢
優點:
① 在一定程度上縮短了共識打成的時間
② 節約資源
③ 防作弊,幣齡越大,獲得記賬權幾率越大、避免51%攻擊,因為攻擊會使自己的權益受損
缺點:數字貨幣過於集中化,富有者越來越富有,散戶參與積極性低
3)DPOS(Delegated Proof of Stake):委托權益證明
讓每一個持有幣的人進行投票,由此產生 n 個代表,可以理解為 n 個超級節點或礦池,這 n 個超級節點彼此的權利是完全相等的
特點:不挖礦,每年按比例增發代幣,獎勵超級節點
優點:高效、擴展性強
缺點:非去中心化,而是多中心化
項目:EOS
4)PBFT 后期會單獨講解
4. 激勵層:發行機制,分配機制
5. 合約層
智能合約
定義:一個智能合約是一套以數字形式定義的承諾,包括參與方可以在上面執行這些承諾的協議
本質:數字化合同
特點:代碼代替人仲裁和執行合同,同時能夠觸發支付
1)構建:本地構建
智能合約由區塊鏈內的多個用戶共同參與制定,可用於用戶之間的任何交易行為。協議種明確了雙方的權利和義務,開發人員將這些權利和義務以電子化的方式進行編程,代碼中包含會觸發合約自動執行的條件
2)存儲:鏈上存儲
一旦編碼完成,這份智能合約就被上傳到區塊鏈網絡上,即全網驗證節點都會收到你和對方的合約
3)執行:EVM 中執行
① 智能合約會定期檢查是否存在相關事件和觸發條件,滿足條件的事件將會推送到待驗證的隊列中
② 區塊鏈上的驗證節點先對該事件進行驗證簽名,以確保其有效性;等大多數驗證節點對該事件達成共識后,智能合約將成功執行,並通知用戶
6. 應用層:業務邏輯
三、區塊鏈的分類
按應用場景可分為:
1)公有鏈:所有人都可以隨時加入和退出,每個節點平等,都有權交易和記賬,屬於開放式 代表:比特幣、以太坊等
2)聯盟鏈:僅部分人參與,加入和退出需要授權,選定某些節點為記賬人,其他人可以交易,但無記賬權,屬於半封閉式 代表:R3CEV、IBM Farbric
3)私有鏈:公司內部使用,可實現更好的權限控制,管理和審計,屬於半封閉式
四、區塊鏈的相關概念
1. 礦工:由運行比特幣客戶端的節點充當,競爭記賬權,從而獲得獎勵
2. 礦機:CPU挖礦 —> GPU挖礦 –> FPGA挖礦 –> ASIC挖礦(專業礦機)
3. 挖礦
1)礦場:集中礦機設備的場所
2)礦池:一個軟件,礦場和普通礦工接入,礦池負責打包,接入的設備負責挖礦,按照貢獻算力的比例來分配收益
4. 算力:即計算能力,表明一個礦工挖礦的能力,算力越大算出 Hash 值的概率就越高
5. 分叉:代碼升級時不同社區意見發生分歧時的結果,出現重大 bug 修復會分叉
1)軟分叉:舊節點接收新協議產生的區塊,毫無感知,新老協議共同維護一條鏈
2)硬分叉:舊節點拒絕接收新節點創造的區塊,從此分裂為兩條獨立的鏈(以太坊分叉)
6. 叔塊(孤塊)
在同一時間出現兩個礦工同時挖出礦的情況,此時出現臨時的分叉,區塊鏈會同時保留兩條鏈,並等待新生成的區塊,新區塊選擇連接的鏈就是最長鏈,即主鏈,那么另外一個區塊就被稱為叔塊(以太坊中的叔塊是有獎勵的,比特幣中的叔塊無獎勵)。
7. 節點
1)輕節點SPV(Simplifed Payment Verification):手機端錢包,只同步所有區塊頭信息以及和自己相關的交易數據
2)全節點:包含賬本的節點
聯盟鏈中還可以細分為共識節點、交易節點、賬本節點、錢包節點、托管節點
8. 代幣(Token):創建交易以及運行智能合約運行的燃料,以太坊代幣為 eth,燃料為 gas,最小單位為 wei
9. 錢包:創建公私鑰,保存私鑰,相當於錢包,可以存放多個地址
種類:PC 錢包、手機錢包、輕節點錢包