How to generate random numbers in Solidity?

Number generation in Solidity is the process of creating random numbers in Solidity smart contracts. This can be used for various purposes, such as generating a unique ID for an object, creating random outcomes in a game, or selecting random participants for a sweepstakes.

Number generation is an important feature of Solidity, as it allows for greater flexibility and functionality in smart contracts.

To generate random numbers in Solidity, follow these steps:

 1. Create a ​RandomNumber​contract

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract RandomNumber {

}

2. Create a function ​generateRandomNumber​called ​​​​that takes no arguments and returns a ​uint​value.

function generateRandomNumber() public view returns (uint) {
    // code to generate random number goes here
}

3. Inside ​generateRandomNumber​the function , create a variable called ​timestamp​​​​​, which is used to store the timestamp of the current block. This can be obtained using ​block.timestamp​the variable .

function generateRandomNumber() public view returns (uint) {
    uint timestamp = block.timestamp;
}

4. Use ​keccak256​the library to ​timestamp​hash the variable and store the resulting hash in a variable ​bytes32​named ​hash​​​.

function generateRandomNumber() public view returns (uint) {
    uint timestamp = block.timestamp;
    bytes32 hash = keccak256(abi.encodePacked(timestamp));
}
  1. Use ​bytesToUint​the​​function to ​hash​convert​​to ​uint​​​type
function generateRandomNumber() public view returns (uint) {
    uint timestamp = block.timestamp;
    bytes32 hash = keccak256(abi.encodePacked(timestamp));
    return bytesToUint(hash);
}

6. The ​bytesToUint​function is to convert byte32 to uint256:

function bytesToUint(bytes32 b) public pure returns (uint256) {
    uint256 number;
    for (uint256 i = 0; i < b.length; i++) {
        number = number + uint8(b[i]) * (2**(8 * (b.length - (i + 1))));
    }
    return number;
}

final code

How to generate random numbers in Solidity?  _random number

running result

How to generate random numbers in Solidity?  _Solidity_02

Note: The randomness of this method depends on the block timestamp and does not have to be truly random. It is recommended to use a more secure method of generating random numbers, such as using a random number oracle service.

Guess you like

Origin blog.csdn.net/u010359479/article/details/128903828