原文標題:《預言機 – 區塊鏈的觸角》
作者:李世敬
在保險、金融、隨機預測、物聯網等各個場景中,預言機在區塊鏈中已經展現出其不可替代的價值:作為區塊鏈延伸的觸角,搭建了鏈內與鏈外之間的可信橋梁,構建相互融合的價值生態,
本文將從預言機的起源、定義、原理、發展等角度進行介紹。
—— Part 1 從神諭、圖靈機角度看預言機 ——
說起預言機Oracle功能,頗具歷史和神話色彩,它與OracleOracle無關,最早起源于古希臘神話中的角色“神諭者”,神諭者可以跟奧林匹斯山上的諸神進行溝通,對未來做出預言,并將神的旨意傳達給祈求未來的人民,因此Oracle最早有著“先知”的含義;在計算復雜度理論與可計算性理論中,預言機(oracle machine)是一種抽象電腦,用來研究確定性問題,可以被視為一個附加了黑盒子(預言者)的圖靈機,這個黑盒子的功能是可以在單一運算之內解答特定問題。根據給定,預言者可以給予“是否”或者確定的計算決策結果,
相信大家已經看出在不同的場景中,預言機都會做著相同的事:在未來的某個時間給予某個系統一個確定的輸入,區塊鏈中的預言機也不例外,甚至可以說是天作之合,其作用恰好解決了區塊鏈中的一大痛點問題:外部數據源的輸入確定性。
圖1 預言機的多種含義
—— Part 2 區塊鏈預言機中間件解讀 ——
區塊鏈為什么這么在意外部輸入的確定性?
因為在分布式系統中,需要確保多個節點最終執行結果的一致性,從而保證系統穩定運行,對于隨機數、實時數據等操作是極具風險的,所以區塊鏈犧牲了會導致執行結果不一致的外部動態數據的獲取需要,把自己變成了一個封閉的、確定性的沙箱環境,
在這個環境中,鏈上的數據都是被動得到的(通過交易的形式輸入),且區塊鏈在運行智能合約的過程中無法對外部請求獲取新數據,只能基于已有數據以一種確定性的方式產生新數據,而區塊鏈上的智能合約或者去中心化應用(DApp)對外界數據又有強烈的交互需求,這與智能合約的執行環境產生了矛盾,
預言機因解決此矛盾而誕生,并且一發而不可收,通過預言機中間件,智能合約可以主動獲取外部的數據,觸角可以延伸到傳統業務系統、公開網站、物聯設備、鏈下計算、鏈鏈互通等方面,做到了很多之前做不到的事情:獲取傳統業務數據、調用公開網站資訊、物流快遞追蹤、保險自動賠付、獲取其他鏈的資訊…從此打開了想象力的大門。
—— Part 3 預言機功能架構解讀 ——
聽起來好像預言機也沒什么了不起,只是一種中間件調用外部數據,然后把數據返回到區塊鏈中,但理想很簡單,現實很骨感,如果思考下去,你會發現在使用過程中有幾個難點:
- 如何保證獲取的外部數據源真實可信?
- 如何保證數據在傳輸和處理過程中的安全?
- 時效性、成本…?
針對上述問題,我們根據趣鏈區塊鏈平臺預言機架構流程圖進行闡述說明。
圖2 預言機架構模型圖
首先,預言機一般會作為區塊鏈的一個獨立模塊或第三方服務與執行引擎進行交互。預言機只負責數據的可信獲取,不直接參與交易的執行,首先,用戶通過合約調用的形式(也可以通過特殊的API接口服務等其他方式發起預言機服務請求)發起預言機的服務請求,通過調用某個內置合約接口(圖中“預言機服務”接口),告知區塊鏈執行引擎,用戶想要執行一筆含預言機服務的交易,
其次,執行引擎執行過程中檢測到對預言機的服務請求,通過內部通信組件將它轉發給預言機模塊,這個請求里會封裝請求外部數據源的一些資訊,如一個Web數據請求,會包含常見的URL、HTTP Headers等資訊。
再次,預言機在收到服務請求后,向外部數據源發起數據獲取請求,拿到數據后利用交易生成器產生一筆新的內部回調交易,并對其進行簽名(這一過程會使用TEE等硬件技術保障安全及不可篡改)。
最后,預言機將這筆回調交易發向執行引擎,執行對獲取到的數據組織、管理、存儲等一系列操作,至此一個完整的含預言機服務的區塊鏈交易執行流程結束。
根據上述的生命周期流程,我們對開頭的問題進行一一探討:
1)如何保證獲取的外部數據源真實可信
這是預言機使用過程中最核心的問題,回答是沒有絕對可信,只能做到相對可信。我們在設計過程中主要在數據源認證、數據獲取標準流程、數據格式統一等方面進行約束:
a)數據源選取和可信認證。預言機需要謹慎選擇外部數據源,必須保證對每個選取的外部數據源,都可以驗證其是可信的,如對于Web的數據獲取,選取的數據源需持有證書,
b)數據獲取標準流程。開發者必須明確執行引擎、用戶、外部數據源與預言機的數據交換流程,且對于不同的數據源類型要能夠統一或明確區分數據的交互流程,確保交互方案可執行可落地。
c)數據交互格式的統一定義,不同的數據源類型有不同的數據交互格式,以傳感器作為數據源和以Web作為數據源獲取到的數據格式是不一樣的,針對不同情況,明確統一的數據編解碼層,以對不同數據源的數據進行請求和解釋,
2)如何保證數據在傳輸和處理過程中的安全
預言機通過兩個階段對進行中的數據實現可靠保證。
a)數據從網上到本地,采用HTTPS協議(底層采用TLS協議)去保障連接和數據的正確性、完整性。
b)數據從本地到鏈上,預言機采用可信執行環境 ( TEE ) 技術,TEE是CPU內一塊安全區域,和操作系統獨立運行,可以確保數據處理過程中的機密性、可靠性,趣鏈區塊鏈平臺研發了基于SGX的TEE實現以及基于大陸芯片的TEE實現,進行預言機的安全保護,
3)時效性、成本等
鏈外的數據交互處理相對于鏈內來說,在數據源可信度、預言機可信度、處理復雜度等方面都會增加,而真實場景中可信度的不同,嚴重影響著預言機的實現效率以及實現成本,在公有鏈中,默認多方完全不可信,所以會通過多預言機模型實現聚合處理、共識規則、獎懲機制及聲望系統,以達到提高作惡成本的作用,這無疑增加了功能實現的復雜度;在聯盟鏈場景中,預言機使用場景相對可信封閉,且機構節點間可信度高,單預言機實現效率高、成本低,但存在單點作惡的問題,所以各位在使用過程中應該因地制宜,根據場景具體選擇最適合的實現方式,
—— Part 4 技術現狀解讀 ——
現在市面上預言機的分類主要為中心化預言機和去中心化預言機兩種。
▲ 中心化預言機
中心化預言機因其中心化的思想,需要引入第三方可信機構,如國家或能提供背書的大型企業,驗證方式也是通過第三方獨立驗證。
以預言機項目Oraclize為例,作為一個中心化預言機,通過TLS(Transport Layer Security,傳輸層安全)協議實現Web數據的可靠傳輸,并結合Intel SGX(Intel Software Guard Extension)確保數據在本地不可篡改,Oraclize給用戶提供了API接口,用戶只需要調用預先設計好的合約接口,就可以使用預言機服務獲取外部數據,
由于Oraclize是中心化預言機,作為一個獨立的單點模塊,這樣的實現具有高性能的優勢,但同樣也有單點故障、難以拓展的風險,且中心化的思想與區塊鏈的去中心化理念有一些背道而馳,大陸主流聯盟鏈趣鏈區塊鏈平臺、螞蟻鏈等大都采用中心化預言機的實現方式,
▲ 去中心化預言機
去中心化預言機秉持著與區塊鏈相同的去中心化原則,通常使用多重簽名或分布式算法保證數據的正確性、一致性,不需要引入第三方機構,但在實現上會更困難,性能也會成為瓶頸,
以Chainlink為例,它建立了一個去中心化的數據網路,每個預言機都是網路中的一個節點,其架構分為鏈上組件和鏈下組件,鏈上組件負責和用戶交互,收集、響應用戶請求,而鏈下組件則是之前提到的數據網路,用于處理數據獲取和傳輸。
在這個架構中,由于Chainlink是一個分布式的數據網路,所以可以避免單點故障的問題,但同樣地,因為增加了分布式的數據一致性需求,其性能和實現難度成為了新的難題,
對比來看,中心化預言機由單機負責數據獲取,需要引入第三方可信機構,而去中心化預言機則是多機并行,通過互相驗證保證一致性。因此中心化預言機適用于對實時性要求高、可信度高的場景,用戶體驗較好;而去中心化預言機則相反,
—— Part 5 總結 ——
從功能角度來看,預言機的功能比較純粹,主要解決區塊鏈內外數據可信連通問題。針對不同的信任場景,預言機也采取了中心化和非中心化的兩種方式提供服務,
從應用場景來看,鏈外數據是一個很大的生態,預言機可以應用在公開網站資訊、物流追蹤、保險自動賠付、獲取跨鏈資訊等多場景…預言機的發展一方面依賴于區塊鏈/智能合約技術的發展,一方面又助力區塊鏈/智能合約的業務延伸,隨著區塊鏈在金融、保險、物聯網等行業生態規模的擴大,預言機未來的生態價值也很值得期待,
從商業角度來看,預言機模式其實類似一個數據服務提供商,中心化預言機的商業模式本質上是一個數據服務平臺,而去中心化預言機是一個多元的數據服務生態,兩者發展方向各有千秋,