在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

探一探區塊鏈技術背后的歷史,如何一步步走到今天的呢?

人工智能和機器人研究院 ? 來源:未知 ? 作者:李倩 ? 2018-05-04 14:33 ? 次閱讀

在這篇文章中我們探一探區塊鏈技術背后的歷史,從上世紀80年代的拜占庭將軍問題到今天的復雜的智慧契約,區塊鏈是如何一步步走到今天的呢?

區塊鏈基礎

區塊鏈是隨著比特幣等數字加密貨幣的日益普及而逐漸興起的一種全新技術,它提供了一種去中心化的、無需信任積累的信用建立范式,目前已經引起金融行業、科研機構、政府部門和投資公司的高度重視與廣泛關注。

區塊鏈技術通過建立一個共同維護且不可被篡改的數據庫來記錄過去的所有交易記錄和歷史數據,所有的數據都是分布式存儲且公開透明的。在這種技術下,任何互不相識的網絡用戶都可以通過合約、點對點記賬、數字加密等方式達成信用共識,而不需要任何的中央信任機構。在這種技術下,我們可以建立數字貨幣、數字資產、智能財產以及智能合約等。

通過上一章的介紹,相信大家已經對區塊鏈和比特幣有了初步的認識,在本章中,我們將繼續探討區塊鏈的技術細節。

本章將首先介紹區塊鏈的相關基本概念及其運作原理,然后介紹區塊鏈上可以進行的操作和相關細節,最后再討論區塊鏈上的交易流程和它的驗證過程。

區塊鏈技術

區塊鏈本質上是一個對等網絡(peer-to-peer)的分布式賬本數據庫。比特幣的底層就采用了區塊鏈的技術架構。

區塊鏈本身其實是一串鏈接的數據區塊,其鏈接指針是采用密碼學哈希算法對區塊頭進行處理所產生的區塊頭哈希值。每一個數據塊中記錄了一組采用哈希算法組成的樹狀交易狀態信息,這樣保證了每個區塊內的交易數據不可篡改,區塊鏈里鏈接的區塊也不可篡改。

1.基本概念

一個完整的區塊鏈系統包含了很多技術,其中有存儲數據的數據區塊及其之上的數字簽名、時間戳等技術,有作為支撐的P2P網絡和維護系統的共識算法,有挖礦和工作量證明機制,有匿名交易機制和比特幣錢包,還有鏈齡、UTXO、Merkle樹、雙花等相關技術概念。

正是這些技術,使得區塊鏈在無中心的網絡上形成了運轉不息的引擎,為區塊鏈的交易、驗證、鏈接等功能提供了源源不斷的動力。

2.數據區塊

比特幣的交易記錄會保存在數據區塊之中,比特幣系統中大約每10分鐘會產生一個區塊,每個數據區塊一般包含區塊頭(Header)和區塊體(Body)兩部分

區塊頭封裝了當前的版本號(Version)、前一區塊地址(Prev-block)、時間戳(Timestamp)、隨機數(Nonce)、當前區塊的目標哈希值(Bits)、Merkle樹的根值(Merkle-root)等信息。

區塊體中則主要包含交易計數和交易詳情。交易詳情就是比特幣系統中的記賬本,每一筆交易都會被永久地記入數據區塊中,而且任何人都可以查詢。

區塊體中的Merkle樹將會對每一筆交易進行數字簽名,如此可以確保每一筆交易都不可偽造且沒有重復交易。所有的交易將通過Merkle樹的Hash過程產生一個唯一Merkle根值記入區塊頭。關于Merkle樹本章后面將詳細介紹。

如果你使用的是比特幣核心錢包(Bitcoin core),那么每當你打開客戶端時,區塊數據文件都會被同步到電腦硬盤中,可以在blocks文件夾下找到它們。

我們還可以使用hexdump指令在終端上將數據區塊以十六進制的方式顯示出來。我們可以通過解析這些數據得出交易記錄、區塊大小等基本信息,因此我們說區塊鏈中的數據是完全公開透明的。我們使用指令hexdump -n 10000 -C blk00000.dat打開了編號為00000的創世區塊(比特幣中的第一塊區塊鏈)。

3.挖礦與分叉問題

區塊在挖礦過程中產生。所謂挖礦,實際上是窮舉隨機數算法,把上個區塊的哈希值加上10分鐘內的全部交易單打包,再加上一個隨機數,算出一個256位的字符串哈希值,輸入的隨機數Nonce使哈希值滿足一定條件就獲得這個區塊的交易記賬權。

新產生的區塊需要快速廣播出去,以便其他節點進行對其驗證,以防造假。每個區塊存著上一個區塊的哈希值,可以溯源到源頭,只有經過驗證后才最終獲得區塊的交易記賬權。比特幣系統會讓挖礦的礦工競爭記賬權(在主鏈上鏈接區塊的權利),這個競爭機制就是工作量證明機制。

挖礦需要付出大量的能源和時間,誰付出的工作量多就能以更大的概率獲得一個區塊的記賬權。獲取記賬權的礦工會將當前區塊鏈接到前一區塊,形成最新的區塊主鏈,該礦工也會得到系統獎勵的一定數量(2009~2013年每10鐘產生50個比特幣,2014年至今每10分鐘產生的比特幣將減半成25個)的比特幣。所有的區塊鏈接在一起形成了區塊鏈的主鏈,從創世區塊到當前區塊,在區塊鏈之上的所有數據歷史都可以被追溯和查詢。

