區(qū)塊鏈可擴(kuò)展性問(wèn)題的來(lái)源及解決方向
什么是區(qū)塊鏈?
區(qū)塊鏈?zhǔn)且粋€(gè)技術(shù)術(shù)語(yǔ),解決(或者說(shuō)顛覆)了現(xiàn)有的依賴(lài)第三方中心的交易體系:如果有一個(gè)水果市場(chǎng),我們?cè)谑袌?chǎng)上用100新臺(tái)幣購(gòu)買(mǎi)了一個(gè)芒果,其實(shí)是新臺(tái)幣的發(fā)行方(央行)為這一張薄薄的紙作了信用背書(shū)--因?yàn)樗N(xiāo)售者信任這100新臺(tái)幣可以在他需要的時(shí)候,購(gòu)買(mǎi)等值的其他用品。
第三方中心的存在,解決了交易雙方的信任問(wèn)題,但是帶來(lái)了新的問(wèn)題,如果第三方作惡(比如說(shuō)央行濫發(fā)貨幣)怎么辦?最終極的解決項(xiàng)目就是不需要第三方,這個(gè)就是區(qū)塊鏈產(chǎn)生的根本動(dòng)機(jī)。
在沒(méi)有第三方的情形下,怎么實(shí)現(xiàn)交易?區(qū)塊鏈實(shí)現(xiàn)了一個(gè)去中心化的帳本實(shí)現(xiàn)項(xiàng)目:
- 我們有一個(gè)公開(kāi)的帳本,任何人都可以獲取這個(gè)帳本,帳本上有每個(gè)人的余額;
- 當(dāng)Alice向Bob購(gòu)買(mǎi)商品的時(shí)候,Alice向Bob開(kāi)具一張有一定數(shù)額的支票;
- Alice向所有人公示這個(gè)支票,大家確認(rèn)確實(shí)是Alice的簽名后,在賬本上記錄 Alice的余額減,Bob的余額加;
- 每隔一段時(shí)間,大家交換一下帳本的內(nèi)容,讓大家的帳本信息同步。
可以看出,區(qū)塊鏈?zhǔn)且粋€(gè)完全自治的體系,但是現(xiàn)在有幾個(gè)問(wèn)題:
- 為什么會(huì)記帳,每個(gè)人都可以指望別人記帳,自己使用別人的帳本才是最節(jié)省成本行為;
- 當(dāng)交易帳本內(nèi)容的時(shí)候,如果兩個(gè)人的帳本不一致,該以誰(shuí)的為準(zhǔn);
- Alice如果賬戶(hù)里只有10塊錢(qián),在市場(chǎng)的這一側(cè)花了8塊購(gòu)買(mǎi)后,飛速跑到另外一頭購(gòu)買(mǎi)另外一件8塊的商品,這時(shí)候另外一側(cè)的帳本還沒(méi)有來(lái)得及記錄前面的購(gòu)買(mǎi)記錄,同樣的錢(qián)Alice是不是可以花了兩次?
為了解決這些問(wèn)題,區(qū)塊鏈作了最基本的設(shè)計(jì):
- 把所有的交易按時(shí)間段組織成區(qū)塊;
- 區(qū)塊內(nèi)使用一個(gè)哈希防止修改;
- 每個(gè)區(qū)塊內(nèi)記錄前一個(gè)區(qū)塊的哈希,保證永久無(wú)法修改;
- 當(dāng)同時(shí)有多個(gè)區(qū)塊出現(xiàn)時(shí),按某種指定的算法選擇一個(gè)區(qū)塊為準(zhǔn)。
使用此項(xiàng)目后,每次交換帳本,只需要交換總帳本中的一個(gè)區(qū)塊,大大減少的交換的數(shù)量;當(dāng)多個(gè)區(qū)塊同時(shí)出現(xiàn)時(shí),使用某種約定的算法--這個(gè)算法在區(qū)塊鏈中被稱(chēng)為共識(shí),以符合算法條件的某個(gè)區(qū)塊為準(zhǔn);而Alice同樣的錢(qián)花兩次的想法也會(huì)落空:商戶(hù)只有在支票信息被納入到共識(shí)后的區(qū)塊里時(shí),才會(huì)向Alice提交商品。至于大家為什么愿意記帳呢?注意圖上區(qū)塊中有個(gè)記帳人,每個(gè)被共識(shí)承認(rèn)的區(qū)塊的記帳人都會(huì)得到一定的獎(jiǎng)勵(lì)。
這時(shí)候,貨幣只是一個(gè)數(shù)字了(類(lèi)似于銀行內(nèi)的存款數(shù)字),由于帳本是公開(kāi)的,因此可以在帳本開(kāi)始前,大家約定好總共的貨幣數(shù)字和記帳人的獎(jiǎng)勵(lì)項(xiàng)目,在任何一個(gè)時(shí)間點(diǎn)上,可以流通的數(shù)字都是可預(yù)測(cè)的,而且是不可更改的。
區(qū)塊鏈的共識(shí)機(jī)制
當(dāng)區(qū)塊進(jìn)行同步時(shí),有可能會(huì)同時(shí)產(chǎn)生多個(gè)區(qū)塊,需要一種預(yù)先定義的項(xiàng)目來(lái)確定使用哪一個(gè)區(qū)塊,這個(gè)項(xiàng)目在區(qū)塊鏈中稱(chēng)為共識(shí)機(jī)制。而在在一個(gè)去中心化的系統(tǒng)中,有什么是可信的?每個(gè)人信自己嘛,交易和出塊的結(jié)果數(shù)據(jù)到達(dá)我這里的時(shí)刻,是無(wú)法作假的:數(shù)據(jù)可能會(huì)延時(shí)到達(dá)(由于網(wǎng)絡(luò)延時(shí)),但絕對(duì)不會(huì)提前到達(dá)(除非時(shí)光倒流)。我們可以設(shè)計(jì)一種機(jī)制,讓每個(gè)節(jié)點(diǎn)的記賬結(jié)果必須達(dá)到某個(gè)條件,每個(gè)節(jié)點(diǎn)都認(rèn)第一個(gè)達(dá)到這個(gè)條件的節(jié)點(diǎn)的記錄。
PoW機(jī)制
Proof-Of-Work,工作量證明機(jī)制。
每個(gè)節(jié)點(diǎn)在記賬的同時(shí),按照某種規(guī)則找一個(gè)隨機(jī)數(shù),通過(guò)這個(gè)隨機(jī)數(shù)可以算出某個(gè)符合條件的(哈希)值,誰(shuí)第一個(gè)找到的,他就出塊成功。這個(gè)找隨機(jī)數(shù)的過(guò)程就是不斷調(diào)整隨機(jī)數(shù)-->計(jì)算的過(guò)程,只要這種算法能夠足夠離散(這一次和下一次的計(jì)算沒(méi)有任何關(guān)聯(lián),隨機(jī)數(shù)的變化導(dǎo)致計(jì)算結(jié)果變化足夠離散),那么就能夠?qū)崿F(xiàn)出塊節(jié)點(diǎn)的隨機(jī)化。
舉個(gè)簡(jiǎn)單的例子,如果算法得到的哈希值總是在0-10000之間,而算法要求得到的(哈希值)小于1,一臺(tái)機(jī)器如果一秒鐘能夠計(jì)算一次,那么平均計(jì)算一萬(wàn)次,就有一次值可能小于1;或者反過(guò)來(lái)說(shuō),每次計(jì)算,有萬(wàn)分之一的機(jī)會(huì)小于1. 如果有一萬(wàn)臺(tái)節(jié)點(diǎn)同時(shí)在計(jì)算,那么每秒都有可能有一臺(tái)節(jié)點(diǎn)得到符合條件的結(jié)果,得到符合條件結(jié)果的節(jié)點(diǎn)就是出塊成功。而每一秒,得到結(jié)果的機(jī)器都可能不一樣。這樣就獲得了足夠隨機(jī)的結(jié)果。
POS
Proof-Of-Stake,權(quán)益證明機(jī)制。
PoW機(jī)制很好用,但是有個(gè)問(wèn)題,軍備競(jìng)賽后,太耗電了,都是做些無(wú)意義的計(jì)算,除了這個(gè)結(jié)果和到達(dá)時(shí)間之外,還有什么可信的數(shù)據(jù)作為隨機(jī)值的呢?有想到一個(gè)新的點(diǎn)子,每個(gè)人存在賬號(hào)里的幣的數(shù)量是不一樣的么,是不是可以用來(lái)作為一種隨機(jī)數(shù)呢?
想想也可以啊,每一次出塊的時(shí)候,出塊節(jié)點(diǎn)(賬號(hào))里誰(shuí)的幣最多,就認(rèn)誰(shuí)的。但這樣有個(gè)問(wèn)題:幣最多的豈不是一直在出塊?