Orakururu
Off-chain Data oracle services made easy by Kururu~
Random number
Price
Random number oracle
Provide your smart contract with random number data
Example use cases
- • Lottery draw result
- • Casino game
- • RNG-Based game mechanic ex. ATK damage, Proc Critical Hit
How it work

Getting Start
Contract Address (REI)
Result
Example Contract
pragma solidity ^0.8.0; interface IKururuGuru { function request() external returns (uint256); function kuru() external returns (address); } interface IApprove { function approve(address spender, uint256 amount) external returns (bool); } contract KururuGuruConsumer { function guru(uint256 requestId, uint256 number) internal virtual {} address public kururuGuru; constructor(address kururuGuru_) { kururuGuru = kururuGuru_; address kuru = IKururuGuru(kururuGuru_).kuru(); IApprove(kuru).approve(kururuGuru_, type(uint256).max); } function requestGuru() internal returns (uint256) { return IKururuGuru(kururuGuru).request(); } function fulfillGuru(uint256 id, uint256 number) external { require(msg.sender == kururuGuru, "!guru"); guru(id, number); } } contract KururuGuruExample is KururuGuruConsumer { event Rolled(address indexed sender, uint256 id); constructor(address guruAddr) KururuGuruConsumer(guruAddr) {} struct Roll { address roller; uint256 result; bool rolled; } Roll[] public rolls; mapping (uint256 => uint256) internal guruToRoll; function guru(uint256 requestId, uint256 number) internal override { uint256 rollIndex = guruToRoll[requestId]; require(!rolls[rollIndex].rolled, "rolled"); rolls[rollIndex].result = number % 100; rolls[rollIndex].rolled = true; } function roll() external returns (uint256) { uint256 requestId = requestGuru(); uint256 rollIndex = rolls.length; rolls.push(Roll( msg.sender, 0, false )); guruToRoll[requestId] = rollIndex; emit Rolled(msg.sender, rollIndex); return rollIndex; } }