需要說明的是,可能會出現不同地區的兩個礦工同時“挖出”兩個新區塊加以鏈接的情況,這時主鏈上就會出現“分叉”。系統并不會馬上確認哪個區塊不合理,而是約定后續礦工總是選擇累計工作量證明最大的區塊鏈。因此,當主鏈分叉以后,后續區塊的礦工將通過計算和比較,將其區塊鏈接到當前累計工作量證明最大化的備選鏈上,形成更長的新主鏈,并自動拋棄分叉處的短鏈,從而解決分叉問題。

4.時間戳和不可篡改性

時間戳是指從格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數,通常是一個字符序列,唯一地標識某一刻的時間。在比特幣系統中,獲得記賬權的節點在鏈接區塊時需要在區塊頭中加蓋時間戳,用于記錄當前區塊數據的寫入時間。

每一個隨后區塊中的時間戳都會對前一個時間戳進行增強,形成一個時間遞增的鏈條。時間戳技術本身并沒有多復雜,但在區塊鏈技術中應用時間戳卻是一個重大創新,時間戳為未來基于區塊鏈的互聯網和大數據增加了一個時間維度,使得數據更容易追溯,重現歷史也成為可能。

同時,時間戳可以作為存在性證明(Proof of Existence)的重要參數,它能夠證實特定數據必然在某特定時刻是的確存在的,這保證了區塊鏈數據庫是不可篡改和不可偽造的,這也為區塊鏈技術應用于公證、知識產權注冊等時間敏感領域提供了可能。

5.分布式數據庫

比特幣系統中的區塊就像一個記賬本一樣,記錄了所有比特幣的交易信息,每一個比特幣用戶的比特幣收支情況都被永久地嵌入了數據區塊中以供別人查詢。這些數據區塊中的交易數據存放在每一個比特幣用戶的客戶端節點中,所有的這些節點則組成了比特幣及其堅韌的分布式數據庫系統。任何一個節點的數據被破壞都不會影響整個數據庫的正常運轉,因為其他的健康節點中都保存了完整的數據庫。

6.UTXO交易模式

UTXO(Unspent Transaction Outputs)是未花費的交易輸出,它是比特幣交易過程中的基本單位。除創世區塊以外,所有區塊中的交易(Tx)會存在若干個輸入(Tx_in,也稱資金來源)和若干個輸出(Tx_out,也稱資金去向),創世區塊和后來挖礦產生的區塊中給礦工獎勵的交易沒有輸入,除此之外,在比特幣系統中,某筆交易的輸入必須是另一筆交易未被使用的輸出,同時這筆輸入也需要上一筆輸出地址所對應的私鑰進行簽名。

當前整個區塊鏈網絡中的UTXO會被儲存在每個節點中,只有滿足了來源于UTXO和數字簽名條件的交易才是合法的。所以區塊鏈系統中的新交易并不需要追溯整個交易歷史,就可以確認當前交易是否合法。

7.哈希函數

哈希函數在比特幣系統中也有著重要的應用,區塊鏈中的數據并不只是原始數據或者交易記錄,還包括它們的哈希函數值,即將原始數據編碼為特定長度的、由數字和字母組成的字符串后,記入區塊鏈。哈希函數有著很多適合存儲區塊鏈數據的

優點:

1)哈希函數處理過的數據是單向性的,通過處理過的輸出值幾乎不可能計算出原始的輸入值;

2)哈希函數處理不同長度的數據所耗費的時間是一致的,輸出值也是定長的;

3)哈希函數的輸入值即使只相差一個字節,輸出值的結果也會迥然不同。比特幣系統中最常采用的哈希函數是雙SHA256哈希函數,通俗來說就是將不同長度的原始數據用兩次SHA256哈希函數進行處理,再輸出長度為256的二進制數字來進行統一的識別和存儲。

總之,哈希函數是比特幣系統中的關鍵技術,為比特幣系統提供了很多便利。本書后面的章節將會對哈希函數做詳細介紹,此處不贅述。

8.Merkle樹

Merkle樹是數據結構中的一種樹,可以是二叉樹,也可以是多叉樹,它具有樹結構的所有特點。如圖2-4所示,比特幣區塊鏈系統中的采用的是Merkle二叉樹,它的作用主要是快速歸納和校驗區塊數據的完整性,它會將區塊鏈中的數據分組進行哈希運算,向上不斷遞歸運算產生新的哈希節點,最終只剩下一個Merkle根存入區塊頭中,每個哈希節點總是包含兩個相鄰的數據塊或其哈希值。

在比特幣系統中使用Merkle樹有諸多優點:首先是極大地提高了區塊鏈的運行效率和可擴展性,使得區塊頭只需包含根哈希值而不必封裝所有底層數據,這使得哈希運算可以高效地運行在智能手機甚至物聯網設備上;其次是Merkle樹可支持“簡化支付驗證協議”(SPV),即在不運行完整區塊鏈網絡節點的情況下,也能夠對交易數據進行檢驗。所以,在區塊鏈中使用Merkle樹這種數據結構是非常具有意義的。本書后面的章節將會對Merkle樹做詳細介紹。

9.雙重支付

雙重支付問題又稱為“雙花”問題,即利用貨幣的數字特性用“同一筆錢”完成兩次或者多次支付。在傳統的金融和貨幣體系中,由于金錢貨幣是物理實體,具有客觀唯一存在的屬性,所以可以避免雙重支付的情況。但在其他的電子貨幣系統中,則需要可信的第三方管理機構提供保證。

