interface IBoardroomV2 {
    /* ================= EVENTS ================= */

    event DepositShare(address indexed owner, uint256 amount);
    event WithdrawShare(address indexed owner, uint256 amount);
    event RewardClaimed(
        address indexed owner,
        address indexed token,
        uint256 amount
    );
    event RewardCollected(
        address indexed operator,
        address indexed target,
        address indexed token,
        uint256 amount
    );
    event RewardCollectionFailedWithReason(
        address indexed operator,
        address indexed target,
        string reason
    );
    event RewardCollectionFailedWithData(
        address indexed operator,
        address indexed target,
        bytes data
    );

    /* ================= CALLS ================= */

    function totalSupply() external view returns (uint256);

    function balanceOf(address _owner) external view returns (uint256);

    function rewardTokensAt(uint256 index) external view returns (address);

    function rewardTokensLength() external view returns (uint256);

    function rewardPoolsAt(uint256 index) external view returns (address);

    function rewardPoolsLength() external view returns (uint256);

    function lastSnapshotIndex(address _token) external view returns (uint256);

    function rewardEarned(address _token, address _director)
        external
        view
        returns (uint256);

    /* ================= TXNS ================= */

    function deposit(uint256 _amount) external;

    function withdraw(uint256 _amount) external;

    function claimReward() external;

    function exit() external;

    function collectReward() external;
}
function totalSupply() external view returns (uint256);

/* ================= CALLS ================= */