您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么理解區塊鏈”,在日常操作中,相信很多人在怎么理解區塊鏈問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解區塊鏈”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
如何理解區塊鏈
首先,引入區塊鏈的理念:將一個基于節點的去中心化共識協議與工作量證明(PoW)機制結合在一起。節點通過PoW機制獲得參與到系統的權利,每隔一段時間將交易打包到區塊中,從而創建出不斷增長的區塊鏈。
這里主要有兩個概念:去中心化和工作量證明機制。其實比特幣的去中心化體現的可能更明顯,這個之前我又寫過一篇解讀作為最早區塊鏈技術的比特幣以及區塊鏈所帶來的改變。
如何去中心化:區塊鏈系統中的每一個區塊,負責記錄交易信息,每個用戶的收支情況都被永久的存儲在區塊中供他人查詢。每個節點都會保存一份完整的交易數據,所有這些節點組成了區塊鏈的分布式數據庫系統,任何一個節點的數據出現問題,都不會影響整個系統的運轉。
工作量證明機制:工作量證明(Proof Of Work,簡稱PoW),簡單理解就是一份證明,用來確認你在系統中做過一定量的工作。相較于低效的監測工作的整個過程,通過對工作結果進行認證來證明完成了相應的工作量,則是一種非常高效的方式。例如我們通過完成工作中的各項任務來證明我們為公司創造了價值,從而得到公司的認可。而這種"工作證明"一般都會花費一定的時間才能得到。
工作量證明機制(PoW)
工作量證明機制,是一種應對拒絕服務攻擊(DoS)和其他服務濫用的經濟對策。它要求發起者進行一定量的運算作為代價,也就意味著需要消耗計算機一定的時間。例如現在網站登錄時都需要輸入的驗證碼(滑塊或者拼圖),都采用的是這種CAPTCHA模式。
類似于CAPTCHA,哈希現金(HashCash)的原理是在郵件的消息頭中增加一個包含收件人地址、發送時間和salt隨機數的hashcash stamp的散列值,但是滿足前20位都是0的散列值才是合法的。這就需要發送者在正式發送前需要通過調整salt的值進行多次計算,在滿足該條件后才能成功發送。但是我們不希望發送者在算出這個stamp后繼續復用,所以HashCash規定了過期的stamp是非法的(即發送時間 > stamp時間)。
區塊鏈也是采用了類似hashcash的工作量證明方法,對區塊頭中的數據做雙重SHA256運算( 即SHA256(SHA256(HEADER)) ),與當前網絡的目標值做對比,如果小于目標值,則完成工作量證明。
這里對PoW做了較多的解釋,是為了便于理解PoW是如何應用在區塊鏈上的。挖礦也是通過PoW進行的。在比特幣系統中,節點完成工作量證明后,就代表獲得這個區塊的交易記賬權。系統會通過PoW機制讓礦工們競爭記賬權,誰在單位時間內執行的運算更多(擁有更高的算力),誰就有更高的概率獲得區塊的記賬權。獲得記賬權的礦工將把該區塊廣播到網絡中,全網其他節點在驗證區塊滿足特定的條件后,其區塊會被鏈接在主鏈上,從而在全網范圍內形成對當前網絡狀態的一次共識,該礦工也會得到系統獎勵的一定數量的代幣。所有的區塊通過這種形式鏈接在一起,形成了區塊鏈的主鏈,從創世區塊到當前生成的最新區塊,所有歷史交易數據都是公開透明的。
上面提到了區塊是用于記錄交易信息的,區塊頭中的數據參與了PoW的過程。那么接下來有必要進一步分析區塊的內容了。
區塊的組成
對于交易中的每個輸入和狀態,有如下的定義:
1.如果引用的UTXO不在當前的狀態中,則會返回錯誤;如果簽名與引用的UTXO的持有者簽名不一致,也會返回錯誤。
2.如果所有輸入的UTXO總額與所有輸出的UTXO總額不等,會返回錯誤。
3.返回的新狀態NEW_STATE中,移除了所有輸入的UTXO,增加了所有輸出的UTXO。
Merkle樹
Merkle樹是數據結構中的一種樹結構,可以是二叉樹,也可以是多叉樹,具有樹的所有特點。由于Merkle樹中會進行Hash運算,所以也被稱為Hash樹。在了解Merkle樹之前,先來看看Hash算法及HashList。
Hash算法是一種可以將任意長度的數據轉換成固定長度字符串的算法。是一種安全散列算法。最顯著的特點是幾乎不可逆、無沖突。Hash算法最常見的應用就是對數據完整性的校驗。例如我們在下載一些文件時,資源提供方會給出一個MD5或者SHA的值,這個值實際上就是資源在經過Hash運算后的值,用戶下載數據后,可以對數據進行Hash,然后跟這個值比對,如果相同,就說明數據在傳輸過程中無損壞或篡改。
然后回過頭來再看Merkle樹,它的底層與HashList一樣,都是將數據分成小數據塊,然后分別計算其Hash值。但是再往上一層就不同了,它不是把所有的Hash值合并到一起做Hash,而是將兩個相鄰的Hash值拼接在一起進行Hash運算,產生一個新的Hash。例如Block1的Hash值201w與Block2的Hash值0mzc合并Hash后產生新的3ali Hash值。而如果兩兩匹配后出現孤立的Hash值,則直接將其做Hash,例如Block5。最終產生一個Root Hash值,通常稱為Merkle Root。
同樣,在下載前,會先從可信數據源中獲取正確的Merkle Root,然后再從其他節點下載Merkle樹,通過Merkle Root來辨別Merkle樹的真偽。如果發現不匹配,則從其他節點繼續下載該Merkle樹,直到獲得一個與可信Merkle Root相匹配的Merkle樹。
由于Merkle樹是逐級分支的,所以它可以從任意一個分支開始下載并驗證。考慮Root->d063->09yk->a8b5->Block3這個分支,如果對這個分支的Hash值驗證通過后,就可以下載Block3的數據了。而在HashList中需要先得到整個Hash值列表后才能使用Root Hash驗證。
在區塊鏈系統中,最下層的葉節點中存放的是交易數據,每個中間層的節點都是它的兩個子節點的Hash,根節點也是它的兩個子節點的Hash,代表Merkle樹的頂部。如果有攻擊者惡意篡改交易數據,或者篡改Merkle樹的某一部分,必然導致上層節點的Hash值變動,最終導致驗證不通過。
了解了Merkle樹的結構后,如果我們要查找某一筆交易,那么順序是怎樣的呢?首先,可以根據區塊頭中的時間戳確認交易存在的具體區塊。而Merkle Root也是放在區塊頭中的,如果我們從Merkle Root開始向下查找,假設底層有n筆交易數據,那么找到所需的步驟為log2(n),其實就是算法中的二分查找。簡化支付驗證(Simplified Payment Verification)就是利用這種方案,實現了輕量級的錢包客戶端,只需下載區塊頭及相關交易的分支,即可對交易進行確認。但是它也存在一些缺點:
1.容易遭到全節點的拒絕服務,所以要保證較多的與全節點的連接,而且要保證這些節點是可信的;
2.spv客戶端向全節點請求的交易必須與它的密鑰一致,這樣全節點會看到該客戶端的相應用戶的公鑰,造成隱私泄露。
P2P網絡
在BT架構中,我們發現還是存在一個"中心服務器",該服務器的作用并非提供下載服務,而是對發布的torrent文件進行統一管理。torrent文件本質上是一個索引文件,包含了Tracker信息(發布資源的服務器的位置)和文件信息(文件名、大小、Hash值等),這些信息根據BitTorrent協議內的B編碼規則進行編碼。torrent文件中的Hash信息是對每一塊要下載的文件內容的加密結果。使用文本工具打開.torrent文件,就可以看個大概(亂碼是SHA1校驗碼):
到此,關于“怎么理解區塊鏈”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。