
白碩老師——智子社區(qū)技術顧問團首席顧問,中國分布式總賬基礎協(xié)議聯(lián)盟(ChinaLedger)技術委員會主任,中科院計算所博導、中科院信工所博導、中國中文信息學會常務理事、全國金融標準化委員會證券分委員會副主任委員,中國區(qū)塊鏈研究及應用領域的奠基人之一,自然語言處理及人工智能領域泰斗級專家。
區(qū)塊鏈興起以來,特別是以以太坊為代表的具有可編程特性的所謂區(qū)塊鏈2.0興起以來,關于區(qū)塊鏈是“世界計算機”的說法就一直在流行。據(jù)說V神比較愛用這個說法,但不知是不是他的首創(chuàng)。具有圖靈完備性的智能合約執(zhí)行環(huán)境是實現(xiàn)所謂“世界計算機”的一種途徑。更廣泛地說,支持任何種類的DApp運行環(huán)境都走在這條道路上。我們在本文中想表達幾層意思:一、圖靈完備的“世界計算機”的技術路線,在計算機發(fā)展史上絕不是新鮮的,各種類型的嘗試都有。二、即使考慮到“可信”的訴求,用成千上萬臺計算機做同一件事情,無論如何是效率低下的,不改進沒有前途,局部的改進值得肯定但不是根本性的。三、從智能合約到可信的世界計算機,靠譜的計算架構是“鏈下執(zhí)行、鏈上驗證”,這是“一切即挖礦”方法論在“世界計算機”領域的體現(xiàn)。
“古已有之”的世界計算機
上個世紀,計算機科學的偉大先驅(qū)阿蘭·圖靈創(chuàng)立了通用可計算模型——圖靈機模型。圖靈的理論并非停止于用圖靈機模擬一個個具體的算法,而是超越了對具體算法的模擬而上升到為用有限符號所描述的任意算法提供通用執(zhí)行環(huán)境的更高層面。當我們把算法編碼為數(shù)據(jù),這個通用執(zhí)行環(huán)境也就相當于處理經(jīng)過編碼的算法這類特殊數(shù)據(jù)的某個圖靈機。在這個層面,圖靈提出了通用圖靈機的停機問題,并證明其不可判定。在這個層面,數(shù)據(jù)和程序可以相互轉(zhuǎn)化,這開啟了通往通用數(shù)字計算機的生命之門。
基于世界上最早的通用數(shù)字計算機的設計和制造實踐,馮·諾依曼提出了著名的程序代碼存儲的原則,后世稱之為“馮·諾依曼架構”。在這個原則指導下,通用圖靈機從理論模型落地為工業(yè)產(chǎn)品,并一直沿用至今。在計算機的存儲中,數(shù)據(jù)和程序長的樣子并無根本分別。一段存儲內(nèi)容是數(shù)據(jù)還是程序,完全取決于程序的內(nèi)在邏輯和初始入口。正面的例子有操作系統(tǒng)的boot,反面的例子有病毒的傳播,無一不是靠了馮·諾依曼他老人家定下來的這條神圣的架構原則所賜。
互聯(lián)網(wǎng)出現(xiàn)以后,數(shù)據(jù)通過網(wǎng)絡的傳輸有了明確的落地載體,傳輸?shù)膬?nèi)容也就可以玩花樣了。如果說在單機時代,程序和數(shù)據(jù)都在本地一個池子里還顯不出花樣的差別的話,當網(wǎng)絡把一個池子變成用通信管道連接的兩個池子之后,“世界計算機”的玩法也就逐漸清晰起來。
第一種玩法:程序在遠程,本地上載數(shù)據(jù)到遠程
我們在最初的RPC(遠程進程調(diào)用)和Web興起以后的CGI、PHP、ASP都可以看到這種模式,以COM/DCOM和CORBA為代表逐漸形成兩個分布式對象體系陣營,后來逐步進化為SOA(面向服務架構)和現(xiàn)在流行的微服務體系。
第二種玩法:程序在本地,遠程下載數(shù)據(jù)到本地
這種數(shù)據(jù)驅(qū)動的應用激活模式,被微軟OLE/ActiveX玩得爛熟。微軟的瀏覽器插件都是這么干的,網(wǎng)景(Netscape)的瀏覽器就是這么被微軟干死的?,F(xiàn)在還在活著的其他瀏覽器和客戶端App,要想繼續(xù)活著,也必須走這條道路。
第三種玩法:數(shù)據(jù)在遠程,本地上載程序??康竭h程
這種模式就是所謂移動agent模式。在上世紀90年代,曾經(jīng)引起過一陣小小波瀾,但終究難起大浪,因為大家都認為這樣的模式太不安全了。沒過多久這套把戲就銷聲匿跡了。
第四種玩法:數(shù)據(jù)在本地,遠程下載程序到本地處理
這種模式大家可能還記憶猶新:這不就是“瘦客戶端”嗎?有人也管它叫“網(wǎng)絡計算機(NC)”,有人管它叫“透明計算”,其實一回事。在網(wǎng)絡帶寬越來越富裕的今天,它不再奢侈,自有它可落地的場景。
?????? 這四種玩法,用一張2X2的表格,橫向表示激活模式,縱向表示傳輸模式,畫出來是這樣的:

