
現(xiàn)有的區(qū)塊鏈通常是一個獨立閉環(huán)的系統(tǒng),它的賬目都是在鏈上自發(fā)產(chǎn)生和結算的。要想讓區(qū)塊鏈應用到更多領域,預言機是整個生態(tài)中必不可少的重要環(huán)節(jié)。只有當區(qū)塊鏈與外界連通,才能賦能實體業(yè)務更多的可靠驗證和計算能力。
預言機(oracle mechanism)是鏈外信息寫入?yún)^(qū)塊鏈的一種機制。
閉環(huán)運行的區(qū)塊鏈
在區(qū)塊鏈賬本上,所有的賬都必須有一個起始,其他的賬都是“起始賬”的延伸。最初的 50 個比特幣就是在比特幣的創(chuàng)世區(qū)塊(Genesis Block)上產(chǎn)生的,之后它們在區(qū)塊鏈賬本上流通,從 A 賬戶轉(zhuǎn)賬到 B 賬戶,又從 B 賬戶轉(zhuǎn)到 C 賬戶。
創(chuàng)世區(qū)塊即比特幣的第一個區(qū)塊,是比特幣區(qū)塊鏈的開始。
又如在以太坊上,我們使用智能合約發(fā)行代幣,代幣一般使用鑄造函數(shù)(mint)發(fā)行到區(qū)塊鏈上,鑄造函數(shù)(一段程序代碼)的運行結果就是代幣的起始賬目,當鑄造成功后,代幣就具備了在以太坊上流通的特性。
不管是比特幣還是以太坊,現(xiàn)有的區(qū)塊鏈系統(tǒng)都具有這種閉環(huán)運行的特性,即賬目的產(chǎn)生需要一個起始。如果我們更寬泛的看待這個問題,就會發(fā)現(xiàn)區(qū)塊鏈上的事物(數(shù)據(jù))都是在區(qū)塊鏈之上依據(jù)一定的規(guī)則“憑空”產(chǎn)生的,基于這個“憑空”的開始,才有了后面整個過程。

可以看到狀態(tài)的起始、變化和最后的終止都運行在閉合的區(qū)塊鏈中。因為區(qū)塊鏈的閉環(huán)運作模式,讓現(xiàn)有的互聯(lián)網(wǎng)、傳統(tǒng)的經(jīng)濟要素都難以接入。那么,區(qū)塊鏈的應用就只存在兩種方式:
在閉環(huán)中完全重塑一種新的機制
將現(xiàn)有機制中的要素映射到閉環(huán)系統(tǒng)中
重塑
比特幣 ,以太幣是區(qū)塊鏈應用的經(jīng)典案例,它們的產(chǎn)生就是重塑“貨幣”的過程。通過使用區(qū)塊鏈構建的代幣系統(tǒng),可以在不依賴外部數(shù)據(jù)的閉環(huán)中運行。代幣通過挖礦等規(guī)則“憑空”產(chǎn)生(消耗電能),得益于區(qū)塊鏈共識算法,代幣的所有權不受第三方控制,只要保存好自己手中的私鑰,其他任何人都不能挪動或者銷毀這些代幣資產(chǎn)。這些在區(qū)塊鏈上重塑的代幣由于得到社會的廣泛認同,產(chǎn)生了價值,并得以流通。
這種重塑已經(jīng)產(chǎn)生巨大的能量,對現(xiàn)有的金融乃至社會認識都產(chǎn)生了巨大的影響。而在代幣重塑之上,智能合約和更多創(chuàng)新機制在不斷的孕育和成熟。
鏈上重塑的事物都具備閉環(huán)中運行的特點,它們可以不與其他系統(tǒng)進行技術上的交互,它們由人們共同的認識產(chǎn)生了新的價值,成為一種普世的新機制。
映射
映射是一種更通用的區(qū)塊鏈應用方式,也是一個必不可少的方式。
想象我們在區(qū)塊鏈上設置了一個體育比賽頒獎程序,獎金可能是比特幣或者以太幣。獎金的頒發(fā)需要根據(jù)鏈外的比賽結果進行結算,因此我們需要將比賽數(shù)據(jù)映射到鏈上。在頒獎過程中,程序獲得映射數(shù)據(jù)后才能計算并執(zhí)行獎金的分發(fā)。
另一種場景是資產(chǎn)映射。如房屋一類的固定資產(chǎn),其產(chǎn)權是在國家統(tǒng)一登記頒發(fā)。如果這類資產(chǎn)能映射上鏈,資產(chǎn)的權屬證明和產(chǎn)權交割都會變得極其快捷和方便。
將鏈外數(shù)據(jù)或?qū)嶓w映射到鏈上,是將區(qū)塊鏈應用和外部世界鏈接的重要方式。
重塑和映射,不是二元擇一,不是非此即彼的單項選擇,它們往往相互交織、彼此結合,創(chuàng)造出新的模式。
區(qū)塊鏈提供了透明和可信的計算能力,由于其閉環(huán)運行的特性,當數(shù)據(jù)本身就在鏈上產(chǎn)生(如代幣),整個計算的結果自然是準確可信的;但是如果業(yè)務涉及鏈下數(shù)據(jù),如何確保數(shù)據(jù)的可信就是一個重大的議題。預言機的功能就是將鏈外數(shù)據(jù)鏈接到區(qū)塊之上,如何建立一種準確和可靠的鏈接機制是預言機設計的根本目標。
注意,預言機并不是映射的唯一方式。很多場景,如房屋產(chǎn)權可能只需要一個中心化的權威機構直接將數(shù)據(jù)打包到區(qū)塊鏈即可。
Chainlink 如何鏈接外部數(shù)據(jù)
Chainlink 的目標是建立一套去中心化的預言機,為智能合約提供鏈外數(shù)據(jù)訪問的能力。
機制概覽
Chainlink 的機制如下圖所示:

