當前位置:
首頁 > 科技 > 人才稀缺的區塊鏈,程序員轉型入門必看這四項技能

人才稀缺的區塊鏈,程序員轉型入門必看這四項技能

關鍵時刻,第一時間送達!

作者 | 卿蘇德

區塊鏈(BlockChain),是區塊(Block)和鏈(Chain)的直譯,其數據結構如圖 1 所示,即每個區塊保存規定時間段內的數據記錄,並通過密碼學的方式,構建一條安全可信的鏈條,形成一個不可篡改、全員共有的分散式賬本。

比特幣的區塊分為區塊頭和區塊體兩部分。區塊頭的大小為 80 位元組,包括 4 位元組的版本號、32 位元組(256 位)的上一區塊哈希值、32 位元組的 Merkle 根節點、4 位元組的時間戳、4 位元組的難度值和 4 位元組的隨機數。區塊體包含 10 分鐘內選定的交易記錄,第一筆交易(coinbase 交易)是用於獎勵礦工比特幣的特殊交易,由礦工自己添加進區塊。

圖 1 區塊鏈的數據結構示意圖

基本概念

區塊鏈是很多現有技術交叉融合在一起的集成創新。因此,要了解區塊鏈,首先要了解區塊鏈到底集成了哪些技術。

P2P 網路

如圖 2 所示,P2P(Peer-to-Peer)網路是一種端到端的網路。P2P 網路分為結構化(例如基於 Chord 的 P2P 網路)和非結構化的 P2P 網路(例如 Gnutella)。比特幣的區塊鏈採用的是非結構化 P2P 網路,整個網路沒有中心化的硬體或管理機構,任一節點既是服務端,也是客戶端。任何節點只要安裝相應的客戶端軟體,就能接入 P2P 網路(例如 BT 軟體),參與區塊鏈的記錄和驗證,不超過 1/3 節點的損壞、退出甚至被植入惡意代碼,都不會影響整個系統的運作。

圖 2 傳統中心化系統和 P2P 網路的拓撲對比圖

加密演算法和數字簽名

加密技術分為對稱、非對稱和哈希(Hash)加密。對稱加密是指用同樣的密鑰來進行加密和解密,非對稱加密是指用一個密鑰對來進行加密和解密,哈希加密主要是通過對數據進行哈希運算,用固定的哈希結果值驗證信息是否被篡改。

非對稱加密

在非對稱加密技術中,對外公開、分發出去的密鑰叫做公鑰,不能公開、自己留存的密鑰叫做私鑰。公鑰加密的,對應的私鑰才能解密。反之亦然。如圖 3 所示。

圖 3 非對稱加密 RSA 演算法的簡化示例圖

非對稱加密演算法有 RSA、DSA 和 ECC 等種類,區塊鏈使用的是基於橢圓曲線加密技術的數字簽名(ECDSA),具體實現是 secp256k1。ECDSA 相當於是 DSA 和非對稱加密 ECC 的結合。相比 RSA 演算法,ECDSA 具有計算量小、存儲空間小、帶寬要求低等特點。

數字簽名

基於數字簽名的通信機制工作原理,如圖 4 所示,發送報文時,發送方用一個哈希函數從報文文本中生成文件摘要,然後用自己的私鑰對摘要進行加密,加密後的摘要將作為報文的數字簽名和報文一起發送給接收方。接收方首先用與發送方一樣的哈希函數從接收到的原始報文中計算出報文摘要,接著再用發送方的公鑰來對報文附加的數字簽名進行解密,如果得到的明文相同,那麼接收方就能確認傳輸的文件並未受到篡改,是安全可信的。

圖 4 數字簽名的流程示意圖

哈希加密

安全哈希演算法(Secure Hash Algorithm,SHA)是由美國國家安全局研發,由美國國家標準與技術研究院(NIST)發布的一系列密碼哈希函數,包括 SHA-0、SHA-1、SHA-2 和 SHA-3 等系列。比特幣的區塊鏈使用的是 SHA-256 哈希加密演算法,於 2001 年發布,屬於 SHA-2 分支。由於 SHA256 偽隨機性的特點,只要是相同的數據輸入,一定會得到相同的結果,如果輸入數據稍有變化,將得到一個千差萬別的結果,如圖 5 所示。SHA256 還是一個單向不可逆的演算法,即根據一個輸入數算 SHA256 的結果很容易,但根據 SHA256 的結果反算輸入數幾乎是不可能。除此之外,比特幣還使用 ripemd160 演算法來生成比特幣錢包的地址。

