abstract contract VRFConsumerHelper is VRFConsumerBase {
    constructor()
        VRFConsumerBase(Chainlink.vrfCoordinator(), Chainlink.linkToken())
    {}

    /**
    @notice Calls standard VRFConsumerBase.requestRandomness() with
    chain-specific constants.
     */
    function requestRandomness() internal returns (bytes32 requestId) {
        return
            super.requestRandomness(Chainlink.vrfKeyHash(), Chainlink.vrfFee());
    }

    /// @notice Withdraws LINK tokens, sending them to the recipient.
    function _withdrawLINK(address recipient, uint256 amount) internal {
        require(
            IERC20(Chainlink.linkToken()).transfer(recipient, amount),
            "VRFConsumerHelper: withdrawal failed"
        );
    }
}
/**
 @notice Convenience wrapper around VRFConsumerBase that abstracts the need to
 know constants such as contract addresses.
 @dev This contract should be used in an identical manner to Chainlink's standard
 VRFConsumerBase, along with all the same best practices.
 */
function requestRandomness() internal returns (bytes32 requestId) {
    return
        super.requestRandomness(Chainlink.vrfKeyHash(), Chainlink.vrfFee());
}

/**
 @notice Calls standard VRFConsumerBase.requestRandomness() with
 chain-specific constants.
 */