? ? ? ? ? ? ? ? ? ? ? ? ? ? ——雪落牧羊人
一、共識
自從幾萬年前,在進(jìn)化過程中人類祖先打敗了比他們更加高大威猛、耐寒、耐旱、耐饑餓的尼安德特人開始,故事在整個人類社會發(fā)展過中起的巨大作用就從來沒有停止過,所以讓我們從一個故事,一個現(xiàn)代社會依然存在的現(xiàn)象開始。
在太平洋的中間有一個加羅林群島,島上居民鮮與外人接觸,閑來無事的經(jīng)濟學(xué)家在島上發(fā)現(xiàn)了一種現(xiàn)象,一種貨幣的使用現(xiàn)象。
島上的貨幣是一種石頭,但這種石頭來源于外面的島嶼,獲得起來很有難度(保證了稀缺性),石頭很大,就放在那個島上,也不做移動和攜帶,島上的居民(在某種條件下)指著石頭共同認(rèn)定其中5%是A的,12%是B的等等以此類推,擁有的人不必將石頭分開,也不必帶走,只要大家共同認(rèn)定就可以。
假如有一個人,家里非常富有,最后擁有了整塊石頭,而他家卻在島上的另一端,他想將整塊石頭從海上(海路運輸成本低)運回自己的家,但不幸的是,船出了問題,石頭沉沒在海底,無法打撈,但是沒有關(guān)系,全島的貨幣沒有因此減少,島上的居民依然認(rèn)定他擁有這塊石頭,并且可以用海里的石頭進(jìn)行交易(比如指著海里的石頭,以其13%換一頭牛)。所以貨幣的一個最基本的屬性是大家都認(rèn)同他的價值——共識。
因此可以這么說,從最開始,貨幣基本上就是虛擬的,貝殼、絲綢、重金屬、現(xiàn)在的紙幣,都是人們共識的結(jié)果,為了讓這個共識達(dá)成,人們以一定的手段(立法,管理等)賦予了它“信用”“流通”“稀缺”等等屬性(這些基本上都是經(jīng)濟學(xué)分析出來的,我一直不怎么相信經(jīng)濟學(xué),結(jié)果上的原因是他們到現(xiàn)在都沒有摘取自己皇冠上的明珠——大蕭條的原因,過程中的原因是他們總能把一個問題解釋成很多種不同的原因,這種情況下大概率這些解釋都是錯的,因為沒有找到底層原因)。
如果我們把一個國家縮小一下,那它實際上就相當(dāng)于一個小島,人們認(rèn)同哪種東西成為貨幣,他就成為了貨幣。這個世界上有國家這種大群體,也有一些小群體。
下面這個故事講的是一個小群體——比特幣群體。
劉慈欣在【三體】里面說過,”如果需要,人類集權(quán)只需要5秒”。另外一個人是誰我已經(jīng)忘了(或許是我自己)也說過“身處概率之中還能對抗概率——這大概是人類最偉大的成就之一”。
自然界的底層規(guī)律之一就是多樣性,既然有人渴望集權(quán),就有人希望分權(quán)。
分權(quán)這種念頭從古希臘就有,在古希臘人眼中,集權(quán)是野蠻的標(biāo)志(說來諷刺,古希臘是個航海國家,而航海時最需要的就是集權(quán);而贊成民主的人不允許不民主,并因此毒死了其中的代表蘇格拉底)。這是西方文化的基石,分權(quán)的思想扎根于每個人腦中(一個一神教土地,天天想著分權(quán),唉,玩的真是6)。
比特幣群體更是把這種觀念發(fā)揮到極致,他們甚至是無政府主義的支持者。所以即便他們明知美聯(lián)儲和各國央行起到的作用是積極的,但他們還是拒絕把發(fā)行貨幣的權(quán)力歸于一個部門。因為理論上,任何國家都可能淪落到阿根廷和津巴布韋的局面,央行持續(xù)印鈔,洗劫人民,經(jīng)濟膨脹,整個國家的經(jīng)濟崩潰。
所以這么一個群體,他們白天或許就是普普通通的上班族,網(wǎng)絡(luò)安全專家等,但是晚上下班以后他們就化身成為網(wǎng)絡(luò)幽靈一般的黑客。他們憑借縝密的思維構(gòu)建了開放的互聯(lián)網(wǎng)世界,于是就不希望這個世界里有監(jiān)控,有審查,有墻?;ヂ?lián)網(wǎng)在他們腦中,應(yīng)該和他們的思想一樣,是自由開放的。
由這套理想主義價值觀創(chuàng)造的社區(qū),就是開源社區(qū)——GitHup(不久前被微軟買了);由這套價值觀設(shè)計的貨幣,就是比特幣,在2008年底,被一個化名中本聰?shù)娜嗽O(shè)計提出。
它的設(shè)計初衷是希望在點對點的電子現(xiàn)金支付中,擺脫中央銀行的管制(我們現(xiàn)在的支付都是通過中央方確認(rèn),如支付寶,微信,各家銀行)比如說收款和支付都是匿名,交易不能更改、不能偽造,幣的數(shù)量有限,不能出現(xiàn)通貨膨脹等,所有這些功能都由程序自動保障。
既然沒有某個機構(gòu)維護(hù),并且不能像加羅林群島里的居民那樣通過熟人的眼光來監(jiān)督,幣又不能偽造,那么此時就要感謝偉大的數(shù)學(xué)發(fā)展,它所帶來的密碼學(xué)技術(shù),解決了這一需求。
二、技術(shù)
比特幣中的密碼學(xué)并不復(fù)雜,只有2種:一個是SHA256加密法,另一個是非對稱鑰匙(鑰匙是現(xiàn)代密碼學(xué)的基礎(chǔ),如果你感興趣,我可以另寫一篇專門講述,不感興趣可以略過,可以理解為它是一種確認(rèn)唯一性的識別技術(shù)就可以了)系統(tǒng)。
先說SHA256,它的全稱是“安全哈希算法”,Hash就是進(jìn)行Hash函數(shù)運算的意思。Hash函數(shù)是這樣,不論原始數(shù)據(jù)有多長、有多少位,經(jīng)過Hash運算后,輸出的值的長度都是固定的。
這有點像圖書館里給圖書編號,不論什么樣的書,它們的圖書編號都是一個幾厘米長的條形碼。
但這個條形碼要派上用場,需要幾個先決條件:
1. 任何書不論篇幅長短,都能通過Hash函數(shù)計算出唯一一個條形碼;
2. 條形碼的長度是固定的;
3. 不可能通過條形碼,反推出原書的內(nèi)容。
Hash函數(shù)類型很多,比特幣中用到的是SHA256,256就代表經(jīng)過函數(shù)運算后的結(jié)果,是一個256位的2進(jìn)制數(shù)字。你可以把它理解為條形碼的長度。
怎么可能任何一個數(shù)都能寫成一個固定長度的數(shù)呢?以十進(jìn)制來說,假如固定長度是2的話,最多能表示0-99這100個數(shù),遇到103不就沒法表示了嗎?
沒關(guān)系。生活中就有這樣的例子——模運算。
比如我們的手表,他的模是12,在模是12的運算中,沒有13這個數(shù)字,但是13等于9+4,所以輸出結(jié)果的長度如果固定是2位的時候,13就可以寫成04(這個很厲害,不可逆運算存與否雖然仍有爭議,但在當(dāng)前計算能力下,仍可以大范圍使用)。
而SHA256函數(shù)的運算結(jié)果,是一個模為2的256次方的值,所以這個值一定是可以寫成256位的。
至于到底Hash運算是怎么算的,其實這不重要,你就把它理解成是按一些規(guī)則運算了一番就行了。只要記住,運算的結(jié)果是一個256位的2進(jìn)制數(shù)就足夠了。
之所以要把一個東西轉(zhuǎn)換為一個256位的數(shù)字,其實最早是為了驗證兩個文件是否相等而想出的辦法。
舉個栗子:
張無忌想把《九陽神功》寫成一個程序放在網(wǎng)上,供愛好者下載修煉。但擔(dān)心有些心術(shù)不正的人,把這份文件的內(nèi)容偷偷改幾個字,故意讓練功的人走火入魔。為了防范這個,他可以怎么做呢?他可以把原版《九陽神功》通過SHA256運算一下,生成一個值,我們稱之為S1。
張無忌上傳這份文檔后,也把S1等于多少寫上,并且注明“可能有壞人偷偷更改了秘籍,為了你們不走火入魔,你們下載后先做一次SHA256運算,看看運算結(jié)果和我給的S1是不是一樣,如果完全一致,你們下載的《九陽神功》就是正版,就可以練了”。
SHA256在驗證改動與否這方面,非常強大。文字只是標(biāo)點上有些微小變化,內(nèi)容是不變的,但它們對應(yīng)的SH256值卻差異非常大,一望便知,而且這種差異是毫無規(guī)律可循的。
這種函數(shù)用在比特幣的好幾處功能上都用到了。
第一處就是支付信息的部分。
比如張無忌把屠龍寶刀賣給了朱元璋,朱元璋得到后需要付錢,朱元璋就寫了一張付款的紙條,上面寫“朱元璋支付1000元給張無忌”,這就是支付信息。
但這條信息是有風(fēng)險的,萬一有人篡改了內(nèi)容,在1000元后面加一個“萬”字,那朱元璋就虧死了;或者把張無忌改成,那張無忌就哭了。
而剛剛的SHA256算法,就避免了信息被篡改的問題?!爸煸爸Ц?000元給張無忌”這條信息的SHA256值是確定的,在發(fā)出這條信息的同時給出SHA256值,之后任何的改動都會被發(fā)現(xiàn)。
但只保證了支付信息沒有被改動過,還是不夠的。因為如果有心懷不軌的壞人,寫出很多條“朱元璋支付1億元給張無忌”,然后錄入支付系統(tǒng),那朱元璋可就要哭死了。
所以,還需要加上數(shù)字簽名。數(shù)字簽名(非對稱加密,和前面說的鑰匙相關(guān))
它們共同保證了支付信息的內(nèi)容,不但沒被篡改過,而且還是發(fā)信人認(rèn)可的。
如果每個付錢的人和收款的人都用這種方式記賬,把信息都記錄在同一個賬本上,而且這個賬本還是可靠的話,欠債還錢的事兒就都說得清了,江湖恩怨也自然少了很多。
2009年,中本聰就以這個念頭為基礎(chǔ),開發(fā)了比特幣。
不過要形成一個可靠的賬本,剛剛的過程還是太簡單,還需要增加N種規(guī)則,才能讓賬本系統(tǒng)運作起來。
其中最重要的一條就是:朱元璋支付張無忌1000元錢,可是朱元璋包里真的還有這么多錢嗎?
這個疑問在傳統(tǒng)銀行系統(tǒng)里不是問題,因為央行可以查看任何人的賬戶余額。但中本聰?shù)哪康氖窃O(shè)計一個沒有中央集權(quán)的交易系統(tǒng),也就是大家聊起比特幣最常說的“去中心化”的交易系統(tǒng)。
在比特幣系統(tǒng)中,任何一個參與者和其他參與者有同樣高的權(quán)限,不存在誰管理誰,誰限制誰。所以余額夠不夠這一步,只能通過單獨的設(shè)計。
余額有多少,不能自己說了算,自己說自己還剩多少錢沒人信。這一步的解決方法是——每筆交易都必須把以前的交易作為基礎(chǔ)(所以叫鏈,一條串聯(lián)的鏈)。
比如“朱元璋支付1000元給張無忌”,這筆交易可以進(jìn)行的前提是,之前有人付給朱元璋過錢,而且那筆錢不但超過1000塊,還沒使用過。這樣朱元璋支付1000塊給張無忌,這筆交易才能達(dá)成。
假如之前徐達(dá),已經(jīng)給過朱元璋1000塊錢了。那么朱元璋給張無忌付錢時,就會發(fā)送標(biāo)準(zhǔn)信息:
徐達(dá)支付1000元給朱元璋,朱元璋支付1000元給張無忌。
然后,外加朱元璋的數(shù)字簽名和朱元璋的公鑰(鑰匙)。
張無忌醫(yī)收到標(biāo)準(zhǔn)信息后,該用SHA256確認(rèn)的確認(rèn),該用私鑰解鎖的解鎖,通過一番運算,就可以確認(rèn)這筆交易。
但實際情況不會這么巧,假如徐達(dá)給了朱元璋1003塊。
在比特幣網(wǎng)絡(luò)中的支付,其實是朱元璋一次支付給張無忌1003塊,之后張無忌再自動給朱元璋支付3塊。
因為在比特幣系統(tǒng)中,朱元璋沒法把之前1003塊錢那條信息拆成一個1000塊、一個3塊的。因為這個網(wǎng)絡(luò)中每個支付信息都由SHA256的簽名標(biāo)記過的,不能再拆分了。
在比特幣中,所有的轉(zhuǎn)賬記錄每個電腦都有一份。但要做到這一點可不容易,要解決3個問題:
第一,所有電腦里的賬本怎么同步?
因為有些電腦上可能保存的是最新版的賬本,可是有的電腦根本就沒有打開客戶端軟件,還有的電腦干脆就是關(guān)機的。所以不同電腦上的賬本是不一樣的,怎么讓它們同步就是第一個問題。
第二,怎么防止交易記錄被篡改?
第三,怎么防止一筆收入被重復(fù)使用?
比如說,朱元璋收到了徐達(dá)的1000塊錢后,第一秒付給了張無忌買屠龍刀,第二秒馬上又付給了陳友諒贖人質(zhì)。網(wǎng)絡(luò)中因為物理線路上的差異,有些電腦會先收到第一筆支付信息,有的電腦會先收到第二筆支付信息。所以有可能一部分認(rèn)為第一筆支付是有效的,另一部分認(rèn)為第二筆支付是有效的,這不就亂了嗎?怎么解決它,就是第三個問題
。
解決這三個問題的方法就是一個——區(qū)塊鏈(個人覺得這個可能比比特幣還要重要)。
區(qū)塊鏈之所以叫“鏈”,體現(xiàn)的就是區(qū)塊與區(qū)塊間串聯(lián)的結(jié)構(gòu)。注意是串聯(lián),它不是星型連接、環(huán)型連接,也不是并連,而是首尾銜接的串聯(lián),如同時間線一樣的串聯(lián)。
在區(qū)塊鏈中,每一個區(qū)塊里都包含著成百上千條交易記錄。只要經(jīng)過檢查合格了,就寫在之前最后一個區(qū)塊的后面。
比如檢查交易記錄的簽名對不對,比特幣是不是重復(fù)使用了等。
這些檢查工作由比特幣礦工做。礦工檢查合格后,就發(fā)送給其他礦工,其他礦工接到新區(qū)塊也會先檢查。如果檢查合格,就把這個新區(qū)塊添加在自己電腦里存儲的那條鏈的最末尾。
不過同一時間有N多礦工都在做這件事,它們檢查的那個新區(qū)塊里的內(nèi)容都是最近剛發(fā)生的交易。大概率說,一個新區(qū)塊里的交易記錄大多數(shù)是同時到的,但肯定還會略有區(qū)別,所以就會面臨一個問題——它們會同時向網(wǎng)絡(luò)提交N個不同版本的新區(qū)塊。
比如說同一時間有100個不同版本的新區(qū)塊出現(xiàn),那選哪個為大家的標(biāo)準(zhǔn)呢?
比特幣網(wǎng)絡(luò)的解決辦法是,限制單位時間里產(chǎn)生新區(qū)塊的數(shù)量。
比如說,限制5分鐘內(nèi)只允許產(chǎn)生一個新區(qū)塊,于是誰先檢查完并上傳了這個新區(qū)塊,就以誰的為準(zhǔn)。
當(dāng)然,5分鐘只是舉例。實際中,這個硬性的時間間隔,是通過讓礦工完成兩道數(shù)學(xué)題來保證的(數(shù)學(xué)真的很重要)。
這兩道數(shù)學(xué)題,一個簡單,一個復(fù)雜。而這里還是包含著密碼學(xué)的知識,而且第一道簡單題是區(qū)塊鏈之所以能稱為“鏈”的關(guān)鍵。
第一道題目是這樣計算的:
計算出一個字符串,這串字符由3部分組成。第一部分是這個新區(qū)塊內(nèi)包含的成百上千的交易記錄,第二部分是這個新區(qū)塊的基本信息,最后一個部分是前一個區(qū)塊的SHA256函數(shù)值。
三部分綜合在一起,就是第一道題的結(jié)果,它是一串字符。
這是區(qū)塊鏈之所以稱為鏈的重要步驟。
因為當(dāng)前區(qū)塊要求包含上一個區(qū)塊的SHA256函數(shù)值,于是區(qū)塊與區(qū)塊間就串連了起了。任何一個區(qū)塊都包含了它之前所有的歷史,所以把它稱為“鏈”。這種簡單計算,對于當(dāng)今任何計算機來說,瞬間就可以完成。
而第二道難題就非常難了,一般需要整個比特幣網(wǎng)絡(luò)全部計算機加起來,運算大約十幾分鐘才能算完。
這道題之所以這樣難,主要作用就是讓提交新區(qū)塊的人在時間間隔上可以拉開足夠長的時間。以免發(fā)生前面說的新區(qū)塊同時出現(xiàn)的問題,引起麻煩。
第二道題的題目是第一題的結(jié)果加一個隨機數(shù),組成一個新的字符串。這個新字符串用SHA256運算一下,會得到另一個256位的二進(jìn)制數(shù)。
而且要求這個256位的數(shù)字,前72位全部都是0,才算答案正確。
給你的是個隨機數(shù),算完后前72位都是0,那就得看你的運氣了。
具體需要有多好的運氣,我們可以算一下:
第一位是0的概率是1/2,第二位還是0的概率是1/4,這樣延續(xù)下去,到了第72位仍然還是0的概率是1/2^72(基本上是0),也就是說要進(jìn)行2^72次SHA256運算,整個比特幣網(wǎng)絡(luò)里,才有一次做對題目的機會。具體是誰做對的,說不好。誰的算力越強,誰的運氣就會越好。
一旦有人做對了,就會全網(wǎng)廣播,其他曠工收到這條信息后就會驗證(驗證所用時間比較短)再經(jīng)過軟件檢查,新區(qū)塊就會被放在當(dāng)前區(qū)塊鏈的末尾。整個比特幣網(wǎng)絡(luò)承認(rèn)了這個新區(qū)塊(當(dāng)然這個過程消耗大量的人力和物力,所以肯定有獎勵,獎勵就是一定數(shù)量的比特幣,這就是所謂的——挖礦)。
比特幣因為精心的設(shè)置,整條鏈一直運行了十幾年。
舉個:
如果計算機性能提升很多,沒人用CPU計算難題2了,而用速度是CPU幾千萬倍的專用集成電路做運算,幾毫秒就能算出來了,怎么辦。
沒關(guān)系。中本聰規(guī)定了,從某某序號的區(qū)塊后,那個幸運的隨機數(shù)的要求就變高了,不是前72位是零了,而要求前73位或者前74位是零,難度是從前2倍或者4倍了。而且這個難度是隨著算力增加而增加的,這就保證新區(qū)塊的生成時間總會有合理的間隔。
除此之外,就算網(wǎng)絡(luò)里非常不幸,出現(xiàn)了短短幾秒鐘誕生2個新區(qū)塊A和B的情況,還可以通過下個新區(qū)塊是從A先長出來還是B先長出來來解決。
因為比特幣網(wǎng)絡(luò)還有個規(guī)則——整個比特幣網(wǎng)絡(luò),只認(rèn)可長度最長的那條鏈。
這個規(guī)則可以防止有人偽造比特幣。比如當(dāng)前進(jìn)行到B800這個區(qū)塊了,下一個應(yīng)該是B801,但有人手工制作出來了另一個區(qū)塊,跟B801不一樣,咱們把它叫作F801。
這里的交易內(nèi)容都是給他自己付錢,讓他自己成為富翁的,所以這是偽造的。但是,這樣的偽造極難得逞。
因為F801后面的以F開頭的側(cè)鏈F802區(qū)塊還是得他一個人做,F(xiàn)103也是??闪硪粭l以B開頭的主鏈上B801、B802、B803是全網(wǎng)所有人在做。全網(wǎng)速度遠(yuǎn)遠(yuǎn)快于一個人的算力,所以這個人做出的區(qū)塊鏈,長度總會比全網(wǎng)主鏈要短。
而剛剛那條規(guī)則是,大家只認(rèn)可最長的那條鏈,所以這個人即便偽造了交易記錄,做出的那條側(cè)鏈?zhǔn)冀K得不到認(rèn)可,所以他沒法偽造比特幣。
只有一種情況下他會得逞,就是他一個人的算力超過所有其他人的總和(一個人的算力其實也在屬于全網(wǎng)絡(luò)的算力,這就是比特幣中說的51%算力攻擊),那時他制作新區(qū)塊的速度就快過所有人,他做的這條鏈就會更長,全網(wǎng)就認(rèn)可他這條鏈了。但這么做太貴了,可能要幾十上百億美元,所以可能性極低。也因此,區(qū)塊鏈極難偽造。
三、其他
稀缺性:比特幣規(guī)定只有2100萬枚,挖完后永不增發(fā)。
流通性:比特幣可以在任意一臺接入互聯(lián)網(wǎng)的電腦上管理。不管身處何方,任何人都可以挖掘、購買、出售或收取比特幣。
專屬所有權(quán):操控比特幣需要私鑰,它可以被隔離保存在任何存儲介質(zhì)。除了用戶自己之外無人可以獲取。
低交易費用:可以免費匯出比特幣,但最終對每筆交易將收取一定的交易費以確保交易更快執(zhí)行(否則礦工吃啥)。
無隱藏成本:作為由A到B的支付手段,比特幣沒有繁瑣的額度與手續(xù)限制。知道對方比特幣地址就可以進(jìn)行支付。
其實,比特幣能不能取代取代央行,并不知道,但肯定很難,因為央行的存在早就是所有人的共識,而改變?nèi)巳旱墓沧R是最難的。
但區(qū)塊鏈,還可以改變其他一些東西的(不一一敘述了)。
至于比特幣到底有沒有價值和應(yīng)用場景,那就不是一個容易回答的問題了,因為初期的使用大多在非法領(lǐng)域(洗錢,資金轉(zhuǎn)移,黃賭毒等)所以各國對其政策不一,日本對其最為擁抱,但如今這個群體似乎是在擴大,加上它自己的屬性——所以還是留給喜歡的人判斷吧。