作者:楊鎮,資深軟件工程師、架構師、獨立講師,具備 18 年軟件開發經驗,曾翻譯《以太坊黃皮書》、《Solidity 官方文檔》、《精通以太坊》,著有《深入以太坊智能合約開發》、《以太坊智能合約高級開發課程》、《工程師眼中的比特幣和以太坊》
本文首先會對大數據和 AI 技術做一些概念掃盲,算是個小小的科普,也會涉及一些我認為有助于我們從本質上理解這些技術的關鍵點;我本人其實早就想聊聊這些內容,因為我見多太多人乃至很多公司都并不確切地知道這些最基本的概念,都只是在跟風或者被很多媒體、大公司的商業炒作所迷惑。所以本文的很多內容都可以看作是對從大眾層面理解這些技術概念的誤區的一種澄清。
當然,本文中也會聊聊我個人「略懂」的區塊鏈以及時下熱門的「跨鏈」話題,這也是我寫本文的主要目的。希望本文能給專業的和非專業的朋友都提供一些有用的信息或者啟發。
寫作本文可以說是一時興起,其中關于「跨鏈」的內容,靈感主要來自于前幾天 Gavin Wood 博士說到的一個觀點。
到底什么樣的數據才是大數據
近些年,越來越多的企業、媒體在炒作「大數據(Big Data)」,我想無論是專業的技術人員還是普通大眾,其實首先都要明確一個概念——到底多大的數據才能叫「大數據」?
我曾經供職于一家幾乎所有中國人都知道的制造業公司,公司內部也曾說過要做大數據分析,要引入大數據概念內的技術工具和基礎設施,其根據就是其業務數據量已經達到了 100 多 TB (1 TB 約等于 1 萬億字節)。但這顯然忽略了一個重要因素,就是這 100 多 TB 數據是這家公司自成立以來的所有數據(20 多年的歷史數據)。而 Facebook 每天產生的數據量早已超過了 10 TB,請注意,是每天。這是一個量級么?有可比性么?
所以我們談「大數據」,最重要的指標其實在于「數據增量大」,或者叫做「數據增速大」。僅僅是歷史數據量大,談不上「大數據」,因為不管歷史數據再多,他們都是「歷史數據」,是不會再修改的數據,分析一次就完事了;而如果「數據增速大」,其絕對數據量自然也就會非常大,那么它對于數據分析工具和相關技術的要求也就會相應提高。
而當我們以「數據增速大」作為關鍵指標來篩選的時候,我們就會發現:其實目前市面上 99.9% 的公司所謂的「大數據」分析,都只是給 20 多年前就出現了的 BI (Business Inteligence,即商業智能,因為篇幅原因,這里不做展開介紹)業務換了個新馬甲而已。真正能稱得上是「大數據」的業務,大概只有那些全球化的數據信息服務,或者信息化的社會公共基礎服務。前者的代表就是全球化的社交媒體 / 內容平臺(Facebook、Twitter、微信、早期的微博)、搜索引擎(Google、百度)、高流量的電商平臺(Amazon、淘寶)、高流量的支付交易網關、高活躍度的移動智能設備系統服務等互聯網應用;后者的代表則是類似運營商、公共基礎設施服務(比如交通、能源)等一般由政府控制的社會公共基礎服務。
「大數據」的概念首次被提出是在大概 10 年之前,目前業內廣泛認同的 3V 指標是衡量大數據的最主要指標,它們包括 Volume (數據量)、Variety (多樣性)、Velocity (增長速度),后來有業內人士在 3V 指標的基礎上增加了 Veracity (真實度)和 Value (價值),將其擴展為 5V 指標。而在大數據的多樣性和高速增長特性的共同影響下,非關系型數據庫(Nosql database)也得到了大量的應用和快速的進化發展。
此外值得一提的就是近年來得到飛速發展的物聯網(Internet of Things)公司。基于大量的終端設備 / 傳感器所采集 / 傳輸的數據是有可能達到「大數據」的級別的,只是目前能支持到「數億」量級終端設備的公司還并不多,但這已經是一個可以看到的未來方向了。
顯然,大數據并不是普通公司能玩兒的動的東西,說到底還是資本 / 資源的游戲。當然這里邊的技術含量是有的,對技術人才的需求也是有的,只是這個方向大概真的不適合拿來創業。
要處理海量的、異構的、高速產生的數據,必然需要像諸如分布式數據倉庫、數據清洗工具、數據建模工具、數據分析工具等等相關的技術產品和技術棧的支持,并不是個簡單的工作;即使只考慮傳統的 BI 技術棧,也是個技術活兒;市場需求是沒問題的。但這些不是本文的重點,就不展開介紹了。
AI 又是什么
AI 就是人工智能(Arificial Intelligence),我想大部分人都知道了。所以這里我想再引入兩個術語:神經網絡(Neural Network)和專家系統(Expert System)。
目前如日中天的深度學習(Deep Learning)其實就是基于人工神經網絡(Artificial Neural Network)理論發展進化而來的一套算法系統。那么神經網絡是什么新鮮東西么?并不是。最早的對于用機器模擬人類神經活動的研究開始于 19 世紀末期,而現代人工神經網絡的最初起源則來自于圖靈在 1948 年發表的一篇論文。到上世紀八九十年代,神經網絡的工程實現也有了一些進展,出現了一些雛形。近幾年由 Google 引領的深度學習熱潮,則是人工神經網絡第一次接近實際應用的嘗試,雖然它也還僅僅是一些相對比較成熟的算法而已。
目前知名度最高的深度學習項目就是 Google 的 Alpha Go 了,這個項目用在圍棋領域已經造就了獨一檔的「AI 流」,它甚至引發了一些基礎圍棋理論的發展演進。但是,這個項目其實是一個目標在醫療領域應用的「專家系統」。所謂「專家系統」,就是用機器模擬人類的某個特定領域的專家來進行決策或者判斷。專家系統同樣不是什么新玩意兒。最早的專家系統出現于上世紀七八十年代,它們通常由兩部分組成:推斷引擎(Inference Engine)和知識庫(Knowledge Base)。也就是基于大量的經驗信息 / 數據 / 指標和其對應的結果,用算法引擎來根據新的輸入數據模擬類似于領域專家基于經驗進行的判斷,供人參考。目前在醫療領域的一些深度學習項目,其推斷的準確率已經超過了普通的醫生,尤其是在一些高度依賴于對圖形進行檢查(對各種人眼不易識別的物理特性的判斷)和一些指標相對非常明確的細分領域。
我們應該看到,目前的 AI 熱潮,也只不過是新瓶裝舊酒罷了;在像語義識別這種真正能體現「智能」的領域依然沒有太多應用級別的東西出來,更不用說那些需要「創造力」的領域了。雖然在某些情況下,帶有深度學習引擎的語音機器人、實體機器人聽起來、看起來很「聰明」,但那依然只是訓練了足夠多的「專家」而已;它能給出正確的響應,并不是因為它「聽懂」了,而是因為真實的輸入滿足了某些已知的條件,所以這當然不是真正的「智能」。這就像剛剛提到的 BI 并不「智能」一樣,就像后文會提到的「智能合約(Smart Contract)」并不「智能」一樣,不要被它們的名字騙了。
這里我需要強調:深度學習當然有它的價值,專家系統和其他相關的業務領域當然也有它的價值,我也無意貶低 AI。我只是想說明:深度學習其實仍然算不上是突破性的人工智能技術,它離真正的「智能」仍然有相當的距離,這是受限于目前的 AI 理論沒有實質性的突破。專家系統(深度學習)的局限很明顯,就是一定要基于大量的經驗數據(訓練數據),而這對于普通的公司和創業者而言就是難以逾越的天塹。
看懂了目前的 AI (專家系統)的本質之后,我們再來看 AI 和大數據(BI)的結合也就非常順理成章了,是很自然的事。因為既然有了海量的數據,那就需要嘗試從其中獲得有用的信息,來分析趨勢、進行決策和判斷,這也是 BI 最初的、最本質的目的。而專家系統則需要大量的經驗數據(訓練數據),所以只有那些擁有大量有用數據的公司,才能訓練出高水平的「專家」來。說「數據為王」,一點兒都沒錯;數據才是未來大公司的根本,是核心資源。
到這里,對大數據和 AI 的掃盲就基本結束了。你大概會問:你說的這些我都知道了,但大數據和 AI 是怎么和跨鏈(區塊鏈)扯上關系的呢?別急,我們還得先聊聊關于區塊鏈的幾個基本概念。
區塊鏈解決了什么問題
如果有人問你「區塊鏈是什么」,你會怎么回答呢?相信大家已經在近幾年各種媒體的狂轟濫炸下對區塊鏈有了個印象,不過如果真要讓你正式回答這個問題,我想很多人未必能說的明白。
因為我個人還是做技術的,所以我還是想再次從技術本質的角度來解釋下這個問題。我認為:區塊鏈就是把一個單向變化的無限不循環狀態機放到一個分布式(對等)網絡中對其數據進行冗余拷貝存儲并驗證的計算機系統。這里我必須對那些非技術專業的朋友說一聲抱歉,這是我能想到的最準確的(技術)定義了,但恐怕你們是看不懂的。
結合平時經常會被提及的的一些術語再稍加解釋:
交易:也就是這個狀態機中狀態變動的原動力。交易可以是一個轉賬行為,也可以是一次對(自定義)數據的更改,這取決于各個區塊鏈系統的具體設計。進一步說,交易還可以更泛化地理解為網絡參與者之間的數據交互或數據權屬的轉移。
區塊:就是狀態機中記錄狀態變動的單位。在比特幣和以太坊中,一個區塊可以包含多個交易;狀態機的整體狀態變動,是以一個區塊執行結束的狀態為準的(也就是以多個交易執行的結果作為一個整體狀態標識)。而在前些天 Facebook 發布的 Libra 系統中,每個交易都會產生一個狀態版本(version),整個狀態機的狀態也就是由每個交易執行的結果所決定的,存儲在一個帶版本標識的數據庫(Versioned Database)中。
共識:也就是在一個分布式(對等)網絡中,所有參與者(節點)對狀態機的整體狀態的一個認同。前提是網絡中的大部分參與者,都會對這個狀態機的狀態標識進行驗證,也就是需要它們分別(獨立)完整地執行導致狀態產生的所有交易來檢查自己執行所獲得的狀態是否與網絡中其他節點執行的結果一致。得到網絡中大多數參與者確認(也就是大多數參與者本地計算的狀態結果一致)的狀態,就將作為整個狀態機的最終狀態。這個過程也可以成為「最終確認(finality)」。
那么,這樣一個狀態機系統,到底解決了什么問題呢?這里我們還需要了解幾個關于區塊鏈的基本事實:
區塊鏈上的交易是需要經過數字簽名的。關于什么是數字簽名,這里不展開介紹了。它的作用和我們手寫的簽名是一樣的,也就是一個表明對數據 / 內容的認可的確認信息。
在區塊鏈上標識一個參與者(人或者程序)是通過所謂的「地址」來實現的,這個地址和交易中的數字簽名有一個唯一對應的關系。因為這里涉及到一些密碼學的基本概念,不做過多解釋了,我們可以把「數字簽名」和「地址」簡單地理解為屬于某個人的公開信息,比如人的名字和住址。
區塊鏈上的所有交易信息都是公開的,唯一隱藏的就是數字簽名和實際簽名人的對應關系。也就是誰都可以看到是某人簽名了某個交易來向某個地址轉了若干資金,只是不知道具體是誰做的這個簽名以及誰住在那個住址(也就是誰獲得了那筆錢)。
好了,現在我們可以來回答「區塊鏈解決了什么問題」了:區塊鏈實際上是提供了一種可以在不引入任何第三方的情況下,就能保證交易安全完成的技術手段。
就像剛剛介紹過的,這里說的「交易」,可以是一次價值轉移(轉賬),也可以是一次對用戶數據(自定義數據)的更改,還可以更泛化地理解為網絡參與者之間的數據交互或數據權屬的轉移。理解這個概念對我們理解和思考區塊鏈的應用至關重要。
看到這里,可能很多非技術專業的朋友大概仍然沒看懂區塊鏈到底能干什么。沒關系,下面我們來具體看看最具代表性和影響力的兩個區塊鏈項目——比特幣和以太坊分別做了什么事。
比特幣解決了什么問題
就像比特幣白皮書的標題所說的,比特幣就是一個點到點的電子現金系統(Bitcoin: A Peer-to-Peer Electronic Cash System)。也就是能提供點到點(僅需要交易雙方參與)的安全轉賬功能。
比特幣的設計其實非常簡單,但這種簡單是深思熟慮之后的絕妙設計,而絕不是很多其他項目的那種「簡陋」。正所謂大道至簡,比特幣集在其之前已經產生的若干類似項目之大成,構建了世界上第一個獲得全球共識的電子現金系統,其開創性的意義配得上所有的贊譽。關于比特幣的產生背景和其重要影響相信大家已經看過很多,這里就不再過多介紹了。
雖然比特幣白皮書中并沒有明確給出「區塊鏈(Blockchain)」這個現在已經風靡世界的術語,但它的確是在事實上定義了「區塊鏈」技術的第一個成功的區塊鏈應用系統。這個項目所實現的就是一個可以無需依賴任何第三方而完成的、安全的電子現金歸屬權轉移系統。
在此我必須再安利一下我們入門區塊鏈的必讀資料《精通比特幣(Mastering Bitcoin)》。尤其是對有技術基礎的朋友來說,這本書你一定要讀懂、讀透。相信我,你一定不會失望!
以太坊是想解決什么問題
讓我們依然先來看看以太坊項目的白皮書標題:下一代的智能合約和去中心化應用程序平臺(A Next-Generation Smart Contract and Decentralized Application Platform)。這同樣已經明確定義了以太坊的設計目標。但這個定義中引入了兩個重要的術語——智能合約(Smart Contract)和去中心化應用程序(Decentralized Application)。下面就讓我引用我自己開發的圖文音頻課程《工程師眼中的比特幣和以太坊》中的部分內容來分別解釋一下這兩個術語。因為它們對我后續想進行的討論非常重要。
智能合約(Smart Contract)這個詞最初是由一位美國的計算機科學博士尼克薩博(Nick Szabo)在他 1997 年發表的一篇論文中提出來的。智能合約指的是一種基于計算機技術實現的,可以免除人工干預而自動執行、自動校驗、自動基于外部指令給出回應的具有交互性或者互操作性的合約;其本質是一種計算機程序。這個概念本身相對比較抽象,所以尼克薩博本人在后來的一些訪談中曾經用自動取款機或者自動售貨機來作為智能合約的物理實例;它們就是基于某些公開的、眾所周知的規則,能夠根據用戶的指令和實際業務數據的狀態給出可預期的回應的這樣一種應用程序。
......
當然,其實這個過程并不「智能」,從某種意義講,也并不是「合約」。所以這個詞從其誕生開始就有一些爭議,尤其是它會給一些不明所以的用戶某種程度的誤解。從本質來看,所謂「智能合約」實際上只是一種可以基于某種狀態數據自動給出回應的應用程序而已。不過出于歷史原因,「智能合約」的叫法還是被業內接受并延用了下來。
......
目前的絕大多數 Web 應用,其用戶數據都是保存在由某個公司、組織或者個人控制的「服務器」或者「服務器組」之中的,這些應用中的絕大部分業務計算,也是由這些服務器或者服務器組來提供的;所以這種模式,可以認為是一種「中心化(centralized)」的模式。
那么「去中心化應用程序(Decentralized Application)」,也就是將數據保存到類似于「點對點的時間戳服務器(即區塊鏈)」這樣的,并不是由中心化的公司或組織控制的服務中,并且由這樣的「去中心化」服務來提供具體的業務數據計算能力的一種應用程序。「去中心化應用程序」也可以簡單地理解為是基于智能合約進行狀態追蹤和計算的一種應用程序。
與比特幣實現的可以不依賴于任何第三方就能安全完成的電子現金交易類似,智能合約和去中心化應用程序也是基于「區塊鏈」的,也就是說它們同樣是可以在不引入任何第三方的情況下就能安全完成的、可以自動執行的、可定制的計算機程序。與電子現金交易相比,智能合約顯然給了我們更大的想象空間,提供了更多的可能性;而去中心化應用程序,也被認為是有巨大潛力的技術方向。
這里我不想過多討論去中心化應用程序目前的窘境,相信大家也已經看過了很多這方面的資料或者分析文章。任何生態的構建都是需要時間和一些特定的、革命性的條件的,所以我們大可靜觀其變,不應該過度吹捧或者過早唱衰。
我想有心的讀者可能已經注意到了我在小標題用詞上的區別:「比特幣解決了什么問題」和「以太坊是想解決什么問題」這其中表達的意思顯然是不同的。
比特幣系統作為世界上第一個點對點的電子現金系統,已經穩定運行了超過 10 年,其價值也得到了全球化的認同,所以我們可以認為它已經解決了「如何構建一個全球化的去中心化經濟系統」的問題。
而對于以太坊來說,雖然它是世界上第一個成功的公共智能合約平臺,但從技術上講,它其實只是個「實驗性」的項目。從以太坊項目中暴露出來的公共智能合約基礎服務層面的主要問題,比如處理性能問題、合約升級問題(合約漏洞)、存儲爆炸問題、隨機數問題、與外部世界的交互問題等等,至今仍然沒有被很好地解決。雖然以太坊擁有世界上最大的開發者技術社區,有最活躍的生態,其 2.0 版本也已經進入日程,但實際結果如何,目前還未可知。從這個角度講,我認為以太坊想解決的問題,也就是「如何提供一個全球化的、安全的公共智能合約平臺」這個問題,其實還沒有真正得到解決;也許,我是說也許,它的方向就是錯的。
業內有很多人提出過這樣的疑問:是不是應該把所有用戶(合約)的數據、所有合約的計算都放在一起(一個鏈或者一個系統中)呢?計算機軟硬件發展史中屢試不爽的分層思想能否在區塊鏈領域里發揮作用呢?
跨鏈又是要解決什么問題
所謂「跨鏈(cross chain)」的提法,最早大概是在 2015 到 2016 年間被提出來的,從 2017 年才開始被越來越多的業內人士所討論。我本人最初聽到這個術語的時候也是不明所以,不知道這個「跨鏈」到底是要跨什么東西。只是要解決不同鏈上的資產如何交易的問題么?這已經通過各種中心化、去中心化交易所解決了啊,為什么還要提跨鏈呢?
直到最近我聽到 Gavin Wood 博士談論的關于區塊鏈未來發展方向的一些觀點的時候,結合我先前對跨鏈技術的了解,我才恍然大悟:其實「跨鏈」技術要解決的就是如何靈活地支持區塊鏈的分層擴展問題。理解了這一點,我們就應該可以想到,其實「跨鏈」技術才是前兩年以太坊高速發展中所暴露出來的、區塊鏈系統的最大挑戰——「擴容」問題的終極解決方案。
如果我們將以太坊 2.0 的技術方案與目前的兩大「跨鏈」技術框架 Cosmos、Polkadot 相對比的話,我們就會發現,它們解決的其實都是區塊鏈如何分層擴展的問題。只不過它們選擇了不同的技術方向。(因為篇幅原因,我這里就不對這三個項目做進一步的比較說明了。有興趣的讀者可以去參考劉毅老師的《萬字長文說透 Polkadot 架構》,其中有詳細的解讀。)
跨鏈技術框架最吸引人的地方就在于它們可以支持異構的子鏈(也有的項目將之稱為其他的名稱,比如 zone、para-chain 等等),它們本質上就是一種可以與主鏈進行安全通信(有技術保證的安全消息交互)的附屬區塊鏈。而子鏈自己又可以衍生自己的子鏈,子鏈的子鏈同樣可以通過某種形式的「消息」來與各自的主鏈進行通信,這樣就形成了理論上無限擴展的可能。
這種支持異構子鏈的設計,也就解除了子鏈間的耦和,使子鏈自身可以獨立演化升級,只要保持與主鏈標準一致的鏈間消息即可;子鏈內部的共識甚至都可以與其他子鏈或主鏈不同。這也就給了區塊鏈基礎設施最大的靈活性和可擴展性。從這個意義上講,我認為「跨鏈」技術才是真正將引領區塊鏈生態未來發展的關鍵基礎。
有了跨鏈技術,也就使「一子鏈一應用」或者「一子鏈一業務」的模式成為了可能。(去中心化)應用程序之間不再需要互相爭搶昂貴的、有限的公共計算資源和存儲資源,而可以根據自身業務的需要選擇最合適的數據結構、共識方案以及存儲方案。每個企業(組織)都可以定制最適合自己業務的區塊鏈基礎設施,只需要保證它們能提供與主鏈標準一致的消息即可。這當然是極其重要、也極其有價值的技術特性;這也就是跨鏈技術的真正意義所在。
跨鏈技術——連接大數據、AI 們的可信橋梁
在前文中我們已經了解了大數據、AI、區塊鏈和跨鏈技術的基本概念。那么,看似風馬牛不相及的它們又是如何聯系到一起的呢?
我們知道,在區塊鏈的世界里標識一個人或者程序,需要用一個密碼學中的非對稱公私鑰對來完成。顯然,讓絕大多數普通用戶去理解深奧的密碼學、去理解私鑰的重要性、去接受沒有「找回密碼功能」的原因,幾乎是個不可能完成的任務;這也成了現今絕大多數區塊鏈應用所共同面臨的一個關鍵阻力。那么如果把人換成 AI 呢?如果我能用生物識別技術,比如指紋、faceId 等等獲得 AI 的控制權,再由 AI 替我去管理與區塊鏈交互必需的數字身份又如何呢?因為 AI 本身就是計算機程序,本身就是數字化的,所以對 AI 做數字身份標識相對就容易了很多,也更加自然。我們完全可以用一個被很好地基于大數據訓練過的 AI (機器人)來代替人去與區塊鏈進行互動。
就像我在本文中介紹的,當我們談論 AI 時,也就不可避免的會談到大數據;因為實際上任何 AI 活動其實都離不開大數據的支持,無論是訓練、推斷還是對實際操作或者計算過程進行日志記錄。所以 AI 和大數據是相輔相成、密不可分的。
而更進一步地,在不久將來,隨著 AI 能做的事越來越多,必然會產生需要 AI 直接與其他 AI 進行交互的場景。那么,如何保證 AI 與 AI 之間的信息交互是安全可信且可審計的呢?是通過在不同公司之間建立數據網關?還是簡單地通過客戶端轉發?我想真正的答案就是智能合約 + 「跨鏈」技術。
基于區塊鏈本身的特性,我們可以給每個 AI (機器人)都增加身份標識,然后通過智能合約來規范、限制和記錄 AI 的行為。在某個子鏈(業務鏈)上,會存在多個由 AI 控制的「人」,他們可以在這個鏈上通過智能合約進行互動。而在有了跨鏈技術的支持之后,各個業務子鏈上的 AI 就可以「對話」了!也就是 AI 可以知道其他的 AI 做了什么事,并給出必要的響應。這將毫無疑問地成為一個想象空間非常大的新領域,也是一個真正可以實現安全、高效、可審計的數字化交互方式的技術方案。所以,跨鏈技術是完全必要的,其出現和發展也是必然的!
其實不只是 AI,其他任何可以方便地用數字身份(公私鑰對)標識的資源都可以很自然地與區塊鏈、跨鏈技術相結合而獲得相互「溝通」的能力,進而產生規模效應。這大概會是未來區塊鏈產業發展的源動力。
結語
大數據、AI、區塊鏈和跨鏈技術無論哪項都自成體系,都有很多很多的細節可以討論;本文只是對它們的來歷和現狀做了極其簡單的介紹,也記錄了我個人對它們的一些思考。如果各位能從其中得到些許啟發,我也就心滿意足了。
在我看來,跨鏈技術和 AI 一樣具有很大的潛力,因為這才是真正解決區塊鏈擴展問題的根本方法,也是使區塊鏈成為通用的互聯網基礎設施的必備條件。我也相信區塊鏈的未來還有很多的可能性等待著我們去發現,讓我們共同努力吧!