// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; interface IAmm { event Mint(address indexed sender, address indexed to, uint256 baseAmount, uint256 quoteAmount, uint256 liquidity); event Burn(address indexed sender, address indexed to, uint256 baseAmount, uint256 quoteAmount, uint256 liquidity); event Swap(address indexed trader, address indexed inputToken, address indexed outputToken, uint256 inputAmount, uint256 outputAmount); event ForceSwap(address indexed trader, address indexed inputToken, address indexed outputToken, uint256 inputAmount, uint256 outputAmount); event Rebase(uint256 quoteReserveBefore, uint256 quoteReserveAfter, uint256 _baseReserve , uint256 quoteReserveFromInternal, uint256 quoteReserveFromExternal ); event Sync(uint112 reserveBase, uint112 reserveQuote); // only factory can call this function function initialize( address baseToken_, address quoteToken_, address margin_ ) external; function mint(address to) external returns ( uint256 baseAmount, uint256 quoteAmount, uint256 liquidity ); function burn(address to) external returns ( uint256 baseAmount, uint256 quoteAmount, uint256 liquidity ); // only binding margin can call this function function swap( address trader, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount ) external returns (uint256[2] memory amounts); // only binding margin can call this function function forceSwap( address trader, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount ) external; function rebase() external returns (uint256 quoteReserveAfter); function collectFee() external returns (bool feeOn); function factory() external view returns (address); function config() external view returns (address); function baseToken() external view returns (address); function quoteToken() external view returns (address); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function margin() external view returns (address); function lastPrice() external view returns (uint256); function getReserves() external view returns ( uint112 reserveBase, uint112 reserveQuote, uint32 blockTimestamp ); function estimateSwap( address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount ) external view returns (uint256[2] memory amounts); function MINIMUM_LIQUIDITY() external pure returns (uint256); function getFeeLiquidity() external view returns (uint256); function getTheMaxBurnLiquidity() external view returns (uint256 maxLiquidity); }