區塊鏈技術則在去中心化的系統中不借助任何第三方機構而只通過分布式節點之間的相互驗證和共識機制,有效地解決了雙重支付問題,在信息傳輸的同時完成了價值轉移。區塊鏈技術通過區塊鏈接形成的時間戳技術加上驗證比特幣是否滿足UTXO(未花費交易)和數字簽名,有效避免了雙重支付的問題。如果有人用同一筆UTXO構造了兩筆付給不同交易方的交易,則比特幣客戶端只會轉發最先被偵聽到的那個。礦工會選擇將那筆交易包入未來區塊,當其中一筆交易所在的區塊后有5個鏈接的區塊,這筆交易已經得到了6次確認。在比特幣區塊鏈上,6次確認后可以基本上保證比特幣不被雙花。

10.P2P網絡

P2P網絡(peer-to-peer network,對等網絡)是一種在對等者(peer)之間分配任務和工作負載的分布式應用架構,是對等計算模型在應用層形成的一種組網或網絡形式。因此,從字面上,P2P可以理解為對等計算或對等網絡,P2P網絡示意圖如圖2-5所示。國內的迅雷軟件采用的就是P2P技術。

區塊鏈系統是建立在IP通信協議和分布式網絡的基礎上的,它不依靠傳統的電路交換,而是建立于網絡通信之上,完全通過互聯網去交換信息。網絡中所有的節點具有同等的地位,不存在任何特殊化的中心節點和層級結構,每個節點均會承擔網絡路由、驗證數據區塊等功能。網絡的節點根據存儲數據量的不同可以分為全節點和輕量級節點,全節點存儲了從創世區塊以來的所有區塊鏈數據(比特幣網絡現在大約有幾十GB,且還在不斷增長中)。

全節點的優點是進行數據校驗時不需要依靠別的節點,僅依靠自身就可以完成校驗更新等操作,缺點是硬件成本較高。輕量級節點只需要存儲部分數據信息,當需要別的數據時可以通過簡易支付驗證方式(Simplif?ied Payment Verif?ication,SPV)向鄰近節點請求所需數據來完成驗證更新。

11.加密算法

除了哈希算法以外,比特幣中還存在一種為交易加密的非對稱加密算法(橢圓曲線加密算法)。非對稱加密算法指的就是存在一對數學相關的密鑰,使用其中一個密鑰進行加密的數據信息,只有使用另一個密鑰才能對該信息進行解密。這對密鑰中,對外公開的密鑰叫作公鑰,不公開的密鑰就叫作私鑰。打個比方來說,公鑰就像銀行的賬戶,私鑰就像是該賬戶的密碼或者賬戶所有者的簽名。

區塊鏈之上的有效交易有一個用于交易發起方私鑰簽名有效的數字簽名,而該交易的簽名可以通過使用交易發起方的公鑰進行驗證。公鑰可以通過算法從私鑰中計算得出,但私鑰卻不能從公鑰中推出。比特幣系統中使用的就是一種非常典型的非對稱加密算法——橢圓曲線加密算法(ECC)。

比特幣系統一般從操作系統底層的一個密碼學安全的隨機源中取出一個256位隨機數作為私鑰,私鑰總數為2256個,所以很難通過遍歷所有可能的私鑰得出與公鑰的對應的私鑰。用戶使用的私鑰還會通過SHA256和Base58轉換成易書寫和識別的50位長度的私鑰,公鑰則首先由私鑰和Secp256k1橢圓曲線算法生成65字節長度的隨機數。

一般情況下,比特幣錢包的地址也由公鑰所生成,其生成過程為首先將公鑰進行SHA256和RIPEMD160雙哈希運算,并生成20字節長度的摘要結果(即Hash160結果),這個將作為比特幣地址的主體(body)信息,再在前面加上版本前綴0x00,在后面添加4個字節的地址校驗碼。地址校驗碼通過對摘要結果進行兩次SHA256運算,取哈希值的前4位產生。最后通過Base58處理把連在一起的版本前綴、主體信息和校驗碼轉換成可以容易讓人識別的比特幣字符地址。

12.數字簽名

數字簽名就是在信息后面加上另一段內容,作為發送者的證明并且證明信息沒有被篡改。一般是發送者將信息用哈希算法處理得出一個哈希值,然后用私鑰對該哈希值進行加密,得出一個簽名。然后發送者再將信息和簽名一起發送給接收者。接收者使用發送者的公鑰對簽名進行解密,還原出哈希值,再通過哈希算法來驗證信息的哈希值和解密簽名還原出來的哈希值是否一致,從而可以鑒定信息是否來自發送者或驗證信息是否被篡改。

13.比特幣的隱私模型

傳統隱私模型為交易的參與者提供了一定程度的隱私保護,第三方不會交出交易者的個人身份信息,公眾所得知的只是某個人將一定數量的貨幣發給了另外一個人,但是難以將該交易與某個特定身份的人聯系起來,公眾無法知道這人到底是誰。這同股票交易所發布的信息是類似的,每一手股票買賣發生的時間、交易量是記錄在案且可供查詢的,但是交易雙方的身份信息卻不予透露。但實際上,交易雙方的個人信息是存放在第三方機構,所以一定程度上交易參與者的隱私信息還是會有泄露的風險。

在比特幣的隱私模型中,所有的交易不需要第三方的操控,也不需要提供任何身份信息,只需要提供比特幣的地址就可以跟任何人完成一次準匿名的交易。在一定程度上,交易不可追溯到交易者本身,因此比特幣上的交易可以在一定程度上擺脫監管。但通過對區塊鏈上交易的地址以及交易額做關聯分析,也可以獲得有關交易者的蛛絲馬跡。因此,比特幣的交易還不是純粹的匿名交易機制,而是準匿名(pseudo-anonymous)交易機制。

