Contract-Invocation

您如何處理智能合約執行期間的非確定性更改?

  • December 16, 2017

我閱讀了以下 E-SO 文章以及 Ethereum/Solidity 論壇上有關智能合約和外部伺服器(任何涉及套接字的任何內容)的幾個主題:

為什麼合約不能進行 API 呼叫?

我知道這個想法是維護確定性程式碼並訪問外部伺服器會破壞該契約。我也明白,當涉及到智能合約程式碼進行套接字呼叫時,它會產生安全或後勤問題。

有人能告訴我你將如何處理像下面這樣的場景嗎?

假設智能合約涉及不動產契約或所有權等資產的轉移,在智能合約的條件得到滿足之前,該資產由第三方託管。

假設在契約進行到一半時,發現土地契約是欺詐性的。我無法理解的是如何編寫一個不與外部伺服器互動的智能合約,它可以在履行契約之前在執行過程中檢查無效條件?

我聽說有人提到 Oracle,但我還沒有看到描述處理我剛才描述的非常真實的生活環境的具體方法的文件。更抽像地說,在執行智能合約期間發生的任何現實生活情況,基本上都會使交易無效。有人技術嗎?

合約本身只能使用區塊鏈+交易的數據。完全確定性。但是,您可以在您的合約中擁有特殊的可信地址,這將被允許將數據放入合約中。

因此,一些受信任的鏈下流程會檢查它想要的任何條件(在您的範例中是欺詐),將此數據發送到鏈上的合約,然後由合約處理。人們將此類程序命名為 Oracle。

從開發人員的角度來看,它看起來像是合約中的一種新方法,它接受一些數據:

function takeOracleData(uint newImportantExternalValue) {
   require(msg.sender == trustedOracleAddress);
   storedImportantExternalValue = newImportantExternalValue;
}

然後您只需將儲值用作一些真實世界的數據。現在你需要takeOracleData定期打電話。因此,您只需創建一個程序(例如 python 腳本),它會獲取新數據並每 10 分鐘呼叫一次函式。就這樣。

這是一個Oracle 的範例,正​​在觀察新的合約事件。

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