// SPDX-License-Identifier: MIT
interface IVRFOracleOraichain {
function randomnessRequest(uint256 _seed, bytes calldata _data) external payable returns (bytes32 reqId);
function getFee() external returns (uint256);
contract VrfOracleOraichainExample {
constructor (address _oracle) public {
function randomnessRequest(uint256 _seed) public {
uint256 fee = IVRFOracleOraichain(oracle).getFee();
bytes memory data = abi.encode(address(this), this.fulfillRandomness.selector);
reqId = IVRFOracleOraichain(oracle).randomnessRequest.value(fee)(_seed, data);
// get three randomnesses range(0:1000) from Oraichain randomness
function fulfillRandomness(bytes32 _reqId, uint256 oraichainRandomness) public {
random1 = random(oraichainRandomness, 1000);
random2 = random(random1, 1000);
random3 = random(random2, 1000);
function random(uint256 _oraiNumber, uint256 _weight) public returns (uint256){
return uint256(keccak256(abi.encodePacked(_oraiNumber, block.difficulty, block.timestamp, block.coinbase, block.number, msg.sender))) % (_weight);