框架與特點

1.框架簡介

目前大多數區塊鏈技術的應用與比特幣類似,大部分是在比特幣架構基礎上的擴展。目前,區塊鏈技術在金融行業得到廣泛關注,被認為可以用來從最底層重構傳統金融業現有的IT基礎架構。我們將區塊鏈的基礎架構分為三層來進行講解。

首先,在網絡層之上,區塊鏈是建立在IP通信協議和對等網絡的基礎上的一個分布式系統,和傳統帶中心的分布式系統不一樣,它不依靠中心化的服務器節點來轉發消息,而是每一個節點都參與消息的轉發。因此P2P網絡比傳統網絡具有更高的安全性,任何一個節點被攻擊都不會影響整個網絡,所有的節點都保存著整個系統的狀態信息。

其次,在數據層面上,區塊鏈就是一個只可追加、不可更改的分布式數據庫系統,是一個分布式賬本。如果是公開的區塊鏈,也就是公有鏈,那么這個賬本可以被任何人在任何地方進行查詢,完全公開透明。在區塊鏈網絡中,節點通過使用共識算法來維持網絡中賬本數據庫的一致性。

同時采用密碼學的簽名和哈希算法來確保這個數據庫不可篡改,不能作偽,并且可追溯。例如,在比特幣系統中,只有在控制了51%的網絡算力時才有可能對區塊鏈進行重組以修改賬本信息。由于比特幣系統的設計者中本聰在系統設計中巧妙地加入了帶有經濟激勵的挖礦工作量證明(PoW)機制,使得即使擁有網絡51%以上算力的人也不會損害其自身利益而發起對網絡的攻擊。因此,比特幣系統自上線7年多來一直持續不斷地正常運行,沒有出現過因為比特幣系統本身缺陷而造成的安全故障。

再次,在應用層面,我們可以用區塊鏈代替傳統的登記、清算系統。2016年6月22日,波士頓咨詢公司指出,到2030年,全球支付業務收入預計將會達到8070億美元。基于區塊鏈技術的匯兌和支付屬于區塊鏈的1.0應用版,其安全性、交易時間、成本都會對傳統支付業務進行顛覆式改進。花旗銀行也明確指出,到2020年,如果各大金融機構都使用區塊鏈技術,每年能夠節省超過200億美元的成本。

國信證券分析報告指出,通過區塊鏈的點對點分布式的時間戳服務器來生成依照時間前后排列并加以記錄的電子交易證明,可以解決雙重支付問題,從而帶來結算成本趨零的可能性。根據德國銀行的一份引用波士頓咨詢的研究報告,歐洲銀行的IT成本支出平均占據銀行整體運行成本的16%[5]。一個重要原因就是傳統銀行在賬本的維護、支付交易的結算和清算方面的架構過于復雜,維護成本過高。

在應用方面,區塊鏈平臺能夠提供編程環境讓用戶編寫智能合約。通過智能合約,可以把業務規則轉化成在區塊鏈平臺自動執行的合約,該合約的執行不依賴可信任的第三方,也不受人為的干預。

理論上只要一旦部署,一旦符合合約執行的條件就會自動執行。執行結果也可以在區塊鏈上供公開檢查,提供了合約的公正性和透明性。因此,智能合約可以降低合約建立、執行和仲裁中所涉及的中間機構成本。區塊鏈的智能合約奠定了未來建立可編程貨幣、可編程金融,甚至是可編程社會的基礎。

2.架構特點

區塊鏈具有去中心化、可靠數據庫、開源可編程、集體維護、安全可信、交易準匿名性等特點。如果一個系統不具有以上特征,將不能被視為基于區塊鏈技術的應用。

(1)去中心化

區塊鏈數據的存儲、傳輸、驗證等過程均基于分布式的系統結構,整個網絡中不依賴一個沒有中心化的硬件或管理機構。作為區塊鏈一種部署模式,公共鏈網絡中所有參與的節點都可以具有同等的權利和義務。

(2)可靠數據庫

區塊鏈系統的數據庫采用分布式存儲,任一參與節點都可以擁有一份完整的數據庫拷貝。除非能控制系統中超過一半以上的算力,否則在節點上對數據庫的修改都將是無效的。

參與系統的節點越多,數據庫的安全性就越高。并且區塊鏈數據的存儲還帶有時間戳,從而為數據添加了時間維度,具有極高的可追溯性。

(3)開源可編程

區塊鏈系統通常是開源的,代碼高度透明公共鏈的數據和程序對所有人公開,任何人都可以通過接口查詢系統中的數據。并且區塊鏈平臺還提供靈活的腳本代碼系統,支持用戶創建高級的智能合約、貨幣和去中心化應用。

例如,以太坊(Ethereum)平臺即提供了圖靈完備的腳本語言,供用戶來構建任何可以精確定義的智能合約或交易類型。關于以太坊的更多內容請參考2.2節。

(4)集體維護

系統中的數據塊由整個系統中所有具有記賬功能的節點來共同維護,任一節點的損壞或失去都不會影響整個系統的運作。

(5)安全可信

區塊鏈技術采用非對稱密碼學原理對交易進行簽名,使得交易不能被偽造;同時利用哈希算法保證交易數據不能被輕易篡改,最后借助分布式系統各節點的工作量證明等共識算法形成強大的算力來抵御破壞者的攻擊,保證區塊鏈中的區塊以及區塊內的交易數據不可篡改和不可偽造,因此具有極高的安全性。

