解密Chainlink: 預言機技術如何連接區塊鏈與現實世界

robot
摘要生成中

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

預言機是區塊鏈領域中的關鍵基礎設施,它能爲智能合約提供區塊鏈外部的數據信息。作爲連接智能合約和外部世界的中間件,預言機的主要功能是爲區塊鏈上的智能合約提供所需的外部數據。

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

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

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

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

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

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

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

在請求預言機服務之前,用戶需要先確定該預言機是否可信,因爲預言機爲消費者提供服務前需要先付款。預言機的可信度可以根據多個因素進行劃分,如數據源可靠性、節點信譽等。

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

當預言機消費者使用 transferAndCall 方法支付費用並請求服務時,預言機合約的 onTokenTransfer 方法會進行一系列安全檢查。檢查通過後,會通過 delegatecall 調用當前 oracle 合約的 oracleRequest 方法。該方法會生成唯一的 requestId,設置過期時間,並發出包含請求數據的 OracleRequest 事件。

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

鏈下節點會監聽這些事件,解析出請求的具體信息,通過網路 API 調用獲取所需數據。然後通過提交交易的方式,調用 Oracle 合約的 fulfillOracleRequest 方法,將數據提交到鏈上。該方法在進行一系列驗證後,會將結果通過之前記錄的回調地址和函數返回給消費者合約。

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

對於開發者來說,如果只想使用已有的幣對價格,而不需要自己指定 API URL,Chainlink 也提供了更簡便的方式。每個交易對都有一個單獨的 Price Feed(Aggregator),實際上是一個 AggregatorProxy。開發者可以直接調用這些 Proxy 合約的方法獲取價格數據,無需自行處理 API 請求和響應過程。

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

總的來說,Chainlink 通過巧妙的設計,爲區塊鏈世界提供了一個安全可靠的數據橋梁,極大地擴展了智能合約的應用場景。隨着區塊鏈技術的不斷發展,預言機技術也將繼續演進,爲更多創新應用提供有力支持。

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

查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 讚賞
  • 4
  • 分享
留言
0/400
BlockImpostervip
· 10小時前
link yyds要起飞了
回復0
链上吃瓜群众vip
· 07-08 09:56
link上新高了吗老铁们
回復0
GateUser-44a00d6cvip
· 07-08 09:55
主动应答数据永远靠谱
回復0
心若草莓冰vip
· 07-08 09:32
预言就是钱途无量
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)