預言機可以將數據發送到多個區塊鏈上的智能合約嗎?
像Oraclize和Reality Keys這樣的預言機實現可以與兩個不同的區塊鏈一起使用嗎?更準確地說,如果我有一個自定義數據源和我自己的 oracle 在其上執行,該 oracle 是否可以確定 API 呼叫的來源並相應地發送數據?我可以在這個 oracle 中設計一個權限層來允許/拒絕來自特定地址的 API 呼叫嗎?
至於Oraclize,您可以將它與任何區塊鏈一起使用。
Oraclize 提供的是與公共區塊鏈(即:乙太坊主網、乙太坊現代測試網、比特幣主網)的原生集成以及可用於將 Oraclize 引擎連接到任何其他區塊鏈的 HTTP API(例如,通過使用乙太坊橋工具可以將引擎連接到您的私有乙太坊測試網/Eris/等)。
由於這種方法如此靈活,它使不同的區塊鏈能夠通過使用 Oraclize 作為連接器來相互交流。
數據源是數據提供者:如果您想使用自己的 Web 服務作為數據源,您可以在那裡實現您想要的任何邏輯 - Oraclize 只是抽象與數據源的連接,以便它可以與區塊鏈無關。
也就是說,這都是關於透明度和可審計性的,所以沒有有效的方法來限制數據對某些區塊鏈的可見性(除非你願意失去預言機抽象層部分)。
如果您想要實現的是讓您自己的 Web 服務能夠回答來自“授權契約”的查詢(例如,您希望允許在 ETH 上使用它,但不允許在 ETC 上使用它),您可以通過Oraclize做到這一點加密查詢 得益於其功能之一:給定的加密字元串僅綁定到一個合約 - 這是第一個使用它的合約。
因此,假設您想要一個給定的查詢Q,當您加密它時,您將擁有ENC1 (Q) 、 ENC2(Q )、*ENC3(Q)*等等……每次加密時,加密的字元串都會有所不同。
如果您通過oraclize_query使用 ENC1 *(Q)*部署契約,它將正常工作,並且 Oraclize 可以看到解密的查詢 - 這會將您的契約發回答案。
如果另一個合約(在同一個鏈上……或在不同的鏈上!)然後嘗試使用ENC1(Q),Oraclize 將阻止對數據源的查詢成功,因為唯一允許使用*ENC1(Q)*的合約只是第一個使用它的人。Q只為您和 Oraclize 所知,使您的數據源邏輯僅在某些給定情況下工作。
此功能旨在使用私有 api 憑證作為公共區塊鏈上的查詢,但當然它可以使許多其他有用的應用程序栩栩如生:例如您的特定於鏈的白名單功能或其他有趣的場景(這裡有點 OT)。
Thomas Farming - Oraclize