(6)準匿名性

區塊鏈系統采用與用戶公鑰掛鉤的地址來做用戶標識,不需要傳統的基于PKI(Public Key Infrastructure)的第三方認證中心(Certif?icate Authority,CA)頒發數字證書來確認身份。通過在全網節點運行共識算法,建立網絡中誠實節點對全網狀態的共識,間接地建立了節點間的信任。

用戶只需要公開地址,不需要公開真實身份,而且同一個用戶可以不斷變換地址。因此,在區塊鏈上的交易不和用戶真實身份掛鉤,只是和用戶的地址掛鉤,具有交易的準匿名性。。

區塊鏈技術的核心優勢是去中心化,能夠通過運用哈希算法、數字簽名、時間戳、分布式共識和經濟激勵等手段,在節點無需互相信任的分布式系統中建立信用,實現點對點交易和協作,從而為中心化機構普遍存在的高成本、低效率和數據存儲不安全等問題提供了解決方案。

近年來,伴隨著國內外研究機構對區塊鏈技術的研究與應用,區塊鏈的應用前景受到各行各業的高度重視,被認為是繼大型機、個人電腦、互聯網、移動/社交網絡之后計算范式的第5次顛覆式創新,是人類信用進化史上繼血親信用、貴金屬信用、央行紙幣信用之后的第4個里程碑。它被視為下一代云計算的雛形,有望徹底重塑人類社會活動形態,并實現從現在的信息互聯網到價值互聯網的轉變。

區塊鏈運作的核心技術

1.區塊鏈的鏈接

顧名思義,區塊鏈即由一個個區塊組成的鏈。每個區塊分為區塊頭和區塊體(含交易數據)兩個部分。區塊頭包括用來實現區塊鏈接的前一區塊的哈希(PrevHash)值(又稱散列值)和用于計算挖礦難度的隨機數(nonce)。前一區塊的哈希值實際是上一個區塊頭部的哈希值,而計算隨機數規則決定了哪個礦工可以獲得記錄區塊的權力。

2.共識機制

區塊鏈是伴隨比特幣誕生的,是比特幣的基礎技術架構。可以將區塊鏈理解為一個基于互聯網的去中心化記賬系統。類似比特幣這樣的去中心化數字貨幣系統,要求在沒有中心節點的情況下保證各個誠實節點記賬的一致性,就需要區塊鏈來完成。所以區塊鏈技術的核心是在沒有中心控制的情況下,在互相沒有信任基礎的個體之間就交易的合法性等達成共識的共識機制。

區塊鏈的共識機制目前主要有4類:PoW、PoS、DPoS、分布式一致性算法。

(1)PoW

PoW(工作量證明),也就是像比特幣的挖礦機制,礦工通過把網絡尚未記錄的現有交易打包到一個區塊,然后不斷遍歷嘗試來尋找一個隨機數,使得新區塊加上隨機數的哈希值滿足一定的難度條件,例如前面10位是零。找到滿足條件的隨機數,就相當于確定了區塊鏈最新的一個區塊,也相當于獲得了區塊鏈的本輪記賬權。

礦工把滿足挖礦難度條件的區塊在網絡中廣播出去,全網其他節點在驗證該區塊滿足挖礦難度條件,同時區塊里的交易數據符合協議規范后,將各自把該區塊鏈接到自己版本的區塊鏈上,從而在全網形成對當前網絡狀態的共識。

優點:完全去中心化,節點自由進出,避免了建立和維護中心化信用機構的成本。只要網絡破壞者的算力不超過網絡總算力的50%,網絡的交易狀態就能達成一致。

缺點:目前比特幣挖礦造成大量的資源浪費;另外挖礦的激勵機制也造成礦池算力的高度集中,背離了當初去中心化設計的初衷。更大的問題是PoW機制的共識達成的周期較長,每秒只能最多做7筆交易,不適合商業應用。

(2)PoS

PoS權益證明,要求節點提供擁有一定數量的代幣證明來獲取競爭區塊鏈記賬權的一種分布式共識機制。如果單純依靠代幣余額來決定記賬者必然使得富有者勝出,導致記賬權的中心化,降低共識的公正性,因此不同的PoS機制在權益證明的基礎上,采用不同方式來增加記賬權的隨機性來避免中心化。

例如點點幣(PeerCoin)PoS機制中,擁有最多鏈齡長的比特幣獲得記賬權的幾率就越大。NXT和Blackcoin則采用一個公式來預測下一個記賬的節點。擁有多的代幣被選為記賬節點的概率就會大。未來以太坊也會從目前的PoW機制轉換到PoS機制,從目前看到的資料看,以太坊的PoS機制將采用節點下賭注來賭下一個區塊,賭中者有額外以太幣獎,賭不中者會被扣以太幣的方式來達成下一區塊的共識。

優點:在一定程度上縮短了共識達成的時間,降低了PoW機制的資源浪費。

缺點:破壞者對網絡攻擊的成本低,網絡的安全性有待驗證。另外擁有代幣數量大的節點獲得記賬權的幾率更大,會使得網絡的共識受少數富裕賬戶支配,從而失去公正性。

(3)DPoS

DPoS(股份授權證明)機制,類似于董事會投票。比特股(bitshares)采用的PoS機制是持股者投票選出一定數量的見證人,每個見證人按序有兩秒的權限時間生成區塊,若見證人在給定的時間片不能生成區塊,區塊生成權限交給下一個時間片對應的見證人。持股人可以隨時通過投票更換這些見證人。DPoS的這種設計使得區塊的生成更為快速,也更加節能。

