Gate 廣場創作者新春激勵正式開啟,發帖解鎖 $60,000 豪華獎池
如何參與:
報名活動表單:https://www.gate.com/questionnaire/7315
使用廣場任意發帖小工具,搭配文字發布內容即可
豐厚獎勵一覽:
發帖即可可瓜分 $25,000 獎池
10 位幸運用戶:獲得 1 GT + Gate 鸭舌帽
Top 發帖獎勵:發帖與互動越多,排名越高,贏取 Gate 新年周邊、Gate 雙肩包等好禮
新手專屬福利:首帖即得 $50 獎勵,繼續發帖还能瓜分 $10,000 新手獎池
活動時間:2026 年 1 月 8 日 16:00 – 1 月 26 日 24:00(UTC+8)
詳情:https://www.gate.com/announcements/article/49112
Chainlink的預言機:連接智能合約與區塊鏈外部世界的機制
在區塊鏈領域中,預言機(オラクルマシン)是一套向智能合約提供外部真實世界數據的系統。預言機本質上作為一個重要的中介軟體,彌合區塊鏈與現實世界資訊的鴻溝,並支撐分散式應用(DApps)生態系統的不可或缺基礎設施。
預言機是什麼:區塊鏈的資訊中介系統
當智能合約執行時,許多情況下需要存取外部資料。例如,在以太坊網路上建立原油期貨衍生品智能合約時,可能需要特定日期的原油交易數量資料。然而,智能合約本身僅限於鏈上環境,無法直接取得鏈外資訊。此時,預言機便發揮作用。
具體來說,智能合約會在事件日誌中描述所需資料的請求。之後,在鏈外運作的流程會監控這些事件日誌,解析請求內容。透過外部API取得所需資料後,將交易廣播到鏈上傳送資料,並執行智能合約的回調函數。這一連串流程,使得智能合約能存取高信賴度的外部資訊。
Chainlink的市場地位與LINK代幣
在區塊鏈行業中,分散式預言機領域中,Chainlink佔據最大市佔率。Chainlink專案的角色是以最安全、最可靠的方式,將現實世界產生的資料提供給區塊鏈。該專案透過經濟激勵機制,建立以LINK代幣為核心的良性循環生態系。
目前的LINK代幣市場數據(2026年1月21日):
Chainlink的預言機由LINK代幣轉移觸發。該代幣為在以太坊網路上運行的ERC677標準智能合約。基於LINK的預言機功能,屬於典型的請求/回應模型。
ERC677標準帶來的創新
transferAndCall方法的設計理念
預言機的核心問題在於,用戶需向服務提供者(預言機)支付服務費用。然而,標準的ERC20代幣規範僅提供基本的轉帳功能,無法同時滿足支付與服務請求的雙重需求。
因此,Chainlink提出了ERC677標準。此標準在傳統ERC20的基礎上加入了transferAndCall方法,使得在一個交易中同時完成代幣轉移與服務請求。用戶執行transferAndCall時,除了正常的ERC20轉帳外,還會判斷接收地址是否為智能合約(非外部擁有帳戶),若是,則自動調用該合約的onTokenTransfer方法。
此設計將支付與功能呼叫整合,使預言機的商業邏輯能更高效地實現。
多層次的安全驗證
在使用預言機服務前,用戶需事先確認該預言機的可信度。Chainlink設計上,任何人都可以參與成為預言機服務提供者,這種透明性與可驗證性提升了系統的可靠性。
鏈上請求處理流程
預言機合約的請求接收機制
當預言機消費者使用transferAndCall支付費用並請求預言機服務時,請求的目標地址為預言機合約地址。Oracle合約的onTokenTransfer方法會進行多層次的驗證:
首先,確認轉帳是否來自LINK代幣合約(onlyLINK修飾子),方法是判斷msg.sender是否與LINK合約地址相符。接著,檢查提供的資料負載(_data)長度是否超出上限。更重要的是,檢查_data中是否包含以「oracleRequest」開頭的函數選擇子。
通過這些安全檢查後,當前的Oracle合約會透過delegatecall調用oracleRequest方法。
請求ID的生成與記錄
在oracleRequest方法中,會依序執行以下步驟:
將預言機請求者(用戶)與其發送的nonce連結,並用哈希函數處理,產生此請求的唯一requestId。接著,確認該requestId在commitment映射中尚不存在,以避免重複。
驗證通過後,設定有效期限(expiration),並在commitment中記錄連結有_payment、_callbackAddress、_callbackFunctionId、expiration的值。最重要的是,發行包含CBOR(Concise Binary Object Representation)格式的請求資料的OracleRequest事件。CBOR為經過二進位化的JSON格式,輕量且高效。
鏈外節點的回應機制
fulfillOracleRequest的驗證與執行
鏈外運作的Chainlink節點會監控OracleRequest事件。偵測到事件後,會執行多個重要驗證步驟,然後將資料返回至區塊鏈。
首先,確認呼叫者(msg.sender)是否為合約所有者或在授權節點清單中(onlyAuthorizedNode修飾子)。接著,驗證提供的requestId是否存在於commitment映射中,且其_payment、_callbackAddress、_callbackFunctionId、expiration值與之前記錄相符(isValidRequest)。
通過這些檢查後,該請求的對應代幣會存入drawableTokens,並從commitment中刪除該requestId。最後,確認剩餘的gas量是否足夠執行呼叫原始合約的回調函數(最低消耗gas:MINIMUM_CONSUMER_GAS_LIMIT)。
所有驗證通過後,正式以call方式呼叫用戶合約的回調函數,並傳送取得的資料。
回調函數的實作範例
可從OracleRequest事件中取得回調函數ID(例如:6A9705B4)與對應的方法簽名(例如:chainlinkCallback(bytes32,int256))。消費合約端會實作validateChainlinkCallback等驗證函數。
此驗證函數會確認pendingRequests中提供的requestId確實存在,且為該預言機的請求。驗證成功後,會發出ChainlinkFulfilled事件,並可進一步處理回應資料。回應資料會更新映射,例如價格預言機會將新價格賦值給currentPrice,並執行相應的價格更新流程。
價格預言機的實作範例
Aggregator介面與價格資料源
上述流程是通用預言機服務的完整流程。而Chainlink提供的價格預言機則提供較為簡潔的實作範例。
每個交易對(如ETH/USD、BTC/USD)都會有一個獨立的價格資料源(Aggregator或其代理版本AggregatorProxy)。此介面提供一些標準化的查詢方法。
主要查詢方法:
實作上的最佳實踐
大多數應用場景只需讀取最新價格,直接調用latestRoundData()即可。返回值中包含最新價格資訊。
此外,許多應用會以美元(USD)作為價格單位。若交易對以USD計價,精度統一為8位,通常不需特別考慮精度差異。若不同代幣對具有不同精度,可用decimals()查詢並調整。
如此一來,Chainlink預言機不僅是資料中介,更透過價格預言機等高階實作範例,提供區塊鏈生態系中實用且可靠的金融基礎設施。