?????? 由此可見,世界計算機的玩法,的確是“古已有之”,只不過當時的叫法是“世界是一臺網(wǎng)絡計算機”。但是,誰也沒傻到用成千上萬臺計算機干同樣的事,執(zhí)行同樣的程序還要彼此達成共識。那樣做,太損失效率了,以至于大家對這種架構的可能性想都不要去想。那么,究竟是什么原因,使“傻事”成了了不得的發(fā)明創(chuàng)造了呢?這就不得不提及一個重要的概念:可信。
程序如何“可信”?
程序如何“可信”?這個問題在傳統(tǒng)的計算機行當里也不是沒有人考慮過的新概念。但是傳統(tǒng)可信計算的研究,局限在數(shù)據(jù)高度敏感的少數(shù)部門之內(nèi),因此其圈子也相對“小眾”,本文也不擬展開論述。筆者僅僅指出一點:傳統(tǒng)可信計算圈子對可信計算環(huán)境的訴求,與當今區(qū)塊鏈領域的訴求相比,不僅沒有絲毫的遜色,甚至可以說是有過之而無不及。
區(qū)塊鏈因為其承載經(jīng)密碼學勾稽、群體見證從而可傳輸價值的“公共賬本”而變得重要起來。但是一個像比特幣一樣只能記賬和轉(zhuǎn)賬的公共賬本,只是對現(xiàn)實世界人們的“賬本”、“錢包”或“保險箱”的簡單模仿。對于大千變化的數(shù)字世界來說,這點簡單模仿似乎太單薄了些。V神說,好吧,我來給你們加點作料。于是有了虛擬機和智能合約。虛擬機是智能合約的執(zhí)行環(huán)境,但是,在別人掌控的主機上,作為執(zhí)行環(huán)境的虛擬機和作為執(zhí)行對象的合約代碼都是可偽造、可做手腳的。智能合約里又充進去了許多交給智能合約支配的數(shù)字資產(chǎn),萬一把不可信的執(zhí)行結果達成了共識回寫到賬本,那就萬劫不復了。于是乎,“記賬”的概念在以太坊那里有了新的推廣,不僅記錄賬本上你直接支配的資產(chǎn),也記錄用代碼支配著你的一部分資產(chǎn)和信任狀態(tài)的智能合約的運行軌跡,即所謂“世界狀態(tài)”。如果“世界狀態(tài)”的比對是成功的,智能合約的運行結果據(jù)稱就是可信的。為了以“公鏈”的方式達成對智能合約執(zhí)行結果的可信性,于是有了成千上萬臺計算機在同樣的虛擬機執(zhí)行環(huán)境下運行著同樣一批智能合約的蔚然景觀。
但是,難道這就是“可信”的代價?這就是“世界計算機”這么美好的概念帶給我們的現(xiàn)實?不!且不說數(shù)十萬個合約擠在一條公鏈上等待分配計算資源來運行是一件多么恐怖的事情,導致“油”價水漲船高,單就是這種千軍萬馬低效率地做同一件事情的打法,也絕非一個訓練有素的計算機專業(yè)人士所能容忍,更不要說那些揭竿而起的極客了。有人犯傻,就有聰明人的機會。
一種解決方案就是把合約(或一般地,DApp)的執(zhí)行引到“側鏈”上去。在對合約的執(zhí)行結果只有少數(shù)人感興趣,但合約所關聯(lián)的數(shù)字資產(chǎn)與公鏈仍然有千絲萬縷聯(lián)系的情況下,這是一個可行的解決辦法。亦來云(Elastos)傾向于這種解決方案。
還有一種解決方案就是跨鏈。用同構的子鏈運行智能合約,所涉及的數(shù)字資產(chǎn)則在子鏈和公鏈之間進行跨鏈清算。Cosmos傾向于這種解決方案。
EOS更加狡猾。明知公鏈資源緊張,偏偏把緊張的資源拿出來拍賣形成套路,什么內(nèi)存啊、畫布啊,都干得出來。
前兩種方法在對計算壓力進行分流方面做得都是可圈可點的。但是現(xiàn)狀是,一個DApp部署在鏈下,要么不涉及“可信”訴求,要么對“可信”無可奈何只能接受現(xiàn)狀(例如天氣預報、航班到達時間、比賽結果比分這樣的外部信息源),否則部署在鏈上一定是首選。避開公鏈而選擇側鏈和跨鏈,仍然沒有離開“鏈”。這是一種必然的宿命,還是沒有找到關鍵的突破口?
EOS的做法不是在解決問題,而是在利用沒解決的問題發(fā)“鏈難財”,不說也罷。
“世界計算機”和區(qū)塊鏈的關系,陷入深深的糾結當中……
一切即挖礦
今年開春,“交易即挖礦”的口號引發(fā)了一場至今尚未偃旗息鼓的“搬磚引流”大戰(zhàn)。所謂“交易即挖礦”,就是把平臺幣的發(fā)行和來交易所交易的流量掛鉤。從金融角度看,流量并不等于流動性,平臺幣并不是獎勵給提供更好流動性的交易者的,而是獎勵給被扭曲的、不具有市場化定價意圖的搬磚行為的。這和交易所設立的初衷是相背離的。當然,作為短期的促銷行為,我們無可指責。更何況,平臺幣兼有權益屬性,對于目前數(shù)字資產(chǎn)交易所治理結構的改善是有所幫助的。所以,不能全盤否定“交易即挖礦”的做法,但“交易即挖礦”也說不上就是能使交易所脫胎換骨的靈丹妙藥。
按下交易所不表,我們來拓展一下“交易即挖礦”這個口號。它對我們的最大價值在于,從這個口號往前再走一步,就是“一切即挖礦”。從今年六月份筆者在烏鎮(zhèn)提出“一切即挖礦”這個觀點以來,筆者得到了方方面面對這個觀點的響應。現(xiàn)在,我們從“世界計算機”的角度,看看“一切即挖礦”意味著什么。
在現(xiàn)實世界中,我們遇到大量的計算任務和信息處理任務,都具有執(zhí)行難度和檢驗難度的非對稱性。執(zhí)行任務難,檢驗執(zhí)行結果容易的例子比比皆是。數(shù)學家們?yōu)榱死杪孪肭案昂罄^奮斗了一百多年,好容易有牛人宣稱差不多做出來了,結果一曬出來輿論嘩然,不少人說這根本沒有證明么。數(shù)學證明,構造難,檢驗相對容易。在數(shù)理邏輯中,即使是命題邏輯公式,構造證明的復雜性是NP完全的,檢驗證明的復雜性卻是多項式的。
NP完全問題都有這樣的特點。
現(xiàn)實的很多工作流程,分解開來也是這樣。做一個東西難,檢驗一個東西做得是否合格,就相對容易很多。你為社區(qū)做一項具體的貢獻難,大家檢驗你做沒做你所聲稱的貢獻,容易多了。
所以,以上的例子在佐證“一切即挖礦”的觀點。一切即挖礦,作為一種DApp架構設計的方法論原則,可以這樣來表述:把一項工作盡可能地分解成為若干個“執(zhí)行-驗證”環(huán)節(jié)。把“執(zhí)行”環(huán)節(jié)甩到鏈外,不關心其過程,只要其結果;把驗證過程留在鏈內(nèi),群體見證,保證其可信性,并把結果的可信性與激勵的可信性強掛鉤、緊耦合。
可以看出,這樣的架構安排如果能夠得到徹底的貫徹,公鏈計算資源會有根本性的釋放和緩解。公鏈只做檢驗,不做只看結果不看過程的任何事情。要干這些事情,去鏈外干。反正你干的不對,沒人踩你。你干得慢,你拿不到激勵。如此而已。反過來,在鏈外發(fā)揮最大效率優(yōu)勢的執(zhí)行方,會得到更多的激勵。這可以鼓勵技術極客們把功夫花在鏈外,讓DApp干好該干的事情。
比特幣的礦機,就是最典型的鏈外DApp。你怎么解哈希,沒人管你,也沒必要把代碼和芯片設計曬給別人。區(qū)塊鏈只需要看結果,只需要對結果達成共識。在這種架構下,礦工們也確實得其所了。這將不是個例,一切DApp,只要可能,執(zhí)行環(huán)節(jié)一定會甩到鏈外;油水大到一定程度,一定會硬件化。這是不可阻擋的歷史潮流。
?????? 原來,世界計算機也可以不那么笨重的。