區塊鏈就是一個分布式、有著特定結構的數據庫,是一個有序,每一個塊都連接到前一個塊的鏈表。也就是說,區塊按照插入的順序進行存儲,每個塊都與前一個塊相連。這樣的結構,能夠讓我們快速地獲取鏈上的最新塊,并且高效地通過哈希來檢索一個塊。
一個標準的區塊鏈項目,應該至少包含數據層、網絡層、共識層這三層,應用層、合約層、激勵層可以不包含。
以一個交易的例子來說明這模型所起的作用,假如說,我們有三個角色,
A有100btc,B有0btc,c是礦工,現在A給B轉10個btc,
1、A->B轉賬10比特幣,數據層
2、轉賬交易要確認,需要廣播出去,網絡層
3、把交易打包到區塊形成新的區塊,并且加入到區塊鏈,共識層
4、第三步的獎勵,激勵層
5、錢包,應用層
區塊鏈開發語言
1)數據層的特點是:
不可篡改
全備份
完全平等(數據、權限、代碼)
要實現這樣的特點,依靠是鏈式結構,如下
Prev Hash:父區塊哈希,特定值的掃描。比方說SHA-256下的隨機散列值,保證數據的可靠性和不可篡改。
Nonce:隨機數,類似于區塊的隨機散列值
2)、數據層之數據結構:
區塊:一種包含在公開賬簿(區塊鏈)里的聚合了交易信息的容器數據結構,包含區塊頭和區塊主體,區塊頭 + 區塊體 <= 1M (比特幣的擴容在討論中)
區塊頭:80個字節
區塊體:每個區塊包含2000個交易,平均每個交易至少是250字節。因此,包含完整交易的區塊比區塊頭的4千倍還要大。
區塊頭
區塊頭由三組區塊元數據(Blockmeta)組成
一組元數據:父區塊哈希值,用于該區塊與區塊鏈中的前一區塊相連接
二組元數據:Merkle根,一種用來有效地總結區塊中所有交易的數據結構
三組元數據:難度目標,時間戳和Nonce與生產區塊相關
區塊頭哈希值
產生:通過SHA256算法對區塊頭進行二次哈希計算得到的數字指紋
特點:是唯一,可計算
存儲:不包含在區塊的數據結構里,可存儲在獨立的數據庫表中
區塊高度
產生:節點在接受來自比特幣網絡的區塊時,動態地識別該區塊在網絡中的位置(區塊高度)
特點:不是唯一的(短時間)
存儲:不包含在區塊的數據結構里,可存儲在獨立的數據庫表中
補充:1.安全散列算法(The Secure Hash Algorithm,SHA)美國國家安全局 (NSA) 設計,美國國家標準與技術研究院(NIST) 發布的一系列密碼散列函數。
2.第一個區塊高度為0,2016年2月25號區塊高度大約為399,900
3)、數據層之區塊的鏈接
1、比特幣的完整節點保存了區塊鏈從創世區塊起的一個本地副本,該區塊鏈的本地副本會不斷地更新用于擴展這個鏈條。
2、一個節點從網絡接收傳入的區塊時,它會驗證這些區塊,然后鏈接到現有的區塊鏈上。
3、對于一個新區塊,節點會在“父區塊哈希值”字段里找出包含它的父區塊的哈希值。
4)、數據層之創世區塊
1、創世塊是指塊鏈的第一個塊,現在的比特幣客戶端版本把塊號定為0,以前的版本把該塊塊號定為1。
2、交易的輸入:The Times 03/Jan/2009 Chancellor on brink of second bailout for banks。(翻譯:《泰晤士報》,2009年1月3日,財政大臣正站在第二輪救助銀行業的邊緣)。
3、創世塊的收益不可能被花掉,因為創世塊是用代碼表示的(這個巧合可能是故意的),盡管如此,其50BTC收益還是被發送到地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。
備注:
難度公式:difficulty = difficulty_1_target / current_target。
difficulty_1壓縮值:0x1d00ffff
difficulty_1_target固定值:0xffff2^(8(0x1d-3)) -------這兩個值都是固定的
current(計算目標)壓縮值:0x1729d72d(10進制為38818029,如下圖中的計算目標)
current(計算目標)固定值:0x29d72d2^(8(0x17-3))
難度系數difficulty= 0xffff2^(8(0x1d-3)) / 0x29d72d2^(8(0x17-3))
即,計算目標越小,難度系數越高
比特幣區塊鏈瀏覽器 https://blockchain.info/zh-cn/
5)、數據層之時間戳
時間戳,指的是各個節點本地的時間戳
區塊產生頻率:10 分鐘
區塊拒絕條件:
上限 > 前7個塊的時間戳的中位數
下限 < 系統平均時間之后2小時
6)、數據層之交易記錄
7)、數據層之私鑰,公鑰,錢包地址
比特幣系統使用了橢圓曲線簽名算法,算法的私鑰由32個字節隨機數組成,通過私鑰可以計算出公鑰,公鑰經過一系列哈希算法和編碼算法得到比特幣地址,地址也可以理解為公鑰的摘要(hash)。
8)、數據層之記賬原理
已知:發送方(張三 公鑰地址):19anBP……iPitVr
接收方(李四 公鑰地址):1Eu8Uk…….Xy7i2B
金額:10 BTC
9)、數據層之交易簽名,校驗流程
一個廣播出去的區塊交易數據包含三部分,
原始數據,包含轉賬金額和對方錢包地址
簽名,使用轉賬人私鑰對原始數據進行簽名
公鑰,轉賬人公鑰(公鑰是根據私鑰產生的,可以私鑰簽名的數據進行驗簽)
10)、數據層之非對稱加密算法
在“加密”和“解密”的過程中分別使用兩個密碼
私鑰:是信息擁有者才知道的,可以加密信息或者解密公鑰數據(信息的安全性)
公鑰:是公開全網可見的,用公鑰來驗證信息,加密數據(信息的真實性);
非對稱加密橢圓曲線加密算法(ECC)>secp256k1
11)、數據層之Merkle樹
Merkle 樹是一種哈希二叉樹,用于快速遞歸和校驗大規模數據完整性,是一種平衡樹(如果是奇數個交易,則多余的那個自己復制自己)
每個區塊都包括了產生于該區塊的所有交易,并且以Merkle 樹表示
H(A)=SHA256(SHA256(交易A))
H(AB)=SHA256(SHA256(H(A)+H(B)))
為了證明區塊中存在某個特定的交易,只需要計算log2(N)個哈希,16筆交易可以由4個哈希+Merkle樹根來證明了,65535交易,只需16個哈希
SPV : 簡單支付驗證,一個節點只需要僅下載區塊頭(80字節)+Merkle路徑就能證明一筆交易的存在,這個節點稱之為輕節點。
如上圖,假如我們想要確定H(K)這筆交易的準確性,證明方法:
1)服務器A,輕節點,只有區塊頭,沒有區塊體,但是能夠與全2節點通信,獲得Merkle樹的hash;
2)服務器B,全節點,區塊頭和區塊體都有;
3)確定Merkle路徑(H(L),H(IJ),H(MNOP),H(ABCDEFGH))
4)向全及誒單請求數據(H(L),H(IJ),H(MNOP),H(ABCDEFGH))
5)進行驗證,多次hash運算,最后跟Merkle根做hash比較
12)、哈希(hash)函數
哈希函數:Hash(原始信息) = 摘要信息
原始信息可以是任意的信息,hash之后會得到一個簡短的摘要信息。
哈希函數有幾個特點:
同樣的原始信息用同一個哈希函數總能得到相同的摘要信息
原始信息任何微小的變化都會哈希出面目全非的摘要信息
從摘要信息無法逆向推算出原始信
1)、網絡層之數據傳播和驗證
新的交易向全網進行廣播
每一個節點都將收到的交易信息納入一個區塊中
每個節點都嘗試在自己的區塊中找到一個具有足夠難度的工作量證明(挖礦)
當一個節點找到了一個工作量證明(獲得打包區塊的資格),它就向全網進行廣播(新打包的區塊)
當且僅當包含在該區塊中的所有交易都是有效的且之前未存在過的,其他節點才認同該區塊的有效性
其他節點表示他們接受該區塊,而表示接受的方法,則是在跟隨該區塊的末尾,制造新的區塊以延長該鏈條,而將被接受區塊的隨機散列值視為先于新區塊的隨機散列值
2)、網絡層之P2P技術
P2P組網技術早期應用在BT這類P2P下載軟件中,這就意味著區塊鏈具有自動組網功能,支持TCP,UDP等通信協議
拜占庭將軍問題:如何讓不信任,不可靠的多方,協同工作,達成統一目標——靠共識。
拜占庭將軍問題是Leslie Lamport(2013年的圖靈講得主)用來為描述分布式系統一致性問題(Distributed Consensus)在論文中抽象出來一個著名的例子(互不信任的多支軍隊同時保持進攻或者防守)。
共識層封裝了網絡節點的各類共識機制算法,共識機制算法是區塊鏈的核心技術,因為這決定了區塊的產生,而記賬決定方式將會影響整個系統的安全性和可靠性。
目前已經出現了十余種共識機制算法,其中比較最為知名的有
工作量證明機制(PoW,Proof of Work)
實用拜占庭容錯算法(PBFT)
權益證明機制(PoS,Proof ofStake)
股份授權證明機制(DPoS,Delegated Proof of Stake)等。
POW:工作量證明機制
比特幣通過對這個系統做出一個簡單的(事后看是簡單的)修改解決了這個問題,它為發送信息加入了成本,這降低了信息傳遞的速率,并加入了一個隨機元素以保證在一個時間只有一個城邦(或者很少)可以進行廣播,同時在廣播時會附上自己的簽名,這個過程就像將軍A(節點)像其他的將軍發起一個進攻(或者防守)提議一樣,如果是誠實的將軍就會立刻同意,只要誠實的將軍占比大于51%,那么大家行動就會保持一致。
它加入的成本是“工作量證明”,并且它是基于計算一個隨機哈希算法(挖礦)的。
不過在進行工作量證明之前,記賬節點會做進行如下準備工作:
收集廣播中還沒有被記錄賬本的原始交易信息
檢查每個交易信息中付款地址有沒有足夠的余額
驗證交易是否有正確的簽名
把驗證通過的交易信息進行打包記錄
添加一個獎勵交易:給自己的地址增加12.5比特幣
如果節點爭奪記賬權成功的話,就可以得到12.5比特幣的獎勵。
PBFT:實用拜占庭容錯算法
PBFT是一種狀態機副本復制算法,即服務作為狀態機進行建模,狀態機在分布式系統的不同節點進行副本復制。每個狀態機的副本都保存了服務的狀態,同時也實現了服務的操作。執行過程如下
PBFT對每個副本節點提出了兩個限定條件:
1、所有節點必須是確定性的。也就是說,在給定狀態和參數相同的情況下,操作執行的結果必須相同;
2、所有節點必須從相同的狀態開始執行。在這兩個限定條件下,即使失效的副本節點存在,PBFT算法對所有非失效副本節點的請求執行總順序達成一致,從而保證安全性。
客戶端向主節點發送請求調用服務操作
主節點通過廣播將請求發送給其他副本
所有副本都執行請求并將結果發回客戶端
客戶端需要等待2f+1個不同副本節點發回相同的結果,作為整個操作的最終結果。
Pos:股權證明
就是一個根據你持有貨幣的量和時間,給你發利息的一個制度。
類似于財產儲存在銀行,這種模式會根據你持有數字貨幣的量和時間,分配給你相應的利息。
在股權證明POS模式下,有一個名詞叫幣齡,每個幣每天產生1幣齡,
比如:比如你持有100個幣,總共持有了30天,那么,此時你的幣齡就為3000,這個時候,如果你發現了一個POS區塊,你的幣齡就會被清空為0。你每被清空365幣齡,你將會從區塊中獲得0.05個幣的利息(假定利息可理解為年利率5%),那么在這個案例中,利息 = 3000 * 5% / 365 = 0.41個幣。
POS的存在主要是從經濟學上的考慮和創新。
DPos:股份授權證明機制(又稱受托人機制)
原理是讓每一個持有比特股的人進行投票,由此產生101位代表 , 我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利是完全相等的。
從某種角度來看,DPOS有點像是議會制度或人民代表大會制度。如果代表不能履行他們的職責(當輪到他們時,沒能生成區塊),他們會被除名,網絡會選出新的超級節點來取代他們。
DPOS的出現最主要還是因為礦機的產生,大量的算力在不了解也不關心比特幣的人身上,類似演唱會的黃牛,大量囤票而絲毫不關心演唱會的內容。
數據層、網絡層、共識層是構建區塊鏈技術的必要元素,缺少任何一層都將不能稱之為真正意義上的區塊鏈技術。
作者:張凱_9908 來源:簡書
互聯互通社區
互聯互通社區專注于IT互聯網交流與學習,旨在打造最具價值的IT互聯網智庫中心,關注公眾號:互聯互通社區,每日獲取最新報告并附帶專題內容輔助學習。方案打造與宣講、架構設計與落地、人員招聘與培訓、數據中臺建設等技術咨詢與服務合作請+微信:hulianhutongshequ
網頁題目:一文讀懂區塊鏈技術架構-創新互聯
網站鏈接:http://vcdvsql.cn/article14/cdijde.html
成都網站建設公司_創新互聯,為您提供域名注冊、軟件開發、全網營銷推廣、企業網站制作、搜索引擎優化、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