Example: Secure and Fair Random Number Generation Library
1. Smart Contract for RNG
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SecureRNG {
uint256 private nonce;
address private owner;
event RandomNumberGenerated(uint256 randomNumber, address indexed requester);
constructor() {
owner = msg.sender;
nonce = 0;
}
// Modifier to restrict access to certain functions
modifier onlyOwner() {
require(msg.sender == owner, "Not authorized");
_;
}
// Internal function to generate a random number
function generateRandomNumber() internal returns (uint256) {
nonce++;
uint256 randomNumber = uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender, nonce)));
return randomNumber;
}
// Public function to request a random number
function requestRandomNumber() public returns (uint256) {
uint256 randomNumber = generateRandomNumber();
emit RandomNumberGenerated(randomNumber, msg.sender);
return randomNumber;
}
// Function to reset the nonce for added security
function resetNonce() public onlyOwner {
nonce = 0;
}
}
2. Explanation of the Contract
3. Deployment and Interaction
4. Testing the RNG
Benefits of This Implementation
Last updated