Randomness
需要隨機數預言機
我正在尋找消耗較少氣體的隨機數發生器。我想我需要一個神諭,但你能告訴我最好的嗎?
謝謝
您可以使用Chainlink VRF
您可以在類似的文章中看到這個答案,該文章也有實現它的確切程式碼。假設您需要一個預言機是正確的,因為區塊鍊是確定性的,因此在其上創建的任何數字都只是偽隨機數,這可能導致攻擊。
Chainlink VRF 是隨機數預言機的可證明隨機實現。下一步將以分散的方式執行它(在開發中)。
要生成一個非常好的隨機數,您可以使用未來塊的塊雜湊。但這需要您執行兩個契約呼叫:
- 第一個合約呼叫“同意”要考慮的未來區塊。
- 第二個實際使用該區塊的合約,現在來自過去。
一個簡短的例子:
pragma solidity ^0.4.25; contract RandomNumberReservation { uint public reservedBlockNumber; constructor(uint futureNthBlock) public { reservedBlockNumber = block.number + futureNthBlock; } function getCurrentBlockNumber() public view returns (uint) { return block.number; } function getRandomNumber() public view returns (bytes32) { require(block.number > reservedBlockNumber, "Time has not come yet"); return blockhash(reservedBlockNumber); } }