Oracles

智能合約和 API 呼叫:如何在不付費的情況下重複檢查 API?

  • March 11, 2021

我是整個空間的新手,所以請多多包涵。

我正在嘗試創建一個投注應用程序。我希望人們簽署契約並說他們會投入一些錢,根據某些事件的結果他們會贏或輸。

假設我希望他們在上午 8 點之前存入資金,然後所有資金都鎖定在該投注池中。

然後,該事件可能會在上午 8 點到下午 3 點之間的任何時間產生結果,但我希望只要在該視窗內決定結果,就可以結算賭注。例如:如果它以 11 結束,則以 11 結算。如果以 2 結束,則以 2 結算。

我可以檢索事件結果的唯一方法是執行 API 呼叫。API 將查看此特定事件,如果事件正在進行但未結束,則返回“未決定”。只有在事件結束後,它才會返回“成功”或“失敗”。

我是否必須定期用預言機檢查這個來結算這個賭注?這似乎是在浪費金錢,因為這些預言機呼叫是有費用的。理想情況下,我希望有一些中間腳本在我的應用程序端呼叫 API,而不涉及任何區塊鏈,然後一旦它注意到事件已經決定,它可以嘗試結算雙方之間的賭注並使用預言機來驗證結果(這將只是一個 API 呼叫)。

直覺上,我對如何做到這一點的想法是僅使用我自己(應用程序)作為這些賭注的中介。將我的應用程序的“中介”地址與所有其他真正想下注的人一起放入池中。在其他地方有一些外部函式/文件不斷檢查 API 以了解事件的結果是成功還是失敗,一旦確定,告訴我的應用程序的中間地址呼叫結算()函式進行投注 - 支付oracle 費用並根據 API 呼叫的結果支付給合適的人。

為此,我需要從外部文件呼叫 .sol 函式或合約函式 - 這可能嗎?

我會接受任何想法,謝謝你的幫助。

您可以做到這一點的一種方法是在後端有一個程序來管理事件的結果(您通過 API 接收)。每當有投注結果可用時,該過程將呼叫智能合約來結算投注並將獎勵轉移給獲勝者。

這種用於結算的智能合約功能當然僅限於您將從後端用於呼叫智能合約的管理員地址(例如:合約部署者)。

總之,合約只有結束賭注、決定獲勝者和分配獎勵的邏輯,但管理結果和通知合約的過程將在鏈下完成(您的後端本質上是您合約的 Oracle)。

  1. 讓節點離線檢查 API 以了解事件何時發生
  2. 在有更新時才允許他們發布。
  3. 這樣,當他們報告數據時,您只需支付一次費用。

您可以在 chainlink 節點網路上進行自定義設置來執行此操作。

這可以通過 1 個chainlink 節點以集中方式輕鬆完成。v2 版本將使用 Chainlink OCR 以分散方式獲取數據。

免責聲明,我是 Chainlink 開發者倡導者

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