優點:大幅縮小參與驗證和記賬節點的數量,可以達到秒級的共識驗證。

缺點:選舉固定數量的見證人作為記賬候選人有可能不適合于完全去中心化的場景。另外在網絡節點數少的場景,選舉的見證人的代表性也不強。

(4)分布式一致性算法

分布式一致性算法是基于傳統的分布式一致性技術。其中有分為解決拜占庭將軍問題的拜占庭容錯算法,如PBFT。另外解決非拜占庭問題的分布式一致性算法(Pasox、Raft),詳細見本書第5章的共識算法。該類算法目前是聯盟鏈和私有鏈鏈場景中常用的共識機制。

優點:實現秒級的快速共識機制,保證一致性。

缺點:去中心化程度不如公有鏈上的共識機制;更適合多方參與的多中心商業模式。

3.解鎖腳本

腳本是區塊鏈上實現自動驗證、自動執行合約的重要技術。每一筆交易的每一項輸出嚴格意義上并不是指向一個地址,而是指向一個腳本。腳本類似一套規則,它約束著接收方怎樣才能花掉這個輸出上鎖定的資產。

交易的合法性驗證也依賴于腳本。目前它依賴于兩類腳本:鎖定腳本與解鎖腳本。鎖定腳本是在輸出交易上加上的條件,通過一段腳本語言來實現,位于交易的輸出。解鎖腳本與鎖定腳本相對應,只有滿足鎖定腳本要求的條件,才能花掉這個腳本上對應的資產,位于交易的輸入。通過腳本語言可以表達很多靈活的條件。解釋腳本是通過類似我們編程領域里的“虛擬機”,它分布式運行在區塊鏈網絡里的每一個節點。

比特幣的腳本目前常用的主要分為兩種,一種是普通的P2PKH(Pay-to-Public-Key-Hash),即支付給公鑰的哈希地址,接收方只需要使用地址對應的私鑰對該輸出進行簽名,即可花掉該輸出。另一種是P2SH(Pay-to-Script-Hash),即支付腳本的哈希。以多重簽名來舉例,它要求該輸出要有N把私鑰中的M把私鑰(M≤N)同時簽名才能花掉該資產,它類似于現實生活中需要多把鑰匙才能同時打開的保險柜,或是多人簽名才能使條約生效一樣,只是它是自動執行。

比如在比特幣中,P2PKH的腳本規則如下:

Pubkey script: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

Signature script:

P2SH的腳本規則如下:

Pubkey script: OP_HASH160 OP_EQUAL

Signature script: [sig] [sig...]

在上述的兩種腳本規則里,Pubkey script代表鎖定腳本,Signature script代表解鎖腳本。OP_開頭的單詞是相關的腳本命令,也是“虛擬機”所能解析的指令。這些命令規則根據Pubkey script的不同來進行劃分,它也決定解鎖腳本的規則。

比特幣中的腳本機制相對簡單,只是一個基于堆棧式的、解釋相關OP指令的引擎,能夠解析的腳本規則并不是太多,不能實現很復雜的邏輯。但它為區塊鏈可編程提供了一個原型,后續一些可編程區塊鏈項目其實是基于腳本的原理發展起來的,比如以太坊就是深入增強了腳本機制,腳本機制里不再單單是簡單的OP指令,而是支持腳本的一套圖靈完備語言,該腳本語言可以通過“虛擬機”去執行。以太坊實現了一個支持圖靈完備腳本語言的區塊鏈平臺。

腳本的機制對于區塊鏈來說非常重要,它類似于區塊鏈技術提供的一個擴展接口,任何人都可以基于這個接口開發基于區塊鏈技術的應用,比如智能合約的功能。腳本機制也讓區塊鏈技術作為一項底層協議成為可能。未來很多基于區塊鏈的顛覆性應用,都有可能通過區塊鏈的腳本語言來完成。

4.交易規則

區塊鏈的交易就是構成區塊的基本單位,也是區塊鏈負責記錄的實際有效內容。一個區塊鏈交易可以是一次轉賬,也可以是智能合約的部署等其他事務。

就比特幣而言,交易即指一次支付轉賬。其交易規則如下:

1)交易的輸入和輸出不能為空。

2)對交易的每個輸入,如果其對應的UTXO輸出能在當前交易池中找到,則拒絕該交易。因為當前交易池是未被記錄在區塊鏈中的交易,而交易的每個輸入,應該來自確認的UTXO。如果在當前交易池中找到,那就是雙花交易。

3)交易中的每個輸入,其對應的輸出必須是UTXO。

4)每個輸入的解鎖腳本(unlocking script)必須和相應輸出的鎖定腳本(locking script)共同驗證交易的合規性。

對于以太坊來說,交易還可能是智能合約的部署。交易規則就確定了符合一定語法規則的合約才能被部署在區塊鏈上。

5.交易優先級

區塊鏈交易的優先級由區塊鏈協議規則決定。對于比特幣而言,交易被區塊包含的優先次序由交易廣播到網絡上的時間和交易額的大小決定。隨著交易廣播到網絡上的時間的增長,交易的鏈齡增加,交易的優先級就被提高,最終會被區塊包含。對于以太坊而言,交易的優先級還與交易的發布者愿意支付的交易費用有關,發布者愿意支付的交易費用越高,交易被包含進區塊的優先級就越高。

6.Merkle證明

