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