# Types

## Common

### BattleKey

Info struct containing a pool's specifications

```javascript
struct BattleKey {
    address collateral;
    string underlying;
    uint256 expiries;
    uint256 strikeValue;
}
```

**Params:**

| **Name**    | **Type** | **Description**                             |
| ----------- | -------- | ------------------------------------------- |
| collateral  | address  | The address of the token used as collateral |
| underlying  | string   | The underlying asset symbol                 |
| expiries    | uint256  | The expiry timestamp                        |
| strikeValue | uint256  | The strike price of options within the pool |

### Fee

Info struct representing the fee ratios used in a battle

```javascript
struct Fee {
    uint256 transactionFee;
    uint256 protocolFee;
    uint256 exerciseFee;
}
```

**Params:**

| **Name**       | **Type** | **Description**                                                             |
| -------------- | -------- | --------------------------------------------------------------------------- |
| transactionFee | uint256  | The fee ratio taken on every trade                                          |
| protocolFee    | uint256  | The ratio of the transaction fee that goes to the protocol                  |
| exerciseFee    | uint256  | The fee ratio applied when Spear or Shield tokens are exercised at maturity |

### GrowthX128

Info struct tracking the cumulative amounts of fees and deltas of collateral, Spear and Shield tokens involved in transactions

```javascript
struct GrowthX128 {
    uint256 fee;
    uint256 collateralIn;
    uint256 spearOut;
    uint256 shieldOut;
}

```

**Params:**

| **Name**     | **Type** | **Description**                                                                                  |
| ------------ | -------- | ------------------------------------------------------------------------------------------------ |
| fee          | uint256  | The all-time growth in transaction fee, per unit of liquidity, in collateral token               |
| collateralIn | uint256  | The all-time growth in the received collateral inputs, per unit of liquidity, as options premium |
| spearOut     | uint256  | The all-time growth in Spear token outputs per unit of liquidity                                 |
| shieldOut    | uint256  | The all-time growth in Shield token outputs per unit of liquidity                                |

### Owed

Info struct tracking the amounts of fees and deltas of collateral, Spear and Shield tokens that are owed to a position

```javascript
struct Owed {
    uint128 fee;
    uint128 collateralIn;
    uint128 spearOut;
    uint128 shieldOut;
}
```

**Params:**

| **Name**     | **Type** | **Description**                                                               |
| ------------ | -------- | ----------------------------------------------------------------------------- |
| fee          | uint128  | The amount of transaction fee owed to the position as of the last computation |
| collateralIn | uint128  | The collateral inputs owed to the position as of the last computation         |
| spearOut     | uint128  | The Spear token outputs owed to the position as of the last computation       |
| shieldOut    | uint128  | The Shield token outputs owed to the position as of the last computation      |

### TickInfo

Info struct tracking the state of a tick

```javascript
struct TickInfo {
    uint128 liquidityGross;
    int128 liquidityNet;
    GrowthX128 outside;
    bool initialized;
}
```

**Params:**