Merkle證明的原始應用是比特幣系統(Bitcoin),它是由中本聰(Satoshi Nakamoto)在2009年描述并且創造的。比特幣區塊鏈使用了Merkle證明,為的是將交易存儲在每一個區塊中。使得交易不能被篡改,同時也容易驗證交易是否包含在一個特定區塊中,Merkle樹說明詳見4.2節。

Merkle樹的一個重要使用場景就是快速支付驗證,也就是中本聰描述的“簡化支付驗證”(SPV)的概念:輕量級節點(light client)不用下載每一筆交易以及每一個區塊,可以僅下載鏈的區塊頭,每個區塊中僅包含下述5項內容,數據塊大小為80字節。

(1)上一區塊頭的哈希值

(2)時間戳

(3)挖礦難度值

(4)工作量證明隨機數(nonce)

(5)包含該區塊交易的Merkle樹的根哈希

如果一個輕客戶端希望確定一筆交易的狀態,它可以簡單地要求一個Merkle證明,顯示出一個在Merkle樹特定的交易,其根是在主鏈(main chain,非分叉鏈)上的區塊頭。

Merkle證明可以讓區塊鏈得到更廣闊的應用,但比特幣的輕客戶有其局限性。雖然可以證明包含的交易,但無法證明任何當前的狀態(例如:數字資產的持有,名稱注冊,金融合約的狀態等)。一筆交易影響的確切性質(precise nature)可以取決于此前的幾筆交易,而這些交易本身則依賴于更為前面的交易,所以最終你需要驗證整個鏈上的每一筆交易。為了解決這個問題,以太坊進行了更進一步的創新。

以太坊的每一個區塊頭中并非只包含一棵Merkle樹,而是包含了3棵Merkle樹),分別對應了以下3種對象:

(1)交易(Transactions)

(2)收據(Receipts,基本上,它是展示每一筆交易影響的數據條)

(3)狀態(State)

這三棵樹允許輕客戶端輕松地進行并核實以下類型的查詢答案:

(1)這筆交易被包含在特定的區塊中了嗎?

(2)告訴我這個地址在過去30天中,發出X類型事件的所有實例(例如,一個眾籌合約完成了它的目標)。

(3)目前我的賬戶余額是多少?

(4)這個賬戶是否存在?

(5)假裝在這個合約中運行這筆交易,它的輸出會是什么?

第一種是由交易樹(transaction tree)來處理的;第3和第4種則是由狀態樹(state tree)負責處理,第2種則由收據樹(receipt tree)處理。計算前4個查詢任務是相當簡單的。在服務器簡單地找到對象,獲取梅克爾分支,并通過分支來回復輕客戶端。第5種查詢任務同樣也是由狀態樹處理。

7.RLP

RLP(Recursive Length Pref?ix,遞歸長度前綴編碼)是Ethereum中對象序列化的一個主要編碼方式,其目的是對任意嵌套的二進制數據的序列進行編碼。

以太坊中的所有數據都以“遞歸長度前綴編碼”(Recursive Length Pref?ix encoding,RLP)形式存儲,這種編碼格式將任意長度和維度的字符串構成的數組串連接成字符串。例如,['dog', 'cat']被串接(以字節數組格式)為[130,67,100,111,103,67,99,97,116];其基本的思想是把數據類型和長度編碼成一個單獨的字節放在實際數據的前面(例如‘dog’的字節數組編碼為[100,111,103],于是串接后就成了[67,100,111,103])。

注意RLP編碼正如其名字表示的一樣,是遞歸的;當RLP編碼一個數組時,實際上是在對每一個元素的RLP編碼級聯成的字符串編碼。需要進一步提請注意的是,以太坊中所有數據都是整數;所以,如果有任何的以一個或多個0字節開頭的哈希或者地址,這些0字節應該在計算出現問題的時候去除。以太坊中沒有串接數據結構包含任何以0開頭的數值。整數以大端基礎(Big Endian)256格式存儲(例如32767字節數組格式為[127,255])。

區塊鏈交易流程

以比特幣的交易為例,區塊鏈的交易并不是通常意義上的一手交錢一手交貨的交易,而是轉賬。如果每一筆轉賬都需要構造一筆交易數據會比較笨拙,為了使得價值易于組合與分割,比特幣的交易被設計為可以納入多個輸入和輸出,即一筆交易可以轉賬給多個人。從生成到在網絡中傳播,再到通過工作量證明、整個網絡節點驗證,最終記錄到區塊鏈,就是區塊鏈交易的整個生命周期。

交易的生成。所有者A利用他的私鑰對前一次交易和下一位所有者B簽署一個數字簽名,并將這個簽名附加在這枚貨幣的末尾,制作成交易單。

交易的傳播。A將交易單廣播至全網,每個節點都將收到的交易信息納入一個區塊中。

工作量證明。每個節點通過相當于解一道數學題的工作量證明機制,從而獲得創建新區塊的權力,并爭取得到數字貨幣的獎勵。

整個網絡節點驗證。當一個節點找到解時,它就向全網廣播該區塊記錄的所有蓋時間戳交易,并由全網其他節點核對。

記錄到區塊鏈。全網其他節點核對該區塊記賬的正確性,沒有錯誤后他們將在該合法區塊之后競爭下一個區塊,這樣就形成了一個合法記賬的區塊鏈。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • P2P網絡
    +關注

    關注

    0

    文章

    23

    瀏覽量

    11363
  • 區塊鏈
    +關注

    關注

    112

    文章

    15565

    瀏覽量

    107674
  • 挖礦
    +關注

    關注

    6

    文章

    448

    瀏覽量

    16260

