Contract-Design

對合約的兩次呼叫:第一次的輸入只能在第二次呼叫後顯示

  • November 4, 2019

我看到 EVM 中沒有並行執行。我要解決的問題如下:我有一個契約,它接受兩方的輸入——比如使用者 A 和 B。契約的結果取決於兩個輸入,但如果 A 先呼叫契約,那麼我在 B 也呼叫契約之前,此輸入是否會公開。關鍵是,在雙方都呼叫契約之前,雙方不應該知道對方的輸入。想像一下紙牌遊戲,其中兩個玩家必須同時選擇一張牌並將它們正面朝下放在桌子上,同時展示。

這可能嗎?

由於您無法在區塊鏈中隱藏資訊,因此您必須使用其他方式。

如果您熟悉探勘過程的工作原理,我們可以在這裡使用相同的邏輯。探勘的全部意義(從數學上講)是實際探勘很困難,但驗證結果是微不足道的。因此,一旦礦工成功開采了一個區塊,他就會發布用於開採該區塊的 nonce - 其他所有人都可以簡單地檢查 nonce 是否正確。

因此,在您的情況下,您可以要求參與者對他們的輸入進行雜湊處理並送出雜湊值。由於不可能從雜湊值中獲取輸入,因此數據是安全的。當雙方都送出了他們的雜湊值時,他們會陳述他們的實際輸入,並且雙方都可以輕鬆地驗證輸入導致正確的雜湊值。

根據您的輸入結構,您可能還希望包含某種鹽值。例如,如果輸入只是一個介於 1 和 10 之間的數字,那麼對方很容易暴力破解所有 10 個雜湊值,以查看哪個是正確的輸入並濫用該資訊。但是,如果您還包含一些鹽值,則另一方嘗試暴力破解輸入變得不可行。

以下是有關鹽的更多資訊:https://en.wikipedia.org/wiki/Salt_(cryptography)

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