Solidity
在沒有 Chainlink 的情況下在 Solidity 中生成隨機數
你好我很清楚有很多關於討論不同方法的話題。只是好奇,想直接在這裡問,因為感覺情況可能有所不同。本質上,我正在努力做到這一點,所以每當有人從契約中調出資金時,他們獲得的金額從 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。如果您想了解更多資訊,這裡有一篇關於該主題的文章。