Example - Pick a Property
The PickPropertyExample
contract illustrates the utilization of GeneralRandcastConsumerBase
and RandcastSDK
to pick one of several predefined properties.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import {
GeneralRandcastConsumerBase,
BasicRandcastConsumerBase
} from "randcast-user-contract/user/GeneralRandcastConsumerBase.sol";
// solhint-disable-next-line no-global-import
import "randcast-user-contract/user/RandcastSDK.sol" as RandcastSDK;
contract PickPropertyExample is GeneralRandcastConsumerBase {
/* requestId -> randomness */
mapping(bytes32 => uint256) public randomResults;
mapping(uint256 => string) public propertyValue;
uint256 public indexResult;
event PropertyValueResult(string);
constructor(address controller) BasicRandcastConsumerBase(controller) {
propertyValue[0] = "fire";
propertyValue[1] = "wind";
propertyValue[2] = "water";
}
/**
* Requests randomness
*/
function getProperty() external returns (bytes32) {
bytes memory params;
return _requestRandomness(RequestType.Randomness, params);
}
/**
* Callback function used by Randcast Adapter
*/
// solhint-disable-next-line
function _fulfillRandomness(bytes32 requestId, uint256 randomness) internal override {
randomResults[requestId] = randomness;
uint256 propertyIndex = RandcastSDK.roll(randomness, 3);
indexResult = propertyIndex;
emit PropertyValueResult(propertyValue[propertyIndex]);
}
}
The contract structure is similar to the previous example. The main components include the constructor
, the function getProperty
which is used to request random numbers, and the callback function _fulfillRandomness
which is triggered after generating the random number.
In the constructor
, define each index to represent the properties of 'fire,' 'wind,' and 'water.'
The function getProperty
requests the random number to be used in the callback function.
In the callback function _fulfillRandomness
we call RandcastSDK.roll
to pick the index of the three properties. We can then get the property value by index from the propertyValue
mapping.
The reason to choose this RandcastSDK
function in this example is that we need to select one of the three properties with equal probability randomly, and RandcastSDK.roll
is designed for randomly picking a number within a specified range.
Last updated