// SPDX-License-Identifier: MIT pragma solidity 0.8.6; import "./IProjects.sol"; import "./IOperatorStore.sol"; import "./ITickets.sol"; interface ITicketBooth { event Issue( uint256 indexed projectId, string name, string symbol, address caller ); event Print( address indexed holder, uint256 indexed projectId, uint256 amount, bool convertedTickets, bool preferUnstakedTickets, address controller ); event Redeem( address indexed holder, uint256 indexed projectId, uint256 amount, uint256 stakedTickets, bool preferUnstaked, address controller ); event Stake( address indexed holder, uint256 indexed projectId, uint256 amount, address caller ); event Unstake( address indexed holder, uint256 indexed projectId, uint256 amount, address caller ); event Lock( address indexed holder, uint256 indexed projectId, uint256 amount, address caller ); event Unlock( address indexed holder, uint256 indexed projectId, uint256 amount, address caller ); event Transfer( address indexed holder, uint256 indexed projectId, address indexed recipient, uint256 amount, address caller ); function ticketsOf(uint256 _projectId) external view returns (ITickets); function projects() external view returns (IProjects); function lockedBalanceOf(address _holder, uint256 _projectId) external view returns (uint256); function lockedBalanceBy( address _operator, address _holder, uint256 _projectId ) external view returns (uint256); function stakedBalanceOf(address _holder, uint256 _projectId) external view returns (uint256); function stakedTotalSupplyOf(uint256 _projectId) external view returns (uint256); function totalSupplyOf(uint256 _projectId) external view returns (uint256); function balanceOf(address _holder, uint256 _projectId) external view returns (uint256 _result); function issue( uint256 _projectId, string calldata _name, string calldata _symbol ) external; function print( address _holder, uint256 _projectId, uint256 _amount, bool _preferUnstakedTickets ) external; function redeem( address _holder, uint256 _projectId, uint256 _amount, bool _preferUnstaked ) external; function stake( address _holder, uint256 _projectId, uint256 _amount ) external; function unstake( address _holder, uint256 _projectId, uint256 _amount ) external; function lock( address _holder, uint256 _projectId, uint256 _amount ) external; function unlock( address _holder, uint256 _projectId, uint256 _amount ) external; function transfer( address _holder, uint256 _projectId, uint256 _amount, address _recipient ) external; }