四、區塊鏈
前麵說過,區塊鏈是用來記錄比特幣的交易的,而且,它的記賬是由網上的普通路人來實現的,因而甩掉了諸如政府或銀行這些限製人們自由並從中獲得暴利的中間機構。
區塊鏈不是別的,就是一筆筆的交易記錄。自比特幣誕生之日起,所有的交易都必須記錄在區塊鏈上,一筆也不能多,一筆也不能少。不僅如此,所有記錄還必須嚴格地按照交易的先後順序來存檔,先交易的記錄在前麵,後交易的記錄在後麵。這些記錄存在哪裏呢?對,就存在互聯網上,任何一個普通人都可以查閱。
誰來買設備存放這些記錄呢?沒有人,區塊鏈的實現完全依賴於互聯網上的草民以及他們手中那些也許是半新不舊,也許是老得掉牙的個人電腦。
這麽土嗎?是的,這是沒有辦法的辦法,既然你不想受政府和大金融機構的限製,那麽期望他們為你興建大型數據中心或投資嶄新的高端服務器簡直就是白日做夢。所以,能依靠的就隻有千萬網民手中的普通電腦。這些電腦也許會很新,但也許會太顯過時,沒準兒連鍵盤上的鍵都要即將脫落了呢。
不過沒關係,你也許沒有意識到,你正在使用的這台破舊機器,單獨拿出來可能一點兒也不起眼:沒有多核CPU,內存不夠用,硬盤已趨飽和,程序跑在上麵如同夕陽下的漫步,能把人急得跺腳捏拳外加咬牙切齒。可是假如把上百台、上千台、上萬台甚至幾十萬台這樣的機器連在一起,其所產生的功效可就大不一樣了。
我們就少說點兒,算他隻有一萬台電腦,那麽,我們的記賬就可以輕而易舉地獲得一萬個備份。立刻,我們就體會到了自建金融網絡的效益:其一,再也不用擔心所記賬目會因黑客攻擊之類的原因被損壞了。黑客再強悍,也不可能找全掛在互聯網上、隱藏於世界各地的屬於普通草民的電腦。其二,我們也不用擔心有人成心篡改交易記錄。因為,你即使篡改了一台電腦上的記錄,那還有存儲在其他電腦上的九千九百九十九份真實記錄呢。當你拿出一份和其他九千九百九十九份都不一樣的記錄,你說,天底下的人會相信誰?
從前麵的論述中我們知道,區塊鏈所記錄的是一筆筆的交易,它被存儲於掛在互聯網上屬於和你我一樣的草民的電腦當中,所有電腦存儲的記錄是一模一樣的,一萬台電腦就相當於一萬個備份。
當老張用比特幣向老王買燒餅時,老王接受了老張的比特幣,他現在唯一要做的事情就是把這個交易記錄寫進區塊鏈之中去。然而,他並不是簡單地把這筆交易匯報給一萬台電腦中的某一個,而是要匯報給所有的電腦。當然,不能保證這一萬台電腦都同時在線,但隻要有很多電腦同時在線,打個比方說,五千台,就已經綽綽有餘。
五千台電腦收到了從老王那裏送來的交易記錄,立即忙活起來,把它寫進區塊鏈之中去。這些電腦有的做得快,有的做得慢。做得快的電腦搶先一步把新的區塊鏈記錄發給其他電腦,其他電腦收到新記錄後發現自己正在進行的工作已被人搶先完成,就半途而廢,改而坐享別人發來的現成結果。最終,這筆交易會被複製到連接在比特幣網絡上的所有電腦中去。
我們可以把整個區塊鏈理解成一個大賬本,裏麵記載著自比特幣誕生後每一筆交易的來龍去脈。而區塊鏈裏的每一個區塊,就像是賬本裏的一頁紙,裏麵記載著若幹筆交易,一頁記滿了,再翻開新的一頁。
賬本為防止有人作假,每一頁都會編上頁碼,我們在查賬時一定要確定不多一頁,不少一頁。即使是某一頁完全被廢棄也不能少,而必須被標以void字樣留在那裏。
區塊鏈也有編號,不過這編號並非是用阿拉伯數字0,1,2,3……按順序編成,而是由一套複雜的數學算法產生而成。這些編號讓區塊像真正的賬本那樣彼此相連,因而被稱作區塊鏈。
一旦一筆交易被寫進區塊鏈,就將成為板上釘釘的事情了。假如老張覺得老王的燒餅分量不夠,想要反悔,比特幣世界裏可沒有“消費者協會”之類的組織為他撐腰,幫他把原來的記錄抹掉。他唯一討回公道的辦法就是去找老王抱怨,假如老王是個有良心的商人,他會把比特幣用剛才的方法發還給老張,當然,這也要記錄到區塊鏈裏麵去。
我們前麵說區塊鏈裏記錄的是“第一筆:老張從老錢那裏得到十元錢”,其實並不確切。事實上,區塊鏈裏不會記錄老張、老馬、老王的姓名。每一筆交易裏麵,記錄的隻有比特幣賬號和賬號之間的金錢交易。
讓我們假定煤老板老錢和草民老張、老馬、老王的比特幣帳號分別是Q、Z、M、W。那麽區塊鏈在記錄這幾筆交易的時候應該是記錄如下信息(依然很不確切,但離真相又近了一步):
……
區塊100
交易1:承接區塊99之交易2,自賬號Q轉10元錢進賬號Z。
交易2:承接區塊99之交易3,自賬號Q轉10元錢金賬號M。
交易3:承接區塊99之交易3,自賬號Q轉10元錢金賬號W。
……
區塊101
交易1:承接區塊100之交易1,自賬號Z轉6元錢進賬號W。
交易2:承接區塊100之交易1,自賬號Z轉4元錢進賬號Z。
……
在上麵的兩個記錄中,區塊100記錄著老錢將自己所得的一些比特幣(交易記錄在區塊99當中)贈送給老張、老馬和老王的過程。區塊101則記錄著老張和老王之間的燒餅交易。
在一個人要用比特幣付款的時候,他/她需要向比特幣網絡提供以下信息:1)自己的比特幣賬號2)對方的比特幣賬號3)所付比特幣金額4)這些比特幣來自哪些交易。
前三項都好理解,它和我們現實生活中寫支票或發電匯所需提供的信息差不多,然而,第四項就有點兒令人費解了,我買東西,還必須告訴別人這錢是從哪裏來的,這是不是多管閑事嗎?假如一個人去餐館吃飯,在付費時商家非要問你這錢是上班打工賺來的,還是買彩票中頭獎幸運得來的,亦或是賣股票賺的,這人多半會回答:幹你一毛錢的事嗎?
其實我們在前麵已經講過,比特幣的賬號裏不會記錄你的當前結餘。比如說,你從A那裏得到了10元錢,從B那裏得到了20元錢,從C那裏得到了5元錢,比特幣賬號不會幫你做加法,得出你現在總資產是35元的結論。相反,當你用比特幣去買東西時,你必須說清楚是用從A那裏得到的10元錢,還是C那裏得到的5元錢。因為,當A給了你10元錢之後,比特幣的區塊鏈裏就會留下一個記錄,說有人轉給你了10元錢。如果你不把它再轉給下家,這錢就一直是在你名下的。當你用它購買了東西之後,它就不能再被使用了。
用一句簡單的話來總結,那就是:錢不會無緣無故地多出來,也不會無緣無故地少掉,隻能從一個賬號轉入另一個賬號。
在上麵的例子中,老錢把別人轉給自己的兩筆錢(交易記錄在區塊99)分別轉給了老張、老馬和老王(交易記錄在區塊100)。
假如此時老張想用六元錢從老王那裏買一個燒餅,他需要得到老王的賬號W,然後送給老王一個交易文件:
吾,公鑰Z持有者,特授權將區塊100第一筆交易所得金額之陸元整轉入賬號W,餘下四元整轉入賬號Z (簽名)
需要說明的是,老張可以使用任何一種方式,包括電子郵件、微信、USB拷貝等等不安全的方法將上述交易文件送給老王。
在這個交易文件中,老張說明了自己的錢是從那裏來的,那就是區塊100之第一筆交易。通過這個信息我們可以去區塊鏈上核對這筆錢是否真的存在,是否已經被使用過。老張的文件經過核實之後,區塊鏈裏便多了兩筆記錄:一筆是老張把10元錢中的6元轉給老王,另一筆是他把餘下的4元錢作為找錢轉回給自己。至此之後,老張就不能夠再使用區塊100第一筆交易之餘額去購買東西了,但他可以使用區塊101第二筆交易之餘額。也就是說,老張的10元錢就隻剩下了4元,而老王則多了6元錢。
相信大家仍有很多疑問,這麽簡簡單單就把老張辛辛苦苦從煤老板那裏得來的錢通過網絡給送走了?現在網絡詐騙如此盛行,稍不留神自己賬號裏的餘額就會不翼而飛,假如比特幣的操作如此容易,那麽肯定會給犯罪分子可乘之機的。在一萬個備份產生後,老張付給老王的錢算是安全轉到老王名下了,可是在這之前呢?會不會有人搶先在記錄形成之前做手腳?老張能不能不負責任地傳送虛假信息騙取老王的燒餅卻不付錢?記賬人的人格可靠嗎?我們能相信他們嗎?
(待續)