Oracles

預言機服務如何在幕後工作?

  • July 23, 2020

我已經閱讀了很多關於 oracle 服務的問題,但我不明白 它們是如何工作的。我經常讀到這樣的答案:https ://ethereum.stackexchange.com/a/9825/5892

智能合約無法訪問外部環境…

但是“Oraclize”或“RealityKeys”如何工作,我如何在公共區塊鏈上建構自己的預言機服務?

來自Reality Keys的 Edmund Edgar 。

基本上需要發生的事情是有人說出他們想要什麼數據,受信任的服務提供一個標識它的 ID(在我們的例子中是數據的散列)和一個他們將用來簽署結果的密鑰,然後有人將交易發送到契約。然後我們等待結果。一旦知道結果,受信任的服務使用他們的密鑰對其進行簽名,有人將包含簽名數據的另一筆交易發送給合約,合約就會執行任何應該發生的事情。

這可以在鏈上或鏈下完成。我們在鏈下執行此操作,因此我們只提供簽名數據和密鑰,使用者從我們的站點獲取這些數據並將其發送到他們自己的合約中。這通常是 DApp 的一部分,例如PredictionToken有一個螢幕創建交易以從我們的站點獲取 ID 並設置契約,另一個螢幕用於從我們的站點獲取簽名數據並發送交易以結算契約。Oraclize 在鏈上進行,因此您的合約向他們的合約發送請求,他們的合約將一個事件寫入事件日誌並返回一個標識符。他們有一個監視事件日誌的程序,當數據準備好時,他們將其作為簽名交易發送到您的契約,契約會檢查契約的發件人(這是檢查誰簽署數據的另一種方式)並執行它應該做的任何事情去做。

從開發人員的角度來看,在鏈上做的好處是你只需要處理一個地方(你節點的 RPC 介面)的請求,如果你確切知道響應何時到期,你的使用者只需要發送一筆交易而不是一筆交易來建立合約,另一筆交易來發送結果。缺點是正確測試很麻煩(您必須模擬他們的服務或使用實時測試網路)並且存在涉及氣體使用的令人討厭的邊緣案例。(有一些方法可以做到這一點,但如果您查看使用 Oraclize 的實際合約,它們通常會允許 Oraclize 從合約餘額中耗盡所有資金。)

請注意,由於您永遠無法完全信任該服務(Oraclize 有一個加密證明來支持他們聲稱他們獲取的數據確實來自他們所說的站點,但契約無法檢查它,所以它並沒有真正幫助)您可能希望多個服務做同樣的事情,並且契約需要多個簽名。這也是您可能希望在許可的區塊鏈上下文中執行的操作,在該上下文中,您已經有多個已知參與者在執行節點並簽署區塊,因此讓他們簽署數據是有意義的。

引用自:https://ethereum.stackexchange.com/questions/11589