一張圖看懂區塊鏈
看了各種關於區塊鏈的百科,也聽別人說了不少區塊鏈的故事,但是你可能還不明白區塊鏈是什麼,仍然停留在霧裡看花的狀態。今天,BB財經為你揭開區塊鏈的神祕面紗,就讓我們一起走進區塊鏈世界!
區塊鏈本質上是一個去中心化的分散式賬本,其本身是一系列使用密碼學而產生的互相關聯的資料塊,每一個數據塊中包含了多條經比特幣的網路交易有效確認的資訊。
模擬一個區塊鏈小城市
為了 說明區塊鏈是如何執行的 ,我們先把整個去中心化的分散式結構簡化為一個極端的情況來探究。我們假設有一個去中心化的小城市,在這個城市裡有5個可愛活潑的小夥伴,他們互相借錢的時候,是這麼幹的:
假設B向A借了1塊錢,這個時候,城市裡的人怎麼辦呢?A在人群中大喊:“我是A,我借給了B1塊錢!”B也在人群中大喊:“我是B,A借給了我1塊錢!”
此時城市裡的其他人C、D、E都聽到了這些訊息,他們拿出了手中的小賬本並默默記下:“某年某月某日,A借給了B1塊錢。”
當我們把一個去中心化的模型極度簡化之後,我們就會發現,在這個只有5個人的城市中,已經建立了一個去中心化的系統,這個系統不需要銀行,也不需要支付寶。 這個模型不需要信任關係,也不需要一個擁有公信力的組織。 當分散式結構中的每個人都記賬的時候,篡改賬本是不可行的。比如B突然不認賬了:“我不欠A的1塊錢!”這個時候,人民群眾C或D或E就會站出來說:“不對,我的賬本上明明記錄了你在某年某月某日向了A借了1塊錢,並且沒有查到你還款的記錄。”
說到這裡,你有沒有發現一個問題,在這個模型中,所謂的1塊錢根本不重要,也沒有人在意,“1塊錢”已經變成了一個變數,它可以被替換成任何概念,只要大家承認這是一個有價值的東西即可。
比如A在這個城市中大喊一聲:“我創造了一個巴拉拉能量!”城市中的其他人都聽見了,於是大家紛紛在自己的小本子上記下“某人有一個巴拉拉能量”,大家甚至不用知道巴拉拉能量是什麼,A竟然真的有了一個巴拉拉能量。之後呢?A還能幹什麼呢?A可以再大喊一聲:“我給了B一個巴拉拉能量。”
只要城市中的B、C、D、E,即城市裡的所有人都承認了這個交易,那麼這個交易就真的成立了,雖然現實生活中並沒有巴拉拉能量。
這個區塊鏈小城市裡的幾個問題
當然,區塊鏈的世界不會這麼簡單,它還有其他的規則來相互制約,我們先來解決下面這幾個問題:
問題一:憑什麼幫你記賬?
憑什麼你對著天空大喊一聲,別人就要幫你記賬,別人的時間不要錢嗎?別人的小本子不要錢嗎?於是,為了讓大家都幫我記賬,我增加了一條新的規則,我決定給第一個聽到我喊話並且將其記錄在小本子上的人獎勵。獎勵機制也很簡單,第一個聽到我喊話並記錄下來的人,可以得到一個巴拉拉能量的獎勵。
這個巴拉拉能量不是白給的,是對你勞動的報酬,就像打工可以掙錢一樣,你幫我記賬,整個系統都會給你報酬。你要做的事情,有這樣幾點:首先,你要搶在所有人之前聽到了我的喊話並記在了自己的小本子上;記錄之後,你還要馬上告訴整個城市裡的人——這句話我記錄完了,你們再記錄也沒有用了,別人就會放棄這筆賺錢的生意;與此同時,你還要做一件事,就是給自己的記錄加一個獨一無二的編號,然後把記錄和編號一起喊出來,於是,下一個人再記錄的時候,就會帶著這個記錄和獨一無二的編號繼續下去。
在這條新的規則開始實行之後,一定會有這樣一些人,他們為了得到巴拉拉能量,開始屏氣監聽周圍發出的各種聲音,只為了能在第一時間記下一條新的記錄。
這個時候,對區塊鏈有所瞭解的讀者是不是想到了這樣的名詞——“比特幣挖礦”。沒錯,這就是比特幣挖礦的簡單說明。
關於比特幣挖礦的話題,知乎使用者“玲瓏邪僧”的一篇文章舉過一個更生動的例子,大致是這樣的:單身男士們要找女朋友,“國民岳母”說,我有好多膚白貌美、乖巧可愛的女兒,
這樣吧,我給你們出一個曠世難題,解出一個就給你們其中一個姑娘的微信號。
於是,單身男士們瘋狂競爭,想破腦袋去解這道曠世難題。只要其中一位單身男士解出一道題,就立馬得意揚揚地昭告天下,示威全部單身男士,這個姑娘的微訊號是我的啦,先到先得,你們放棄吧。其他單身男士雖然已經算到一半了,但是沒有辦法,速度不夠快啊,只好立馬去解下一道題。
同時,首個成功破解曠世難題的幸運的單身男士不僅不用付一二十萬元的彩禮,被其才華征服的“國民岳母”還會給這位單身男士一筆鉅額財產做嫁妝,也就是比特幣挖礦中的比特幣獎勵。
問題二:分叉問題聽誰的?
在這一段的論述中,我們引用了知乎使用者“汪樂–LaiW3n”的說法。在這個廣闊的小城市裡,一定還會存在這樣的問題,B和C幾乎同時記錄完了,於是同時向天空大喊了一聲,“這個編號89757的巴拉拉能量歸我了”。是,由於這個城市太廣闊了,有的人會認為這個編號89757的巴拉拉能量歸B,也有的人認為這個編號89757的巴拉拉能量歸C,但是編號89757的巴拉拉能量只有一個啊,只有一個人能得到,怎麼辦呢?一人一半?當然是不可能的,這個時候我們會採用更原始簡單的規則來解決,誰長聽誰的。
在不加任何限制條件的情況下,這件事件會發展成這樣:一部分人認為這句話是B說的,在聽到這句話之後開始記賬,之後他們所做的所有事情都是基於B有了編號89757的巴拉拉能量這個事實,並且隨著這個資訊一次次地傳下去,這條資訊鏈會越來越長;而另外一群認為C先說這句話的人,也會按照這樣的趨勢發展。
這下事情嚴重了,原本是一條唯一的、編號順序嚴謹的總資訊鏈,在B和C喊出“這個編號89757的巴拉拉能量歸我了”這句話之後,硬生生地分叉了!這還得了,要是這種情況延續下去,每個人手裡的賬本都變得不一樣了,而且根本沒法確定哪個是真的!
為了解決這個問題,小城市又追加了新的區塊鏈規則,記錄的時候必須頂格寫,而且要保證,中心在離田字格上邊緣0.897 57毫米的位置上,於是,每個人寫字的時候都要拿刻度尺量好之後再寫,這非常困難,每個人的記錄需要5分鐘才能完成,因此,寫這句話所用的時間變得不同了。於是,只要有人高喊“我寫完了!那句話是某某某寫的”,其他正在寫這句話的人便會停筆,然後在小本子上重新開始寫“那句話是某某某寫的,上一句的編號是×××”。
問題三:雙花問題
雙花問題是指一筆數字現金在交易中被重複使用的現象。如果我同時向B和C都喊了一句,我給你一個巴拉拉能量,怎麼辦呢?巴拉拉能量只有一個,如何保證一個巴拉拉能量在實際的交易中只被支付了一次呢?
我們以比特幣為例,中本聰在《比特幣白皮書》第五小節中是這樣說的,執行比特幣網路的步驟如下:
1. 新的交易向全網進行廣播;
2. 每一個節點都將收到的交易信息納入一個區塊中;
3. 每個節點都嘗試在自己的區塊中找到一個具有足夠難度的工作量證明;
4. 當一個節點找到了一個工作量證明,它就向全網進行廣播;
5. 當且僅當包含在該區塊中的所有交易都是有效的且之前未存在過的,其他節點才認同該區塊的有效性;
6. 其他節點表示他們接受該區塊,而接受的方法則是跟隨在該區塊的末尾,製造新的區塊以延長該鏈條,並將該區塊的隨機雜湊值視為新區塊的隨機雜湊值。
也就是說,交易發生的一刻起,比特幣的交易資料就被蓋上了時間戳;而當這筆交易資料被打包到一個區塊中後,就算完成了一次確認;在連續進行6次確認之後,這筆交易就不可逆轉了;在比特幣中,每一次確認都需要“解決一個複雜的難題”,也就是說每一次確認都需要一定的時間。
在這種情況下,當我試圖於把一筆資金進行兩次支付交易的時候,因為確認時間較長,後一筆交易想要與前一筆交易同時得到確認幾乎是不可能的,而這筆資金在第一次交易確認有效後,第二次交易時就無法得到確認。區塊鏈的全網記賬需要在整個網路中達成共識,雙花問題是無法產生的。