# Example - Pick a Property

The `PickPropertyExample`contract illustrates the utilization of `GeneralRandcastConsumerBase` and [`RandcastSDK`](https://docs.arpanetwork.io/randcast/using-the-sdk/randcast-utilities) to pick one of several predefined properties.&#x20;

```solidity
// 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`](https://docs.arpanetwork.io/randcast/using-the-sdk/randcast-utilities) 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.
