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

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

當然,這還遠遠稱不上一份白皮書!

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

有人說是:分布式數(shù)據(jù)庫;有人說是:分布式賬本;還有人會進一步說明:就是一種以分布式方式記錄賬本的數(shù)據(jù)庫,但是,這個數(shù)據(jù)庫只能添加、讀取,不能修改,刪除。

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

  • 除了初始提交,每一個提交都會有父提交——全部的提交歷史,也構(gòu)成了一個鏈,每一個commit,也可以說是一個block
  • 如果不經(jīng)過特殊操作,所有的提交都不會消失,只會增加——區(qū)塊鏈在這方面的限制更加嚴格

所以:我們也許可以借助對版本管理系統(tǒng)的理解,來理解區(qū)塊鏈。

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

更遠的版本管理系統(tǒng),咱們不去提他,單說SVN與Git的區(qū)別,SVN的版本號,是一個自增長的數(shù)字,因此:只能有一條鏈:


Git的版本號,是一串Hash值,不存在必須自增長的限制,因此Git的版本樹形狀會非常多樣,通稱DAG(有向無環(huán)圖)


如果每一個節(jié)點,記錄世界上的一批交易的話,我們就會發(fā)現(xiàn)SVN與Git的兩種模式,存在性能上的巨大差距。因為SVN記錄的交易,必須是串行的,任憑世界上同時發(fā)生多少交易,都必須依次記錄!相比之下,Git的版本,就不必嚴格依序發(fā)生,最后的版本合并,也容易得多,這就是使得Git的并發(fā)性能,會好很多!

如果我沒有理解錯誤的話:IOTA的DAG Tangle,應(yīng)該受到Git的很多啟發(fā)。


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

1. 創(chuàng)造一個初始賬戶

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

2. 新增一個賬戶A,并且從root得到轉(zhuǎn)賬

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

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

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

4. 創(chuàng)建一個fork倉庫,包含原來的全部賬本

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

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

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

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

7. 原始倉庫合入fork倉庫的變更

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

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

1. 每一臺Git Server,就是一個賬本庫。因此,一筆交易的雙方,可以選擇任意一臺服務(wù)器,記錄他們的交易。前提是:

  • 這臺服務(wù)器上的賬本,是最新的(至少保存了交易雙方賬本的最新版本)
  • 交易雙方都信任這臺服務(wù)器的記錄是準確,且及時的
  • 理論上,這臺服務(wù)器提供了轉(zhuǎn)賬與記賬的服務(wù),可以收取服務(wù)費

2. 交易雙方經(jīng)過協(xié)商,可以選擇任何一臺服務(wù)器進行交易,并且支付費用。因此:賬本服務(wù)器,存在競爭關(guān)系。理論上,以下優(yōu)點將幫助交易服務(wù)器勝出:

  • 交易賬本數(shù)據(jù)最新最全(這是核心競爭力,否則交易速度將會變慢)
  • 交易記錄速度最快
  • 交易費用最低(這需要一個平衡)

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

  • 為了確保自己的服務(wù)器上,擁有最新最全的數(shù)據(jù)。各家服務(wù)器都會有動力,頻繁的拉取其他服務(wù)器的賬本數(shù)據(jù)(git pull)
  • 可能存在這樣的現(xiàn)象:A拉取B服務(wù)器的數(shù)據(jù),但是出現(xiàn)了版本沖突,因為有賬戶x,同時在A、B記錄了兩筆不同的交易。理論上,需要B先拉取A服務(wù)器的數(shù)據(jù),然后A才能成功拉取B服務(wù)器的數(shù)據(jù)。類似于我們git push之前,需要先git pull
  • 當A服務(wù)器拉取失敗時,他有義務(wù)通知B服務(wù)器:“你的版本太老”。于是B服務(wù)器會拉取A服務(wù)器的數(shù)據(jù)。當A服務(wù)器再次重試時,拉取成功了。
  • 于是,長期來看,A服務(wù)器拉取B服務(wù)器的數(shù)據(jù),就會有一個成功率的記錄。我們也可以記錄,某臺服務(wù)器,針對其他所有服務(wù)器的拉取請求,其成功率的數(shù)據(jù)。這樣的數(shù)據(jù),就代表其服務(wù)可信度。

4. 可信度最高的服務(wù)器,通常為了確保其數(shù)據(jù)的及時與準確性,需要投入大量的成本,他們的交易服務(wù)費用,也將會比較高(好的服務(wù),當然應(yīng)該貴一些)

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

五、三種交易類型與應(yīng)對策略

