第一篇:揭秘比特幣和區(qū)塊鏈(二):什么是工作量證明
揭秘比特幣和區(qū)塊鏈
(二):什么是工作量證明?
1.起源工作量證明(Proof Of Work,簡稱POW),簡單理解就是一份證明,用來確認你做過一定量的工作。監(jiān)測工作的整個過程通常是極為低效的,而通過對工作的結(jié)果進行認證來證明完成了相應的工作量,則是一種非常高效的方式。比如現(xiàn)實生活中的畢業(yè)證、駕駛證等等,也是通過檢驗結(jié)果的方式(通過相關的考試)所取得的證明。工作量證明系統(tǒng)(或者說協(xié)議、函數(shù)),是一種應對拒絕服務攻擊和其他服務濫用的經(jīng)濟對策。它要求發(fā)起者進行一定量的運算,也就意味著需要消耗計算機一定的時間。這個概念由Cynthia Dwork 和Moni Naor 1993年在學術論文中首次提出。而工作量證明(POW)這個名詞,則是在1999年 Markus Jakobsson 和Ari Juels的文章中才被真正提出。哈?,F(xiàn)金是一種工作量證明機制,它是亞當·貝克(Adam Back)在1997年發(fā)明的,用于抵抗郵件的拒絕服務攻擊及垃圾郵件網(wǎng)關濫用。在比特幣之前,哈希現(xiàn)金被用于垃圾郵件的過濾,也被微軟用于hotmail/exchange/outlook等產(chǎn)品中(微軟使用一種與哈?,F(xiàn)金不兼容的格式并將之命名為電子郵戳)。哈?,F(xiàn)金也被哈爾·芬尼以可重復使用的工作量證明(RPOW)的形式用于一種比特幣之前的加密貨幣實驗中。另外,戴偉的B-money、尼克·薩博的比特金(Bit-Gold)這些比特幣的先行者,都是在哈?,F(xiàn)金的框架下進行挖礦的。2.哈希函數(shù)哈希函數(shù)(Hash Function),也稱為散列函數(shù),給定一個輸入x,它會算出相應的輸出H(x)。哈希函數(shù)的主要特征是: 輸入x可以是任意長度的字符串 輸出結(jié)果即H(x)的長度是固定的 計算H(x)的過程是高效的(對于長度為n的字符串x,計算出H(x)的時間復雜度應為O(n))而對于比特幣這種加密系統(tǒng)所使用的哈希函數(shù),它需要另外具備以下的性質(zhì): 免碰撞,即不會出現(xiàn)輸入x≠y,但是H(x)=H(y)其實這個特點在理論上并不成立,比如,比特幣使用的SHA256算法,會有2^256種輸出,如果我們進行2^256+1次輸入,那么必然會產(chǎn)生一次碰撞;甚至從概率的角度看,進行2^130次輸入就會有99%的可能發(fā)生一次碰撞。不過我們可以計算一下,假設一臺計算機以每秒10000次的速度進行哈希運算,要經(jīng)過10^27年才能完成2^128次哈希!甚至可以這么說,即便是人類制造的所有計算機自宇宙誕生開始一直運算到今天,發(fā)現(xiàn)碰撞的幾率也是極其小的。
隱匿性,也就是說,對于一個給定的輸出結(jié)果H(x),想要逆推出輸入x,在計算上是不可能的。不存在比窮舉更好的方法,可以使哈希結(jié)果H(x)落在特定的范圍。以上特點是比特幣的工作量證明系統(tǒng)可以正常運行的基石。3.工作量證明的基本原理工作量證明系統(tǒng)主要特征是客戶端需要做一定難度的工作得出一個結(jié)果,驗證方卻很容易通過結(jié)果來檢查出客戶端是不是做了相應的工作。這種方案的一個核心特征是不對稱性:工作對于請求方是適中的,對于驗證方則是易于驗證的。它與驗證碼不同,驗證碼的設計出發(fā)點是易于被人類解決而不易被計算機解決。下圖表示的是工作量證明的流程:舉個例子,給定的一個基本的字符串'Hello, world!',我們給出的工作量要求是,可以在這個字符串后面添加一個叫做nonce的整數(shù)值,對變更后(添加nonce)的字符串進行SHA256哈希運算,如果得到的哈希結(jié)果(以16進制的形式表示)是以'0000'開頭的,則驗證通過。為了達到這個工作量證明的目標。我們需要不停的遞增nonce值,對得到的新字符串進行SHA256哈希運算。按照這個規(guī)則,我們需要經(jīng)過4251次計算才能找到恰好前4位為0的哈希散列。'Hello, world!0' => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64'Hello, world!1' => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8'Hello, world!2' => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7...'Hello, world!4248' => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965'Hello, world!4249' => c004190b822f1669cac8dc37e761cb73652e7832fb8***cf26ebb9e6'Hello, world!4250' => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9通過這個示例我們對工作量證明機制有了一個初步的理解。有的人會認為如果工作量證明只是這樣的一個過程,那是不是只需要記住nonce為4521計算能通過驗證就行了?當然不是的,這只是一個個例。下面,我們將輸入簡單的變更為'Hello, world+整數(shù)值',整數(shù)值取1到1000,也就是說,將輸入變成一個由1000個值組成的數(shù)組:'Hello, world!
1、Hello, world!2……Hello, world!1000'。然后對數(shù)組中的每一個輸入依次進行上面例子中要求的工作量證明——找到前導為4個0的哈希散列。容易算出,預期大概要進行2^16次嘗試(哈希值的偽隨機特性使得我們可以做概率估算),才能得到4個前導0的哈希散列。而統(tǒng)計一下剛才進行的1000次計算的實際計算結(jié)果,我們會發(fā)現(xiàn),進行計算的平均次數(shù)為66958次,十分接近2^16(65536)。在這個例子中,數(shù)學期望的計算次數(shù),就是我們要求的“工作量”,重復多次進行的工作量證明會是一個符合統(tǒng)計學規(guī)律的概率事件。統(tǒng)計輸入的字符串與對應得到目標結(jié)果實際使用的計算次數(shù)列表如下:Hello, world!1 => 42153Hello, world!2 => 2643Hello, world!3 => 32825Hello, world!4 => 250Hello, world!5 => 7300...Hello, world!995 => 164819Hello, world!996 => 178486Hello, world!997 => 22798Hello, world!998 => 68868Hello, world!999 => 46821比特幣體系里的工作量證明機制與上述示例類似,但要比它更復雜一些。4.比特幣中的工作量證明比特幣網(wǎng)絡中任何一個節(jié)點,如果想生成一個新的區(qū)塊并寫入?yún)^(qū)塊鏈,必須解出比特幣網(wǎng)絡出的工作量證明的迷題。這道題關鍵的三個要素是工作量證明函數(shù)、區(qū)塊及難度值。工作量證明函數(shù)是這道題的計算方法,區(qū)塊決定了這道題的輸入數(shù)據(jù),難度值決定了這道題的所需要的計算量。4.1工作量證明函數(shù)和我們上節(jié)例子中用到的哈希函數(shù)一樣,比特幣系統(tǒng)中使用的工作量證明函正是SHA256。SHA是安全散列算法(Secure Hash Algorithm)的縮寫,是一個密碼散列函數(shù)家族。這一組函數(shù)是由美國國家安全局(NSA)設計,美國國家標準與技術研究院(NIST)發(fā)布的,主要適用于數(shù)字簽名標準。SHA256就是這個函數(shù)家族中的一個,是輸出值為256位的哈希算法。到目前為止,還沒有出現(xiàn)對SHA256算法的有效攻擊。4.2 區(qū)塊比特幣的區(qū)塊由區(qū)塊頭及該區(qū)塊所包含的交易列表組成。區(qū)塊頭的大小為80字節(jié),由4字節(jié)的版本號、32字節(jié)的上一個區(qū)塊的散列值、32字節(jié)的Merkle Root Hash、4字節(jié)的時間綴(當前時間)、4字節(jié)的當前難度值、4字節(jié)的隨機數(shù)組成。區(qū)塊包含的交易列表則附加在區(qū)塊頭后面,其中的第一筆交易是coinbase交易,這是一筆為了讓礦工獲得獎勵及手續(xù)費的特殊交易。區(qū)塊的大致結(jié)構(gòu)如圖所示:擁有80字節(jié)固定長度的區(qū)塊頭,就是用于比特幣工作量證明的輸入字符串。因此,為了使區(qū)塊頭能體現(xiàn)區(qū)塊所包含的所有交易,在區(qū)塊的構(gòu)造過程中,需要將該區(qū)塊要包含的交易列表,通過Merkle Tree算法生成Merkle Root Hash,并以此作為交易列表的摘要存到區(qū)塊頭中。其中Merkle Tree的算法圖解如下:4.3難度值難度值(difficulty)是礦工們在挖礦時候的重要參考指標,它決定了礦工大約需要經(jīng)過多少次哈希運算才能產(chǎn)生一個合法的區(qū)塊。比特幣的區(qū)塊大約每10分鐘生成一個,如果要在不同的全網(wǎng)算力條件下,新區(qū)塊的產(chǎn)生保持都基本這個速率,難度值必須根據(jù)全網(wǎng)算力的變化進行調(diào)整。簡單地說,難度值被設定在無論挖礦能力如何,新區(qū)塊產(chǎn)生速率都保持在10分鐘一個。難度的調(diào)整是在每個完整節(jié)點中獨立自動發(fā)生的。每2016個區(qū)塊,所有節(jié)點都會按統(tǒng)一的公式自動調(diào)整難度,這個公式是由最新2016個區(qū)塊的花費時長與期望時長(期望時長為20160分鐘即兩周,是按每10分鐘一個區(qū)塊的產(chǎn)生速率計算出的總時長)比較得出的,根據(jù)實際時長與期望時長的比值,進行相應調(diào)整(或變難或變易)。也就是說,如果區(qū)塊產(chǎn)生的速率比10分鐘快則增加難度,比10分鐘慢則降低難度。這個公式可以總結(jié)為如下形式:新難度值 = 舊難度值 *(過去2016個區(qū)塊花費時長 / 20160 分鐘)工作量證明需要有一個目標值。比特幣工作量證明的目標值(Target)的計算公式如下:目標值 = 最大目標值 / 難度值其中最大目標值為一個恒定值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF目標值的大小與難度值成反比。比特幣工作量證明的達成就是礦工計算出來的區(qū)塊哈希值必須小于目標值。與第3節(jié)所舉的例子相類比,我們也可以簡單理解成,比特幣工作量證明的過程,就是通過不停的變換區(qū)塊頭(即嘗試不同的nouce值)作為輸入進行SHA256哈希運算,找出一個特定格式哈希值的過程(即要求有一定數(shù)量的前導0)。而要求的前導0的個數(shù)越多,代表難度越大。4.4 工作量證明的過程我們可以把比特幣礦工解這道工作量證明迷題的步驟大致歸納如下: 生成Coinbase交易,并與其他所有準備打包進區(qū)塊的交易組成交易列表,通過Merkle Tree算法生成Merkle Root Hash 把Merkle Root Hash及其他相關字段組裝成區(qū)塊頭,將區(qū)塊頭的80字節(jié)數(shù)據(jù)(Block Header)作為工作量證明的輸入 不停的變更區(qū)塊頭中的隨機數(shù)即nonce的數(shù)值,并對每次變更后的的區(qū)塊頭做雙重SHA256運算(即SHA256(SHA256(Block_Header))),將結(jié)果值與當前網(wǎng)絡的目標值做對比,如果小于目標值,則解題成功,工作量證明完成。該過程可以用下圖表示:5.結(jié)語比特幣的工作量證明,就是我們俗稱“挖礦”所做的主要工作。理解工作量證明機制,將為我們進一步理解比特幣區(qū)塊鏈的共識機制奠定基礎。在之后的文章中,我們將會詳細介紹比特幣交易和區(qū)塊的結(jié)構(gòu)及同步過程、最長鏈機制以及達成共識的原理。感謝郭蕾對本文的策劃和審校。給InfoQ中文站投稿或者參與內(nèi)容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ,@丁曉昀),微信(微信號:InfoQChina)關注我們。
第二篇:幣幣交易所搭建-區(qū)塊鏈技術信用認證機構(gòu)證明
幣幣交易所搭建-區(qū)塊鏈技術信用認證機構(gòu)證明
在不久的將來,“證明一切”將成為可能。幣幣交易所搭建(開發(fā)微信ruiec2723)-幣幣兌換系統(tǒng)開發(fā)以區(qū)塊鏈底層技術為基準。其前景是,征信將成為一個類似在搜索引擎商檢索信息的無摩擦過程??梢韵胂螅碌男庞脵C制是以區(qū)塊鏈技術為基礎的,某人做過某事后加蓋一個時間截,這樣其他人便無可知曉。一些啟發(fā)式的例子是:
1、身份證明:身份將由以區(qū)塊鏈式的認證機構(gòu)進行確認。
2、存在證明:錄制音頻火視頻文件、照相或者接受文件,并分享其證明
3、Oracles式業(yè)務 :Oracles將成為認證部門。因為其包含的有用信息會不斷更新
4、智能服務式合約:直接使用瀏覽器查詢智能合約目錄
5、購買證明:證明已購買的物品,比如cai票、藥物、不予許可證等
6、位置證明:證明已達到某個指定區(qū)域
7、所有權(quán)證明:回答歸誰擁有的問題
8、經(jīng)理證明:幫助保證你是一個忙碌可信的市場經(jīng)理,并且不會實施欺騙行為。
幣幣兌換系統(tǒng)開發(fā)-幣幣交易模式搭建幣幣交易平臺充當一個“中介”的作用,最基礎的一點就是可以降低兌換幣種之間的成本。傳統(tǒng)的幣幣交易平臺,只有法-幣和數(shù)字資產(chǎn)的兌換,如果想要購買其他數(shù)字資產(chǎn),要么增加投資,直接充值法幣購買;如果不想增加投資,就要把之前的數(shù)字資產(chǎn)變換成法-幣,再用這筆法-幣來購買所需的數(shù)字資產(chǎn),這樣的兌換無形中會增加投資者的經(jīng)濟成本和時間成本。而現(xiàn)在由于政策的原因幣幣交易可以直接實現(xiàn)數(shù)字資產(chǎn)之間的兌換,方便快捷,經(jīng)濟成本和時間成本相對來說是比較節(jié)約的,也不需要增加投資。
區(qū)塊鏈技術幣幣交易所搭建、區(qū)塊鏈加密技術征信技術交易所開發(fā)、比特幣交易網(wǎng)站APP開發(fā)、高端定制版交易所開發(fā)
第三篇:區(qū)塊鏈100問-第3集丨比特幣白皮書的誕生-火幣資訊
火幣資訊:www.tmdps.cn
區(qū)塊鏈100問第3集丨比特幣白皮書的誕生-火幣資
訊
第3集:比特幣白皮書的誕生
2008年的美國發(fā)生金融危機,波及到世界各地,各國法定貨幣大幅貶值,人們手里的錢變得不值錢了。
2008年11月1日,這個歷史性的時刻,一位自稱中本聰?shù)娜嗽诰W(wǎng)絡上發(fā)表了一篇《比特幣:一種點對點的電子現(xiàn)金系統(tǒng)》的論文,文中描述了一個全新的貨幣系統(tǒng):比特幣。
火幣資訊:www.tmdps.cn
比特幣系統(tǒng)是一種去中心化的數(shù)字貨幣系統(tǒng),它解決了在沒有中心機構(gòu)的情況下,總量恒定的貨幣的發(fā)行和流通問題。通過比特幣系統(tǒng)轉(zhuǎn)賬,信息公開透明,可以放心地將比特幣轉(zhuǎn)給地球另一端的人,每一筆轉(zhuǎn)賬信息都會被全網(wǎng)記錄。白皮書的問世,也標志著比特幣的底層技術區(qū)塊鏈的誕生。
火幣資訊:www.tmdps.cn
想了解更多區(qū)塊鏈知識,請繼續(xù)關注火幣資訊后續(xù)“區(qū)塊鏈100問”內(nèi)容。