原文標題:區塊鏈技術的發展歷史

文章出處:【微信號:gh_ecbcc3b6eabf,微信公眾號:人工智能和機器人研究院】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    虛擬現實正一步步向我們走來

    顯然,虛擬現實大發展的春天正在到來,虛擬現實正一步步走向消費者。那么,虛擬現實究竟涉及哪些重點技術領域?又將對整個產業帶來怎樣的影響?未來的“抓手”又有哪些?
    發表于 10-26 16:38 ?937次閱讀

    【迅為電子】一步步教你完成iTOP-RK3568 EDP屏幕適配

    【迅為電子】一步步教你完成iTOP-RK3568 EDP屏幕適配
    的頭像 發表于 04-23 15:08 ?434次閱讀
    【迅為電子】<b class='flag-5'>一步步</b>教你完成iTOP-RK3568 EDP屏幕適配

    外國牛人教你一步步快速打造首臺機器人(超詳細)

    外國牛人教你一步步快速打造首臺機器人(超詳細)
    發表于 08-15 19:30

    一步步寫嵌入式操作系統—ARM編程的方法與實踐ch02

    一步步寫嵌入式操作系統—ARM編程的方法與實踐ch02
    發表于 08-20 20:54

    CC2530一步步演示程序燒寫

    CC2530一步步演示程序燒寫第一步——先安裝IAR開發環境第二歩——安裝CC2530燒寫工具第三歩——CC2530串口配置軟件使用具體完整步驟看下面文檔
    發表于 03-03 14:33

    一步步建立_STM32_UCOS_模板

    一步步建立_STM32_UCOS_模板
    發表于 09-29 11:46

    菜鳥一步步入門SAM4S-XPLAINED--IAR開發環境

    菜鳥一步步入門SAM4S-XPLAINED--IAR開發環境
    發表于 01-25 10:55

    一步步進行調試GPRS模塊

    背景:在不知道硬件是否正確情況下,一步步進行調試,最終完成調試。以下是自己調試步驟。1、從gprs模塊TX ,RX 單獨焊接兩個線出來,通過上位機發送AT指令,是否能正常工作。
    發表于 01-25 07:33

    stm32是如何一步步實現設置地址匹配接收喚醒中斷功能的

    為什么要設置地址匹配接收喚醒中斷?stm32是如何一步步實現設置地址匹配接收喚醒中斷功能的?
    發表于 02-28 08:07

    一步步寫嵌入式操作系統

    一步步寫嵌入式操作系統_ARM編程的方法與實踐
    發表于 07-14 11:32 ?0次下載

    看電工技術是如何一步步淪為勤雜工的

    相信很多的電工老師傅也都聽說過這種話,那電工究竟是不是勤雜工?電工技術工種是如何一步步的淪為勤雜工的,我們今天就重點來看看。
    的頭像 發表于 02-18 15:47 ?4298次閱讀

    阿里巴巴是如何一步步走到今天這個規模的?

    不是利己的。 阿里巴巴從1999年成立到現在21年了,我們是如何一步步走到今天這個規模? 回望過去,我們發現阿里巴巴逐漸形成了套獨有的
    的頭像 發表于 01-13 09:13 ?2708次閱讀

    汽車是如何一步步學會自我升級的?

    不同的應用方式對汽車的影響。到今天,發展車載OTA正成為越來越多車企的共識,汽車行業掀起了新輪的技術浪潮。你知道汽車是如何一步步學會自我升級的嗎?評論區等你! 智能汽車的軟件功能會像
    的頭像 發表于 06-18 17:08 ?2145次閱讀

    一步步重新演繹汽車駕駛體驗

    一步步重新演繹汽車駕駛體驗
    發表于 11-04 09:52 ?0次下載
    <b class='flag-5'>一步步</b>重新演繹汽車駕駛體驗

    基于一步步蒸餾(Distilling step-by-step)機制

    為優化LLM為“小模型/少數據/好效果”,提供了種新思路:”一步步蒸餾”(Distilling step-by-step)
    的頭像 發表于 05-16 10:24 ?1540次閱讀
    基于<b class='flag-5'>一步步</b>蒸餾(Distilling step-by-step)機制
    主站蜘蛛池模板: 性天堂网| 色综合成人丁香 | 天天射天天干天天 | 国产精品久久久久久久牛牛 | 国产女人视频免费观看 | 九色欧美 | 在线观看一级毛片 | 国产精选经典三级小泽玛利亚 | 欧美黑粗特黄午夜大片 | 日韩精品一级毛片 | 国产精品美女免费视频观看 | 高清人人天天夜夜曰狠狠狠狠 | 视频免费观看网址 | 高清视频一区二区三区 | 国产操视频 | 午夜视频在线观看免费高清 | 伊人丁香婷婷综合一区二区 | hs网站在线观看 | 天天好比网 | 天天躁夜夜躁狠狠躁 | 久久久久久亚洲精品 | 国产精品丝袜xxxxxxx | 四虎影视最新网址 | 色多多网站在线观看 | 亚洲色图偷窥自拍 | 国产成人精品视频一区二区不卡 | 欧美日日日 | 天天爱综合 | 一级片一级片一级片 | 一级看片免费视频 | 色a4yy综合私人 | ggg成人 | 欧美成人生活片 | 天天干天天干天天干天天干天天干 | 最黄毛片| 高级毛片 | 亚洲综合色在线观看 | 黄色www网站| 四虎国产精品永久免费网址 | 国产成人精品日本亚洲语音1 | 日本黄色三级视频 |