# 預言機技術解析:以Chainlink爲例在區塊鏈生態中,預言機作爲連接鏈上智能合約和外部世界的橋梁,扮演着至關重要的基礎設施角色。它的主要功能是爲區塊鏈上的智能合約提供外部數據。舉例來說,如果我們在以太坊網路上部署了一個需要獲取特定日期原油交易量的智能合約,由於合約本身無法直接訪問鏈下數據,這時就需要通過預言機來實現。具體過程是,智能合約首先將所需信息寫入事件日志,隨後鏈下進程監聽並訂閱該日志。一旦檢測到請求,該進程會通過提交鏈上交易的方式,調用合約相關方法,將指定日期的原油交易量數據上傳至智能合約中。Chainlink是目前市場佔有率最高的去中心化預言機項目。它圍繞LINK代幣構建了一個基於經濟激勵的生態系統,通過最安全的方式向區塊鏈提供現實世界的數據。Chainlink預言機的觸發需要通過LINK代幣轉帳實現,而LINK是以太坊網路上的ERC677合約。ERC677標準在ERC20的基礎上增加了transferAndCall方法,將支付和服務請求合二爲一,更好地滿足了預言機業務場景的需求。當用戶進行transferAndCall轉帳時,除了常規的ERC20轉帳外,還會判斷接收地址是否爲合約地址,如是則調用該地址的onTokenTransfer方法。在請求預言機服務之前,用戶需要先確認該預言機的可信度,因爲服務提供前需要預先付款。預言機的可信度可以根據多個因素來評估,如歷史表現、聲譽系統等。當預言機收到服務請求後,會進行一系列安全檢查,包括驗證轉帳是否爲LINK代幣、檢查數據長度是否超限、驗證function selector等。通過檢查後,預言機會發出OracleRequest事件,該事件包含了請求的詳細信息。鏈下節點監聽到OracleRequest事件後,會解析出具體的請求信息,通過API調用獲取所需數據,然後通過提交交易的方式調用Oracle合約的fulfillOracleRequest方法,將數據提交到鏈上。最後,Oracle合約會將結果通過之前記錄的回調地址和函數返回給請求方。對於開發者而言,如果只需要使用已有的幣對價格數據,可以直接調用官方提供的Price Feed接口。每個交易對都有獨立的Price Feed(也稱爲Aggregator),實際上是AggregatorProxy合約。通過調用latestRoundData()方法可以獲取最新的價格數據,其中answer參數即爲所需的最新價格。值得注意的是,以USD爲計價單位的交易對,其價格精度通常統一爲8位小數,這簡化了不同代幣間精度處理的復雜性。
Chainlink解析:區塊鏈預言機的技術架構與應用
預言機技術解析:以Chainlink爲例
在區塊鏈生態中,預言機作爲連接鏈上智能合約和外部世界的橋梁,扮演着至關重要的基礎設施角色。它的主要功能是爲區塊鏈上的智能合約提供外部數據。
舉例來說,如果我們在以太坊網路上部署了一個需要獲取特定日期原油交易量的智能合約,由於合約本身無法直接訪問鏈下數據,這時就需要通過預言機來實現。具體過程是,智能合約首先將所需信息寫入事件日志,隨後鏈下進程監聽並訂閱該日志。一旦檢測到請求,該進程會通過提交鏈上交易的方式,調用合約相關方法,將指定日期的原油交易量數據上傳至智能合約中。
Chainlink是目前市場佔有率最高的去中心化預言機項目。它圍繞LINK代幣構建了一個基於經濟激勵的生態系統,通過最安全的方式向區塊鏈提供現實世界的數據。Chainlink預言機的觸發需要通過LINK代幣轉帳實現,而LINK是以太坊網路上的ERC677合約。
ERC677標準在ERC20的基礎上增加了transferAndCall方法,將支付和服務請求合二爲一,更好地滿足了預言機業務場景的需求。當用戶進行transferAndCall轉帳時,除了常規的ERC20轉帳外,還會判斷接收地址是否爲合約地址,如是則調用該地址的onTokenTransfer方法。
在請求預言機服務之前,用戶需要先確認該預言機的可信度,因爲服務提供前需要預先付款。預言機的可信度可以根據多個因素來評估,如歷史表現、聲譽系統等。
當預言機收到服務請求後,會進行一系列安全檢查,包括驗證轉帳是否爲LINK代幣、檢查數據長度是否超限、驗證function selector等。通過檢查後,預言機會發出OracleRequest事件,該事件包含了請求的詳細信息。
鏈下節點監聽到OracleRequest事件後,會解析出具體的請求信息,通過API調用獲取所需數據,然後通過提交交易的方式調用Oracle合約的fulfillOracleRequest方法,將數據提交到鏈上。最後,Oracle合約會將結果通過之前記錄的回調地址和函數返回給請求方。
對於開發者而言,如果只需要使用已有的幣對價格數據,可以直接調用官方提供的Price Feed接口。每個交易對都有獨立的Price Feed(也稱爲Aggregator),實際上是AggregatorProxy合約。通過調用latestRoundData()方法可以獲取最新的價格數據,其中answer參數即爲所需的最新價格。
值得注意的是,以USD爲計價單位的交易對,其價格精度通常統一爲8位小數,這簡化了不同代幣間精度處理的復雜性。