區(qū)塊鏈隨想錄——一種設(shè)想中的公鏈架構(gòu)

原本,這篇文章的標(biāo)題是《區(qū)塊鏈所預(yù)示的未來(lái)业汰,需要什么樣的基礎(chǔ)設(shè)施伙窃?》,后來(lái)我反復(fù)想了好久蔬胯,突然有一個(gè)有趣的念頭緊緊的拽住了我对供,于是我完全沉迷其中無(wú)法自拔,只能放棄原來(lái)的寫(xiě)作內(nèi)容與提綱氛濒,而是努力試圖將自己的這個(gè)設(shè)想产场,闡述明白。

當(dāng)然舞竿,這還遠(yuǎn)遠(yuǎn)稱(chēng)不上一份白皮書(shū)!

一京景、區(qū)塊鏈的本質(zhì)是什么?

有人說(shuō)是:分布式數(shù)據(jù)庫(kù)骗奖;有人說(shuō)是:分布式賬本确徙;還有人會(huì)進(jìn)一步說(shuō)明:就是一種以分布式方式記錄賬本的數(shù)據(jù)庫(kù),但是执桌,這個(gè)數(shù)據(jù)庫(kù)只能添加鄙皇、讀取,不能修改仰挣,刪除伴逸。

在苦思冥想的過(guò)程中,我突然想到膘壶,什么“賬本”呀错蝴,這完全就是一套版本控制系統(tǒng)。

  • 除了初始提交颓芭,每一個(gè)提交都會(huì)有父提交——全部的提交歷史顷锰,也構(gòu)成了一個(gè)鏈,每一個(gè)commit亡问,也可以說(shuō)是一個(gè)block
  • 如果不經(jīng)過(guò)特殊操作官紫,所有的提交都不會(huì)消失,只會(huì)增加——區(qū)塊鏈在這方面的限制更加嚴(yán)格

所以:我們也許可以借助對(duì)版本管理系統(tǒng)的理解州藕,來(lái)理解區(qū)塊鏈万矾。

二、聯(lián)想:SVN與Git的區(qū)別

更遠(yuǎn)的版本管理系統(tǒng)慎框,咱們不去提他良狈,單說(shuō)SVN與Git的區(qū)別,SVN的版本號(hào)笨枯,是一個(gè)自增長(zhǎng)的數(shù)字薪丁,因此:只能有一條鏈:


Git的版本號(hào)遇西,是一串Hash值,不存在必須自增長(zhǎng)的限制严嗜,因此Git的版本樹(shù)形狀會(huì)非常多樣粱檀,通稱(chēng)DAG(有向無(wú)環(huán)圖)


如果每一個(gè)節(jié)點(diǎn),記錄世界上的一批交易的話(huà)漫玄,我們就會(huì)發(fā)現(xiàn)SVN與Git的兩種模式茄蚯,存在性能上的巨大差距。因?yàn)镾VN記錄的交易睦优,必須是串行的渗常,任憑世界上同時(shí)發(fā)生多少交易,都必須依次記錄汗盘!相比之下皱碘,Git的版本,就不必嚴(yán)格依序發(fā)生隐孽,最后的版本合并癌椿,也容易得多,這就是使得Git的并發(fā)性能菱阵,會(huì)好很多踢俄!

如果我沒(méi)有理解錯(cuò)誤的話(huà):IOTA的DAG Tangle,應(yīng)該受到Git的很多啟發(fā)晴及。


三褪贵、繼續(xù)完善我們的設(shè)想——基于Git的分布式記賬系統(tǒng)

1. 創(chuàng)造一個(gè)初始賬戶(hù)

  • 建一個(gè)空的git倉(cāng)庫(kù)
  • 創(chuàng)建一個(gè)root account文件,內(nèi)容是:100000000
  • 創(chuàng)建一個(gè)初始提交:init root account, 100000000

2. 新增一個(gè)賬戶(hù)A抗俄,并且從root得到轉(zhuǎn)賬

  • 新建一個(gè)文件A,內(nèi)容是:+20 from root
  • 修改root文件世舰,添加一行:-20 to A
  • 創(chuàng)建第二次提交:root to A, 20

3. 如上所述动雹,再創(chuàng)建第二個(gè)賬戶(hù)B,也從root得到轉(zhuǎn)賬

  • 新建一個(gè)文件B跟压,內(nèi)容是:+20 from root
  • 修改root文件胰蝠,添加一行:-20 to B
  • 創(chuàng)建第三次提交:root to B, 20

4. 創(chuàng)建一個(gè)fork倉(cāng)庫(kù),包含原來(lái)的全部賬本