- 鏈外數(shù)據(jù)
鏈外數(shù)據(jù)可以是互聯(lián)網(wǎng)、支付機構、物聯(lián)設備或者不同種類區(qū)塊鏈(跨鏈)提供的 API 接口。可以是任何可以讀取的數(shù)據(jù)源。
- 外部數(shù)據(jù)適配器
外部數(shù)據(jù)適配器是鏈外數(shù)據(jù)的“翻譯”,將外部數(shù)據(jù)轉(zhuǎn)化為 Chainlink 節(jié)點中的統(tǒng)一數(shù)據(jù)結構。適配器可以用任何語言編寫。
- Chainlink 節(jié)點
Chainlink 節(jié)點會訂閱區(qū)塊鏈產(chǎn)生的事件。Chainlink 收到指定的事件后,會進行任務調(diào)度,使用數(shù)據(jù)適配器獲取鏈外數(shù)據(jù)(一般情況下 Chainlink 可直接讀取開放的 API,在特殊情況下才會使用外部數(shù)據(jù)適配器)。Chainlink 節(jié)點需要包含一個熱錢包用于交易發(fā)送,將外部數(shù)據(jù)寫回產(chǎn)生事件的區(qū)塊鏈上。
- 區(qū)塊鏈節(jié)點
為 Chainlink 節(jié)點提供可監(jiān)聽的事件,同時負責廣播 Chainlink 節(jié)點的數(shù)據(jù)寫入交易。
數(shù)據(jù)的請求和寫入
Chainlink 使用了請求響應模式,即當客戶端發(fā)起一個請求后,Chainlink 接收請求,執(zhí)行外部數(shù)據(jù)功功能,并將數(shù)據(jù)寫回鏈上。
當前的 Chainlink 主要構建在以太坊網(wǎng)絡上。請求響應機制需要在以太坊網(wǎng)絡上部署「客戶端合約」和「Oracle 合約」??蛻舳撕霞s用于數(shù)據(jù)請求的發(fā)起和數(shù)據(jù)結果的消費;Oracle 合約會產(chǎn)生請求事件,供 Chainlink 進行監(jiān)聽,同時也作為 Chainlink 寫回數(shù)據(jù)的中轉(zhuǎn)站。

