一、引子
8月5日牺蹄,夏日炎炎忘伞,3年級一班的小明百無聊賴,正在做數(shù)學(xué)暑假作業(yè)沙兰。眼前出現(xiàn)了一道附加題氓奈,讓小明丈二和尚摸不著頭腦——“X^2-22X+130=9,求X”僧凰。小明剛剛學(xué)過一元一次方程探颈,這種一元二次方程(事實(shí)上他還根本不知道什么是二元一次方程)超出了所學(xué)教材的范圍,他還不知道怎么解答训措,抓耳撓腮伪节,不知怎么辦光羞。
百思不得其解后,小明想到了一種笨笨的方法——從自然數(shù)1開始怀大,一個一個帶入等式左邊去嘗試纱兑。于是,
X=1化借,左邊不等于右邊
X=2潜慎,左邊不等于右邊
X=3,左邊不等于右邊
……
X=11蓖康,左邊=右邊铐炫。
于是,小明得到了答案蒜焊,X=11倒信。
小明的故事,將對我們通俗理解工作量證明泳梆,有很大的幫助作用鳖悠。他解題的方法,有一個特點(diǎn):求解通過正向代入嘗試的方法進(jìn)行的优妙,而沒有通過倒推的方式求解X(雖然倒推的解題過程更高效乘综,但他不會)。
二套硼、工作量證明及其機(jī)理
工作量證明的想法于 1993 年就出現(xiàn)了卡辰。所謂工作量證明(Proof of Work / PoW),簡單理解就是一份證明熟菲,用來確認(rèn)節(jié)點(diǎn)做過一定量的工作看政,誰的工作量足夠多,誰就能獲得相應(yīng)的獎勵抄罕。
區(qū)塊鏈中最早應(yīng)用工作量證明的允蚣,就是比特幣挖礦了,挖礦的過程是通過求解哈希函數(shù)進(jìn)行的呆贿。
什么是哈希函數(shù)(也成為散列函數(shù))呢嚷兔?
它給定一個輸入值x,通過一個固定的規(guī)則做入,會對應(yīng)產(chǎn)生F(x)[即哈希結(jié)果]冒晰。
如果我們知道F(x),想求解X竟块,只能和小明一樣壶运,通過逐個嘗試運(yùn)算的方法去解答,而不能倒推浪秘。
當(dāng)然蒋情,僅僅這樣理解哈希函數(shù)埠况,是有所偏差的。哈希函數(shù)與小明解題棵癣,有不同之處辕翰。
小明所解的題,是可以通過倒推來直接算出答案的狈谊,他只是因?yàn)椴欢裁挪坏靡淹ㄟ^嘗試的方法去解答。但哈希函數(shù)從理論上和設(shè)計(jì)上河劝,就沒有倒推的可能壁榕,所有人只能通過不斷嘗試去找答案。
由于找到X有獎勵(比特幣)丧裁,所以對于同一個F(x)[哈希結(jié)果]护桦,可能會有許多人在同時(shí)進(jìn)行運(yùn)算嘗試含衔。誰先找到這個x煎娇,獎勵就歸誰。
這就是工作量證明:如果你達(dá)到了某一項(xiàng)任務(wù)的目的(與哈希結(jié)果F(x)對應(yīng)成功)贪染,那么就會被認(rèn)為做出了一定的工作量(像小明一樣反復(fù)嘗試了很多次)缓呛。誰先達(dá)到目的,基本可以認(rèn)為誰的工作量大杭隙,按照工作量證明的原則哟绊,誰就應(yīng)該獲得獎勵。
有人會問痰憎,如果小明沒有按自然數(shù)順序進(jìn)行嘗試票髓,只是隨便找個數(shù)代入,他也可能因?yàn)檫\(yùn)氣好铣耘,第一次就發(fā)現(xiàn)了11是答案啊洽沟。如果另一個人按照順序代入嘗試,那肯定會比小明后找到答案蜗细,這樣裆操,小明的工作量小,但找到了答案獲得了獎勵炉媒,工作量證明不就失效了嗎踪区?
的確如此,不過這個問題可以通過提高解題難度來解決吊骤。
小明解的題缎岗,需要的工作量很小,如果從1開始按順序試自然數(shù)白粉,只需要11次就可以成功传泊,所以小明碰巧找到答案的概率是很高的茅郎。但哈希函數(shù)與這道題的難度根本不在一個量級上。哈希結(jié)果通常是以n個0開頭的16進(jìn)制字符串或渤,0的個數(shù)越多系冗,求解X的難度越大。例如薪鹦,如果一個哈希結(jié)果以4個0開頭掌敬,那么,我們需要大約4251次計(jì)算才能找到對應(yīng)的答案池磁,通過偶然發(fā)現(xiàn)找到正確答案的概率極低奔害。如果增加零的數(shù)量,難度會上升地熄,而且上升速度極快华临,相應(yīng)地,依靠運(yùn)氣解答的概率也會迅速下降端考,幾乎可以忽略不計(jì)雅潭。
這種情況下,如果誰先找到哈希函數(shù)的答案却特,那么扶供,我們幾乎可以肯定,他所做的工作量比其他人要多裂明。難度到達(dá)一定級別椿浓,這個論斷正確的可能性就接近100%了。
三闽晦、對工作量證明認(rèn)識的誤區(qū)
從上面的例子我們可以看出扳碍,工作量證明其實(shí)并非通過直接度量所有人的工作量然后進(jìn)行比較,而是通過工作結(jié)果(尋找X)合理推測工作量的多少(即先找打答案的人仙蛉,工作量是最多的)笋敞,并且這種推測是建立在概率基礎(chǔ)上的,并非100%正確捅儒。通過提高難度液样,我們可以提出運(yùn)氣成分,使這一推測的正確概率接近100%巧还。
而且鞭莽,工作量證明并不是簡單的推測所有工作量,而是推測所有有效工作量麸祷。如果礦工去打了5次籃球澎怒,這并不會被算作他的工作量。
四、工作量證明的優(yōu)缺點(diǎn)
通過對工作結(jié)果進(jìn)行認(rèn)證喷面,來證明完成了相應(yīng)的工作量星瘾,是一種非常高效的方式。這是工作量證明的一大優(yōu)點(diǎn)惧辈。試想琳状,如果有1000個人在解答開頭有4個0的哈希結(jié)果,那么盒齿,如果直接記錄每個人的工作量念逞,我們需要對所有人進(jìn)行監(jiān)測記錄,記錄結(jié)果多達(dá)4251000條边翁。而如果通過結(jié)果進(jìn)行認(rèn)證翎承,就只需要記錄一次(即誰最先找到了答案)就可以了。
但工作量證明也有缺點(diǎn)符匾,最讓人頭疼的就是資源浪費(fèi)叨咖。求解哈希函數(shù),因?yàn)殡y度極高啊胶,所以需要大量計(jì)算機(jī)不停工作甸各,耗費(fèi)的電力也極多。僅僅以2015年的數(shù)據(jù)來看创淡,一個比特幣交易就需要消耗和1.57 個美國家庭 一天一樣多的用電痴晦。到了2017年,一筆交易已經(jīng)要耗費(fèi)一個家庭一周的用電琳彩。根據(jù)專家預(yù)測,到2020年部凑,比特幣交易可能會消耗和丹麥一樣多的電力露乏。這是一個極其嚴(yán)重的問題,也正是因?yàn)槿绱送垦慌鷰湃θ耸块_始探索新的共識機(jī)制瘟仿。
五、日常應(yīng)用
工作量證明的機(jī)理比勉,雖然我們聽起來新鮮劳较。但它在生活中的應(yīng)用卻無處不在,幾乎所有人都經(jīng)歷過浩聋。
比如畢業(yè)證观蜗。一個大學(xué)生被授予本科畢業(yè)證,需要學(xué)習(xí)一定量的課程衣洁,積累一定量的知識墓捻。但這個過程并不需要學(xué)校指派一名監(jiān)工去跟蹤你4年的大學(xué)生活。而是通過你的畢業(yè)論文和各科成績是否合格來進(jìn)行合理推測坊夫。如果各科成績和論文都達(dá)到了規(guī)定的標(biāo)準(zhǔn)砖第,基本可以推測撤卢,你完成了相應(yīng)的學(xué)習(xí)任務(wù),因而授予畢業(yè)證梧兼。此外放吩,像其他證件,比如駕駛證羽杰、從業(yè)資格證屎慢、職稱評定等等,都是如此忽洛。
所以腻惠,工作量證明一直存在于我們的日常生活中。即使你是對區(qū)塊鏈一知半解的幣友欲虚,對這個概念也無需恐懼集灌。撕開“工作量證明”的內(nèi)衣,你會發(fā)現(xiàn)复哆,其實(shí)它并不神秘欣喧。