5. 原始倉(cāng)庫(kù)繼續(xù)發(fā)生交易

  • 新建一個(gè)文件C震蒋,內(nèi)容是:+20 from root
  • 修改root文件茸塞,添加一行:-20 to C
  • 創(chuàng)建第四次提交:root to C, 20

6. 在fork倉(cāng)庫(kù)中,發(fā)生另一次交易

  • 修改A文件查剖,內(nèi)容是:-10 to B
  • 修改B文件钾虐,內(nèi)容是:+10 to A
  • 創(chuàng)建一次新的提交:A to B, 10

7. 原始倉(cāng)庫(kù)合入fork倉(cāng)庫(kù)的變更

  • fork倉(cāng)庫(kù)發(fā)起一次pull request
  • 原始倉(cāng)庫(kù)accept pull request
  • 由于兩邊的文件變更不存在沖突,所以合入直接完成笋庄,A向B轉(zhuǎn)賬的交易效扫,也被計(jì)入主線
  • fork倉(cāng)庫(kù)同步原始倉(cāng)庫(kù)的版本(git pull)倔监,fork倉(cāng)庫(kù)的賬本同步至最新版本

四、基于Git的分布式記賬系統(tǒng)——要點(diǎn)

1. 每一臺(tái)Git Server菌仁,就是一個(gè)賬本庫(kù)浩习。因此,一筆交易的雙方济丘,可以選擇任意一臺(tái)服務(wù)器谱秽,記錄他們的交易。前提是:

  • 這臺(tái)服務(wù)器上的賬本摹迷,是最新的(至少保存了交易雙方賬本的最新版本)
  • 交易雙方都信任這臺(tái)服務(wù)器的記錄是準(zhǔn)確疟赊,且及時(shí)的
  • 理論上,這臺(tái)服務(wù)器提供了轉(zhuǎn)賬與記賬的服務(wù)泪掀,可以收取服務(wù)費(fèi)

2. 交易雙方經(jīng)過(guò)協(xié)商听绳,可以選擇任何一臺(tái)服務(wù)器進(jìn)行交易,并且支付費(fèi)用异赫。因此:賬本服務(wù)器椅挣,存在競(jìng)爭(zhēng)關(guān)系。理論上塔拳,以下優(yōu)點(diǎn)將幫助交易服務(wù)器勝出:

  • 交易賬本數(shù)據(jù)最新最全(這是核心競(jìng)爭(zhēng)力鼠证,否則交易速度將會(huì)變慢)
  • 交易記錄速度最快
  • 交易費(fèi)用最低(這需要一個(gè)平衡)

3. 數(shù)據(jù)同步成功率與服務(wù)可信度

  • 為了確保自己的服務(wù)器上,擁有最新最全的數(shù)據(jù)靠抑。各家服務(wù)器都會(huì)有動(dòng)力量九,頻繁的拉取其他服務(wù)器的賬本數(shù)據(jù)(git pull)
  • 可能存在這樣的現(xiàn)象:A拉取B服務(wù)器的數(shù)據(jù),但是出現(xiàn)了版本沖突颂碧,因?yàn)橛匈~戶(hù)x荠列,同時(shí)在A、B記錄了兩筆不同的交易载城。理論上肌似,需要B先拉取A服務(wù)器的數(shù)據(jù),然后A才能成功拉取B服務(wù)器的數(shù)據(jù)诉瓦。類(lèi)似于我們git push之前川队,需要先git pull
  • 當(dāng)A服務(wù)器拉取失敗時(shí),他有義務(wù)通知B服務(wù)器:“你的版本太老”睬澡。于是B服務(wù)器會(huì)拉取A服務(wù)器的數(shù)據(jù)固额。當(dāng)A服務(wù)器再次重試時(shí),拉取成功了煞聪。
  • 于是斗躏,長(zhǎng)期來(lái)看,A服務(wù)器拉取B服務(wù)器的數(shù)據(jù)昔脯,就會(huì)有一個(gè)成功率的記錄瑟捣。我們也可以記錄馋艺,某臺(tái)服務(wù)器,針對(duì)其他所有服務(wù)器的拉取請(qǐng)求迈套,其成功率的數(shù)據(jù)捐祠。這樣的數(shù)據(jù),就代表其服務(wù)可信度桑李。

4. 可信度最高的服務(wù)器踱蛀,通常為了確保其數(shù)據(jù)的及時(shí)與準(zhǔn)確性,需要投入大量的成本贵白,他們的交易服務(wù)費(fèi)用率拒,也將會(huì)比較高(好的服務(wù),當(dāng)然應(yīng)該貴一些)

  • 于是:我們得到了一個(gè)良性的禁荒,分布式多中心的猬膨,交易賬本系統(tǒng)!

五呛伴、三種交易類(lèi)型與應(yīng)對(duì)策略

