// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @title ICurvePool - Curve Pool Interface
 * @notice Minimal interface for Curve stable pools (e.g., 3pool)
 * @dev Based on Curve StableSwap pools
 */
interface ICurvePool {
    function exchange(
        int128 i,
        int128 j,
        uint256 dx,
        uint256 min_dy
    ) external payable returns (uint256);

    function exchange_underlying(
        int128 i,
        int128 j,
        uint256 dx,
        uint256 min_dy
    ) external payable returns (uint256);

    function get_dy(
        int128 i,
        int128 j,
        uint256 dx
    ) external view returns (uint256);

    function coins(uint256 i) external view returns (address);
}