圖 5 哈希加密的示意圖

梅克爾樹

梅克爾(Merkle)樹是區塊鏈的基本組成部分。如果沒有梅克爾樹,區塊鏈也是可以運轉,但是要在區塊頭裡包含所有交易記錄,擴展性方面存在很大挑戰。如圖 6 所示,區塊鏈中的每個區塊,由區塊頭和區塊體構成,區塊頭中含有一個 Merkle 根節點的欄位,通過對區塊體中所有交易記錄,以二叉樹的形式迭代地兩兩拼接 、進行哈希操作,可以得到一個最終的哈希值,我們稱之為 Merkle 根哈希。Merkle 根哈希相當於是對區塊中所有交易記錄進行了一個快照,區塊中交易記錄的任意改動都可以通過比較 Merkle 根哈希而很容易地察覺。Merkle 根哈希主要用於簡單支付驗證(SPV),在驗證某個交易是否在區塊中時,也能極大地減少網路傳輸成本。

圖 6 Merkle 樹示意圖

工作量證明機制

工作量證明機制,簡單地說,就是一種共識機制,用來確認你是否做過一定量工作的證明。比特幣的區塊鏈主要是依託計算數學難題來衡量工作量。每個區塊,當選定一定數量的交易記錄之後,填充版本號、時間戳、難度值,生成相應的 Merkle 根哈希。很容易看到,這些數值在選定交易記錄以後,都是確定的,唯一能夠改變的就只有隨機數(Nonce)這個值。如圖 7 所示,系統根據難度值,要求計算整個區塊頭的兩次 SHA256 演算法,得到的哈希結果要小於一個閾值。根據前面描述的 SHA256 演算法的偽隨機性,只有通過不斷地嘗試和枚舉,才能找到相應的隨機數,證明自己的工作量。

圖 7 工作量證明機制示意圖

除了工作量證明機制(PoW)這類共識機制之外,還有股權證明機制(PoS)、授權股權證明機制(DPoS)、拜占庭容錯機制(BFT)、實用拜占庭容錯機制(PBFT)這些在不可信環境下的共識機制以及要求在可信環境下的共識機制,例如 PaxOS 和 Raft。表 1 是做了簡單的對比。

表 1 共識機制的簡單對比表

運行機制

接入網路和驗證

節點通過安裝相應的軟體(例如比特幣核心),接入區塊鏈。節點啟動以後,主要是在 P2P 網路上發現鄰居節點、鏈接鄰居節點、傳遞 P2P 消息和下載區塊鏈驗證。節點可以選擇下載全量的區塊鏈進行驗證,或者是只下載區塊頭,通過 Merkle 樹節點來進行簡單支付驗證(SPV)。

錢包軟體可以分為移動錢包、桌面錢包、互聯網錢包和紙錢包,都支持保存用戶的私鑰,錢包也可以根據私鑰是否是種子產生的,而分為決定性錢包和非決定性錢包,關鍵區別在於私鑰的備份和易恢復性。

區塊鏈的存儲和接受

比特幣的區塊鏈使用 Berkeley DB(文件資料庫)作為錢包資料庫,使用 LevelDB(鍵值資料庫)存儲區塊的索引和 UTXO(Unspent Transaction Output,未開銷的比特幣交易輸出)。節點在啟動的時候,將整個區塊鏈的索引從 LevelDB 載入入內存。當收到一個新區塊時,節點對新區塊中的所有交易進行檢測,驗證交易格式、交易大小、交易簽名、UTXO 是否匹配、交易簽名、腳本合規等方面。

如果驗證成功,檢查上一區塊頭與鏈頭區塊哈希值是否一致,如果是一致,則更新 UTXO 資料庫和回滾交易資料庫,如果不是,則將該區塊放在孤兒區塊池中 。當節點發現網路中存在另一條更長的區塊鏈時,就需要斷開現有的區塊並對區塊鏈進行重組。如果驗證不成功,會拋棄該區塊,繼續等待新區塊的到來(礦工會繼續計算新區塊的數學難題)。

