# PoolLogger

{% embed url="<https://github.com/pangea-protocol/pangea-core/blob/main/contracts/pool/PoolLogger.sol>" %}

## Overview

컨트랙트에서는 주요 트랜잭션이 발생할 때 이벤트(event) 정보를 별도로 발행합니다. 판게아의 풀에서도 아래의 주요 트랜잭션이 발생할 때에 이벤트를 발행합니다.

* 스왑이 발생한 경우
* 유동성이 추가되거나 제거된 경우
* 수수료를 수취하는 경우
* 플래시론이 발생하는 경우

이 이벤트들은 Pool 컨트랙트가 직접 발행하는 것이 아니라 Pool Logger컨트랙트에 위임하여 발행하도록 설계하였습니다.&#x20;

Pool Logger는 판게아 컨트랙트들의 데이터 허브같은 역할을 수행합니다. Pool Logger 컨트랙트를 통해 각각의 컨트랙트를 모두 확인하지 않아도 모든 거래들을 쉽게 추적할 수 있습니다.

더 나아가, 판게아의 Pool Logger는 upgradable하게 설계되어 있어 이후 오라클과 같은 기능이 필요해질 경우 풀을 수정할 필요 없이 Pool Logger를 개선하여 반영할 수 있습니다.

## Events

### Burn

```solidity
event Burn(address indexed pool, int24 lower, int24 upper, uint256 amount0, uint256 amount1, uint256 liquidity)
```

### Collect

```solidity
event Collect(address indexed pool, uint256 amount0, uint256 amount1)
```

### Create

```solidity
event Create(address indexed pool, address token0, address token1, uint24 swapFee, uint160 price, uint24 tickSpacing)
```

### Flash

```solidity
event Flash(address indexed pool, address indexed sender, uint256 amount0, uint256 amount1, uint256 paid0, uint256 paid1)
```

### Mint

```solidity
event Mint(address indexed pool, int24 lower, int24 upper, uint256 amount0, uint256 amount1, uint256 liquidity)
```

### Swap

```solidity
event Swap(address indexed pool, bool zeroForOne, uint256 amountIn, uint256 amountOut)
```
