不懂區塊鏈?先來看一下這篇


原創播客,如需轉載請注明出處。原文地址: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. 區塊結構

比特幣的區塊結構由區塊大小、區塊頭、交易計數器、交易組成

1

2. 區塊頭

區塊頭的信息主要包括版本、父區塊頭的哈希值、Merkle根、時間戳、難度目標、Nonce

2

3. 區塊體(交易)

1)Coinbase 交易第一條交易、挖礦交易(沒有支付人,只有收款人,即礦工);每一個區塊都有一個 Coinbase 交易

2)普通轉賬交易:每筆交易包括付款方、收款方、付款金額、手續費等

4. 完整結構圖

3

四、交易

UTXO(unspent transaction output):未消費輸出,是比特幣交易中最小的支付單元,不可分割,每一個 UTXO 必須一次性消耗完,然后形成新的 UTXO,存放在比特幣網絡的 UTXO 池中

  • 區塊鏈

一、區塊鏈的基本信息

1. 什么是區塊鏈

伴隨比特幣而生,是一個分布式數據庫(本質);一種網絡底層協議(抽象);存儲引擎、計算引擎

2. 區塊鏈的特點

1)去中心化:所有參與其中的網絡節點共同維護,無需中心節點控制

2)不可篡改:一旦發出交易便不可再修改和刪除,每筆交易和每個區塊都有時間戳

3)匿名性:私鑰和地址是使用網絡的所有條件,無需身份驗證

4)可追溯性

二、區塊鏈協議

區塊鏈是一種網絡底層協議,可以分為數據層、網絡層、共識層、激勵層、合約層、應用層

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 錢包、手機錢包、輕節點錢包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM