interface IGen0Sale {
event CrystalOpen(address indexed owner, uint256 crystalId, uint256 heroId);
event Gen0Purchase(address indexed owner, uint256 crystalId, uint256 createdBlock, uint256 purchasePrice);
function amountSold() view returns (uint256);
function crystals(uint256) view returns (address owner, uint256 summonerId, uint256 assistantId, uint16 generation, uint256 createdBlock, uint256 heroId, uint8 summonerTears, uint8 assistantTears, address bonusItem, uint32 maxSummons, uint32 firstName, uint32 lastName, uint8 shinyStyle);
function enabled() view returns (bool);
function getCrystal(uint256 _crystalId) view returns (tuple(address owner, uint256 summonerId, uint256 assistantId, uint16 generation, uint256 createdBlock, uint256 heroId, uint8 summonerTears, uint8 assistantTears, address bonusItem, uint32 maxSummons, uint32 firstName, uint32 lastName, uint8 shinyStyle));
function getUserCrystals(address _address) view returns (uint256[]);
function increase() view returns (uint256);
function jewelToken() view returns (address);
function lastPurchase(address) view returns (uint256);
function maxQuantity() view returns (uint256);
function nextPrice() view returns (uint256);
function open(uint256 _crystalId) returns (uint256);
function purchase(uint256 _limit);
function startCost() view returns (uint256);
function userCrystals(address, uint256) view returns (uint256);
function vrf(uint256 blockNumber) view returns (bytes32 result);
}