跳至內容
0%

什麼是 Oracle?

Alchemy team headshot

作者 Alchemy

發布於 2022年3月22日閱讀時間 1 分鐘

簡介

智慧合約是在特定事件或條件成立時會自動執行的程式。這些事件可能發生在鏈上,也可能發生在鏈下。舉例來說,在鏈上事件的情況中,發送者可以將資金作為抵押品送入智慧合約來申請貸款,這會觸發貸款金額的發送。而在鏈下事件的情況中,智慧合約需要一種方法來取得這些事件的準確資料,才能知道何時該執行。Oracle(預言機)連接了鏈下世界與鏈上智慧合約,作為智慧合約的資料來源。

示意圖:oracle 將鏈下資料連接至鏈上智能合約
Source: https://www.leewayhertz.com/chainlink-solving-blockchain-oracle-problem/https://www.leewayhertz.com/chainlink-solving-blockchain-oracle-problem/

開發者如何使用 oracle

使用智慧合約的優點在於,我們不需要第三方作為中間人。智慧合約的條款由程式碼決定,程式碼即為法律。這些條款可以依賴外部事件,作為交易執行前必須滿足的條件。舉例來說,我們可以用智慧合約根據美元的價值來發行代幣交換。智慧合約會向 oracle 查詢來自外部來源的美元價值,藉此判斷何時該執行交換。

示意圖:智能合約向 blockchain oracle 查詢外部資料
Source: https://coin98insights.com/what-is-blockchain-oracle

去中心化金融(DeFi)是 oracle 最重要的應用場景之一。價格 oracle 提供代幣價值與流動性的資訊,用於管理使用者的財務部位。NFT(非同質化代幣)可以利用 oracle 取得新聞中外部事件的資訊,例如選舉結果,讓 NFT 的外觀根據這些結果動態改變。

我們也可以利用 oracle,在使用者完成任務或達成特定目標後,用代幣獎勵他們,藉此鼓勵有利於永續發展與公民責任的良好行為。舉例來說,我們可以提供城市居民代幣作為碳抵換的獎勵。

Oracle 的類型

Oracle 可以是軟體,例如伺服器或資料庫,也可以是硬體,例如物聯網裝置與感測器。它們可以是外部服務,為多個應用程式與連接到它們的區塊鏈提供資料。

專案也可以針對自身的特殊需求建立內部 oracle。Augur 就是一個例子,這是一個去中心化博弈平台,擁有一個 oracle 來提供下注事件的結果。

了解 Augur 如何使用 Alchemy 來擴展其去中心化 oracle 與點對點協定,並打造更好的使用者體驗。

Oracle 是雙向的,這代表它們既可以從真實世界擷取資料,也可以向外部世界提供鏈上事件的資料。智慧鎖會根據交易是否完成來解鎖,是需要將鏈上事件資料傳遞到鏈下的常見例子。

除了與外部世界溝通之外,oracle 還能促成不同區塊鏈之間的跨鏈通訊。開發者可以利用這一點來橋接資產,或根據某條鏈上的交易與事件,觸發另一條鏈上的動作。Oracle 也能透過在鏈下執行像亂數產生這類運算,來節省寶貴的運算成本。

Oracle 問題

一般在討論 oracle 的價值時,總會提到「oracle 問題」。在區塊鏈上開發的獨特之處在於,節點之間必須就區塊鏈的狀態達成共識。這代表每個節點都必須能對相同的交易與事件,得出與其他所有節點相同的結果。

攻擊者可能會竄改 oracle 取得的鏈下資料,這些資料本身也可能隨時間改變。

舉例來說,美元的價值一天之內就可能頻繁變動。如果智慧合約根據這個價值執行動作,等到另一個節點進行運算時,價格可能已經改變。這會破壞節點之間的共識,因為預期的結果已經不再是實際的結果。

除了 oracle 提供的資料是否準確可能有問題之外,集中式的資料來源也可能遭到駭客攻擊或發生停機。在這些情況下,智慧合約要麼會使用受損的資料運作,要麼完全沒有資料可用。由於智慧合約無法更改且會自動執行,這可能對相關各方造成無法挽回的損害。Oracle 必須解決這些問題,才能成為安全且值得信任的智慧合約資料提供者。

Oracle 問題的解法

解決 oracle 問題的一種常見方法,是利用區塊鏈本身。這種做法稱為去中心化 Oracle 網路(Decentralized Oracle Network,DON)。

在 DON 中,節點不是就交易帳本達成共識,而是每個節點本身就是一個 oracle。這些節點負責從各自獨立的鏈下來源擷取資料。接著將這些節點的資料彙整在一起,決定出一個真實值。

這也解決了資料來源正常運行時間的問題,因為即使某個來源失效,由於存在多個資料來源,智慧合約仍能正常運作。你可以在這裡看到 DON 的實際運作。

示意圖:去中心化 oracle 網路彙整多個鏈下資料來源
來源:chain.link

Oracle 服務

開發者使用 oracle 最常見的方式,是透過第三方服務。第一個也是最受歡迎的服務是 Chainlink。透過 Chainlink,開發者與 API 提供者可以將自己的 API 連接到 Chainlink 網路,成為參與其中的節點營運商。

Chainlink 會為營運這些 oracle 的提供者提供鏈上識別碼,用來管理與獎勵這些 oracle 的信譽。使用 ERC677 代幣,可以激勵提供者提供格式良好、準確的資料,以及任何鏈下運算的成果。

另一個日漸受歡迎的網路是 Band Protocol。這個網路的目標與 Chainlink 相同,就是提供可靠且安全的外部資料來源。同樣地,也有 BAND 代幣用來獎勵提供優質資料的資料提供者。主要的差異在於,Band Protocol 是運作在 Cosmos 上,而不是 Ethereum,這是出於節省成本的考量。

示意圖:oracle 服務網路將外部資料傳送至智能合約
Source: https://public.bnbstatic.com/static/research/static/images/projects/band-protocol/oraclescript.png

如何使用 oracle

我們可以透過兩種方式從 oracle 取得資料:一種是使用像 Chainlink 提供的框架發出 API 請求;另一種是參考提供者已經送出、目前存在於鏈上的資料。我們可以透過參考持有這些資訊與位址的智慧合約來取得這些資料。這種方法常見於 DeFi 領域。智慧合約會持有定期更新的匯率,其他智慧合約可以利用這些資料來執行代幣互換。

結論

智慧合約若要在現實世界中發揮任何作用,就必須能取得世界上正在發生的事情的資訊。Oracle 就是智慧合約用來因應鏈下事件所需的資料窗口。在區塊鏈這種去中心化環境中使用集中式資料來源並不理想。DON 解決了許多集中化帶來的問題,提供了安全性與穩定性。隨著這些 oracle 服務不斷擴展並吸引更多提供者加入,oracle 將在區塊鏈與智慧合約技術的發展中扮演重要角色。

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。