// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import "./ILockdrop.sol"; /** * @title SOMA Lockdrop Factory Contract. * @author SOMA.finance. * @notice A factory that produces Lockdrop contracts. */ interface ILockdropFactory { /** * @notice Emitted when a Lockdrop is created. * @param id The ID of the Lockdrop. * @param asset The delegation asset of the Lockdrop. * @param instance The address of the created Lockdrop. */ event LockdropCreated(uint256 id, address asset, address instance); /** * @notice The Lockdrop's CREATE_ROLE. * @dev Returns keccak256('Lockdrop.CREATE_ROLE'). */ function CREATE_ROLE() external pure returns (bytes32); /** * @notice Creates a Lockdrop instance. * @param asset The address of the delegation asset. * @param withdrawTo The address that delegated assets will be withdrawn to. * @param dateConfig The date configuration of the Lockdrop. * @custom:emits LockdropCreated * @custom:requirement `asset` must not be equal to address zero. * @custom:requirement `withdrawTo` must not be equal to address zero. * @custom:requirement The function caller must have the CREATE_ROLE. */ function create(address asset, address withdrawTo, ILockdrop.DateConfig calldata dateConfig) external; }