1. 最簡單的交易,就是發(fā)生在兩個賬戶之間的。參考復(fù)式記賬法,一筆交易我們至少需要同時修改兩個文件,因此我們需要確保在那臺git server上,兩個賬戶文件都已經(jīng)是最新版本了

  • 賬戶A說:我的賬戶地址是XXXX1,我的最新版本是YYYY1,你可以去以下服務(wù)器查證。
  • 賬戶B說:我的賬戶地址是XXXX2,我的最新版本是YYYY2,你可以去以下服務(wù)器查證。
  • 兩個賬戶,都可以選擇更加保守的策略,在更多的服務(wù)器上,互相查證對方的賬戶版本,是否為最新。并且最終商議出一個雙方共同認可的交易服務(wù)器
  • 假設(shè)找不到一臺服務(wù)器,同時保存了雙方賬戶的最新版本,那就只能等待某一臺服務(wù)器,最終同步到了最新的版本,然后再執(zhí)行交易

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

  • 以頻繁收錢的賬戶為例,他可以對外公布一個自己的收款地址+服務(wù)器地址。所有的支付者,都到這個服務(wù)器上,與他交易
  • 付款者向指定服務(wù)器發(fā)出付款要求,指定服務(wù)器首先同步付款者的賬戶到最新版。交易服務(wù)器完成交易。
  • 對于收款者而言,并發(fā)的支付請求,在交易服務(wù)器上被批量處理并記錄。不必嚴格遵守交易的先后次序,只要最終被全部記錄且數(shù)據(jù)一致即可
  • 頻繁支出的賬戶,也可以按類似方式處理。

3. 從個人賬戶到銀行賬戶

  • 如果是個人對個人的交易,大家都是從我的錢包到你的錢包,這樣的交易可以和具體的交易服務(wù)器無關(guān),也可以說每次交易都可以選擇任意的交易服務(wù)器。但是,如果是經(jīng)常存在賬戶進出的情況,那么選擇在某家“銀行”開戶,就變成很自然的事情
  • 過去是從個人錢包發(fā)起交易,每次選擇交易記賬的服務(wù)?,F(xiàn)在變成直接委托某個交易服務(wù)器,完成進出。那么,不僅僅是完成數(shù)字貨幣進出,也完全可以將一部分數(shù)字貨幣,保存在那個“銀行”里。這樣當然會更加方便快捷。
  • 后續(xù)的發(fā)展,我們可以想象:現(xiàn)在的銀行能夠為客戶提供哪些服務(wù),今后的數(shù)字貨幣銀行,同樣也有機會提供出來。

六、聯(lián)想與結(jié)語

本文未完善之處

  • 我沒有深入去思考:如何達成信任這件事情?;蛘哒f:我認為通過算法保障信任,其實非常危險。因為絕大多數(shù)人,是無法真正理解算法,最后也只能是盲目信任。所以,信任只能來自于歷史上是否清白,是否存在污點?算法公開是不夠的,數(shù)據(jù)要公開,過程要公開,所有歷史數(shù)據(jù),都需要公開,這樣才能夠談得上信任。換言之,信任不是0/1的選擇,信任是一個X%的事情。我對這個服務(wù)有80%的信任,于是我愿意冒著20%的風(fēng)險,去使用這一服務(wù),如此而已。
  • 沒有深入思考算法與協(xié)議的細節(jié):為了實現(xiàn)一個幾乎沒有漏洞的架構(gòu),我現(xiàn)在大概只能算是完成了1%的工作,開了一個頭而已。要是有朋友對于這個架構(gòu),也非常感興趣,大家倒是可以一起研究一下。

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

一個逐漸完善的架構(gòu),肯定是分層、分模塊,多個組件是可以組合/替換的。目前的大多數(shù)公鏈,都想的是打造一個完整的,全面可用的架構(gòu)。我覺得他們多半都會失敗。但是,有誰能夠構(gòu)造一個類似于TCP/IP這一的協(xié)議族呢?我非常期待!

下期預(yù)告

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

————————
補充一段霍炬對這篇文章的評論:

這是道思考題啊,git和區(qū)塊鏈的異同比較可以做面試題。
你這個恰好回答了這個問題,這個系統(tǒng) 1 不是拜占庭容錯系統(tǒng) 2 沒法阻止異步時候的雙花。
把這倆問題解決了之后就會發(fā)現(xiàn)它跟主流區(qū)塊鏈解決方案基本一樣了。
你這個叫做PoA,Proof-of-authority。以太坊早期啟動時候算力不夠用過一段這個辦法。我們要pow是因為在數(shù)學(xué)上可以證明它成立,普通人懂不懂沒關(guān)系。但是它得是可證明的。不然還搞區(qū)塊鏈做什么,直接信任銀行好了。。
你說的那種就是Pos或者DPos。前者是你抵押足夠多的資產(chǎn),讓懲罰足夠大,從而讓你不敢搗亂。后者是經(jīng)過選舉大家選出來的,搗亂就干掉你破壞你前期投入。
git為什么不能和區(qū)塊鏈相比,因為關(guān)鍵就在這個P-o- xxxx 啊。。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容