# LpAccount (v1)

## Off-chain get methods

### `get_lp_account_data`

Returns current state of the lp account: owner address, pool address and amount of both Jetton tokens.

```
(slice, slice, int, int) get_lp_account_data() method_id;
```

#### **Arguments**

None

#### **Result**

Returns the current state of the lp account.

**Return structure**

| Key            | Type      | Index | Description                                               |
| -------------- | --------- | ----- | --------------------------------------------------------- |
| `user_address` | `address` | 0     | Owner's address                                           |
| `pool_address` | `address` | 1     | Pool's address                                            |
| `amount0`      | `coins`   | 2     | Balance of th e first Jetton token (in basic token units) |
| `amount1`      | `coins`   | 3     | Balance of the second Jetton token (in basic token units) |

## On-chain queries

On-chain counterparts of getter methods.

#### **Operations table**

| Name                     | Value      | Description                                        |
| ------------------------ | ---------- | -------------------------------------------------- |
| `getter_lp_account_data` | 0x1d439ae0 | Sends a message with the current state of the pool |

### `getter_lp_account_data` (0x1d439ae0)

Sends a message with current state of the lp account. On-chain equivalent of `get_lp_account_data`.

#### **TL-B**

```
getter_lp_account_data#1d439ae0 query_id:uint64 = InternalMsgBody;
```

#### **Message body**

None

#### **Outgoing messages**

Sends a message with current state of the lp account to `sender_address`

#### **Response message body**

| Name           | Type      | Description                                               |
| -------------- | --------- | --------------------------------------------------------- |
| `op`           | `uint32`  | Operation code equal to `getter_lp_account_data`          |
| `query_id`     | `uint64`  | Query id                                                  |
| `user_address` | `address` | Owner's address                                           |
| `pool_address` | `address` | Pool's address                                            |
| `amount0`      | `coins`   | Balance of the first Jetton token (in basic token units)  |
| `amount1`      | `coins`   | Balance of the second Jetton token (in basic token units) |

## Pool message handlers

Handles incoming messages from a pool

#### **Operations table**

| Name            | Value      | Description   |
| --------------- | ---------- | ------------- |
| `add_liquidity` | 0x3ebe5431 | Add liquidity |

### `add_liquidity` (0x3ebe5431)

Stores the sent amount of tokens by the user to be added as new liquidity. Upon receiving an appropriate amount of both tokens sends a message with those amounts to a pool to be added as new liquidity. The automatic liquidity addition happens only if the amount of both tokens if greater than 1000 and non-zero `min_lp_out` was specified, otherwise the user can keep increasing the amount of stored tokens.

#### **TL-B**

```
add_liquidity#3ebe5431 query_id:uint64 new_amount0:Grams new_amount1:Grams min_lp_out:Grams = InternalMsgBody;
```

#### **Message body**

| Name          | Type    | Description                                                                     |
| ------------- | ------- | ------------------------------------------------------------------------------- |
| `new_amount0` | `coins` | Amount of the first Jetton tokens added (in basic token units)                  |
| `new_amount1` | `coins` | Amount of the second Jetton tokens added (in basic token units)                 |
| `min_lp_out`  | `coins` | Minimum required amount of received new liquidity tokens (in basic token units) |

Notes:

* addition of liquidity will fail if a user should receive less than `min_lp_out` of lp tokens as a result

#### **Outgoing messages**

Sends a message to the pool with `cb_add_liquidity` op

#### **Response message body**

| Name           | Type      | Description                                                        |
| -------------- | --------- | ------------------------------------------------------------------ |
| `op`           | `uint32`  | Operation code, equal to `cb_add_liquidity`                        |
| `query_id`     | `uint64`  | Query id                                                           |
| `amount0`      | `coins`   | Amount of the first Jetton tokens added (in basic token units)     |
| `amount1`      | `coins`   | Amount of the second Jetton tokens added (in basic token units)    |
| `user_address` | `address` | Owner's address                                                    |
| `min_lp_out`   | `coins`   | Minimum amount of received liquidity tokens (in basic token units) |

Notes:

* addition of liquidity will fail if a user should receive less than `min_lp_out` of lp tokens as a result

## User message handlers

Handles incoming messages from a user