區塊鏈的工作量證明計算機制

「礦工」角色的節點一直收集網路中廣播的交易記錄,並致力於計算新區塊的數學難題,即工作量證明。如果其他節點發來的新區塊驗證成功,節點除了更新 UTXO 資料庫和回滾交易資料庫,節點會立即開始下一個新區塊的計算。新區塊的構建優先選取交易內存池中優先順序高的交易記錄。優先順序的計算方式為:

如果自己的工作量證明計算成功,節點會第一時間將這個區塊廣播至整個網路中,其他節點收到該新區塊,如上所述,會進行相應的驗證和存儲。

整個區塊鏈的運轉機制如圖 8 所示。

圖 8 區塊鏈運轉機制示意圖

其他相關

腳本語言

區塊鏈採用的腳本語言並不是圖靈完備的語言,不支持循環,只能進行堆棧式操作。這種腳本語言的好處是,不允許礦工提交一個死循環的腳本,更注重的是安全方面的考量,但其擴展能力有限。從以太坊為首的區塊鏈編程平台支持圖靈完備的編程語言,引領區塊鏈跨入 2.0 時代。由於支持循環等複雜操作,以太坊用 Gas(燃料)機制來防止死循環的出現,確保系統的安全。

消息隊列

比特幣區塊鏈採用 Zero MQ(ZMQ)作為消息分發和消息隊列管理工具。與很多人熟悉的 RabbitMQ 相比,ZMQ 不像傳統意義的消息伺服器,更像一個底層的網路通信庫,在多個線程、內核和主機盒之間彈性伸縮,在 Socket API 之上將網路通信、進程通信和線程通信抽象為統一的 API 介面。

挖礦設備和演算法演進

挖礦設備從支持複雜指令(CISC)、適合串列計算的 CPU 礦機時代,經由基於眾核體系、適合併行簡單計算的 GPU 挖礦和低功耗卻價格昂貴的 FPGA 挖礦,逐漸向集約高速的 ASIC 礦機和規模效應的礦池演進。

基於工作量證明機制的演算法,容易導致礦工算力集中的問題。有人將這種「中心化」的責任歸咎於 SHA256 演算法。此時,基於 SCRYPT 演算法的萊特幣(Litecoin)進入了人們視線,其佔用內存多、計算時間長、並行計算困難的特點,限制了礦工的「軍備競賽」。萊特幣的成功催生了更多演算法的交叉融合,衍生出串聯演算法(夸克幣)、並聯演算法(HeavyCoin)和多用途演算法(在工作量證明的同時,尋找大素數的素數幣,PrimeCoin)。

開源項目和工具

區塊鏈的開源項目

BitCoin

BitCoin 是最早、也是現網運行區塊鏈最成功的一個開源項目,核心技術框架採用 C++開發,共識演算法採用 PoW,每秒交易量(TPS)為不多於 7 筆,開源許可協議為 MIT。

官方編程語言:C++

開源許可協議:MIT

開源項目地址:https://github.com/bitcoin/bitcoin

Ethereum

以太坊(Ethereum)是一個支持圖靈完備腳本運行的區塊鏈開發平台,基於智能合約,降低用戶搭建 DApp 應用的門檻。目前以太坊正式運行的版本是 1.0,採用的是 POW 共識演算法,公網 TPS 是 25 筆,未來將採用類 POS 的 Casper 演算法,區塊鏈的確認速度將得到大幅提升。在規劃的 2.0 版本中,TPS 有望可以達到 2000TPS。

官方編程語言:Go

開源許可協議:GPLv3

開源項目地址:https://github.com/ethereum

Hyperledger Fabric

Hyperledger Fabric 是 IBM 開源的區塊鏈項目,開發環境可以適配多種環境(virtualbox 虛擬機、自建網路和 IBM 的 BlueMix),支持 Docker,共識演算法插件化,注重角色的許可權控制和企業級的安全機制。主要開發語言是 Go 語言,支持 JavaScript、Java 和 Python 等語言,交易頻率 TPS 最高能夠達到 100K。其子項目 Iroha 助力區塊鏈移動應用程序的開發,值得關注和進一步跟蹤。