| **Name**       | **Type**   | **Description**                                                                                                                                                    |
| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| liquidityGross | uint128    | The total amount of liquidity that the pool uses either at tickLower or tickUpper                                                                                  |
| liquidityNet   | int128     | The amount of liquidity added (subtracted) when tick is crossed from left to right (right to left)                                                                 |
| outside        | GrowthX128 | The [GrowthX128](https://docs.divergence-protocol.com/technical-reference/core/types#growthx128) info recorded on the other side of the tick from the current tick |
| initialized    | bool       | Whether the tick is initialized                                                                                                                                    |

### PositionInfo

Info struct tracking the state of a position

```javascript
struct PositionInfo {
    uint128 liquidity;
    GrowthX128 insideLast;
}
```

**Params:**

| **Name**   | **Type**   | **Description**                                                                                                                                                                 |
| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| liquidity  | uint128    | The amount of usable liquidity                                                                                                                                                  |
| insideLast | GrowthX128 | The [GrowthX128](https://docs.divergence-protocol.com/technical-reference/core/types#growthx128) info per unit of liquidity inside the a position's bound as of the last action |

## Enums

### LiquidityType

Tracks the type of liquidity used by the LP

```javascript
enum LiquidityType {
    COLLATERAL,
    SPEAR,
    SHIELD
}
```

### Outcome

Tracks the status of a battle

```javascript
enum Outcome {
    ONGOING, 
    SPEAR_WIN, 
    SHIELD_WIN 
}
```

### TradeType

Tracks the type of trade

```javascript
enum TradeType {
    BUY_SPEAR,
    BUY_SHIELD
}
```

## TradeTypes

### TradeCache

Represents cached trade information

```javascript
struct TradeCache {
    uint256 feeProtocol;
}
```

**Params:**

| **Name**    | **Type** | **Description**                |
| ----------- | -------- | ------------------------------ |
| feeProtocol | uint256  | The protocol fee for the trade |

### TradeState

Represents the state of the trade

```javascript
struct TradeState {
    uint256 amountSpecifiedRemaining;
    uint256 amountCalculated;
    uint160 sqrtPriceX96;
    int24 tick;
    GrowthX128 global;
    uint128 protocolFee;
    uint128 liquidity;
    uint256 transactionFee;
}
```

**Params:**

| **Name**                 | **Type**   | **Description**                                                                                                                                                              |
| ------------------------ | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| amountSpecifiedRemaining | uint256    | How much collateral input or SToken output amount is remaining to be swapped in/out                                                                                          |
| amountCalculated         | uint256    | The amount of collateral input or SToken output that has been calculated for the swap                                                                                        |
| sqrtPriceX96             | uint160    | A fixed point Q64.96 number representing the sqrt of the ratio of shieldPrice/spearPrice                                                                                     |
| tick                     | int24      | The current tick                                                                                                                                                             |
| global                   | GrowthX128 | The [GrowthX128](https://docs.divergence-protocol.com/technical-reference/core/types#growthx128) info per unit of liquidity as of the last update to the pool's global state |
| protocolFee              | uint128    | The amount of collateral token to be paid as protocol fee                                                                                                                    |
| liquidity                | uint128    | The amount of usable liquidity                                                                                                                                               |
| transactionFee           | uint256    | The transaction fee for the trade                                                                                                                                            |

### StepComputations

Info struct used in computing the result of swapping some amount in, or amount out, given the parameters of the swap.

```javascript
struct StepComputations {
    uint160 sqrtPriceStartX96;
    int24 tickNext;
    bool initialized;
    uint160 sqrtPriceNextX96;
    uint256 amountIn;
    uint256 amountOut;
    uint256 feeAmount;
    int24 tickLower;
    int24 tickUpper;
}
```

**Params:**

| **Name**          | **Type** | **Description**                                                                                |
| ----------------- | -------- | ---------------------------------------------------------------------------------------------- |
| sqrtPriceStartX96 | uint160  | The sqrtPrice from which to start step computation                                             |
| tickNext          | int24    | The next tick up to the max or min tick of the virtual curve                                   |
| initialized       | bool     | Whether the next tick is initialized                                                           |
| sqrtPriceNextX96  | uint160  | The price after swapping the amount in/out, not to exceed the price target                     |
| amountIn          | uint256  | The collateral amount to be swapped in, based on the direction of the swap                     |
| amountOut         | uint256  | The amount to be received, of either Spear or Shield token, based on the direction of the swap |
| feeAmount         | uint256  | The amount of collateral input that will be taken as a fee                                     |
| tickLower         | int24    | The lower tick for the step                                                                    |
| tickUpper         | int24    | The upper tick for the step                                                                    |
|                   |          |                                                                                                |


---

# 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://docs.divergence-protocol.com/technical-reference/core/types.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.