1. 最簡(jiǎn)單的交易勃痴,就是發(fā)生在兩個(gè)賬戶(hù)之間的。參考復(fù)式記賬法热康,一筆交易我們至少需要同時(shí)修改兩個(gè)文件沛申,因此我們需要確保在那臺(tái)git server上,兩個(gè)賬戶(hù)文件都已經(jīng)是最新版本了

  • 賬戶(hù)A說(shuō):我的賬戶(hù)地址是XXXX1姐军,我的最新版本是YYYY1铁材,你可以去以下服務(wù)器查證。
  • 賬戶(hù)B說(shuō):我的賬戶(hù)地址是XXXX2奕锌,我的最新版本是YYYY2著觉,你可以去以下服務(wù)器查證。
  • 兩個(gè)賬戶(hù)惊暴,都可以選擇更加保守的策略饼丘,在更多的服務(wù)器上,互相查證對(duì)方的賬戶(hù)版本缴守,是否為最新。并且最終商議出一個(gè)雙方共同認(rèn)可的交易服務(wù)器
  • 假設(shè)找不到一臺(tái)服務(wù)器镇辉,同時(shí)保存了雙方賬戶(hù)的最新版本屡穗,那就只能等待某一臺(tái)服務(wù)器,最終同步到了最新的版本忽肛,然后再執(zhí)行交易

2. 對(duì)于頻繁收錢(qián)村砂,或者頻繁支出的賬戶(hù),如果每次都需要交易雙方協(xié)調(diào)版本屹逛,那交易成本就太高了

  • 以頻繁收錢(qián)的賬戶(hù)為例础废,他可以對(duì)外公布一個(gè)自己的收款地址+服務(wù)器地址汛骂。所有的支付者,都到這個(gè)服務(wù)器上评腺,與他交易
  • 付款者向指定服務(wù)器發(fā)出付款要求帘瞭,指定服務(wù)器首先同步付款者的賬戶(hù)到最新版。交易服務(wù)器完成交易蒿讥。
  • 對(duì)于收款者而言蝶念,并發(fā)的支付請(qǐng)求,在交易服務(wù)器上被批量處理并記錄芋绸。不必嚴(yán)格遵守交易的先后次序媒殉,只要最終被全部記錄且數(shù)據(jù)一致即可
  • 頻繁支出的賬戶(hù),也可以按類(lèi)似方式處理摔敛。

3. 從個(gè)人賬戶(hù)到銀行賬戶(hù)

  • 如果是個(gè)人對(duì)個(gè)人的交易廷蓉,大家都是從我的錢(qián)包到你的錢(qián)包,這樣的交易可以和具體的交易服務(wù)器無(wú)關(guān)马昙,也可以說(shuō)每次交易都可以選擇任意的交易服務(wù)器桃犬。但是,如果是經(jīng)常存在賬戶(hù)進(jìn)出的情況给猾,那么選擇在某家“銀行”開(kāi)戶(hù)疫萤,就變成很自然的事情
  • 過(guò)去是從個(gè)人錢(qián)包發(fā)起交易,每次選擇交易記賬的服務(wù)「疑欤現(xiàn)在變成直接委托某個(gè)交易服務(wù)器扯饶,完成進(jìn)出。那么池颈,不僅僅是完成數(shù)字貨幣進(jìn)出尾序,也完全可以將一部分?jǐn)?shù)字貨幣,保存在那個(gè)“銀行”里躯砰。這樣當(dāng)然會(huì)更加方便快捷每币。
  • 后續(xù)的發(fā)展,我們可以想象:現(xiàn)在的銀行能夠?yàn)榭蛻?hù)提供哪些服務(wù)琢歇,今后的數(shù)字貨幣銀行兰怠,同樣也有機(jī)會(huì)提供出來(lái)。

六李茫、聯(lián)想與結(jié)語(yǔ)

本文未完善之處

  • 我沒(méi)有深入去思考:如何達(dá)成信任這件事情揭保。或者說(shuō):我認(rèn)為通過(guò)算法保障信任魄宏,其實(shí)非常危險(xiǎn)秸侣。因?yàn)榻^大多數(shù)人,是無(wú)法真正理解算法,最后也只能是盲目信任味榛。所以椭坚,信任只能來(lái)自于歷史上是否清白,是否存在污點(diǎn)搏色?算法公開(kāi)是不夠的善茎,數(shù)據(jù)要公開(kāi),過(guò)程要公開(kāi)继榆,所有歷史數(shù)據(jù)巾表,都需要公開(kāi),這樣才能夠談得上信任略吨。換言之集币,信任不是0/1的選擇,信任是一個(gè)X%的事情翠忠。我對(duì)這個(gè)服務(wù)有80%的信任鞠苟,于是我愿意冒著20%的風(fēng)險(xiǎn),去使用這一服務(wù)秽之,如此而已当娱。
  • 沒(méi)有深入思考算法與協(xié)議的細(xì)節(jié):為了實(shí)現(xiàn)一個(gè)幾乎沒(méi)有漏洞的架構(gòu),我現(xiàn)在大概只能算是完成了1%的工作考榨,開(kāi)了一個(gè)頭而已跨细。要是有朋友對(duì)于這個(gè)架構(gòu),也非常感興趣河质,大家倒是可以一起研究一下冀惭。