#### **Operations table**

| Name                   | Value      | Description                                                                                              |
| ---------------------- | ---------- | -------------------------------------------------------------------------------------------------------- |
| `refund_me`            | 0xbf3f447  | Return previously sent tokens back to the user                                                           |
| `direct_add_liquidity` | 0x4cf82803 | Directly add liquidity with specified amount of tokens and a minimum amount of received liquidity tokens |
| `reset_gas`            | 0x42a0fb43 | Reset gas                                                                                                |

### `refund_me` (0xbf3f447)

Initiates a refund of stored tokens by `add_liquidity` if the user decides to cancel the addition of new liquidity. The amount of stored tokens will be sent to the pool which will initiate a transfer back to the user.

#### **TL-B**

```
refund_me#bf3f447 query_id:uint64 = InternalMsgBody;
```

#### **Message body**

None

#### **Outgoing messages**

Sends a message with `cb_refund_me` op code and amount of stored tokens to a pool. The pool will send a message to refund those tokens back to the user.

#### **Response message body**

| Name           | Type      | Description                                               |
| -------------- | --------- | --------------------------------------------------------- |
| `op`           | `uint32`  | Operation code                                            |
| `query_id`     | `uint64`  | Query id                                                  |
| `amount0`      | `coins`   | Amount of the first Jetton tokens (in basic token units)  |
| `amount1`      | `coins`   | Amount of the second Jetton tokens (in basic token units) |
| `user_address` | `address` | Owner's address                                           |

### `direct_add_liquidity` (0x4cf82803)

Initiates an addition of new liquidity to a pool with a specified amount of both tokens and a minimum amount of received liquidity. The operation is successful only if there's an equal or greater amount of both tokens stored in the account (the amount of both tokens must be greater than 1000). This method is useful if an automatic liquidity addition has not been triggered upon deposition of tokens.

#### **TL-B**

```
direct_add_liquidity#4cf82803 query_id:uint64 amount0:Grams amount1:Grams min_lp_out:Grams = InternalMsgBody;
```

#### **Message body**

| Name         | Type    | Description                                                        |
| ------------ | ------- | ------------------------------------------------------------------ |
| `amount0`    | `coins` | Amount of the first Jetton tokens (in basic token units)           |
| `amount1`    | `coins` | Amount of the second Jetton tokens (in basic token units)          |
| `min_lp_out` | `coins` | Minimum amount of received liquidity tokens (in basic token units) |

Notes:

* addition of liquidity will fail if a user should receive less than `min_lp_out` of lp tokens as a result
* `min_lp_out` value must be greater than zero for this operation to proceed

#### **Outgoing messages**

Sends a message with `cb_add_liquidity` op code and amount of both tokens to be added as new liquidity.

#### **Response message body**

| Name           | Type      | Description                                                        |
| -------------- | --------- | ------------------------------------------------------------------ |
| `op`           | `uint32`  | Operation code                                                     |
| `query_id`     | `uint64`  | Query id                                                           |
| `am0`          | `coins`   | Amount of the first Jetton tokens (in basic token units)           |
| `am1`          | `coins`   | Amount of the second Jetton tokens (in basic token units)          |
| `user_address` | `address` | Owner's address                                                    |
| `min_lp_out`   | `coins`   | Minimum amount of received liquidity tokens (in basic token units) |

Notes:

* addition of liquidity will fail if a user should receive less than `min_lp_out` of lp tokens as a result

### `reset_gas` (0x42a0fb43)

Updates the amount of $TON (in nanoTons) on the lp account to `REQUIRED_TON_RESERVE` (10000000) of the account. The remaining $TON will be sent back to the `user_address`

#### **TL-B**

```
reset_gas#42a0fb43 query_id:uint64 = InternalMsgBody;
```

#### **Message body**

None

#### **Outgoing messages**

Sends an empty message back to the user with the remaining $TON

## Constants

| Name                   | Value    | Description                                                               |
| ---------------------- | -------- | ------------------------------------------------------------------------- |
| `WORKCHAIN`            | 0        | Workchain id                                                              |
| `REQUIRED_TON_RESERVE` | 10000000 | Amount of $TON (in nanoTons) to be left on the lp account contract as gas |
