Solidity

在沒有 Chainlink 的情況下在 Solidity 中生成隨機數

  • December 24, 2021

你好我很清楚有很多關於討論不同方法的話題。只是好奇,想直接在這裡問,因為感覺情況可能有所不同。本質上,我正在努力做到這一點,所以每當有人從契約中調出資金時,他們獲得的金額從 0 到 100 不等,但顯然我目前的方法有缺陷,具體取決於現在。

我一直在閱讀 ChainLink VRF,但看起來費用可能有點煩人。只是好奇是否還有其他任何人知道的方法,否則我的另一個選擇是如果餘額接近目前的塊獎勵,則鎖定餘額,然後使用者將不得不更頻繁地兌現。許多使用者甚至會在塊獎勵之​​上獲得平衡,這是值得懷疑的,但我想探索我的選擇。

如果 Chainlink 費用過高,您也可以隨時創建自己的隨機信標,將隨機數發佈到區塊鏈。然後在 5 美元的 DigitalOcean 節點和熱錢包上的一些 ETH 上執行它,以便為您的案例頻繁地發布數字。

如果你在solidity中生成一個隨機數,你將需要在某個時候查看offchain,否則礦工可以使用blockhash操縱任何類型的隨機數生成器。

在應用程序中獲取隨機數的一種天真的方法,您可以接受它是“可破解的”:

function random() private view returns(uint){
   return uint(keccak256(abi.encodePacked(block.difficulty, now, number)));
}

否則,您將要使用Chainlink VRF。如果您想了解更多資訊,這裡有一篇關於該主題的文章。

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