未來(lái)的數(shù)字貨幣架構(gòu)

一個(gè)逐漸完善的架構(gòu),肯定是分層掀鹅、分模塊散休,多個(gè)組件是可以組合/替換的。目前的大多數(shù)公鏈乐尊,都想的是打造一個(gè)完整的戚丸,全面可用的架構(gòu)。我覺(jué)得他們多半都會(huì)失敗扔嵌。但是限府,有誰(shuí)能夠構(gòu)造一個(gè)類(lèi)似于TCP/IP這一的協(xié)議族呢?我非常期待痢缎!

下期預(yù)告

下一篇文章胁勺,會(huì)聊聊烏托邦的事情,這是IT技術(shù)牺弄,最接近革命的狀態(tài)姻几,也許未來(lái)真的會(huì)是某種DAO也未可知!

————————
補(bǔ)充一段霍炬對(duì)這篇文章的評(píng)論:

這是道思考題啊势告,git和區(qū)塊鏈的異同比較可以做面試題蛇捌。
你這個(gè)恰好回答了這個(gè)問(wèn)題,這個(gè)系統(tǒng) 1 不是拜占庭容錯(cuò)系統(tǒng) 2 沒(méi)法阻止異步時(shí)候的雙花咱台。
把這倆問(wèn)題解決了之后就會(huì)發(fā)現(xiàn)它跟主流區(qū)塊鏈解決方案基本一樣了络拌。
你這個(gè)叫做PoA,Proof-of-authority回溺。以太坊早期啟動(dòng)時(shí)候算力不夠用過(guò)一段這個(gè)辦法春贸。我們要pow是因?yàn)樵跀?shù)學(xué)上可以證明它成立,普通人懂不懂沒(méi)關(guān)系遗遵。但是它得是可證明的萍恕。不然還搞區(qū)塊鏈做什么,直接信任銀行好了车要。允粤。
你說(shuō)的那種就是Pos或者DPos。前者是你抵押足夠多的資產(chǎn)翼岁,讓?xiě)土P足夠大类垫,從而讓你不敢搗亂。后者是經(jīng)過(guò)選舉大家選出來(lái)的琅坡,搗亂就干掉你破壞你前期投入悉患。
git為什么不能和區(qū)塊鏈相比,因?yàn)殛P(guān)鍵就在這個(gè)P-o- xxxx 啊榆俺。售躁。

我的感想:
作為一個(gè)外行,我大概又搞懂了一些什么谴仙。雖然是自己瞎想迂求,然后也許慢慢會(huì)理解“前輩”們的取舍和決策依據(jù)了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晃跺,一起剝皮案震驚了整個(gè)濱河市揩局,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掀虎,老刑警劉巖凌盯,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異烹玉,居然都是意外死亡驰怎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)二打,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)县忌,“玉大人,你說(shuō)我怎么就攤上這事≈⑿樱” “怎么了装获?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)厉颤。 經(jīng)常有香客問(wèn)我穴豫,道長(zhǎng),這世上最難降的妖魔是什么逼友? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任精肃,我火速辦了婚禮,結(jié)果婚禮上帜乞,老公的妹妹穿的比我還像新娘司抱。我一直安慰自己,他們只是感情好黎烈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布状植。 她就那樣靜靜地躺著,像睡著了一般怨喘。 火紅的嫁衣襯著肌膚如雪津畸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天必怜,我揣著相機(jī)與錄音肉拓,去河邊找鬼。 笑死梳庆,一個(gè)胖子當(dāng)著我的面吹牛暖途,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膏执,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼驻售,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了更米?” 一聲冷哼從身側(cè)響起欺栗,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎征峦,沒(méi)想到半個(gè)月后迟几,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栏笆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年类腮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛉加。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚜枢,死狀恐怖缸逃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厂抽,我是刑警寧澤察滑,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站修肠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏户盯。R本人自食惡果不足惜嵌施,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莽鸭。 院中可真熱鬧吗伤,春花似錦、人聲如沸硫眨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)礁阁。三九已至巧号,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姥闭,已是汗流浹背丹鸿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棚品,地道東北人靠欢。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像铜跑,于是被迫代替她去往敵國(guó)和親门怪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容