# 分布式價格預言機系統的設計與實現爲了解決單點故障問題,一些預言機服務採用了分布式設計。以提供比特幣美元價格的服務爲例,某系統聚合了31個獨立的價格預言機來爲用戶提供可靠的數據。這種聚合器的合約設計允許多個鏈下預言機通過調用transmit方法來提供價格數據,從而響應用戶的請求。這些鏈下預言機通常是外部擁有的帳戶(EOA),它們不僅可以爲比特幣/美元對提供數據,還可能爲其他貨幣對如以太坊/美元提供服務。鏈上合約在處理預言機提供的數據時,會經過一系列嚴格的驗證步驟:1. 首先讀取當前合約狀態並進行初步檢查。2. 進行必要的準備工作。3. 使用ecrecover()函數對每個籤名數據進行驗證,確保hash值是對_report進行的哈希運算。同時檢查籤名者的角色是否爲Signer,並防止重復籤名。4. 檢查觀察值是否按順序排列,並從中選取中位數。確保該中位數不超出預設的閾值範圍。5. 在s_transmissions中記錄本次預言機的答案,並進行進一步的驗證。某些系統會將這一驗證過程進一步擴展,例如通過比較不同預言機提供的價格偏差是否在可接受範圍內來增強數據的可靠性。爲了簡化多種代幣價格的獲取過程,一些平台引入了Feed Registry的概念。這可以被視爲PriceFeeds的聚合器,已經整合了多個priceFeed。使用Feed Registry,開發者可以直接讀取價格數據,無需爲每種代幣單獨設置priceFeed,大大降低了治理成本並提高了靈活性。在喂價機制方面,一些先進的價格預言機系統採用了多層數據聚合策略:1. 數據源聚合:從各大中心化和去中心化交易平台收集原始價格數據。2. 節點運營商聚合:由獨立的節點運營商從多個數據聚合服務商獲取數據並處理。3. 預言機網路聚合:整個網路層面的數據聚合,通常採用中值計算等方法。這種多層聚合機制有助於提高數據的準確性和可靠性。然而,由於存在偏差閾值和心跳閾值等更新觸發機制,某些系統的價格更新可能相對緩慢,從幾分鍾到數小時不等。這種設計雖然增強了安全性,但也限制了其在對實時價格敏感的應用場景中的使用。總的來說,分布式價格預言機系統在提供可靠數據方面具有顯著優勢,但在選擇和使用時仍需根據具體應用需求權衡其特性。
分布式價格預言機:多層聚合提升數據可靠性
分布式價格預言機系統的設計與實現
爲了解決單點故障問題,一些預言機服務採用了分布式設計。以提供比特幣美元價格的服務爲例,某系統聚合了31個獨立的價格預言機來爲用戶提供可靠的數據。
這種聚合器的合約設計允許多個鏈下預言機通過調用transmit方法來提供價格數據,從而響應用戶的請求。這些鏈下預言機通常是外部擁有的帳戶(EOA),它們不僅可以爲比特幣/美元對提供數據,還可能爲其他貨幣對如以太坊/美元提供服務。
鏈上合約在處理預言機提供的數據時,會經過一系列嚴格的驗證步驟:
某些系統會將這一驗證過程進一步擴展,例如通過比較不同預言機提供的價格偏差是否在可接受範圍內來增強數據的可靠性。
爲了簡化多種代幣價格的獲取過程,一些平台引入了Feed Registry的概念。這可以被視爲PriceFeeds的聚合器,已經整合了多個priceFeed。使用Feed Registry,開發者可以直接讀取價格數據,無需爲每種代幣單獨設置priceFeed,大大降低了治理成本並提高了靈活性。
在喂價機制方面,一些先進的價格預言機系統採用了多層數據聚合策略:
這種多層聚合機制有助於提高數據的準確性和可靠性。然而,由於存在偏差閾值和心跳閾值等更新觸發機制,某些系統的價格更新可能相對緩慢,從幾分鍾到數小時不等。這種設計雖然增強了安全性,但也限制了其在對實時價格敏感的應用場景中的使用。
總的來說,分布式價格預言機系統在提供可靠數據方面具有顯著優勢,但在選擇和使用時仍需根據具體應用需求權衡其特性。