交易過程如上圖所示:
發(fā)起數(shù)據(jù)請求到客戶端合約
客戶端合約向 Oracle 合約發(fā)起調(diào)用,Oracle 合約接受交易后產(chǎn)生事件
Chainlink 監(jiān)聽到 Oracle 合約產(chǎn)生的事件,進行外部數(shù)據(jù)獲取,并將數(shù)據(jù)寫回鏈上
數(shù)據(jù)通過 Oracle 合約寫入客戶端合約
最終,客戶端合約中的數(shù)據(jù)更新為本次請求獲得的最新數(shù)據(jù)結果。
多數(shù)據(jù)聚合
上節(jié)介紹的請求響應過程只有一個 Oracle 合約和一個外部數(shù)據(jù)源,這時并不能完全保證數(shù)據(jù)的準確性和可靠性。為了獲得更高的準確性和可靠性,可以使用更強大的多數(shù)據(jù)源客戶端。

多數(shù)據(jù)源客戶端也是以太坊上的一個智能合約,相比普通客戶端,它的一次交易會向多個 Oracle 合約發(fā)起請求,每個 Oracle 合約都會產(chǎn)生各自的事件。通常,一個 Oracle 合約代表著一個數(shù)據(jù)提供者,每個 Oracle 合約之后的數(shù)據(jù)提供者監(jiān)聽到事件后,各自去獲取不同的外部數(shù)據(jù),數(shù)據(jù)提供者將數(shù)據(jù)回寫到自己的 Oracle 中。最終,會有多條數(shù)據(jù)結果匯聚到客戶端合約。
在多數(shù)據(jù)源客戶端合約,我們可以編寫一系列的聚合規(guī)則。比如:收到多個數(shù)據(jù)后去掉異常值,計算剩余數(shù)據(jù)的均值作為結果。合約的聚合規(guī)則可以靈活定制,想要向哪些數(shù)據(jù)提供者發(fā)起請求也可以進行配置。
Chainlink 對數(shù)據(jù)提供者有一套的罰沒機制,并希望構建強大的聲譽系統(tǒng)對數(shù)據(jù)提供者進行評估。這些功能將在 Chainlink 節(jié)點上實現(xiàn),新的功能還在不斷的開發(fā)和改進中,本文不再詳述。
該機制目前較大的缺點可能是成本問題,客戶端對每一個 Oracle 的請求都會收取 0.1 的 LINK 幣作為費用,多個 Oracle 聚合時成本較高;同時請求響應模式也有一定的延遲,從請求發(fā)出到數(shù)據(jù)寫回通常需要經(jīng)過幾個區(qū)塊的間隔;最后一點缺憾是不同的客戶端請求同一個數(shù)據(jù)會造成同一數(shù)據(jù)重復寫入?yún)^(qū)塊,造成一定的資源浪費。
不論如何,Chainlink 創(chuàng)建了一種智能合約主動獲取鏈外數(shù)據(jù)的機制,這些鏈外數(shù)據(jù)幾乎可以來自任何數(shù)據(jù)源。同時,Chainlink 提供了一種去中心化的解決方案(多個 Oracle 的聚合),提高數(shù)據(jù)準確性和可靠性。
打破邊界
任何的數(shù)據(jù)源,不管是來自互聯(lián)網(wǎng),API 產(chǎn)生的行情、新聞、輿論數(shù)據(jù);還是各種物聯(lián)設備,使用傳感器獲取的定位、速度、溫度、照片,人類的心跳、血壓;不管是任何數(shù)據(jù)實體、物理對象乃至智能設備采集的人類體征,都可以借助預言機發(fā)送到智能合約,創(chuàng)建出由數(shù)據(jù)驅(qū)動的智能合約。
支付、交易、保險、治理、游戲所有的一切都在使用傳統(tǒng)賬本理念,它們都通過中心化的價值協(xié)商進行價值交換。為了保證賬本準確性,保證整個價值交換系統(tǒng)的可靠性,我們耗費了大量的資源去構建復雜的規(guī)則,以求解決多方的沖突和糾紛。這套傳統(tǒng)機制的效率或許已經(jīng)接近極限,其效用幾乎達到了最大化,最終所產(chǎn)生的摩擦仍舊消耗著巨大資源。打破邊界,使用區(qū)塊鏈的共識機制,借助預言機和智能合約,我們或許可以創(chuàng)建一個互聯(lián)、安全、數(shù)據(jù)驅(qū)動的全新價值交換體系,在一個新起點之后,或許會少一些沖突和糾紛,釋放更多的創(chuàng)造力。
預言機打破了區(qū)塊鏈和外部世界的邊界,將區(qū)塊鏈可靠的驗證和計算能力賦能更多應用。