interface ILinearPool {
    function getVault() external view returns (address);
    function getPoolId() external view returns (bytes32 poolId);

    function getMainToken() external view returns (address);

    function getWrappedToken() external view returns (address);

    function getBptIndex() external view returns (uint256);

    function getMainIndex() external view returns (uint256);

    function getWrappedIndex() external view returns (uint256);

    // Price rates

    /**
     * @dev For a Linear Pool, the rate represents the appreciation of BPT with respect to the underlying tokens. This
     * rate increases slowly as the wrapped token appreciates in value.
     */
    function getRate() external view returns (uint256);

    function getWrappedTokenRate() external view returns (uint256);

    function getTargets() external view returns (uint256 lowerTarget, uint256 upperTarget);

    /**
     * @dev Returns the number of tokens in circulation.
     *
     * In other pools, this would be the same as `totalSupply`, but since this pool pre-mints all BPT, `totalSupply`
     * remains constant, whereas `virtualSupply` increases as users join the pool and decreases as they exit it.
     */
    function getVirtualSupply() external view returns (uint256);
}
function getRate() external view returns (uint256);

/**
 * @dev For a Linear Pool, the rate represents the appreciation of BPT with respect to the underlying tokens. This
 * rate increases slowly as the wrapped token appreciates in value.
 */