




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章
加密數(shù)字資產(chǎn)的原理與實現(xiàn)第一節(jié)密碼學原理第二節(jié)分布式賬本與去中心化第三節(jié)腳本與智能合約第一節(jié)密碼學原理加密哈希函數(shù)哈希函數(shù)(HashFunction,又稱散列函數(shù))是密碼學中最基礎(chǔ)也最重要的數(shù)學原理之一,在保障信息安全、高效數(shù)據(jù)存儲以及數(shù)據(jù)驗證等方面都有重要價值。Hash并不指代某一特定算法,而是一類數(shù)學函數(shù)的統(tǒng)稱,它可以將任何輸入數(shù)據(jù)進行“打亂”、“混合”,重新創(chuàng)建一個固定格式和大小的散列值(HashValues、HashCodes、HashSums或Hashes)。因此,一般而言Hash具有如下三個特征:第一,函數(shù)輸入可以為任意大小的字符串;第二,函數(shù)輸出為固定格式和大小的數(shù)據(jù);第三,可高效運算,即計算位字符串輸入的散列值的復(fù)雜度位,意味著可以在有限、合理的時間內(nèi)得到輸出結(jié)果。加密哈希函數(shù)具有額外的三個安全性特征:抗碰撞性(Collision-resistance、Collision-free)、隱匿性(Hiding)以及謎題友好(Puzzle-friendly)。第一節(jié)密碼學原理抗碰撞性“碰撞”描述的是由不同函數(shù)輸入得到相同函數(shù)輸出的情形。加密貨幣要求其使用的哈希函數(shù)具備扛碰撞屬性,即沒有人能夠找到碰撞情形。對于一個滿足抗碰撞要求的加密哈希函數(shù),無法找到兩個不同的輸入和使得。加密哈希函數(shù)的抗碰撞特征僅要求“無法找到”碰撞,而非“不存在”碰撞。理論上,由于哈希函數(shù)接受任意大小的數(shù)據(jù)為輸入、而輸出固定大小的散列值,當輸入空間大于輸出空間時必然會有不同輸入映射為相同輸出的情形出現(xiàn)。以常見的256位輸出為例,其輸出結(jié)果的可能性有種,意味著我們必然能在次哈希計算種找到一次碰撞,或者從概率上平均每次哈希計算能夠找到一次碰撞。若表示與加密數(shù)字資產(chǎn)相關(guān)的賬本數(shù)據(jù),是對該賬本信息進行加密哈希計算后得到的散列值,那么在賬本數(shù)據(jù)的任何遺失、損壞、修改后都不可能再得到相同的散列值。第一節(jié)密碼學原理抗碰撞性“哪怕只是輸入發(fā)生最微小的改變(例如,反轉(zhuǎn)一個二進制位),也會導致輸出的不可區(qū)分性改變,即密碼學中的“雪崩效應(yīng)(AvalancheEffect)”。因此,通過記錄和比較賬本數(shù)據(jù)經(jīng)加密哈希計算后的散列值,就可以識別賬本數(shù)據(jù)的是否發(fā)被惡意篡改(圖4-1)。隨著交易數(shù)據(jù)的膨脹,要求分布式網(wǎng)絡(luò)節(jié)點存儲全部交易信息和賬本數(shù)據(jù)是不現(xiàn)實的,而信息摘要能夠大大降低數(shù)據(jù)存儲和網(wǎng)絡(luò)通信壓力。因此,加密哈希函數(shù)的抗碰撞性對于分布式賬本技術(shù)十分重要。第一節(jié)密碼學原理隱匿性僅通過加密哈希函數(shù)的輸出,無法推算出函數(shù)輸入,但這一解讀并不一定準確。現(xiàn)實中,我們并不能保證輸入總是來自高階最小熵分布。基于此,隱匿性的正式定義可以表述為:若是來自高階最小熵分布的隨機采樣,且無法由反推出時,則稱加密哈希函數(shù)具有隱匿性。2024/6/25隱匿性的一個重要應(yīng)用是密碼學中的承諾(Commitment)。密碼學承諾具備兩個特性:一是隱匿性(Hiding),即做出的承諾是密文形式,在打開承諾之前,驗證方不知道承諾方的敏感數(shù)據(jù);二是約束性(Binding),即一旦承諾生成并公開,承諾方不能將已承諾的敏感數(shù)據(jù)換或解釋成另一個不同的數(shù)據(jù)。第一節(jié)密碼學原理謎題友好謎題友好是加密哈希函數(shù)的另一重要性質(zhì)。若哈希函數(shù)
的形式能夠保證沒有任何特定解題策略比隨機嘗試的更好,就可以認為是
謎題友好的。加密哈希函數(shù)的謎題友好性質(zhì)在工作量證明機制和加密貨幣“挖礦”中有廣泛的應(yīng)用。在比特幣挖礦中,計算難度差不多每兩周會隨著全網(wǎng)算力的變化而進行一次調(diào)整,以保證解迷題平均花費時間(區(qū)塊生成間隔)大約維持在10分鐘左右。第一節(jié)密碼學原理安全哈希算法在符合上述三個安全性特征的加密哈希函數(shù)中,安全哈希算法(SecureHashAlgorithm,SHA)是最常見的一類。在SHA-2系列中,SHA-256算法是現(xiàn)今密碼學和信息安全領(lǐng)域中的基本算法,也是比特幣等加密數(shù)字貨幣應(yīng)用最廣泛的加密算法之一。SHA-256使用的MD變換的數(shù)據(jù)處理流程如圖4-3所示,大體可以分為兩個步驟。一個步驟是對輸入信息進行預(yù)處理,使其滿足指定的信息結(jié)構(gòu)。第二步是使用壓縮函數(shù)進行迭代運算,運算內(nèi)容全部是邏輯的位運算,例如按位的“與”、“補”、“異或”等。第一節(jié)密碼學原理哈希指針指針描述了數(shù)據(jù)在內(nèi)存中的位置,標示了一個占據(jù)存儲空間的實體在這一段空間起始位置的相對距離值;通過指針指向的地址,可以檢索到對應(yīng)的數(shù)據(jù)。哈希指針是一個數(shù)據(jù)存儲位置及其位置數(shù)據(jù)哈希值的指針。根據(jù)加密哈希函數(shù)的抗碰撞性質(zhì),一旦哈希指針指向的位置的數(shù)據(jù)塊發(fā)生任何改變,對它進行哈希操作之后的哈希值必然和之前不同。2024/6/25第一節(jié)密碼學原理區(qū)塊鏈用哈希指針代替?zhèn)鹘y(tǒng)指針構(gòu)建鏈表,得到的數(shù)據(jù)結(jié)構(gòu)就是區(qū)塊鏈。在由普通指針實現(xiàn)的數(shù)據(jù)鏈表中,每一個數(shù)據(jù)區(qū)塊既包含了自身的數(shù)據(jù),也包含了指向上一數(shù)據(jù)區(qū)塊的指針,即上一區(qū)塊的地址信息。根據(jù)加密哈希函數(shù)的隱匿性,這種反向破解哈希函數(shù)的任務(wù)幾乎是不可能完成的,而且創(chuàng)世區(qū)塊通常無法修改。2024/6/25第一節(jié)密碼學原理梅克爾樹梅克爾樹能夠以一種高效、集約的方式存儲大量數(shù)據(jù),并且可以非常有效地驗證數(shù)據(jù)的隸屬關(guān)系??雌饋硐褚豢妙嵉惯^來的樹。梅克爾樹的底端是樹的葉子節(jié)點,由大量數(shù)據(jù)區(qū)塊構(gòu)成;最終梅克爾根和指向它的頭部哈希指針將與我們存儲的內(nèi)容存在差異,數(shù)據(jù)篡改行為就能夠被識別出來。利用梅克爾樹結(jié)構(gòu),我們還可以在僅存儲梅克爾根的情況下實現(xiàn)數(shù)據(jù)區(qū)塊的隸屬證明。2024/6/25第一節(jié)密碼學原理數(shù)字簽名在介紹數(shù)字簽名之前,先回想在紙上手寫簽名的情形。進行有效簽名時必須滿足三個特征:一,必須由當事人親自簽名,任何人不得偽造簽名,這就要求收到簽名文檔的人能夠正確鑒別簽名的真?zhèn)?,偽造的簽名必須能夠被識別。二,姓名必須簽署在特定的文檔上,即:簽名只在特定文檔上生效,只表示對該本文內(nèi)容事項的同意或支持,將該簽名復(fù)制粘貼到其他文檔上是無效的。三,一旦確定簽名是有當事人親自簽署的,那么簽名人不可以否認簽署文本所載事項。在進行數(shù)字簽名之前,簽名者先要利用密鑰生成器生成由私鑰(PrivateKey)和公鑰(PublicKey)組成的一對密鑰。私鑰將用來簽名,需要由簽名者妥善保存;公鑰可以公開,用來驗證簽名的有效性。第一節(jié)密碼學原理非對稱密碼術(shù)前面介紹的數(shù)字簽名中使用到公鑰和私鑰是“非對稱密碼術(shù)”(AsymmetricCryptography)或“公鑰密碼術(shù)”(Public-keyCryptography)的專用術(shù)語。1970年代以前,所有密碼系統(tǒng)都是用對稱密鑰算法,加密和解密環(huán)節(jié)使用相同的密鑰?;驹硎牵撼蠛蠑?shù)的質(zhì)因數(shù)分解是極其困難的。經(jīng)典RSA算法中密鑰對生成可以簡單表示為如下過程1)首先隨機生成兩個足夠大且不公開的素數(shù)
和
,計算
;2)計算歐拉函數(shù)(EularTotientFunction)
,
也是不公開的;3)選擇一個整數(shù)參數(shù)
,使得
,4)利用擴展的歐幾里得算法(ExtendedEuclideanAlgorithm)求解同余方程
,得到
。2024/6/25第一節(jié)密碼學原理非對稱密碼術(shù)“即使知道公鑰,也很難計算出私鑰中的?;谶@一特性,公鑰可以在不影響安全性的情形下公開分發(fā),而私鑰通常需要保持私密性。在非對稱密碼術(shù)中,公鑰和私鑰僅指代是否公開分發(fā),并不固定承擔加密或解密職能。事實上,我們既可以用公鑰加密、私鑰解密,也可以用私鑰加密、公鑰解密,兩種選擇對應(yīng)了非對稱密碼術(shù)的兩大重要應(yīng)用場景。第一節(jié)密碼學原理公鑰地址與身份管理另一個重要概念是公鑰地址。實踐中,由于公鑰比較大,存儲和使用不那么便捷,因此一般對公鑰進行一系列單向函數(shù)變換,得到較短和規(guī)整的公鑰地址。以比特幣為例,生成公鑰地址的過程如圖所示。更為重要的是,只要用戶愿意,他/她隨時都可以生產(chǎn)新的密鑰對,意味著可以自由、隨時定制新的身份,而不需要到任何中央機構(gòu)注冊,這一特征使得加密數(shù)字資產(chǎn)世界具備較高的匿名性。第二節(jié)分布式賬本與去中心化一個中心化加密電子支付系統(tǒng)財奴幣的交易包括兩類:造幣(CreateCoins)和付幣(PayCoins)。財奴可以在賬本中創(chuàng)造了一筆類型為“造幣”、交易ID為“12”的交易記錄。付幣被表示為:消耗一定數(shù)量的舊幣并創(chuàng)造等量新幣。按照財奴幣的規(guī)則,只有滿足以下四個條件的付幣交易才是有效的:第一,被消耗的幣是在之前交易中創(chuàng)造的的有效貨幣;第二,本次被消耗的幣沒有在之前的某次交易中被消耗掉,即本次交易不是雙重支付;第三,本次交易產(chǎn)生的幣值量等于消耗的幣值量;第四,本次交易中被消耗掉的所有幣均有其所有者的有效簽署。第二節(jié)分布式賬本與去中心化一個中心化加密電子支付系統(tǒng)基于區(qū)塊鏈的僅增賬本(Append-onlyLedger)技術(shù)在這里可以派上用場了。我們可以要求財奴按照區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)來管理和維護交易記錄每個區(qū)塊都包含交易的ID、交易的內(nèi)容,以及指向上一區(qū)塊的哈希指針;財奴作為一個沒有主權(quán)信用背書的中央實體,有強烈的無節(jié)制創(chuàng)造新貨幣的動機,以及無法盡職勤勉承擔記賬和維護賬本的隱患,這正是具有中央機構(gòu)的私人加密貨幣方案難以獲得成功的根本原因。第二節(jié)分布式賬本與去中心化點對點網(wǎng)絡(luò)架構(gòu)客戶端和服務(wù)器是網(wǎng)絡(luò)中完全不同的兩類節(jié)點:服務(wù)器作為中央節(jié)點,可直接向其客戶端提供數(shù)據(jù)或接收數(shù)據(jù),而客戶端作為邊緣節(jié)點,必須要通過服務(wù)器才能與其他客戶端進行通訊。與C/S或B/S網(wǎng)絡(luò)架構(gòu)不同,在P2P網(wǎng)絡(luò)中,每個網(wǎng)絡(luò)節(jié)點既是客戶端也是服務(wù)器,都可以請求和提供內(nèi)容。可用性方面,C/S或B/S網(wǎng)絡(luò)架構(gòu)下服務(wù)器必須始終在線并可供客戶端使用。高負載方面,C/S或B/S網(wǎng)絡(luò)中服務(wù)器上的高負載或意外需求往往難以預(yù)測并且有較高的解決成本。可擴展性方面,在C/S或B/S網(wǎng)絡(luò)架構(gòu)下,隨著用戶數(shù)量的增加,服務(wù)器CPU、內(nèi)存、網(wǎng)絡(luò)和磁盤性能也需要增長;第二節(jié)分布式賬本與去中心化專欄4-1網(wǎng)絡(luò)的價值:梅特卡夫定律半導體領(lǐng)域著名的“摩爾定律(Moore’sLaw)”已經(jīng)被很多人熟知,其核心內(nèi)容為:集成電路上可以容納的晶體管數(shù)目在大約每經(jīng)過18個月便會增加一倍,或者說,微處理器的性能大約每18個月提高一倍。這個由因特爾創(chuàng)始人戈登·摩爾(GordonMoore)提出的經(jīng)驗規(guī)律至今仍然非同尋常得準確。在互聯(lián)網(wǎng)領(lǐng)域,也有一個類似的定律,被稱為“梅特卡夫定律(Metcalf’sLaw)”,它描述了網(wǎng)絡(luò)價值的發(fā)展規(guī)律。梅特卡夫定律由美國投資者、作家、經(jīng)濟學家喬治·富蘭克林·吉爾德(GeorgeFranklinGilder)于1993年提出,但以計算機網(wǎng)絡(luò)先驅(qū)、3Com公司的創(chuàng)始人羅伯特·梅蘭克頓·梅特卡夫(RobertMelanctonMetcalf)的姓氏命名,以致敬其在發(fā)明以太網(wǎng)并將其標準化和商業(yè)化方面所做的卓越貢獻。梅特卡夫定律最初用于測度通信網(wǎng)絡(luò)的機制,認為通信網(wǎng)絡(luò)的價值與該網(wǎng)絡(luò)內(nèi)的節(jié)點(電話、傳真機等通信設(shè)備)數(shù)量的平方成正比。該規(guī)律反映了一個基本事實:由n個節(jié)點構(gòu)成的網(wǎng)絡(luò)中可能的最大連接數(shù)為n(n-1)/2,漸進地與n2成比例。正因如此,美國聯(lián)邦通信委員會前主席里德亨特(ReedHundt)表示,梅特卡夫定律給出了互聯(lián)網(wǎng)運作方式最直觀的解釋。隨著互聯(lián)網(wǎng)全球化發(fā)展,梅特卡夫定律的適用范圍也延伸到互聯(lián)網(wǎng)和社交網(wǎng)絡(luò):網(wǎng)絡(luò)服務(wù)的用戶數(shù)量越多,則服務(wù)對網(wǎng)絡(luò)社區(qū)的價值越大。在社交網(wǎng)絡(luò)背景下,包括梅特卡夫本人在內(nèi)的許多人提出了修改后的模型,認為網(wǎng)絡(luò)價值與n*log(n)成比例,而不是n2,不過這個修改只是從理論上進行推導的結(jié)果。2013年7月,荷蘭研究人員Madureira、denHartog、Bouwman以及Baken設(shè)法在足夠長的時間內(nèi)分析了歐洲的互聯(lián)網(wǎng)使用模式,發(fā)現(xiàn):當網(wǎng)絡(luò)規(guī)模n較小時,網(wǎng)絡(luò)價值與n2成正比;但當網(wǎng)絡(luò)規(guī)模n較大時,網(wǎng)絡(luò)價值與n*log(n)成比例。幾個月后,梅特卡夫本人提供了進一步的證明,他使用Facebook過去10年的數(shù)據(jù)表明非常適合梅特卡夫定律(n2版本)。2015年,Zhang、Liu和Xu利用騰訊和Facebook的數(shù)據(jù)對梅特卡夫定律進行了參數(shù)化,他們的研究表明,盡管兩個網(wǎng)站的受眾不同,但梅特卡夫定律對兩者都適用,價值方程分別為Vtencent=7.39í10-9ín2和Vfacebook=5.7í10-9ín2。2017年3月,比特幣價格飆升創(chuàng)下歷史新高,1BTC的美元價格首次超過一盎司黃金。KenAlabi發(fā)表在ElectronicCommerceResearchandApplications的研究顯示,以比特幣價格衡量的比特幣網(wǎng)絡(luò)價值大致與每日參與網(wǎng)絡(luò)的用戶數(shù)的平方成正比。這表明梅特卡夫定律在加密貨幣的點對點網(wǎng)絡(luò)中同樣適用。第二節(jié)分布式賬本與去中心化節(jié)點類型與分工節(jié)點功能主要包括錢包(Wallet)、礦工(Miner)、完整區(qū)塊數(shù)據(jù)存儲(FullBlockchain),以及網(wǎng)絡(luò)路由(NetworkRoutingNode)四種。按照承擔功能的多寡,節(jié)點可以大致劃分為如下四類:第一,輕量級錢包(LightweightWallet),即只具有錢包和路由轉(zhuǎn)發(fā)功能的節(jié)點;第二,全節(jié)點(FullBlockChainNode),即存儲完整區(qū)塊鏈數(shù)據(jù),并承擔網(wǎng)絡(luò)路由功能的節(jié)點;第三,獨立礦工節(jié)點(SoloMiner),即擁有完整區(qū)塊鏈數(shù)據(jù)和網(wǎng)絡(luò)路由功能,并能不依賴其他節(jié)點的算力單獨進行挖礦的節(jié)點;第四,核心客戶端節(jié)點(ReferenceClient/BitcoinCore),即承擔錢包、礦工、完整區(qū)塊存儲、網(wǎng)絡(luò)路由全部四種功能的節(jié)點第二節(jié)分布式賬本與去中心化節(jié)點類型與分工另外一種分類方法是依照節(jié)點保存區(qū)塊數(shù)據(jù)內(nèi)容和是否能獨立完成交易驗證,將節(jié)點劃分為:全節(jié)點(FullNode)和輕節(jié)點(LightweightNode)。第二節(jié)分布式賬本與去中心化節(jié)點發(fā)現(xiàn)與連接對于P2P網(wǎng)絡(luò)而言,新的網(wǎng)絡(luò)節(jié)點首次啟動后必須發(fā)現(xiàn)網(wǎng)絡(luò)中的其他節(jié)點并建立連接,才能夠參與到網(wǎng)絡(luò)活動中。當完成初始接入后,新節(jié)點會將一條包含自身IP地址的消息發(fā)送給與之相連的節(jié)點,這些節(jié)點再將此條地址消息依次轉(zhuǎn)發(fā)給它們各自的鄰接節(jié)點;另外,新接入的節(jié)點也可以向與之相連的節(jié)點發(fā)送消息,請求它們返回其已知其他網(wǎng)絡(luò)節(jié)點的IP地址列表。已經(jīng)存在于P2P網(wǎng)絡(luò)中節(jié)點會隨時維護與網(wǎng)絡(luò)的聯(lián)系,但保持與大量對等節(jié)點的連接是沒有必要的。當節(jié)點離線后重新啟動時,它會迅速嘗試與先前成功建立連接的對等節(jié)點通信并再次建立連接,若無法獲得響應(yīng),則使用種子節(jié)點進行重啟動??偠灾?,P2P網(wǎng)絡(luò)會根據(jù)節(jié)點變化進行動態(tài)調(diào)整,可以根據(jù)需要有機地擴張和收縮。2024/6/25第二節(jié)分布式賬本與去中心化交易與區(qū)塊廣播除了前面介紹的節(jié)點發(fā)現(xiàn)和地址廣播以外,P2P網(wǎng)絡(luò)節(jié)點之間另一重要的通信內(nèi)容就是交易信息和區(qū)塊廣播。這里仍以比特幣網(wǎng)絡(luò)為例進行介紹。當節(jié)點連接到相鄰節(jié)點后,接著就開始跟相鄰節(jié)點同步區(qū)塊鏈數(shù)據(jù)(輕量級錢包應(yīng)用其實不會同步所有區(qū)塊數(shù)據(jù))。這種信息從一個節(jié)點出發(fā),廣播到臨近節(jié)點,再從臨近節(jié)點一傳十,十傳百,最終傳遍整個網(wǎng)絡(luò)的數(shù)據(jù)分發(fā)方法和泛洪(Flooding)算法有些類似,但并不完全相同。2024/6/25第二節(jié)分布式賬本與去中心化共識協(xié)議共識是分布式系統(tǒng)在面對故障和異步時達成協(xié)議的能力。一個或多個錯誤的過程可能會扭曲結(jié)果,從而可能無法達成共識或達成不正確的共識。分布式系統(tǒng)要達成共識,可能面臨的挑戰(zhàn)主要包括資源受限、節(jié)點故障、不透明、并發(fā)壓力、缺少全局時鐘等。著名的FLP(Fisher-Lynch-Paterson)定理指出:在網(wǎng)絡(luò)可靠,存在節(jié)點失效(即使只有一個錯誤節(jié)點)的最小化異步模型系統(tǒng)中,不存在一個可以解決一致性問題的確定性算法。2024/6/25第二節(jié)分布式賬本與去中心化加密數(shù)字資產(chǎn)的分布式共識在比特幣的點對點網(wǎng)絡(luò)中,交易信息通過網(wǎng)絡(luò)廣播傳遞至各個節(jié)點。節(jié)點間需要達成共識的基本內(nèi)容是:當一個節(jié)點提議將一些交易信息打包成塊放入?yún)^(qū)塊鏈時,其他節(jié)點需要投票決定哪些交易是合法、正當?shù)模M而可以納入到全局一致的總帳本中。換言之,用戶節(jié)點需要對賬本情況達成共識,且只有在達成共識賬本中記錄的交易才是有效交易。更進一步的,有效的交易活動總是伴隨著比特幣的轉(zhuǎn)移,那么一個公鑰地址所擁有比特幣數(shù)量的變化取決于且僅取決于被確認的有效交易,一個公鑰地址擁有多少比特幣資產(chǎn)也依賴各節(jié)點對交易和賬本的共識。比特幣的賬本共識是在區(qū)塊鏈上達成的。2024/6/25第二節(jié)分布式賬本與去中心化加密數(shù)字資產(chǎn)的分布式共識技術(shù)方面,比特幣共識過程與傳統(tǒng)分布式數(shù)據(jù)庫共識過程的差異主要有三點:第一,比特幣引入了隨機性概念;第二,比特幣的共識是一種“隱性共識(ImplicitConsensus)”;第三,比特幣放松了對共識終點的規(guī)定,不要求在較短時間內(nèi)達成完美一致,但可能存在的分歧會隨著時間流逝以指數(shù)形式迅速下降。激勵機制方面,通過給誠實節(jié)點價值不菲的比特幣獎勵,引導節(jié)點客觀地記錄交易,大大降低惡意節(jié)點攻擊的成功率。我們從一個相對簡單的視角,看看比特幣的這些設(shè)計是如何結(jié)合起來實現(xiàn)其優(yōu)良性質(zhì)的。隨著回合數(shù)的增加,正當交易得到的確認次數(shù)越來越多,僅包含正當交易的區(qū)塊鏈越來越長,這個最長鏈就是長期共識鏈。包含不正當交易的區(qū)塊鏈想要追上長期共識鏈的長度,需要惡意節(jié)點持續(xù)被選中,但只要超過50%節(jié)點是誠實節(jié)點的假設(shè)成立,惡意鏈追上長期共識鏈的概率會隨著回合數(shù)的增加呈指數(shù)式下降。2024/6/25第二節(jié)分布式賬本與去中心化2024/6/25專欄4-2加密貨幣區(qū)塊鏈的分叉正常情況下,加密貨幣區(qū)塊鏈的共識機制能夠確保所有經(jīng)驗證的新數(shù)據(jù)區(qū)塊都被附加在最長鏈的末端,惡意攻擊者任何延長虛假交易鏈條的企圖都會被群體共識打敗,從而形成一條長長的、獨一無二的長期共識鏈。不過,加密貨幣還遠沒有達到成熟水平,共識規(guī)則、協(xié)議并不是一成不變的;相反,加密貨幣系統(tǒng)正在不斷演進、升級當中。需要注意的是,與一般的軟件升級不同,去中心化的加密貨幣系統(tǒng)升級需要協(xié)調(diào)和考慮多數(shù)系統(tǒng)參與者的意見,并且可能出現(xiàn)區(qū)塊鏈“分叉(Fork)”的現(xiàn)象。分叉指的是:當協(xié)議發(fā)生變化后,一些節(jié)點沒有發(fā)現(xiàn)協(xié)議變化或者短時間內(nèi)不愿意升級,此時使用新舊版本軟件的節(jié)點同時工作,將區(qū)塊鏈分成兩個(或更多)分支,并在不同分支上出現(xiàn)高度相同的塊。區(qū)塊鏈分叉一般可以劃分為“軟分叉(SoftFork)”和“硬分叉(HardFork)”兩類,究竟出現(xiàn)哪種分叉取決于引入的新協(xié)議與舊協(xié)議的兼容情況。一種情況是新協(xié)議變得更嚴格,那么按照新協(xié)議創(chuàng)建的塊仍然能被舊協(xié)議接受,但新協(xié)議不接受舊協(xié)議創(chuàng)建的塊,在這軟件開發(fā)中一般稱為“向后兼容”。我們假設(shè)大多數(shù)礦工已經(jīng)更新了軟件,并挖出了新協(xié)議下的第一個區(qū)塊C(圖1左半部分),附加在舊協(xié)議下最后一個區(qū)塊B之后。之后,假如遵循舊協(xié)議的礦工找到一個區(qū)塊D,他會選擇區(qū)塊C作為鏈的末端,因為舊協(xié)議可以接受新協(xié)議的塊。如果遵循新協(xié)議的礦工挖到了另一個區(qū)塊,它會認為舊協(xié)議下挖到的D塊是無效的,因此將新塊附加到C(新協(xié)議下挖出的塊)上,形成D’。由于大多數(shù)礦工已經(jīng)更新了軟件,所以更大概率由遵循新協(xié)議的礦工繼續(xù)挖出新塊E’,它并且將其附加到D’上。這樣舊協(xié)議下的分支就變成了短鏈,那么下一輪中無論新舊協(xié)議下挖到的區(qū)塊都會附加在E’上,從而使D徹底稱為“孤兒塊”。如果上述過程重復(fù)發(fā)生一次,最終共識鏈會變成A-B-C-D’-E’-F’-G’。使用舊協(xié)議挖出的D和F因為不在長期共識鏈上無法獲得采礦獎勵,因此這些礦工會有動力升級他們的協(xié)議。在上述過程中出現(xiàn)的區(qū)塊鏈分叉被稱為軟分叉??梢钥闯?,軟分叉并不會真正導致區(qū)塊鏈分成兩個分支,隨著新舊協(xié)議的統(tǒng)一(如果大多數(shù)礦工不升級,存在協(xié)議更新失敗的可能),分叉會消失,并回歸唯一的共識鏈。另一種情況是新協(xié)議變得寬松導致不能向后兼容,或者協(xié)議發(fā)生重大改變(例如改變了Hash算法),這時新協(xié)議創(chuàng)建的塊在舊協(xié)議下是無效的,那么可能發(fā)生“硬分叉”(圖1右半部分)。先考慮協(xié)議變得寬松的情況,假如協(xié)遵循新協(xié)議的礦工挖出了協(xié)議更新后第一個區(qū)塊C,并將其附加在協(xié)議變更前最后一個區(qū)塊B之后。隨后,如果仍然遵循舊協(xié)議的礦工如果挖出了一個新區(qū)塊,它會認為C是無效塊,而把新挖出的區(qū)塊也附加在協(xié)議變更前的最后一個區(qū)塊B上。此時,兩個區(qū)塊鏈分支的高度相等。接下來,如果遵循新協(xié)議的礦工又挖出一個塊D,它可以選擇將其附加C上,也可以附加在C’上(舊協(xié)議更加嚴格,因此舊協(xié)議的塊是可以被新協(xié)議接受的)。但既然這個礦工選擇了升級協(xié)議,那么更大概率他會選擇延續(xù)新協(xié)議下產(chǎn)出的C而不是舊協(xié)議的C’。如果遵循舊協(xié)議的礦工挖出了新塊,它認定D是無效的,只能繼續(xù)將其附加到C’上。這樣,新舊協(xié)議下的礦工會各自選擇在A-B-C-D和A-B-C’-D’這兩個分支上繼續(xù)工作直至一方放棄,或者永久地持續(xù)下去,將區(qū)塊鏈分裂成兩個鏈。如果是協(xié)議發(fā)生重大改變的情況,新舊協(xié)議互相不能兼容,同樣也會產(chǎn)生硬分叉,這里不再贅述。第二節(jié)分布式賬本與去中心化共識算法PoW算法根據(jù)用戶節(jié)點占有的計算能力來決定節(jié)點被選中的概率,其基本原理是通過求解哈希謎題來證明工作量。任何節(jié)點想要提議下一個區(qū)塊都必須先求解出一個哈希謎題,而求解哈希謎題的唯一辦法就是去嘗試足夠多的臨時隨機數(shù),直到結(jié)果滿足系統(tǒng)要求為止。PoS算法的典型過程是:通過保證金(代幣、資產(chǎn)等具有價值的物品)來押注記賬權(quán)分配過程,提供的保證金越多則獲得記賬權(quán)的概率越大;一個節(jié)點獲得記賬權(quán)后可以提議一個合法的新區(qū)塊,同時獲得抵押資產(chǎn)的利息和交易服務(wù)費作為記賬的獎勵;若節(jié)點存在惡意行為則將面臨保證金被罰沒的風險。2024/6/25第三節(jié)腳本與智能合約比特幣腳本在介紹比特幣腳本之前,需要重申比特幣系統(tǒng)中一個關(guān)鍵概念:未花費交易輸出UTXO(UnspentTransactionOutput)。比特幣腳本是比特幣的工作控制語言,是一種基于堆棧的逆波蘭式(ReversePolishnotation,RPN)[逆波蘭式(或逆波蘭記法),也叫后綴表達式(將運算符寫在操作數(shù)之后),指的是不包含括號,運算符放在兩個運算對象的后面,所有的計算按運算符出現(xiàn)的順序,嚴格從左向右進行(不再考慮運算符的優(yōu)先規(guī)則)。]簡單執(zhí)行語言。2024/6/25第二節(jié)分布式賬本與去中心化比特幣腳本雖然付款至公鑰哈希(P2PKH)是最常見的輸出形式,但并不是唯一,比特幣系統(tǒng)還支持付款至腳本哈希(Pay-to-ScriptHash,P2SH)。P2PKH和P2SH的主要差別是資金的轉(zhuǎn)出條件不同。在P2PKH場景下,一筆比特幣資金的轉(zhuǎn)出條件就是該筆資金的上個發(fā)送方設(shè)定的鎖定腳本,接收者通過私鑰簽名和公鑰解鎖后即可轉(zhuǎn)出。而在P2SH場景下,接收者首先構(gòu)建一個贖回腳本,對這個贖回腳本進行哈希計算,并將哈希值發(fā)送給比特幣發(fā)送者;發(fā)送者對這個腳本哈希付款,且不再設(shè)定鎖定腳本;這時,接收者如想將這筆比特幣轉(zhuǎn)出,就需要滿足贖回腳本中的轉(zhuǎn)出條件。贖回腳本的設(shè)定可以是多樣的,從而能夠?qū)崿F(xiàn)多重簽名、第三方支付等更復(fù)雜的交易,這些構(gòu)建了可編程貨幣和智能合約的基礎(chǔ)。2024/6/25第二節(jié)分布式賬本與去中心化智能合約智能合約(SmartContract)是“一套以數(shù)字形式定義的承諾,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議。”比特幣的多重簽名和P2SH可以算是分布式系統(tǒng)智能合約的雛形。為了避免因編寫疏忽等原因?qū)е碌臒o限循環(huán),以及防止形成腳本漏洞而被惡意攻擊者所利用,比特幣的腳本語言被設(shè)計得非常簡單,僅可在有限的范圍內(nèi)執(zhí)行,做較簡單的數(shù)據(jù)處理,不具備循環(huán)和復(fù)雜的流控制功能。以太坊支持的Solidity、Serpent等圖靈完備的智能合約編程語言提供了完整的自由度,可以讓用戶搭建各種應(yīng)用,能提供的業(yè)務(wù)幾乎是無窮無盡的。嚴禁復(fù)刻第二節(jié)分布式賬本與去中心化專欄4-3區(qū)塊鏈的分層架構(gòu)與擴展方案在學習加密貨幣或區(qū)塊鏈時,可能經(jīng)常會遇到諸如“第一層協(xié)議”和“第二層協(xié)議”等術(shù)語,或者“數(shù)據(jù)層”、“共識層”等說法。那么,區(qū)塊鏈究竟是如何分層,各層都承擔什么職能,分別有哪些核心技術(shù)呢?從技術(shù)上來看,區(qū)塊鏈的分層架構(gòu)主要包括五個層面,分別是:硬件基礎(chǔ)設(shè)施層、數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、應(yīng)用層(如下圖所示)。硬件基礎(chǔ)設(shè)施層指的是構(gòu)成區(qū)塊鏈點對點網(wǎng)絡(luò)的各個節(jié)點,這些節(jié)點共同構(gòu)成了一個分布式數(shù)據(jù)庫,存儲所有數(shù)據(jù),驗證和記錄交易及其他相關(guān)數(shù)據(jù)。數(shù)據(jù)層是以區(qū)塊鏈表形式存在的所有數(shù)據(jù),其中包括了存儲交易信息的區(qū)塊、時間戳、簽名信息、隨機數(shù)、區(qū)塊版本號、當前難度目標等等信息。網(wǎng)絡(luò)層負責節(jié)點間的通信,確保節(jié)點可以找到網(wǎng)絡(luò)中的其他節(jié)點并與之進行交互、交易信息傳播和區(qū)塊同步,以保持整個區(qū)塊鏈網(wǎng)絡(luò)處于正常狀態(tài)。共識層是區(qū)塊鏈中最核心的部分,主要負責驗證區(qū)塊和更新整個分布式賬本,并保證整個網(wǎng)絡(luò)對賬本達成共識。應(yīng)用層是最終用戶與區(qū)塊鏈網(wǎng)絡(luò)進行直接交互的層面,包括智能合約、鏈碼、去中心化應(yīng)用程序等等,腳本、應(yīng)用程序編程接口(API)、用戶界面等也屬于這一層面。我們從前面章節(jié)中已經(jīng)了解到著名的CAP定理,去中心化
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機軟件測試的團隊協(xié)作模式試題及答案
- 教育政策與社會穩(wěn)定性的關(guān)系試題及答案
- 軟件設(shè)計師備考復(fù)習資料試題及答案
- 有效的公共政策實施策略試題及答案
- 突出重點的軟件設(shè)計師考試試題及答案
- 機電工程考試內(nèi)容概述及試題答案
- 網(wǎng)絡(luò)流量控制試題及答案
- 西方國家發(fā)展中的政治沖突試題及答案
- 項目管理師考試簡易科目及試題答案
- 軟考網(wǎng)絡(luò)工程師思考方式試題及答案
- 醫(yī)德醫(yī)風之檢驗科醫(yī)患溝通技巧
- GB/T 17450-1998技術(shù)制圖圖線
- GB/T 16474-2011變形鋁及鋁合金牌號表示方法
- “解決問題的策略”小學數(shù)學教材解讀課件
- 《國際貿(mào)易地理》課件
- 沖壓車間品質(zhì)提升改善方案
- 制動器的英文版及翻譯
- 人教版七年級下冊數(shù)學 第五章達標檢測卷
- JAVA外文文獻畢業(yè)設(shè)計
- 3510KV變電所設(shè)計湖南工程學院課設(shè)
- 電阻熔煉爐操作安全規(guī)程
評論
0/150
提交評論