三個星期之前出差西安的途中,花了4個小時(shí)閱讀了一篇關(guān)于區(qū)塊鏈基礎(chǔ)知識的文章,后來又花了將近一個禮拜寫下了這篇筆記,總算能夠理解了一些區(qū)塊鏈的皮毛。
提起區(qū)塊鏈,不得不提到另一個更早進(jìn)入視野的詞匯:比特幣。好比娛樂圈永不停歇的造星運(yùn)動,比特幣在今天已經(jīng)不是電子貨幣唯一的明星,但其仍然是天王級的。比特幣算得上是區(qū)塊鏈1.0版本的商用案例,了解了比特幣的前因后果,對理解區(qū)塊鏈以及未來更多商用模式,是有幫助的。
先用一句話了解區(qū)塊鏈?zhǔn)歉墒裁吹?/h3>
其實(shí)用一句話來介紹還挺有難度的。區(qū)塊鏈技術(shù),本質(zhì)上是為了低成本的解決人們之間的信任問題。額,好虛,用我司慣用語就是,沒干貨?。∧呛冒桑瑒e局限一句話了,抄襲一段別人的概括(原文鏈接):
- 從表現(xiàn)手法上看,它是一個分布式的賬本
- 從技術(shù)的角度看,它是一個分布式的鏈?zhǔn)綌?shù)據(jù)庫
- 從用途的角度看,它是一個可靠的信用載體
- 從用戶的角度看,它是一個不需要第三方的信息共享平臺
- 從字面的意思看,它是一組區(qū)塊,用鏈建立起連接關(guān)系的系統(tǒng)
- 從社會的角度看,它是一個解決了信用問題的基礎(chǔ)設(shè)施
恩,稍微具化了一點(diǎn),先有個大致印象,接下來我希望用我記錄下來的一些筆記,和大家一起搞明白區(qū)塊鏈,或者說比特幣的基礎(chǔ)認(rèn)知。
這篇文章的大致脈絡(luò)
1. 比特幣的誕生
2. 比特幣的生產(chǎn)制造與交易過程(這里包含了大量的基礎(chǔ)知識,是全文的重點(diǎn))
1) 比特幣的底層基礎(chǔ):加密
2) 概述公鑰、私鑰、錢包、比特幣的對應(yīng)關(guān)系
3) 比特幣與挖礦(這里涉及一個關(guān)鍵名詞 -- 共識機(jī)制,這很可能會另寫一篇文章)
3. 比特幣的難題
1) 雙花問題
2) 礦藏枯竭
4. 區(qū)塊鏈的未來展望(僅僅是展望,每個領(lǐng)域都有豐富的軟文,跟房地產(chǎn)一樣,看漲看跌爭斗不息。以后隨著不斷學(xué)習(xí)再針對領(lǐng)域單獨(dú)寫文章吧)
必須說明,這篇文章有些文字或段落源自互聯(lián)網(wǎng),請?jiān)徫以谶@個隨意轉(zhuǎn)發(fā)不尊重知識產(chǎn)權(quán)的網(wǎng)絡(luò)里確實(shí)不知道每一處原文作者是誰。我可能會對部分文字進(jìn)行重新編排,或修改為我喜歡的方式。因此特先聲明,這些原創(chuàng)的知識點(diǎn)與思路都屬于原文作者,請大家尊重知識產(chǎn)權(quán)。
好了,進(jìn)入正題。
一、比特幣的誕生
不知大家還記否,房價(jià)是從什么時(shí)候開始喪心病狂的暴漲的?大概就是2008年之后。2008年發(fā)生了什么?奧運(yùn)會!沒錯,但還有一件大事就是全球性的經(jīng)濟(jì)危機(jī)。而中美兩個超級大國最主要的應(yīng)對方案是什么?就是大家耳熟能詳?shù)摹坝♀n機(jī)模式”。我想導(dǎo)致我很久買不起房的重要原因(根本原因還是自己比較慫)是那4萬億大部分流向了以房地產(chǎn)為核心的基礎(chǔ)設(shè)施的建設(shè),于是1-2年之內(nèi),通貨膨脹在生活方方面面體現(xiàn)出來,而房價(jià)則更是一江春水向東流,永遠(yuǎn)不能再回頭了。
問題來了,印鈔機(jī)誰能夠開啟呢?就是各國的央行。在金融領(lǐng)域,央行掌握了絕對的力量,掌握了經(jīng)濟(jì)體的生殺大權(quán),只要他想,分分鐘可以讓你的財(cái)富灰飛煙滅。這讓天生追求“Freedom”的互聯(lián)網(wǎng)Hack很不滿,他們希望希望用去中心化的互聯(lián)網(wǎng)技術(shù)來顛覆這種中心貨幣權(quán)威。于是,一個(也可能是一群)叫做中本聰?shù)募一餀M空出世,發(fā)表了一篇牛逼哄哄的論文,Bitcoin:A Peer-to-Peer Electronic Cash System,宣告了比特幣的誕生。
先說說現(xiàn)有的中心化的支付體系:
- 第一,貨幣政策是由各個國家中央銀行規(guī)定的,這就導(dǎo)致了可能的貨幣濫發(fā),中本聰想要建立一個沒有中心機(jī)構(gòu)、并且規(guī)則明確的貨幣供應(yīng)方式;
- 第二,現(xiàn)有的支付體系是中心化的,比如支付寶所扮演的就是中心化的機(jī)構(gòu),因?yàn)?strong>買家與賣家彼此的不信任,必須要一個中心化的機(jī)構(gòu)來扮演信用中心,大家都與信任中心發(fā)生聯(lián)系。
這樣做會導(dǎo)致兩個問題:一是信任中心權(quán)力越來越大,二是我們要為這種信用提供費(fèi)用。
而中本聰要建立的貨幣體系,本質(zhì)上就是要解決上述的問題,因此比特幣網(wǎng)絡(luò)最重要的特征就是:去中心化、公開透明,從技術(shù)上解決點(diǎn)對點(diǎn)信任問題;并且將比特幣的總量恒定在2100萬枚,從而避免可能的通脹。
上述就是比特幣的誕生緣由。沒有壓迫,就沒有反抗的故事一遍又一遍的在Hack身上上演著。這個世界存在著千千萬萬個中本聰,技術(shù)就是他們的武器,是他們內(nèi)心自由的源動力。所以,身為一個北京昌平回龍觀社區(qū)的村民,我真心的呼吁每個(甚至是每對)IT父母,讓孩子從小就學(xué)習(xí)IT技術(shù),回龍觀怎么就不能成為中國的帕洛奧圖?!
二、比特幣的生產(chǎn)制造與交易過程
去中心化,意味著你與陌生人之間的轉(zhuǎn)賬支付是直接進(jìn)行的,沒有任何第三方的擔(dān)保,在已經(jīng)習(xí)慣銀行、支付寶、微信等第三方信任平臺的今天,你能想象嗎?讓我們看看中本聰?shù)脑O(shè)計(jì)思路。
中本聰設(shè)計(jì)的去中心化比特幣網(wǎng)絡(luò)中,每一個用戶自己都有一個賬本,這個賬本記錄了從第一枚比特幣誕生以來的所有交易記錄。Alice要向Bob轉(zhuǎn)賬5個btc,會在網(wǎng)絡(luò)上喊一句“Alice要轉(zhuǎn)賬5btc給Bob”,Tom聽到Alice的聲音,掏出自己的小賬本,檢驗(yàn)了一下Alice的賬戶,發(fā)現(xiàn)Alice有5個btc,便寫下Alice向Bob轉(zhuǎn)賬5個btc,同時(shí)也喊出“Alice要轉(zhuǎn)賬5btc給Bob”,這樣一傳十十傳百,直到每個人都把這筆交易記錄在自己的賬本上,每一個賬本都是一樣的,這就是所謂的去中心化賬本,它幾乎不可能被摧毀。傳統(tǒng)網(wǎng)路中,如果銀行體系被破壞了,那么大家的賬目就混亂了。但是在比特幣網(wǎng)絡(luò)中,每個節(jié)點(diǎn)都明確的記錄了中本聰開比特幣以來的所有賬目,即使節(jié)點(diǎn)幾乎都被炸毀了,只要還剩一個節(jié)點(diǎn),就可以還原出所有記錄,除非瞬間摧毀整個互聯(lián)網(wǎng)。
上面描述的是一個最粗略的過程。在去中心化網(wǎng)絡(luò)中,所有人都是不可信任的,因此在實(shí)際的轉(zhuǎn)賬過程中,第一件要干的事就是驗(yàn)證這條消息的有效性,否則人們在網(wǎng)上亂喊豈不天下大亂。形象點(diǎn)說,就是Alice在發(fā)布這條消息的時(shí)候,給消息簽個名。其他人收到消息后,對照一下“筆跡”,發(fā)現(xiàn)確實(shí)是Alice的,就認(rèn)可這條消息。而簽名的驗(yàn)證過程,就涉及了比特幣和區(qū)塊鏈的技術(shù)基石 -- 加密算法。具體說,是橢圓曲線數(shù)字簽名算法,這是一種非對稱加密算法。
1. 非對稱加密算法
在了解非對稱加密算法之前,先看看什么是對稱加密算法。對稱加密的關(guān)鍵在于雙方要實(shí)現(xiàn)約定加密方式。但如果事先無法約定或者這種加密方式被敵方所竊取或者所破解了怎么辦?這就是我們在很多諜戰(zhàn)片里的情景,一旦密碼本丟失,整套密碼系統(tǒng)就完蛋了。比如我要傳遞一個秘密數(shù)字給佐爾格,加密方式就是給這個數(shù)字加上33。當(dāng)然佐爾格要知道這個加密方式,當(dāng)他看到寫著223這個數(shù)字的紙條的時(shí)候,他就會用223減去33,等于190。這個190就是我想傳遞給佐爾格的數(shù)字。佐爾格看后非常震驚,馬上通過秘密渠道告知斯大林:德軍要用動用190個師閃擊蘇聯(lián)?!稘摲分杏鄤t成天天晚上一邊聽電臺的廣播,一邊拿本小人書找字的方式就是對稱加密,一旦這個規(guī)則被李涯知道了,李涯也能蹲守在電臺邊上,竊聽我黨的秘密了。
因此對稱加密算法的安全性比較低,這不適合用在遍布壞心眼的互聯(lián)網(wǎng)世界中。有沒有一種我明告訴你加密方式,你就是破解不了干著急的方式呢?
有的,這就是非對稱加密。
先說點(diǎn)枯燥的算法描述:
非對稱加密算法有一個解密方式A與加密方式B,要傳遞信息M,使用加密方式B進(jìn)行運(yùn)算,得到加密信息X=f(M,B),這個過程的關(guān)鍵在于即使知道加密方式B和加密后得到的信息X,依然無法算出原始信息M,而原始信息M=f(X,A),即原始信息必須使用解密方式A算出。這里的A稱為私鑰,B稱為公鑰。這就是非對稱加密采用的“公鑰加密,私鑰破解”方式,而傳統(tǒng)的對稱加密就是加密和破解用的是同樣的密鑰。
有一個小例子,或者說一個小魔術(shù),你可以拿來騙騙自己的女朋友、老婆或小情人。你隨便想一個三位數(shù),但你別直接告訴我,而是拿計(jì)算器把這個三位數(shù)乘以91,然后告訴我結(jié)果的最后三位就行了。然后我就知道你想的那個三位數(shù)是多少了。
比如,你想的是521,然后用521*91=47411,你把411告訴我。而我心中默念咒語,不一會便猜出你想的數(shù)字就是521!
其實(shí),我的咒語就是拿你告訴我的411乘上11得出4521,這個結(jié)果的后三位就是答案!
這個神奇咒語的背后,其實(shí)是一個簡單的數(shù)學(xué)知識,也可以用于理解什么是非對稱加密?!?1+后三位”就是公鑰,我無論是對女朋友,還是對老婆,還是對情人,都會告訴她這個加密方式。你用公鑰91進(jìn)行了加密傳送給我,而“11+后三位數(shù)字”就是我的私鑰。咱們腦補(bǔ)一個場景,如果這個私鑰被你的老婆知道了,當(dāng)她檢查你的微信時(shí),發(fā)現(xiàn)一個陌生女子給你發(fā)了一個411,后果你懂得。因此私鑰務(wù)必是要好好保存滴。
這就是“公鑰加密,私鑰解密”的用法了。
小彩蛋:
再說一說上面提到的這個簡單的數(shù)學(xué)知識。為啥“91”和“11+后三位”組成的公鑰私鑰這么神奇呢?因?yàn)?1乘以11等于1001,任何三位數(shù)乘以1001的后三位就是三位數(shù)本身。有沒有感嘆神奇的數(shù)學(xué)?
同樣,聰明的你有沒有發(fā)現(xiàn)任何四位數(shù)乘以10001的后四位就是四位數(shù)本身?那是因?yàn)橥瑯拥牡览恚?73*137=10001。
因此聰明的你和小情人約定了新的公鑰和私鑰,繼續(xù)你們的維多利亞秘密……
當(dāng)然,上述僅僅是非對稱加密的極簡示例,比特幣簽名與認(rèn)證過程中用到的橢圓曲線算法則是一種高科技。這種算法中,不但有公鑰加密、私鑰解密,還有私鑰加密、公鑰解密,私鑰可以推出公鑰,但公鑰推不出私鑰的能力。咱們記著上面加粗的這小段文字,在下面理解比特幣轉(zhuǎn)賬過程中用得著。
2. 概述公鑰、私鑰、錢包、比特幣的關(guān)系
在現(xiàn)實(shí)生活中,我們都有自己的錢包和銀行卡,而一個比特幣的用戶自然也會有一個錢包,這個錢包下面可以生成一大堆地址和對應(yīng)的密碼,由用戶自主選擇一個公鑰來進(jìn)行收款(甚至每一筆交易都使用一個新的公鑰)。在比特幣的世界錢包里的地址叫公鑰,把對應(yīng)的密碼叫私鑰。我們可以簡單理解公鑰就是我們銀行卡賬號,私鑰就是銀行卡密碼。任何人只要有這個私鑰,也就是密碼,就可以操縱對應(yīng)銀行卡,也就是公鑰里的比特幣。另外,在比特幣世界中,每一個人都可以有茫茫多的銀行卡,每張銀行卡都不與任何身份信息綁定,這就是比特幣的匿名性。
下面這段話很重要,再把上一小節(jié)的橢圓曲線加密算法的特征重復(fù)一下:公鑰加密、私鑰解密;私鑰加密、公鑰解密;私鑰可以推出公鑰,但公鑰推不出私鑰。
回到Alice給Bob轉(zhuǎn)賬的例子中:Alice要向Bob轉(zhuǎn)賬5btc,Alice先使用Bob的公鑰(也就是Bob的收款地址,全網(wǎng)公開,但只有Bob自己用私鑰才能夠打開)加密一層信息,把這條加密后的信息再使用Alice自己的私鑰(注意不是推導(dǎo)或破解私鑰,只是用Alice的公鑰驗(yàn)證該私鑰的有效性,也就是用除Alice以外任何其他人的公鑰都無法驗(yàn)證匹配該私鑰)加密一層,這時(shí)信息已經(jīng)被加密了兩層,一層是Bob公鑰,一層是Alice私鑰。大家收到這條信息以后,會用Alice的公鑰來驗(yàn)證加密信息是不是Alice發(fā)送的,其實(shí)就是用公鑰解密了Alice這層信息(私鑰加密,公鑰解密),從而驗(yàn)證了這條信息確實(shí)來自于Alice,但是這條信息還使用了Bob的公鑰加密,Bob再用自己的私鑰對這條信息進(jìn)行解密(假設(shè)只有Bob知道私鑰),完成了比特幣的提取。
注:由于對Alice身份以及對她發(fā)送內(nèi)容的有效性驗(yàn)證非常重要,在本章的第4小節(jié)咱們專門再說一說有效性驗(yàn)證的問題,這里先按下不表。
理論上如果找到了一個私鑰,那么就可以操縱其余額,因?yàn)?strong>私鑰是可以推出對應(yīng)的公鑰。這個比現(xiàn)實(shí)世界神奇,也就是有了銀行卡密碼,還能夠推導(dǎo)出銀行卡卡號……然后再對這個地址的記錄進(jìn)行數(shù)字簽名,相當(dāng)于掌握了這個地址。反過來說,如果你的私鑰丟了,那這個地址上的整個錢也就消失了。整個比特幣世界是去中心化的,沒有中心機(jī)構(gòu)可以申訴。
所以,就好比現(xiàn)實(shí)生活中一定要把銀行卡(公鑰)和身份證(私鑰:雖然不是直接的密碼,但往往能夠通過身份證去重置銀行卡密碼,騙子都可以)分開存放,私鑰一定不要存放在電腦中,最可靠的是記在腦子里。好吧,這很反人類,但你可以通過別的物理方式,和私藏私房錢一樣,比如寫下來放在客廳花盆里,放在鞋墊底下,夾在某本書中……噓,不能再透露了。
以上概述了公鑰、私鑰、錢包和比特幣的關(guān)系。由于這個概念很重要,再啰嗦一遍:比特幣世界里的公鑰是地址,私鑰就是密碼;公鑰是銀行卡賬號,私鑰就是銀行卡密碼。所謂錢包就是一種電腦軟件,它可以幫你生成一系列配套的私鑰公鑰,你可以隨意選擇一個公鑰作為收款地址,并且使用配套的私鑰繼續(xù)使用它。比特幣只有交易記錄,所以你的每一個公鑰上所謂的余額就是賬本上顯示的誰向這個地址轉(zhuǎn)賬了,私鑰作為密碼的作用就是可以援引這個公鑰的交易記錄并對其簽名。比特幣的公鑰是公開的,任何人都可以查看關(guān)于這個公鑰的所有交易記錄,也就可以知道這個公鑰有多少“余額”,但沒有私鑰的人不能對該公鑰援引記錄簽名,也就不能進(jìn)行發(fā)送和交易。
另外一個重要的問題是如何驗(yàn)證廣播信息的真實(shí)性(注意不是廣播信息身份有效性,那是通過數(shù)字簽名解決的)。Alice廣播說她要給Bob轉(zhuǎn)5個幣,但有可能她在騙人,因?yàn)樗挥?個幣,怎么能給Bob轉(zhuǎn)5個?如果要是有中心機(jī)構(gòu)銀行,就只要統(tǒng)計(jì)Alice的余額就好了;而比特幣只儲存交易記錄,只驗(yàn)證這筆交易中涉及比特幣的來源與去向,并不會對余額進(jìn)行檢驗(yàn)。事實(shí)上,Alice傳達(dá)的信息中:我要給Bob轉(zhuǎn)賬5個btc,這5個btc都是有編號的,每個人都可以查詢這5個btc上一次是從哪里轉(zhuǎn)到Alice這里的,這5個幣有沒有從Alice這里轉(zhuǎn)走。如果都滿足,那就表明Alice可以轉(zhuǎn)走這5個幣。作為一種去中心化的賬本,比特幣世界算你的余額,是算從這個賬戶誕生開始每一筆收支,加減到現(xiàn)在的正值。由于每一筆交易都是全網(wǎng)驗(yàn)證過的,每一筆交易的比特幣都是有來龍去脈的,所以說這是安全和靠譜的。當(dāng)在電腦上下載比特幣客戶端的時(shí)候,系統(tǒng)會一次性的下載所有交易記錄,而且會驗(yàn)證一遍,一般需要一天一夜的時(shí)間。不過只要驗(yàn)證一次,后面的交易驗(yàn)證就是增量驗(yàn)證,就不再需要這么久的時(shí)間。
比特幣的公鑰是公開的,任何人都可以查看關(guān)于這個公鑰的所有交易記錄。也就可以知道這個公鑰有多少“余額”。每一枚比特幣原則上是可以跟隨其交易記錄一直向上追索的。不過這比較麻煩的,因?yàn)楸忍貛诺淖钚挝皇?0的-8次方,這個最小單位還有個名字 -- 聰,中本聰?shù)穆?,比特幣世界中,你富不富有,就看你有幾根“聰”。比特幣的單位如此小,一枚極為值錢的比特幣可能是很多更小數(shù)字組成的,比如是0.005 聰、0.78聰、0.215聰之和,所以其來源可能會非常細(xì)小。但所有交易記錄都擺在這里,誰想去追蹤這些所有的細(xì)分的來源都沒有問題。
3. 比特幣與挖礦
好了,從上面文字的描述中,咱們應(yīng)該對比特幣的性質(zhì),以及轉(zhuǎn)賬的大致流程有了一個概念上的了解。知道了在比特幣世界里是沒有實(shí)體存在,沒有類似于鈔票這種實(shí)體的存在。比特幣本質(zhì)上就是一個賬本,全網(wǎng)系統(tǒng)里每個節(jié)點(diǎn)都有的一個賬本。這個賬本僅僅記錄從創(chuàng)世到現(xiàn)在的轉(zhuǎn)賬記錄而已,所謂財(cái)富其實(shí)就是每個條目一條一條的累計(jì)。我不能偽造,我比特幣必須是別人寫記錄給我的。比特幣就是一個賬本系統(tǒng),公開透明的賬本系統(tǒng),可以被任何人隨時(shí)查看,但沒有任何實(shí)體的支撐。
大家自然會關(guān)心一個問題,那我怎樣才能擁有比特幣?貨幣是各國央行發(fā)行的,而比特幣是去中心化的,那誰來發(fā)行比特幣,比特幣是怎么創(chuàng)造出來的?
這就是這幾年一直很火的一個詞匯 -- “挖礦”。而要理解“挖礦”就必須要引入?yún)^(qū)塊鏈的概念了。
在比特幣的世界里,每時(shí)每刻都會發(fā)生很多筆類似Alice轉(zhuǎn)賬Bob的交易,把每十分鐘內(nèi)的交易記錄打包在一起,就叫區(qū)塊(Block)。把比特幣一誕生就開始的所有交易記錄都鏈接起來,也就是把這些區(qū)塊連接起來,就構(gòu)成了區(qū)塊鏈(Block Chain)。
每十分鐘的交易信息被打包成一個區(qū)塊,而整個網(wǎng)絡(luò)上的電腦都在搶奪這個區(qū)塊的記賬權(quán)利,誰搶到這個記賬的權(quán)利,誰就可以獲得這個區(qū)塊創(chuàng)造(獎勵)的比特幣。
這里有一個問題要解釋,比特幣網(wǎng)絡(luò)是分布式的,誰在負(fù)責(zé)交易記錄的打包呢?答案是每個節(jié)點(diǎn)都可以進(jìn)行打包,但能打包并不代表你有資格獲得比特幣獎勵。我們來看看這個過程:
- 當(dāng)Alice發(fā)起一筆比特幣轉(zhuǎn)賬后,她需要將交易廣播至全網(wǎng),網(wǎng)絡(luò)上的每個挖礦節(jié)點(diǎn)(也就是礦工)接到這筆交易后,會先將其放入本地內(nèi)存池進(jìn)行一些基本驗(yàn)證,比如該筆交易的比特幣是否是未被花費(fèi)的比特幣。如果驗(yàn)證成功,則將其放入“未確認(rèn)交易池”(Unconfirm Transaction),等待被打包;如果驗(yàn)證失敗,則該交易會被標(biāo)記為“無效交易”(Invalid Transaction),不會被打包。礦工需要及時(shí)驗(yàn)證每筆交易,更新自己的“未確認(rèn)交易池”。
- 每個挖礦節(jié)點(diǎn)都可以將若干個交易信息打包成區(qū)塊發(fā)送到網(wǎng)絡(luò)上,并建議其為鏈上的最新候選區(qū)塊。正因?yàn)槿魏瓮诘V節(jié)點(diǎn)都可以發(fā)送候選區(qū)塊,系統(tǒng)如何決定誰才是可以放在鏈上的最新區(qū)塊?區(qū)塊鏈系統(tǒng)使用加密哈希函數(shù)設(shè)計(jì)了一道復(fù)雜的數(shù)學(xué)題(后面會單獨(dú)說說這道逆天數(shù)學(xué)題),誰能最先解出答案,就代表誰搶到了記賬權(quán),然后其將從“未確認(rèn)交易池”中抽取約近千筆“未確認(rèn)交易”進(jìn)行打包,發(fā)布到網(wǎng)絡(luò)上。
- 這道數(shù)學(xué)題的答案是由挖礦節(jié)點(diǎn)計(jì)算后一起被打包進(jìn)區(qū)塊。答案是一個數(shù)字,得到答案的唯一方法就是暴力猜解,猜到對為止。一臺普通配置的電腦可能需要花一年的時(shí)間才能猜對答案,但區(qū)塊鏈網(wǎng)絡(luò)里有很多臺電腦一起猜,這樣只需要平均10分鐘就可找到答案。因此也呼應(yīng)了上面段落提到的,比特幣世界的新區(qū)塊大概10分鐘生成一個
也就是說,礦工們既要一邊瘋狂計(jì)算,還要一邊及時(shí)校驗(yàn)新的交易記錄,兩手都要抓,兩手都要硬,想想都TM糟心。
既然交易在不停的發(fā)生,礦也就可以不停的挖,那比特幣就是“取之不盡用之不竭”了?No,No,No,比特幣的數(shù)量是有最高限額的——2100萬枚比特幣,越挖越少。中本聰設(shè)計(jì)的特別妙,就是每個區(qū)塊的獎勵每四年減半。我們剛說了,中本聰造出第一個區(qū)塊的時(shí)候、獲得50枚的獎勵,到了2013年獎勵就減半了,2017年再次減半。所以當(dāng)下每個區(qū)塊的獎勵是12.5枚比特幣,等到了2140年比特幣產(chǎn)量就將趨于0,從而將比特幣的總量恒定在2100萬枚。
好了,先做一個簡短的總結(jié):
1. 比特幣交易記錄向全網(wǎng)發(fā)布
2. 礦工嚴(yán)陣以待,收到交易信息并驗(yàn)證有效后,就放入“未確認(rèn)交易池”
3. 礦工同時(shí)解數(shù)學(xué)題,解題不分貴賤,一律靠猜,很黃很暴力
4. 最先解出答案的礦工,從“未確認(rèn)交易池”中取出一部分進(jìn)行打包,并發(fā)布到網(wǎng)絡(luò)中,并獲得相應(yīng)獎勵
下面咱們該說說這道逆天的數(shù)學(xué)題了,其實(shí)真的挺逆天,下面僅僅寫一下最基礎(chǔ)的原理,等我自己更深入的學(xué)習(xí)后,再專門寫一篇學(xué)習(xí)筆記來談?wù)剶?shù)學(xué)題的問題
每個區(qū)塊都有自己的區(qū)塊頭,區(qū)塊頭通常包含前一個區(qū)塊的哈希散列值、Merkle根、時(shí)間戳、難度目標(biāo)、以及一個填充的隨機(jī)值。試圖爭奪記賬權(quán)的節(jié)點(diǎn)稱為挖礦節(jié)點(diǎn),挖礦過程就是求出一個能夠填充本區(qū)塊頭的隨機(jī)值,讓區(qū)塊頭的哈希散列值符合某一個標(biāo)準(zhǔn)。
在比特幣世界里,有一個新的概念叫做共識機(jī)制。比特幣是通過工作量證明的共識機(jī)制來決定記賬權(quán)的,通俗來講,誰證明了自己的工作量最大,誰就負(fù)責(zé)記賬。而這個工作量大小就是通過計(jì)算上述哈希散列值來體現(xiàn)的。
網(wǎng)絡(luò)上的每一個礦機(jī)接收并驗(yàn)證了一批交易,然后就開始進(jìn)行挖礦。礦機(jī)需要反復(fù)的試驗(yàn)隨機(jī)填充值來進(jìn)行求解。一般采用產(chǎn)生隨機(jī)數(shù),嘗試把產(chǎn)生的隨機(jī)數(shù)填充到區(qū)塊頭,然后計(jì)算哈希。如果哈希值符合難度規(guī)則,則計(jì)算成功,挖礦成功,向全網(wǎng)廣播挖礦所得。全網(wǎng)節(jié)點(diǎn)驗(yàn)證后,把這個區(qū)塊連接到區(qū)塊的最上端,并且在全網(wǎng)達(dá)成一致。其他礦工也只能心中默念無數(shù)個“草泥馬”,然后趕緊基于這個最新的區(qū)塊繼續(xù)永無止境的挖礦人生……
從這個過程我們能夠看出這個隨機(jī)數(shù)的作用,除了讓人崩潰的一遍遍計(jì)算,還有一個作用就是平衡算力,以保證全網(wǎng)平均每10分鐘左右產(chǎn)生一個區(qū)塊。如果礦工們設(shè)備變得先進(jìn)了,比如NVidia老黃推出了更牛逼更便宜的GPU(老黃當(dāng)然不是這樣的人),分分鐘就算出來,那該怎么辦?很簡單,就增加難度規(guī)則,增加猜測隨機(jī)數(shù)的難度唄,比如原來要求計(jì)算的哈希值前面有15個0,現(xiàn)在要求前面有20個0……總之就是不讓你造次,好好按規(guī)矩挖礦。
上面就這道數(shù)學(xué)題最簡單的描述。
而回顧挖礦歷史,挖礦總共經(jīng)歷了以下五個時(shí)代:CPU挖礦→GPU挖礦→FPGA挖礦→ASIC挖礦→大規(guī)模集群挖礦。
為了錢,真是絞盡了腦汁。
三、比特幣的難題
1. 雙花問題(Double Spending)
比特幣系統(tǒng)似乎有著完美的交易方案,既有人在搶著記賬,記好的賬本又不能篡改,全網(wǎng)還可以驗(yàn)證每條消息的真?zhèn)?,難道這還不是完美嗎?咱們舉個例子。
比如我有5個btc,我向星巴克轉(zhuǎn)賬了5個btc買了一杯咖啡,同時(shí)又向自己另一個賬戶轉(zhuǎn)賬了5個btc,這是兩筆獨(dú)立的交易,如果都在全網(wǎng)得到了驗(yàn)證,我豈不是白白喝了一杯咖啡?這就是雙花問題,比特幣網(wǎng)絡(luò)如何解決?
正常情況下,我先轉(zhuǎn)給星巴克的5個btc,全網(wǎng)打包并驗(yàn)證了此消息,然后我向自己轉(zhuǎn)賬的那筆交易由于和上條交易沖突而驗(yàn)證失敗,但,如果我是同時(shí)向全網(wǎng)廣播這兩條消息呢?這樣,就會有兩個礦工分別打包了這兩筆記錄,這就叫做分叉,即同時(shí)有兩個區(qū)塊生成了,比特幣網(wǎng)絡(luò)如何識別哪個區(qū)塊是有效的呢?
先簡單說明下比特幣的規(guī)則:規(guī)則是只有最長的區(qū)塊鏈得到確認(rèn),最長的區(qū)塊鏈才會有挖礦獎勵。所以正常大家都會切換到長鏈上挖礦而將短鏈廢棄掉,這樣就會有一筆交易作廢了。在同一條鏈上,是不會出現(xiàn)沖突的問題的。
知道了這個原理,我們來看看怎樣才能做到雙花,其要付出什么代價(jià),這樣再來衡量比特幣網(wǎng)絡(luò)的這個規(guī)則是不是能有效的解決雙花問題。
還是上面的例子,我要是想白喝這杯咖啡,就必須先給星巴克轉(zhuǎn)賬5個btc,這筆交易打包在一個區(qū)塊中;然后我給自己賬戶再轉(zhuǎn)賬5個btc,打包在另一個區(qū)塊中。當(dāng)然,做到這一點(diǎn)已經(jīng)很不容易,我得能很好的掌控交易時(shí)機(jī)。星巴克看到第一個區(qū)塊得到了全網(wǎng)確認(rèn),會向我發(fā)送咖啡;這時(shí),我為了讓這筆轉(zhuǎn)賬失效,必須讓包含我給自己轉(zhuǎn)賬的那條鏈成為全網(wǎng)主鏈,也就是說,在我希望的這個區(qū)塊后面不斷的生成新區(qū)塊使這條鏈越來越長。再重復(fù)一遍,我想要實(shí)現(xiàn)雙花,其實(shí)很不容易,我必須要在我拿到這杯咖啡之前,讓著兩條鏈都不被廢棄掉,在此之前,任何一條鏈廢掉,雙花都不再成立。如果我給自己轉(zhuǎn)賬的那條鏈廢掉,意味著我真的給星巴克轉(zhuǎn)賬了;而如果我給星巴克轉(zhuǎn)賬的那條鏈廢掉,意味著星巴克不會給我提供咖啡服務(wù)。所以,我的策略必須是,先讓星巴克那條鏈成為主鏈,這樣星巴克就發(fā)貨了;我一看到星巴克發(fā)貨,于是開始努力加長給自己轉(zhuǎn)賬的那條鏈,一旦鏈條長度超過了星巴克那條鏈,給自己轉(zhuǎn)賬的就成了主鏈,從而廢掉星巴克那條鏈,這意味著星巴克的交易記錄作廢,也就是星巴克最終沒有拿到比特幣……
細(xì)思極恐,細(xì)思極恐。
星巴克也不是吃素的,不會傻到一看到區(qū)塊形成就發(fā)貨,而是會等到自己這條鏈足夠長,一般來說,再等上6個區(qū)塊形成就很保險(xiǎn)了,為什么呢?
因?yàn)榈V工都會在長鏈上挖礦,只有最長的區(qū)塊鏈才能得到確認(rèn),才會有挖礦獎勵。我要想讓給自己轉(zhuǎn)賬的這條鏈成為主鏈,就要在轉(zhuǎn)賬給自己的這個區(qū)塊之后不斷形成新區(qū)塊,超過轉(zhuǎn)賬給星巴克那條鏈。不是不可能,用我中學(xué)一直牢記在心的英文語句:Nothing is difficult but put all your heart into it,有志者事竟成,有算力者贏天下。區(qū)塊由誰生成,取決于誰先計(jì)算出那道逆天的數(shù)學(xué)題,而且要連續(xù)跑贏其他礦工。
比如我擁有全網(wǎng)51%的算力,我就有51%的概率搶到記賬權(quán),這就是“51%攻擊”。星巴克等到了6個區(qū)塊都形成后,相信這條鏈就是全網(wǎng)主鏈,全網(wǎng)的其他礦工也相信這條連就是全網(wǎng)主鏈,于是大家都基于這條主鏈進(jìn)行計(jì)算。而我為了讓有利于自己的那條鏈成為主鏈,就必須要連續(xù)與全網(wǎng)爭奪記賬權(quán)6次,我擁有51%以上的算力,確實(shí)能夠?qū)崿F(xiàn),只不過連續(xù)6次都成功的概率是0.51^6=0.017596。我必須考慮一個問題,我這么做值得嗎?我到底要為了多大額度的轉(zhuǎn)賬雙花而進(jìn)行51%攻擊?因?yàn)槲覀兌级?,區(qū)塊鏈越靠后,安全性越高。全網(wǎng)都知道我牛逼,大家形成了共識,6次改成了10次,我就要為此付出更高的代價(jià)了,這難度可是幾何級的增長。因此,目前比特幣網(wǎng)絡(luò)一般認(rèn)為,6次已經(jīng)很安全,也就是轉(zhuǎn)賬后,等1個小時(shí)再進(jìn)行交易。
由此我們看出,比特幣網(wǎng)絡(luò)約定俗稱的規(guī)則,即保持在最長鏈上挖礦,結(jié)合等待6次記賬后再交易的規(guī)則,可以認(rèn)為是非常安全的。
2. 礦藏枯竭
雙花這個漏洞可以通過交易的等待來阻止。但比特幣系統(tǒng)似乎還有一個漏洞,就是到了2140年,比特幣的總量已經(jīng)到達(dá)了事先規(guī)定的上線——2100萬枚,那么搶奪到記賬權(quán)也沒有比特幣可以獎勵了,那誰還會去記賬呢?聰明的中本聰想到了。到那時(shí),比特幣世界的每一筆交易就需要交一定的手續(xù)費(fèi),交給誰呢?交給了搶奪區(qū)塊記賬權(quán)的人。也就是說,挖礦從過去的獲得比特幣的獎勵,變成了獲取交易的手續(xù)費(fèi),所以照樣有礦工去挖礦。而之前的比特幣,很可能成為像房子一樣的固定資產(chǎn),是可以用來炒的,因?yàn)檫@就是經(jīng)濟(jì)學(xué)上的“稀缺性”原理啊。
所謂比特幣挖礦,實(shí)質(zhì)就是中本聰巧妙地設(shè)計(jì)了一個激勵機(jī)制,給維護(hù)這個去中心網(wǎng)絡(luò)的人的獎勵,同時(shí)也解決了貨幣如何分配的問題,因?yàn)槊總€人都有挖礦的權(quán)力,至少從理論上這是相對平等的說法,人人都有機(jī)會去挖礦,去獲得比特幣。
好了,第一篇介紹比特幣和區(qū)塊鏈基礎(chǔ)的“大作”完成了,耗費(fèi)我很多的腦細(xì)胞和精力。比特幣和區(qū)塊鏈在未來究竟能夠帶來怎樣的革新,還要拭目以待。就在總結(jié)這篇文章的過程中,我又讀到了一篇認(rèn)為比特幣根本解決不了實(shí)際問題的文章,讀起來也很過癮?;仡^也會再做一篇反方的筆記來說明這事。
再次感謝網(wǎng)絡(luò)中的那些原創(chuàng)作者,也再次抱歉不能列舉全原創(chuàng)作者和原文鏈接。
筆記參考:
- 《區(qū)塊鏈?zhǔn)莍什么,如何簡單易懂的介紹區(qū)塊鏈》(可以在今日頭條上搜索,我覺得非常好的一篇文章,也是我寫這篇筆記的基礎(chǔ))
- 《挖礦是如何產(chǎn)生比特幣的》 -- Leaf的答復(fù)
- 《比特幣:如何實(shí)現(xiàn)“交易”和“記錄”》
- 《從發(fā)出交易到礦工打包需要幾步?》
學(xué)無止境,我是80后IT老飛俠
2018年3月30日 深圳天安云谷