# ILBLegacyPair

Required interface of Legacy LBPair contract

## Bin

```solidity
struct Bin {
  uint112 reserveX;
  uint112 reserveY;
  uint256 accTokenXPerShare;
  uint256 accTokenYPerShare;
}
```

## PairInformation

```solidity
struct PairInformation {
  uint24 activeId;
  uint136 reserveX;
  uint136 reserveY;
  uint16 oracleSampleLifetime;
  uint16 oracleSize;
  uint16 oracleActiveSize;
  uint40 oracleLastTimestamp;
  uint16 oracleId;
  struct FeeHelper.FeesDistribution feesX;
  struct FeeHelper.FeesDistribution feesY;
}
```

## Debts

```solidity
struct Debts {
  uint256 debtX;
  uint256 debtY;
}
```

## Fees

```solidity
struct Fees {
  uint128 tokenX;
  uint128 tokenY;
}
```

## MintInfo

```solidity
struct MintInfo {
  uint256 amountXIn;
  uint256 amountYIn;
  uint256 amountXAddedToPair;
  uint256 amountYAddedToPair;
  uint256 activeFeeX;
  uint256 activeFeeY;
  uint256 totalDistributionX;
  uint256 totalDistributionY;
  uint256 id;
  uint256 amountX;
  uint256 amountY;
  uint256 distributionX;
  uint256 distributionY;
}
```

## Swap

```solidity
event Swap(address sender, address recipient, uint24 id, uint256 amountXIn, uint256 amountYIn, uint256 amountXOut, uint256 amountYOut, uint256 volatilityAccumulated, uint256 feesX, uint256 feesY)
```

## FlashLoan

```solidity
event FlashLoan(address sender, address recipient, uint256 amountX, uint256 amountY, uint256 feesX, uint256 feesY)
```

## LiquidityAdded

```solidity
event LiquidityAdded(address sender, address recipient, uint256 id, uint256 minted, uint256 amountX, uint256 amountY, uint256 distributionX, uint256 distributionY)
```

## CompositionFee

```solidity
event CompositionFee(address sender, address recipient, uint256 id, uint256 feesX, uint256 feesY)
```

## LiquidityRemoved

```solidity
event LiquidityRemoved(address sender, address recipient, uint256 id, uint256 burned, uint256 amountX, uint256 amountY)
```

## FeesCollected

```solidity
event FeesCollected(address sender, address recipient, uint256 amountX, uint256 amountY)
```

## ProtocolFeesCollected

```solidity
event ProtocolFeesCollected(address sender, address recipient, uint256 amountX, uint256 amountY)
```

## OracleSizeIncreased

```solidity
event OracleSizeIncreased(uint256 previousSize, uint256 newSize)
```

## tokenX

```solidity
function tokenX() external view returns (contract IERC20)
```

## tokenY

```solidity
function tokenY() external view returns (contract IERC20)
```

## factory

```solidity
function factory() external view returns (contract ILBFactory)
```

## getReservesAndId

```solidity
function getReservesAndId() external view returns (uint256 reserveX, uint256 reserveY, uint256 activeId)
```

## getGlobalFees

```solidity
function getGlobalFees() external view returns (uint256 feesXTotal, uint256 feesYTotal, uint256 feesXProtocol, uint256 feesYProtocol)
```

## getOracleParameters

```solidity
function getOracleParameters() external view returns (uint256 oracleSampleLifetime, uint256 oracleSize, uint256 oracleActiveSize, uint256 oracleLastTimestamp, uint256 oracleId, uint256 min, uint256 max)
```

## getOracleSampleFrom

```solidity
function getOracleSampleFrom(uint256 timeDelta) external view returns (uint256 cumulativeId, uint256 cumulativeAccumulator, uint256 cumulativeBinCrossed)
```

## feeParameters

```solidity
function feeParameters() external view returns (struct FeeHelper.FeeParameters)
```

## findFirstNonEmptyBinId

```solidity
function findFirstNonEmptyBinId(uint24 id_, bool sentTokenY) external view returns (uint24 id)
```

## getBin

```solidity
function getBin(uint24 id) external view returns (uint256 reserveX, uint256 reserveY)
```

## pendingFees

```solidity
function pendingFees(address account, uint256[] ids) external view returns (uint256 amountX, uint256 amountY)
```

## swap

```solidity
function swap(bool sentTokenY, address to) external returns (uint256 amountXOut, uint256 amountYOut)
```

## flashLoan

```solidity
function flashLoan(address to, uint256 amountXOut, uint256 amountYOut, bytes data) external
```

## mint

```solidity
function mint(uint256[] ids, uint256[] distributionX, uint256[] distributionY, address to) external returns (uint256 amountXAddedToPair, uint256 amountYAddedToPair, uint256[] liquidityMinted)
```

## burn

```solidity
function burn(uint256[] ids, uint256[] amounts, address to) external returns (uint256 amountX, uint256 amountY)
```

## increaseOracleLength

```solidity
function increaseOracleLength(uint16 newSize) external
```

## collectFees

```solidity
function collectFees(address account, uint256[] ids) external returns (uint256 amountX, uint256 amountY)
```

## collectProtocolFees

```solidity
function collectProtocolFees() external returns (uint256 amountX, uint256 amountY)
```

## setFeesParameters

```solidity
function setFeesParameters(bytes32 packedFeeParameters) external
```

## forceDecay

```solidity
function forceDecay() external
```

## initialize

```solidity
function initialize(contract IERC20 tokenX, contract IERC20 tokenY, uint24 activeId, uint16 sampleLifetime, bytes32 packedFeeParameters) external
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.lfj.gg/contracts/interfaces/ilblegacypair.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
