Randomness

需要隨機數預言機

  • May 22, 2020

我正在尋找消耗較少氣體的隨機數發生器。我想我需要一個神諭,但你能告訴我最好的嗎?

謝謝

您可以使用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);
   }
}

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