# Base

Facilitators of core and periphery contracts.

## BattleInitializer

### createAndInitializeBattle

```javascript
function createAndInitializeBattle(CreateAndInitBattleParams memory params)  external  override  returns  (address battle)  
```

**Params:**

| **Name** | **Type**                  | **Description**                                                                                                                                                    |
| -------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| params   | CreateAndInitBattleParams | Parameters for creating and initializing a pool. See [Params](https://docs.divergence-protocol.com/technical-reference/periphery/params#createandinitbattleparams) |

**Returns:**

| **Name** | **Type** | **Description**                            |
| -------- | -------- | ------------------------------------------ |
| battle   | address  | The address of the created battle contract |

## LiquidityManagement

### mintCallback

Called to msg.sender after minting liquidity to a position

```javascript
function mintCallback(uint256 amountOwed,  bytes  calldata data)  external  override  
```

**Params:**

| **Name**   | **Type** | **Description**                                    |
| ---------- | -------- | -------------------------------------------------- |
| amountOwed | uint256  | The amount of tokens owed for the minted liquidity |
| data       | bytes    | Any data passed through by the caller              |

### \_addLiquidity

Add liquidity to an initialized pool

```javascript
function _addLiquidity(AddLiqParams memory params) internal returns (uint128 liquidityAmount, address battleAddr)
```

**Params:**

| **Name**     | **Type** | **Description**                                                                                                                                  |
| ------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| AddLiqParams | params   | Params required for adding liquidity. See [Params](https://docs.divergence-protocol.com/technical-reference/periphery/params#addliquidityparams) |

**Returns:**

| **Name**        | **Type** | **Description**                             |
| --------------- | -------- | ------------------------------------------- |
| liquidityAmount | uint128  | The amount of liquidity to add              |
| battleAddr      | address  | The address to which an AMM pool is created |

## PeripheryPayments

### pay

Handles the payment of tokens or ETH from one address to another

```javascript
function pay(address tokenAddr,  address payer,  address recipient,  uint256 value)  internal  
```

**Params:**

| **Name**  | **Type** | **Description**                            |
| --------- | -------- | ------------------------------------------ |
| tokenAddr | address  | The address of the token to pay            |
| payer     | address  | The account that should pay the tokens     |
| recipient | address  | The account that should receive the tokens |
| value     | uint256  | The amount to pay                          |