官方編程語言:Go

開源許可協議:Apache 2.0

開源項目地址:https://github.com/hyperledger/fabric

OpenChain

OpenChain 是區塊鏈技術公司 Coinprism 的開源工具,目標是大型企業和金融機構,基於一種獨特的分散式賬本技術,幫助用戶部署自己定製的區塊鏈,減少用戶的交易成本和結算時間。

官方編程語言:C#

開源許可協議:Apache 2.0

開源項目地址:https://github.com/openchain

BitShares

比特股(BitShares)提供的 BitUSD 等錨定資產,是虛擬幣歷史上的一個最重要變革之一,消除了虛擬貨幣估值波動大的問題。比特股創新地提出了 DPoS 共識演算法,核心技術框架採用 C++語言開發,既適用於公有鏈,也適合於聯盟鏈。在比特股 2.0 中,交易頻率 TPS 最高能夠達到 100K。

官方編程語言:C++

開源許可協議:MIT

開源項目地址:http://github.com/bitshares

Ripple

瑞波(Ripple)是世界上第一個開放的支付網路,也是目前最成功的區塊鏈技術公司。其核心產品 Ripple 協議本質上是一個實時結算系統,通過引入新的共識機制 RPCA,只要特殊節點投票,就能在很短時間內完成交易的驗證和確認。

官方編程語言:C++

開源許可協議:ISC

開源項目地址:https://github.com/ripple/rippled

Tendermint

美國公司 Tendermint 推出的 Tendermint 是第一個實施分片技術的公共區塊鏈。Tendermint 主核心負責管理所有區塊鏈分區,支持比特幣分區和以太坊分區,具有很大的靈活性,共識引擎通過 Tendermint 套接字協議(TMSP)與應用程序進行連接,不依賴於某一特定的編程語言,所以開發人員可以使用任意一種編程語言來編寫智能合約。

官方編程語言:Go

開源許可協議:Apache 2.0

開源項目地址:https://github.com/tendermint/tendermint

Corda

Corda 是 R3CEV 於 2016 年 12 月初開源的區塊鏈平台,採用一種類區塊鏈的分散式賬本,基於產業標準工具,通過創新智能合約和數據處理,為金融服務設計一種新型分散式的分類帳平台。

官方編程語言:Go

開源許可協議:Apache 2.0

開源項目地址: https://www.corda.net/

具體對比圖如表 2 所示。

表 2 開源項目的對比表

以太坊的集成開發環境(IDE)

Remix 是以太坊官方 IDE,它允許開發者在以太坊區塊鏈創建和部署合約及去中心化應用。它包含一個 Solidity 源代碼排錯器,Solidity 是以太坊開發的智能合約語言,可以將智能合約代碼編譯成以太坊虛擬機(EVM)可識別的位元組碼。此外,如要和以太坊節點交互,主要用到的 Web3.js API;與節點進行底層交互,需要用到 JSON RPC API。以太坊主流項目的對比如表 3 所示。

表 3 以太坊主流項目的對比表

總結

區塊鏈憑著數據公開透明、信息安全可靠、來源可證可溯等諸多特性,降低信任構建成本,提高網路協作效率,加速價值的全球流動,促進下一代信息基礎設施持續演進。

本文著重從區塊鏈 1.0 的基本概念、運行機制、相關技術和開源項目及工具四個方面進行了簡單的介紹,希望能夠幫助讀者釐清概念、梳理思路和開拓視野,期待讀者針對各行各業痛點,廣泛應用區塊鏈技術,有效改善商業規則,營造「區塊鏈+」的新浪潮。

註:本文源自卿蘇德寫於 2017 年的一篇技術文章。

作者簡介:卿蘇德,博士,就職於中國信息通信研究院(原工業和信息化部電信研究院)產業與規劃所。目前擔任 CSDN 區塊鏈知識庫特邀編輯。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

這麼糟糕的代碼,真的是我以前寫的嗎?
誰在控制著 iCloud 中國區賬號的密鑰?

TAG:CSDN |