> For the complete documentation index, see [llms.txt](https://docs.ston.fi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ston.fi/es/seccion-para-desarrolladores/dex/smart-contracts/v1/pool.md).

# Pool (v1)

## Métodos get fuera de la cadena

### `get_pool_data`

Devuelve el estado actual del pool: reservas de tokens Jetton, direcciones de billetera Jetton y parámetros de comisiones.

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

#### **Argumentos**

`Ninguno`

#### **Resultado**

Devuelve el estado actual de la `Pool`

**Estructura de resultado**

| Clave                           | Tipo        | Índice | Descripción                                                                                      |
| ------------------------------- | ----------- | ------ | ------------------------------------------------------------------------------------------------ |
| `reserve0`                      | `coins`     | 0      | Cantidad del primer token (en unidades básicas del token)                                        |
| `reserve1`                      | `coins`     | 1      | Cantidad del segundo token (en unidades básicas del token)                                       |
| `token0_wallet_address`         | `dirección` | 2      | Dirección del primer token Jetton                                                                |
| `token1_wallet_address`         | `dirección` | 3      | Dirección del segundo token Jetton                                                               |
| `lp_fee`                        | `uint8`     | 4      | Valor de la comisión del pool de liquidez                                                        |
| `protocol_fee`                  | `uint8`     | 5      | Comisión del protocolo                                                                           |
| `ref_fee`                       | `uint8`     | 6      | Comisión del referidor                                                                           |
| `protocol_fee_address`          | `dirección` | 7      | Dirección para recibir las comisiones del protocolo                                              |
| `collected_token0_protocol_fee` | `coins`     | 8      | Cantidad de comisiones de protocolo acumuladas del primer token (en unidades básicas del token)  |
| `collected_token1_protocol_fee` | `coins`     | 9      | Cantidad de comisiones de protocolo acumuladas del segundo token (en unidades básicas del token) |

Notas:

* la proporción de la comisión es el valor de la comisión dividido por `FEE_DIVIDER` (10000); por lo tanto, una comisión del 1% tiene un valor de 100

### `get_expected_outputs`

Estima el resultado esperado de la `amount` de `jettonWallet` intercambio de tokens por el otro tipo de tokens del pool.

```
(int, int, int) get_expected_outputs(int amount, slice token_wallet) method_id;
```

#### **Argumentos**

| Nombre         | Tipo        | Descripción                                                                          |
| -------------- | ----------- | ------------------------------------------------------------------------------------ |
| `amount`       | `coins`     | Cantidad de tokens a intercambiar (en unidades básicas del token)                    |
| `token_wallet` | `dirección` | Dirección Jetton del token (debe ser igual a una de las direcciones Jetton del pool) |

#### **Resultado**

Devuelve el resultado esperado de un intercambio de tokens

**Estructura de resultado**

| Clave               | Tipo    | Índice | Descripción                                                                             |
| ------------------- | ------- | ------ | --------------------------------------------------------------------------------------- |
| `jetton_to_receive` | `coins` | 0      | Cantidad de tokens recibidos (en unidades básicas del token)                            |
| `protocol_fee_paid` | `coins` | 1      | Cantidad de tokens pagados por comisiones del protocolo (en unidades básicas del token) |
| `ref_fee_paid`      | `coins` | 2      | Cantidad de tokens pagados por comisiones de referidor (en unidades básicas del token)  |

### `get_expected_tokens`

Estimar una cantidad esperada de tokens LP acuñados al proporcionar liquidez.

```
(int) get_expected_tokens(int amount0, int amount1) method_id;
```

#### **Argumentos**

| Clave     | Tipo    | Descripción                                                               |
| --------- | ------- | ------------------------------------------------------------------------- |
| `amount0` | `coins` | Cantidad de tokens para el primer Jetton (en unidades básicas del token)  |
| `amount1` | `coins` | Cantidad de tokens para el segundo Jetton (en unidades básicas del token) |

#### **Resultado**

Devuelve una cantidad estimada de tokens de liquidez a acuñar

### `get_expected_liquidity`

Estimar la liquidez esperada liberada al quemar tokens de liquidez.

```
(int, int) get_expected_liquidity(int jetton_amount) method_id;
```

#### **Argumentos**

| Clave           | Tipo    | Descripción                                                    |
| --------------- | ------- | -------------------------------------------------------------- |
| `jetton_amount` | `coins` | Cantidad de tokens de liquidez (en unidades básicas del token) |

#### **Resultado**

Devuelve la liquidez liberada esperada

**Estructura de retorno**

| Clave     | Tipo    | Índice | Descripción                                                               |
| --------- | ------- | ------ | ------------------------------------------------------------------------- |
| `amount0` | `coins` | 0      | Cantidad de tokens para el primer Jetton (en unidades básicas del token)  |
| `amount1` | `coins` | 1      | Cantidad de tokens para el segundo Jetton (en unidades básicas del token) |

### `get_lp_account_address`

Obtiene la dirección de la cuenta LP de un usuario

```
slice get_lp_account_address(slice owner_address) method_id;
```

#### **Argumentos**

| Clave           | Tipo        | Descripción             |
| --------------- | ----------- | ----------------------- |
| `owner_address` | `dirección` | Dirección de un usuario |

#### **Resultado**

Función de la dirección de la cuenta lp de un usuario

### `get_jetton_data`

Métodos estándar 'get' de jetton de TonWeb JettonMinter.

```
(int, int, slice, cell, cell) get_jetton_data() method_id;
```

#### **Argumentos**

Ninguno

#### **Resultado**

Devuelve una estructura con los datos de Jetton

**Estructura de retorno**

| Clave                | Tipo        | Índice | Descripción                                                |
| -------------------- | ----------- | ------ | ---------------------------------------------------------- |
| `total_supply`       | `coins`     | 0      | Suministro total de tokens (en unidades básicas del token) |
| `is_mintable`        | `bool`      | 1      | Si se pueden acuñar nuevos tokens                          |
| `admin_address`      | `dirección` | 2      | Dirección del administrador                                |
| `jetton_content_uri` | `string`    | 3      | URI fuera de la cadena con datos de Jetton                 |
| `jetton_wallet_code` | `cell`      | 4      | Código de la billetera Jetton LP                           |

### `get_wallet_address`

Obtiene la dirección de la wallet LP de un usuario.

```
slice get_wallet_address(slice owner_address) method_id;
```

#### **Argumentos**

| Nombre          | Tipo        | Descripción             |
| --------------- | ----------- | ----------------------- |
| `owner_address` | `dirección` | Dirección de un usuario |

#### **Resultado**

Devuelve la dirección calculada de la billetera lp de un usuario

## Consultas en la cadena

Contrapartes en la cadena de los métodos getter.

#### **Tabla de operaciones**

| Nombre                      | Valor      | Descripción                                                                               |
| --------------------------- | ---------- | ----------------------------------------------------------------------------------------- |
| `getter_pool_data`          | 0x43c034e6 | Envía un mensaje con el estado actual del pool                                            |
| `getter_expected_outputs`   | 0xed4d8b67 | Envía un mensaje con un resultado estimado del intercambio de tokens                      |
| `getter_lp_account_address` | 0x9163a98a | Envía un mensaje con la dirección de la cuenta LP de un usuario                           |
| `getter_expected_tokens`    | 0x9ce632c5 | Envía un mensaje con una cantidad estimada de tokens lp acuñados al proporcionar liquidez |
| `getter_expected_liquidity` | 0x8751801f | Envía un mensaje con la liquidez estimada liberada al quemar tokens de liquidez           |
| `provide_wallet_address`    | 0x2c76b973 | Envía un mensaje con la dirección de la wallet LP de un usuario                           |

### `getter_pool_data` (0x43c034e6)

Envía un mensaje con el estado actual del pool. Equivalente en cadena de `get_pool_data`.

#### **TL-B**

```
getter_pool_data#43c034e6 query_id:uint64 = InternalMsgBody;
```

#### **Cuerpo del mensaje**

Ninguno

#### **Mensajes salientes**

Envía un mensaje con los datos actuales del pool a la `sender_address`

#### **Cuerpo del mensaje de respuesta**

| Nombre           | Tipo        | Descripción                                                |
| ---------------- | ----------- | ---------------------------------------------------------- |
| `op`             | `uint32`    | El código de operación es igual a `getter_pool_data`       |
| `query_id`       | `uint64`    | ID de consulta                                             |
| `reserve0`       | `coins`     | Cantidad del primer token (en unidades básicas del token)  |
| `reserve1`       | `coins`     | Cantidad del segundo token (en unidades básicas del token) |
| `token0_address` | `dirección` | Dirección del primer token Jetton                          |
| `token1_address` | `dirección` | Dirección del segundo token Jetton                         |
| `ref_fee_data`   | `cell`      | Celda con datos de comisiones                              |

#### **`ref_fee_data` body**

| Nombre                          | Tipo        | Descripción                                                                                      |
| ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------ |
| `lp_fee`                        | `uint8`     | Valor de la comisión del pool de liquidez                                                        |
| `protocol_fee`                  | `uint8`     | Comisión del protocolo                                                                           |
| `ref_fee`                       | `uint8`     | Comisión del referidor                                                                           |
| `protocol_fee_address`          | `dirección` | Dirección para recibir las comisiones del protocolo                                              |
| `collected_token0_protocol_fee` | `coins`     | Cantidad de comisiones de protocolo acumuladas del primer token (en unidades básicas del token)  |
| `collected_token1_protocol_fee` | `coins`     | Cantidad de comisiones de protocolo acumuladas del segundo token (en unidades básicas del token) |

### `getter_expected_outputs` (0xed4d8b67)

Envía un mensaje con un resultado estimado del intercambio de tokens. Equivalente en cadena de `get_expected_outputs`.

#### **TL-B**

```
getter_expected_outputs#ed4d8b67 query_id:uint64 amount:Grams token_wallet:MsgAddress = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre         | Tipo        | Descripción                                        |
| -------------- | ----------- | -------------------------------------------------- |
| `amount`       | `coins`     | Cantidad de tokens (en unidades básicas del token) |
| `token_wallet` | `dirección` | Dirección Jetton del token                         |

#### **Mensajes salientes**

Envía un mensaje con un resultado estimado del intercambio de tokens a `sender_address`

#### **Cuerpo del mensaje de respuesta**

| Nombre             | Tipo     | Descripción                                                                             |
| ------------------ | -------- | --------------------------------------------------------------------------------------- |
| `op`               | `uint32` | El código de operación es igual a `getter_expected_outputs`                             |
| `query_id`         | `uint64` | ID de consulta                                                                          |
| `out`              | `coins`  | Cantidad de tokens a recibir (en unidades básicas del token)                            |
| `protocol_fee_out` | `coins`  | Cantidad de tokens pagados por comisiones del protocolo (en unidades básicas del token) |
| `ref_fee_out`      | `coins`  | Cantidad de tokens pagados por comisiones de referidor (en unidades básicas del token)  |

### `getter_lp_account_address` (0x9163a98a)

Envía un mensaje con la dirección de la cuenta LP de un usuario. Equivalente en cadena de `get_lp_account_address`.

#### **TL-B**

```
getter_lp_account_address#9163a98a query_id:uint64 user_address:MsgAddress = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre         | Tipo        | Descripción             |
| -------------- | ----------- | ----------------------- |
| `user_address` | `dirección` | Dirección de un usuario |

#### **Mensajes salientes**

Envía un mensaje con la dirección de la cuenta LP de un usuario a `sender_address`

#### **Cuerpo del mensaje de respuesta**

| Nombre               | Tipo        | Descripción                                                 |
| -------------------- | ----------- | ----------------------------------------------------------- |
| `op`                 | `uint32`    | El código de operación es igual a `getter_expected_outputs` |
| `query_id`           | `uint64`    | ID de consulta                                              |
| `lp_account_address` | `dirección` | dirección de la cuenta LP de un usuario                     |

Notas:

* la versión actual del contrato devuelve un mensaje con `getter_expected_outputs` código de operación en lugar de `getter_lp_account_address` por lo que el usuario debe diferenciar esos mensajes por algún otro medio

### `getter_expected_tokens` (0x9ce632c5)

Envía un mensaje con una cantidad estimada de tokens lp acuñados al proporcionar liquidez. Equivalente en cadena de `get_expected_tokens`

#### **TL-B**

```
getter_expected_tokens#9ce632c5 query_id:uint64 user_address:MsgAddress amount0:Grams amount1:Grams = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre         | Tipo        | Descripción                                                               |
| -------------- | ----------- | ------------------------------------------------------------------------- |
| `user_address` | `dirección` | Dirección del usuario (no utilizada)                                      |
| `amount0`      | `coins`     | Cantidad de tokens para el primer Jetton (en unidades básicas del token)  |
| `amount1`      | `coins`     | Cantidad de tokens para el segundo Jetton (en unidades básicas del token) |

#### **Mensajes salientes**

Envía un mensaje con una cantidad estimada de tokens de liquidez que se acuñarán a `sender_address`

#### **Cuerpo del mensaje de respuesta**

| Nombre     | Tipo     | Descripción                                                             |
| ---------- | -------- | ----------------------------------------------------------------------- |
| `op`       | `uint32` | El código de operación es igual a `getter_expected_tokens`              |
| `query_id` | `uint64` | ID de consulta                                                          |
| `liquidez` | `coins`  | Cantidad esperada de tokens de liquidez (en unidades básicas del token) |

### `getter_expected_liquidity` (0x8751801f)

Envía un mensaje con la liquidez estimada liberada al quemar tokens de liquidez. Equivalente en cadena de `get_expected_liquidity`.

#### **TL-B**

```
getter_expected_liquidity#8751801f query_id:uint64 jetton_amount:Grams = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre          | Tipo    | Descripción                                                             |
| --------------- | ------- | ----------------------------------------------------------------------- |
| `jetton_amount` | `coins` | Cantidad de tokens de liquidez a quemar (en unidades básicas del token) |

#### **Mensajes salientes**

Envía un mensaje con liquidez estimada a `sender_address`

#### **Cuerpo del mensaje de respuesta**

| Nombre        | Tipo     | Descripción                                                               |
| ------------- | -------- | ------------------------------------------------------------------------- |
| `op`          | `uint32` | El código de operación es igual a `getter_expected_tokens`                |
| `query_id`    | `uint64` | ID de consulta                                                            |
| `amount0_out` | `coins`  | Cantidad de tokens para el primer Jetton (en unidades básicas del token)  |
| `amount1_out` | `coins`  | Cantidad de tokens para el segundo Jetton (en unidades básicas del token) |

### `provide_wallet_address` (0x2c76b973)

Envía un mensaje con la dirección de la wallet LP de un usuario. Equivalente en cadena de `get_wallet_address`.

#### **TL-B**

```
provide_wallet_address#2c76b973 query_id:uint64 owner_address:MsgAddress include_address?:Bool = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre             | Tipo        | Descripción                                                 |
| ------------------ | ----------- | ----------------------------------------------------------- |
| `owner_address`    | `dirección` | Dirección de un usuario                                     |
| `include_address?` | `uint1`     | Incluye la dirección del usuario en el mensaje de respuesta |

#### **Mensajes salientes**

Envía un mensaje de vuelta al remitente con la dirección calculada de la wallet LP de un usuario

#### **Cuerpo del mensaje de respuesta**

| Nombre              | Tipo           | Descripción                                                          |
| ------------------- | -------------- | -------------------------------------------------------------------- |
| `op`                | `uint32`       | El código de operación es igual a `take_wallet_address` (0xd1735400) |
| `query_id`          | `uint64`       | ID de consulta                                                       |
| `lp_wallet_address` | `dirección`    | Dirección calculada de la wallet LP                                  |
| `ref_address`       | `cell \| null` | Celda con datos si `include_address?` se evalúa a `true`             |

#### **`ref_address` body**

| Nombre             | Tipo        | Descripción             |
| ------------------ | ----------- | ----------------------- |
| `included_address` | `dirección` | Dirección de un usuario |

## Manejadores de Jetton

Gestiona las operaciones enviadas desde una wallet Jetton.

#### **Tabla de operaciones**

| Nombre              | Valor      | Descripción                                                                 |
| ------------------- | ---------- | --------------------------------------------------------------------------- |
| `burn_notification` | 0x7bdd97de | Enviado por la wallet LP después de quemar jettons LP para liberar liquidez |

### `burn_notification` (0x7bdd97de)

Enviado por la billetera LP después de quemar jettons LP para liberar liquidez.

#### **TL-B**

```
burn_notification#7bdd97de query_id:uint64 jetton_amount:Grams from_address:MsgAddress response_address:MsgAddress = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre             | Tipo        | Descripción                                                             |
| ------------------ | ----------- | ----------------------------------------------------------------------- |
| `jetton_amount`    | `coins`     | Cantidad de tokens de liquidez a quemar (en unidades básicas del token) |
| `from_address`     | `dirección` | Dirección del usuario                                                   |
| `response_address` | `dirección` | Dirección para un mensaje de respuesta                                  |

#### **Mensajes salientes**

Envía un mensaje con op `excesses` (0xd53276db) a `response_address`

Envía un mensaje con una cantidad liberada de ambos tokens para que el usuario la reciba como resultado de la operación de quema al router, que inicia `pay_to` operación a `from_address`

## Manejadores de mensajes internos del router

Gestiona mensajes del router.

#### **Tabla de operaciones**

| Nombre         | Valor      | Descripción                              |
| -------------- | ---------- | ---------------------------------------- |
| `swap`         | 0x25938561 | Intercambiar tokens                      |
| `provide_lp`   | 0xfcf9e58f | Proporcionar liquidez                    |
| `reset_gas`    | 0x42a0fb43 | Reiniciar gas                            |
| `collect_fees` | 0x1fcb7d3d | Cobrar comisiones                        |
| `set_fees`     | 0x355423e5 | Establecer nuevos parámetros de comisión |

### `swap` (0x25938561)

Intercambia tokens. Este mensaje se recibe del router cuando el usuario inicia un intercambio de tokens.

#### **TL-B**

```
ref_bodycell$_ from_real_user:MsgAddress ref_address:MsgAddress = RefBodyCell;
swap#25938561 query_id:uint64 from_user:MsgAddress token_wallet:MsgAddress amount:Grams min_out:Grams ref_bodycell:(Either RefBodyCell ^RefBodyCell) = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre              | Tipo        | Descripción                                                         |
| ------------------- | ----------- | ------------------------------------------------------------------- |
| `from_user_address` | `dirección` | Dirección del usuario                                               |
| `token_wallet`      | `dirección` | Dirección de la billetera Jetton entrante                           |
| `amount`            | `coins`     | Cantidad de tokens entrantes (en unidades básicas del token)        |
| `min_out`           | `coins`     | Cantidad mínima de tokens recibidos (en unidades básicas del token) |
| `has_ref`           | `uint1`     | Si hay referencia                                                   |
| `ref_bodycell`      | `cell`      | Celda con datos                                                     |

Notas:

* el intercambio fallará si un usuario debe recibir menos de `min_out` de tokens como resultado

#### **`ref_bodycell` body**

| Nombre           | Tipo        | Descripción                                            |
| ---------------- | ----------- | ------------------------------------------------------ |
| `from_real_user` | `dirección` | Quién inicializó el intercambio                        |
| `ref_address`    | `dirección` | Dirección de referidos; presente solo si has\_ref es 1 |

#### **Mensajes salientes**

Envía un mensaje con una cantidad de los otros tokens a recibir por un usuario como resultado del intercambio al router, que inicia `pay_to` operación

Además, puede enviar un mensaje con las comisiones de referido al router, que inicia `pay_to` operación a `ref_address`

### `provide_lp` (0xfcf9e58f)

Proporciona liquidez al pool. Un usuario debe enviar una cantidad de ambos tokens para recibir tokens LP y agregar nueva liquidez a un pool. Este mensaje se enruta a la cuenta del pool de liquidez con `add_liquidity` código de operación.

#### **TL-B**

```
provide_lp#fcf9e58f query_id:uint64 owner_addr:MsgAddress min_lp_out:Grams amount0:Grams amount1:Grams = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre       | Tipo        | Descripción                                                                     |
| ------------ | ----------- | ------------------------------------------------------------------------------- |
| `owner_addr` | `dirección` | Dirección del usuario                                                           |
| `min_lp_out` | `coins`     | Cantidad mínima de tokens de liquidez recibidos (en unidades básicas del token) |
| `amount0`    | `coins`     | Cantidad del primer token Jetton (en unidades básicas del token)                |
| `amount1`    | `coins`     | Cantidad del segundo token Jetton (en unidades básicas del token)               |

#### **Mensajes salientes**

Envía un mensaje a la cuenta del pool de liquidez con `add_liquidity` código de operación.

### `reset_gas` (0x42a0fb43)

Actualiza la cantidad de $TON (en nanoTons) en el pool a `REQUIRED_TON_RESERVE` (10000000) del pool. La cantidad restante de $TON se enviará de vuelta al router.

#### **TL-B**

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

#### **Cuerpo del mensaje**

Ninguno

#### **Mensajes salientes**

Envía un mensaje vacío de vuelta al router con el $TON restante

### `collect_fees` (0x1fcb7d3d)

Cobrar las comisiones del protocolo, que se enviarán a `protocol_fee_address`. Un usuario que inicia esta operación recibe una recompensa igual a 1/1000 de la cantidad cobrada de ambos tokens.

#### **TL-B**

```
collect_fees#1fcb7d3d query_id:uint64 = InternalMsgBody;
```

#### **Cuerpo del mensaje**

Ninguno

#### **Mensajes salientes**

Envía un mensaje con las comisiones cobradas (menos la recompensa) a `protocol_fee_address`

Envía un mensaje con una cantidad de tokens que se entregará a un usuario como recompensa (igual a las comisiones cobradas divididas entre 1000) al router, que inicia `pay_to` operación

### `set_fees` (0x355423e5)

Establece nuevos valores de comisiones, incluidas las comisiones del pool de liquidez, las comisiones del protocolo y las comisiones del referidor, así como una dirección para recibir las comisiones del protocolo cobradas.

#### **TL-B**

```
set_fees#355423e5 query_id:uint64 new_lp_fee:uint8 new_protocol_fee:uint8 new_ref_fee:uint8 new_protocol_fee_address:MsgAddress = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre                     | Tipo        | Descripción                                                                   |
| -------------------------- | ----------- | ----------------------------------------------------------------------------- |
| `new_lp_fee`               | `uint8`     | Nuevo ratio de comisión del pool de liquidez (multiplicado por `FEE_DIVIDER`) |
| `new_protocol_fee`         | `uint8`     | Nuevo ratio de comisión del protocolo (multiplicado por `FEE_DIVIDER`)        |
| `new_ref_fee`              | `uint8`     | Nuevo ratio de comisión del referidor (multiplicado por `FEE_DIVIDER`)        |
| `new_protocol_fee_address` | `dirección` | Dirección para recibir las comisiones del protocolo                           |

Notas:

* la proporción de la comisión es el valor de la comisión dividido por `FEE_DIVIDER` (10000); así que para fijar una comisión del 1% el valor debe ser 100
* las comisiones deben estar entre `MIN_FEE` (0) y `MAX_FEE` (100)

#### **Mensajes salientes**

Ninguno

***

## Manejadores de mensajes internos de la cuenta LP

Gestiona mensajes de una cuenta LP.

#### **Tabla de operaciones**

| Nombre             | Valor      | Descripción                                                      |
| ------------------ | ---------- | ---------------------------------------------------------------- |
| `cb_add_liquidity` | 0x56dfeb8a | Enviado por la cuenta LP del usuario después de agregar liquidez |
| `cb_refund_me`     | 0x89446a42 | Enviado por la cuenta LP del usuario después de agregar liquidez |

### `cb_add_liquidity` (0x56dfeb8a)

Añade nueva liquidez al pool. Enviado por la cuenta lp del usuario después de que un usuario envíe una cantidad apropiada (mayor que `1000`) de ambos tokens Jetton. La liquidez añadida resultante debe ser mayor que `min_lp_out` para que la operación tenga éxito.

#### **TL-B**

```
cb_add_liquidity#56dfeb8a query_id:uint64 tot_am0:Grams tot_am1:Grams user_address:MsgAddress min_lp_out:Grams = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre         | Tipo        | Descripción                                                                     |
| -------------- | ----------- | ------------------------------------------------------------------------------- |
| `tot_am0`      | `coins`     | Cantidad del primer token Jetton (en unidades básicas del token)                |
| `tot_am1`      | `coins`     | Cantidad del segundo token Jetton (en unidades básicas del token)               |
| `user_address` | `dirección` | Dirección del usuario                                                           |
| `min_lp_out`   | `coins`     | Cantidad mínima de tokens de liquidez recibidos (en unidades básicas del token) |

Notas:

* la adición de liquidez fallará si un usuario debe recibir menos de `min_lp_out` tokens LP como resultado
* no se puede agregar liquidez si el suministro de cualquiera de los tokens llega a ser mayor que `MAX_COINS` (2^120 - 1)

#### **Mensajes salientes**

Envía un mensaje con `internal_transfer` código de operación (0x178d4519) a la wallet LP de `user_address` con tokens de liquidez acuñados; en la adición inicial de liquidez los tokens se acuñan a `addr_none`

### `cb_refund_me` (0x89446a42)

Enviado por la cuenta LP del usuario después de que un usuario inicia `refund_me` operación para cancelar la adición de nueva liquidez. La cantidad de tokens almacenados previamente se enviará de vuelta al usuario.

#### **TL-B**

```
cb_refund_me#89446a42 query_id:uint64 tot_am0:Grams tot_am1:Grams user_address:MsgAddress = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre         | Tipo        | Descripción                                                       |
| -------------- | ----------- | ----------------------------------------------------------------- |
| `tot_am0`      | `coins`     | Cantidad del primer token Jetton (en unidades básicas del token)  |
| `tot_am1`      | `coins`     | Cantidad del segundo token Jetton (en unidades básicas del token) |
| `user_address` | `dirección` | Dirección del usuario                                             |

#### **Mensajes salientes**

Envía un mensaje con `tot_am0` del primer token y `tot_am1` del segundo token al router, que inicia `pay_to` operación

***

## Manejadores de mensajes del usuario

Gestiona mensajes directos de un usuario.

#### **Tabla de operaciones**

| Nombre         | Valor      | Descripción                                                                 |
| -------------- | ---------- | --------------------------------------------------------------------------- |
| `collect_fees` | 0x1fcb7d3d | Llamado por cualquiera; cobra comisiones; el llamador recibe una recompensa |

### `collect_fees` (0x1fcb7d3d)

Cobrar las comisiones del protocolo, que se enviarán a `protocol_fee_address`. Un usuario que inicia esta operación recibe una recompensa igual a 1/1000 de la cantidad cobrada de ambos tokens.

#### **TL-B**

```
collect_fees#1fcb7d3d query_id:uint64 = InternalMsgBody;
```

#### **Cuerpo del mensaje**

Ninguno

#### **Mensajes salientes**

Envía un mensaje con las comisiones cobradas (menos la recompensa) a `protocol_fee_address`

Envía un mensaje con una cantidad de tokens que se entregará a un usuario como recompensa (igual a las comisiones cobradas divididas entre 1000) al router, que inicia `pay_to` operación

***

## Constantes

| Nombre                        | Valor     | Descripción                                                                         |
| ----------------------------- | --------- | ----------------------------------------------------------------------------------- |
| `WORKCHAIN`                   | 0         | Id de workchain                                                                     |
| `REQUIRED_TON_RESERVE`        | 10000000  | Cantidad de $TON (en nanoTons) que se dejará en el contrato del pool como gas       |
| `REQUIRED_MIN_LIQUIDITY`      | 1000      | Cantidad mínima de liquidez requerida                                               |
| `REQUIRED_MIN_COLLECT_FEES`   | 1000000   | Cantidad mínima de tokens (en unidades básicas del token) cobrados como comisiones  |
| `MAX_COINS`                   | 2^120 - 1 | Cantidad máxima de tokens (en unidades básicas del token) almacenados como liquidez |
| `PROVIDE_ADD_GAS_CONSUMPTION` | 10000000  | Gas adicional (en nanoTONs) para proporcionar una wallet                            |
| `FEE_DIVIDER`                 | 10000     | Los valores de las comisiones se dividen por este valor                             |
| `MIN_FEE`                     | 0         | Comisión mínima permitida                                                           |
| `MAX_FEE`                     | 100       | Comisión máxima permitida                                                           |

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.ston.fi/es/seccion-para-desarrolladores/dex/smart-contracts/v1/pool.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
