interface IStaking {
    function getEpochId(uint256 timestamp) external view returns (uint256); // get epoch id

    function getEpochUserBalance(
        address user,
        address token,
        uint128 epoch
    ) external view returns (uint256);

    function getEpochPoolSize(address token, uint128 epoch) external view returns (uint256);

    function epoch1Start() external view returns (uint256);

    function epochDuration() external view returns (uint256);

    function deposit(address tokenAddress, uint256 amount) external;

    function withdraw(address tokenAddress, uint256 amount) external;

    function balanceOf(address user, address token) external view returns (uint256);

    function manualEpochInit(address[] memory tokens, uint128 epochId) external;
}
function getEpochUserBalance(
    address user,
    address token,
    uint128 epoch
) external view returns (uint256);

// get epoch id