Chainlink預言機:連接區塊鏈與真實世界的橋梁

robot
摘要生成中

預言機技術詳解:以Chainlink爲例

預言機是區塊鏈領域中連接智能合約與外部世界的關鍵基礎設施。它作爲一種中間件系統,能夠爲鏈上智能合約提供外部數據信息。預言機的核心功能是爲區塊鏈上的智能合約輸送數據。

預言機詳解系列之 Chainlink(上)

舉個例子,假設我們在以太坊網路上部署了一個需要獲取特定日期原油交易量數據的智能合約。由於智能合約本身無法直接訪問鏈下的真實世界數據,這時就需要借助預言機來實現。具體流程是:智能合約先將所需日期的原油交易量數據需求寫入事件日志,然後鏈下會啓動一個進程來監控並訂閱這個事件日志。當監聽到交易中的請求時,該進程會通過提交鏈上交易的方式,調用合約的相關方法,將指定日期的原油交易量信息上傳到智能合約中。

預言機詳解系列之 Chainlink(上)

在預言機市場中,Chainlink佔據了最大的市場份額。作爲一個去中心化的預言機項目,Chainlink旨在以最安全的方式向區塊鏈提供現實世界中產生的數據。Chainlink在基本預言機原理的基礎上,圍繞LINK代幣通過經濟激勵建立了一個良性循環的生態系統。Chainlink預言機需要通過LINK代幣的轉帳來觸發。LINK是以太坊網路上的ERC677合約,基於LINK代幣完成的預言機功能屬於請求/響應模式。

預言機詳解系列之 Chainlink(上)

ERC677代幣標準在ERC20的基礎上增加了transferAndCall方法。該方法將支付和服務請求合二爲一,滿足了預言機業務場景的需求。當用戶進行transferAndCall轉帳時,除了ERC20的轉帳外,還會判斷接收地址是否爲合約地址,如果是則調用該地址的onTokenTransfer方法。

預言機詳解系列之 Chainlink(上)

在請求預言機服務之前,用戶需要先確認該預言機的可信度,因爲預言機爲消費者提供服務前需要先付款。當預言機的消費者使用transferAndCall方法支付費用並請求服務時,預言機合約的onTokenTransfer方法會進行一系列安全檢查,包括驗證轉帳是否爲LINK代幣、檢查數據長度是否超限、驗證function selector等。檢查通過後,才會通過delegatecall來調用oracle合約的oracleRequest方法。

預言機詳解系列之 Chainlink(上)

oracleRequest方法會生成唯一的requestId,設置過期時間,並發出OracleRequest事件。該事件包含了請求數據,採用CBOR編碼格式。鏈下節點會監聽這個事件,解析出請求信息,然後通過API調用獲取所需數據,最後通過提交交易的方式調用fulfillOracleRequest方法將數據提交到鏈上。

預言機詳解系列之 Chainlink(上)

fulfillOracleRequest方法會進行一系列驗證,包括檢查調用者權限、驗證請求有效性等。驗證通過後,會記錄可提取的代幣數額,並調用請求者合約的回調函數返回數據。

預言機詳解系列之 Chainlink(上)

對於開發者來說,如果只想使用已有的幣對價格數據,可以直接調用官方提供的Price Feed接口。每個交易對都有一個單獨的Price Feed(即Aggregator),實際上是AggregatorProxy合約。開發者可以通過調用latestRoundData()方法獲取最新價格數據,其中answer參數即爲最新價格。大多數以USD爲計價單位的交易對,精度統一爲8位,簡化了不同代幣間的精度處理。

預言機詳解系列之 Chainlink(上)

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
PebbleHandervip
· 19小時前
也就这么回事吧
回復0
破产打工人vip
· 19小時前
太难了 放弃挣扎
回復0
Crypto金矿vip
· 19小時前
我去年靠link的行情赚了200倍 纯靠技术面分析
回復0
测试网学者vip
· 19小時前
link又被抄作业了
回復0
Web3教育家vip
· 19小時前
这真是基本上令人着迷的东西,让我为我的web3学生讲解一下...
查看原文回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)