Solidity

這會是一個不錯的選擇嗎?

  • August 10, 2021

這個偽隨機算法會不會失效:

我正在實施一個彩票合約,並通過獲取每個加入的玩家的地址、將地址打包成一個字元串並對該值進行散列、將其轉換為一個 uint 並從中獲取一個數組的索引來選擇獲勝者。我在想,即使有人閱讀了所有地址並估計了獲勝者,也不會 100% 準確,因為這取決於另一個帳戶是否會加入。

編輯:選擇一名獲勝者後,球員陣列在前端被打亂,並由契約管理員重新設置。

無法安全地在鏈上創建偽隨機數。它總是可以被濫用。

在您的情況下,攻擊者可以等到最後一刻並模擬您的算法。然後他可以創建一個適合他需要的地址並將其添加到彩票中,這樣他就會中獎。

攻擊者很容易模擬您的算法並將精心設計的地址輸入到彩票中,因為所有這些都可以使用快速電腦在鏈下完成。它只需要他生成一個地址來幫助他贏得彩票,即使他可能需要一些循環才能找到一個合適的地址來解決問題。

如果您由集中式管理員引入隨機化,情況就不同了——但是您將失去不需要信任的去中心化智能合約的所有好處。

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