Chainlink預言機:智能合約連接現實世界的橋梁

robot
摘要生成中

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

在區塊鏈生態中,預言機扮演着至關重要的角色,它是連接智能合約和外部世界的橋梁。預言機的主要功能是爲區塊鏈上的智能合約提供鏈外數據,使得合約能夠獲取並處理現實世界的信息。

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

舉個例子,假設我們在以太坊網路上部署了一個需要獲取某日原油交易量數據的智能合約。由於智能合約本身無法直接訪問鏈外數據,這時就需要預言機來協助。合約會將所需信息寫入事件日志,隨後鏈下進程會監聽這一日志。當檢測到請求時,該進程會通過提交鏈上交易的方式,調用合約相關方法,將指定日期的原油交易量數據傳輸到智能合約中。

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

在衆多預言機項目中,Chainlink佔據了最大的市場份額。Chainlink是一個去中心化預言機網路,旨在以安全可靠的方式爲區塊鏈提供現實世界的數據。它在基本預言機原理的基礎上,圍繞LINK代幣構建了一個經濟激勵驅動的生態系統。Chainlink預言機的觸發需要通過LINK代幣的轉帳來實現,而LINK是以太坊網路上的一種特殊ERC677代幣。

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

ERC677標準是Chainlink爲了滿足預言機服務場景而提出的。它在ERC20標準的基礎上增加了transferAndCall方法,將支付和服務請求合二爲一。當用戶調用transferAndCall進行轉帳時,除了完成ERC20的轉帳功能外,如果接收地址是合約地址,還會調用該地址的onTokenTransfer方法。

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

在Chainlink的設計中,預言機合約的onTokenTransfer方法會首先驗證轉帳是否爲LINK代幣,然後檢查請求數據的有效性。通過一系列安全檢查後,合約會發出一個OracleRequest事件,該事件包含了請求的詳細數據。

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

鏈下節點會監聽這些OracleRequest事件。當檢測到新的請求時,節點會解析事件中的數據,通過API調用獲取所需信息,然後通過提交交易的方式,調用預言機合約的fulfillOracleRequest方法,將數據提交到鏈上。這個方法會在進行一系列驗證後,將結果通過之前記錄的回調地址和函數返回給請求方合約。

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

對於開發者來說,如果只需要獲取已有的幣對價格數據,可以直接使用Chainlink提供的Price Feed接口。每個交易對都有一個單獨的Price Feed(也稱爲Aggregator),實際上是一個AggregatorProxy合約。這些接口提供了幾個關鍵的查詢方法,包括獲取價格精度、交易對描述、版本信息,以及根據輪次ID獲取歷史價格數據和最新價格數據。

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

在大多數應用場景中,合約可能只需要讀取最新價格。調用latestRoundData()方法即可獲取最新的價格數據,其中answer參數就是最新價格。值得注意的是,大部分以美元爲計價單位的交易對,其價格精度統一爲8位小數,這簡化了不同代幣間精度處理的問題。

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

通過這種方式,Chainlink爲區塊鏈世界提供了一個強大而靈活的預言機解決方案,使得智能合約能夠安全、可靠地獲取和使用鏈外數據。

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

LINK-7.22%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 6
  • 分享
留言
0/400
Blockwatcher9000vip
· 07-29 21:58
看好link很正常捏
回復0
薛定谔的矿工vip
· 07-29 21:58
这不就就是桥梁收费站嘛
回復0
metaverse_hermitvip
· 07-29 21:55
link天下第一!
回復0
GateUser-9ad11037vip
· 07-29 21:53
link生态最近挺猛啊
回復0
假设性清算vip
· 07-29 21:52
预言机也存在数据风控隐患 这轮暴跌谁先爆?
回復0
Fren_Not_Foodvip
· 07-29 21:30
chain说它最香
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)