> 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/router.md).

# Router (v1)

## Métodos get fuera de la cadena

### `get_pool_address`

Devuelve la dirección de un pool para un par específico de activos.

Es necesario especificar las direcciones de los monederos Jetton del router como argumentos de este método. Estas direcciones pueden recuperarse con `get_wallet_address` del minter Jetton.

```
(slice) get_pool_address(slice token0, slice token1) method_id;
```

#### **Argumentos**

| Clave    | Tipo        | Índice | Descripción                                                |
| -------- | ----------- | ------ | ---------------------------------------------------------- |
| `token0` | `dirección` | 0      | La dirección de la billetera del router del primer Jetton  |
| `token1` | `dirección` | 1      | La dirección de la billetera del router del segundo Jetton |

#### **Resultado**

Devuelve un único slice con la dirección del pool de liquidez para el par de Jettons especificado.

### `get_router_data`

Devuelve el estado actual del router: si el router está bloqueado, la dirección del administrador, el código pendiente o actualizaciones del administrador, el código del contrato del pool, el código del monedero lp, el código de la cuenta lp.

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

#### **Argumentos**

`Ninguno`

#### **Resultado**

Devuelve el estado actual de la `Enrutador`

**Estructura de resultado**

| Clave                   | Tipo        | Índice | Descripción                                                                                                                                                            |
| ----------------------- | ----------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `is_locked`             | `bool`      | 0      | si las operaciones están bloqueadas (`swap`, `provide_lp`)                                                                                                             |
| `admin_address`         | `dirección` | 1      | Dirección de la cuenta administradora del contrato                                                                                                                     |
| `temp_upgrade`          | `cell`      | 2      | Una estructura que describe el estado del código del contrato y la actualización de administrador; los valores cero indican que no hay ninguna actualización pendiente |
| `pool_code`             | `cell`      | 3      | Código del contrato del pool de liquidez del router                                                                                                                    |
| `jetton_lp_wallet_code` | `cell`      | 4      | Código del contrato de la billetera LP                                                                                                                                 |
| `lp_account_code`       | `cell`      | 5      | Código del contrato de la cuenta LP                                                                                                                                    |

***

## operaciones transfer\_notification

### `transfer_notification` (0x7362d09c)

Mensajes recibidos de los monederos Jetton pertenecientes al router al recibir una transferencia de tokens de un usuario. El usuario debe incluir una carga útil personalizada con un código de operación adicional (ya sea `swap` o `provide_lp`) y los datos apropiados para que esos mensajes se procesen correctamente.

#### **TL-B**

```
transfer_notification#7362d09c query_id:uint64 jetton_amount:Grams from_user:MsgAddress ref_msg_data:^DexPayload = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre          | Tipo        | Descripción                                          |
| --------------- | ----------- | ---------------------------------------------------- |
| `op`            | `uint32`    | Código de operación; igual a `transfer_notification` |
| `query_id`      | `uint64`    | ID de consulta                                       |
| `jetton_amount` | `coins`     | Cantidad de Jetton (en unidades básicas del token)   |
| `from_user`     | `dirección` | Dirección del usuario                                |
| `ref_msg_data`  | `cell`      | Celda con datos                                      |

#### **`ref_msg_data` body**

| Nombre           | Tipo        | Descripción                                                |
| ---------------- | ----------- | ---------------------------------------------------------- |
| `transferred_op` | `uint32`    | Código de operación adicional                              |
| `token_wallet1`  | `dirección` | La dirección de la billetera del router del segundo Jetton |

Notas:

* `ref_msg_data` contiene otros campos según el código de operación invocado

#### **Tabla de operaciones de transferencia**

| Nombre       | Valor      | Descripción                                                |
| ------------ | ---------- | ---------------------------------------------------------- |
| `swap`       | 0x25938561 | Intercambiar un tipo de tokens Jetton por otro             |
| `provide_lp` | 0xfcf9e58f | Proporcionar liquidez; enrutar la llamada al pool correcto |

### `swap` (0x25938561)

Intercambia tokens. Este mensaje se recibe cuando el monedero de tokens Jetton del Router envía un mensaje tras la confirmación de la transferencia de tokens de un usuario con una carga útil personalizada. Luego, el router envía un `swap` mensaje a la dirección del contrato del pool correspondiente.

#### **TL-B**

```
swap_op#25938561 = SwapOP;
swap$_ transferred_op:SwapOP token_wallet1:MsgAddress min_out:Grams to_address:MsgAddress ref_address:(Maybe MsgAddress) = DexPayload;
```

#### **`ref_msg_data` body**

| Nombre           | Tipo        | Descripción                                                |
| ---------------- | ----------- | ---------------------------------------------------------- |
| `transferred_op` | `uint32`    | Código de operación adicional; igual a `swap`              |
| `token_wallet1`  | `dirección` | La dirección de la billetera del router del segundo Jetton |
| `min_out`        | `coins`     | Cantidad mínima de salida (en unidades básicas del token)  |
| `to_address`     | `dirección` | Dirección del usuario                                      |
| `has_ref`        | `uint1`     | Si hay referencia                                          |
| `ref_address`    | `dirección` | Dirección del referente; presente solo si `has_ref` es 1   |

#### **Mensajes salientes**

Envía un mensaje con op `swap` a un pool de liquidez

### `provide_lp` (0xfcf9e58f)

Proporciona liquidez para un pool. Este mensaje se recibe cuando el monedero de tokens del Router envía un mensaje tras la confirmación de la transferencia de tokens de un usuario con una carga útil personalizada. Luego, el router envía un `provide_lp` mensaje a la dirección del contrato del pool correspondiente.

#### **TL-B**

```
provide_lp_op#fcf9e58f = ProvideLpOP;
provide_lp$_ transferred_op:ProvideLpOP token_wallet1:MsgAddress min_lp_out:Grams = DexPayload;
```

#### **`ref_msg_data` body**

| Nombre           | Tipo        | Descripción                                                                   |
| ---------------- | ----------- | ----------------------------------------------------------------------------- |
| `transferred_op` | `uint32`    | Código de operación adicional; igual a `provide_lp`                           |
| `token_wallet1`  | `dirección` | La dirección de la billetera del router del segundo Jetton                    |
| `min_lp_out`     | `coins`     | Cantidad mínima de tokens de liquidez creados (en unidades básicas del token) |

#### **Mensajes salientes**

Envía un mensaje con op `provide_lp` a un pool de liquidez

***

## Consultas en la cadena

Contrapartes en cadena de los métodos getter

#### **Tabla de operaciones**

| Nombre                | Valor      | Descripción                                                                                                    |
| --------------------- | ---------- | -------------------------------------------------------------------------------------------------------------- |
| `getter_pool_address` | 0xd1db969b | Envía un mensaje con una dirección de pool para un par de tokens solicitado; contraparte de `get_pool_address` |

### `getter_pool_address` (0xd1db969b)

Envía un mensaje con la dirección de un pool para un par de activos especificado; contraparte de `get_pool_address`

#### **TL-B**

```
getter_pool_address#d1db969b query_id:uint64 token0:MsgAddress token1:MsgAddress = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre   | Tipo        | Descripción                                                |
| -------- | ----------- | ---------------------------------------------------------- |
| `token0` | `dirección` | La dirección de la billetera del router del primer Jetton  |
| `token1` | `dirección` | La dirección de la billetera del router del segundo Jetton |

#### **Mensajes salientes**

Envía un mensaje de vuelta al remitente con la dirección del pool

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

| Nombre         | Tipo        | Descripción                                       |
| -------------- | ----------- | ------------------------------------------------- |
| `op`           | `uint32`    | Código de operación igual a `getter_pool_address` |
| `query_id`     | `uint64`    | ID de consulta                                    |
| `pool_address` | `dirección` | Dirección de un pool                              |

***

## Operaciones de administrador en cadena

Gestiona el mensaje de gobernanza del administrador para cambiar los parámetros del pool.

El administrador puede bloquear/desbloquear la negociación en todos los pools, cambiar las comisiones de un determinado pool, actualizar el código del router, etc.

#### **Tabla de operaciones**

| Nombre                 | Valor      | Descripción                                                                                  |
| ---------------------- | ---------- | -------------------------------------------------------------------------------------------- |
| `set_fees`             | 0x355423e5 | Cambia los parámetros de comisión de un pool                                                 |
| `collect_fees`         | 0x1fcb7d3d | Recauda las comisiones del protocolo de un pool                                              |
| `lock`                 | 0x878f9b0e | Bloquea el router (bloquea todos los swaps y la provisión de liquidez)                       |
| `unlock`               | 0x6ae4b0ef | Desbloquea el router                                                                         |
| `init_code_upgrade`    | 0xdf1e233d | Inicia la actualización de código para el router                                             |
| `init_admin_upgrade`   | 0x2fb94384 | Inicia el cambio de administrador para el router                                             |
| `cancel_admin_upgrade` | 0xa4ed9981 | Cancela un cambio de administrador                                                           |
| `cancel_code_upgrade`  | 0x357ccc67 | Cancela una actualización de código                                                          |
| `finalize_upgrades`    | 0x6378509f | Finaliza las actualizaciones del código del router y el cambio de administrador              |
| `reset_gas`            | 0x42a0fb43 | Actualiza la cantidad de $TON (en nanoTons) en el router a `REQUIRED_TON_RESERVE` del router |
| `reset_pool_gas`       | 0xf6aa9737 | Actualiza la cantidad de $TON (en nanoTons) en un pool a `REQUIRED_TON_RESERVE` de un pool   |

Notas:

* `REQUIRED_TON_RESERVE` para el router es 100000

### `set_fees` (0x355423e5)

Cambia las comisiones de un pool, incluidas las comisiones del pool de liquidez, las comisiones del protocolo y las comisiones de referencia. Es necesario proporcionar las direcciones correctas de los tokens Jetton para un pool de liquidez objetivo.

#### **TL-B**

```
ref_wallets$_ jetton_wallet0:MsgAddress jetton_wallet1:MsgAddress = RefWallets;
set_fees#355423e5 query_id:uint64 new_lp_fee:uint8 new_protocol_fee:uint8 new_ref_fee:uint8 new_protocol_fee_address:MsgAddress ref_wallets:^RefWallets = InternalMsgBody;
```

#### **Argumentos**

| 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 de referencia (multiplicado por `FEE_DIVIDER`)        |
| `new_protocol_fee_address` | `dirección` | Dirección para recibir las comisiones del protocolo                           |
| `ref_wallets`              | `cell`      | Celda con direcciones de monedero                                             |

#### **`ref_wallets` body**

| Nombre           | Tipo        | Descripción                                                |
| ---------------- | ----------- | ---------------------------------------------------------- |
| `jetton_wallet0` | `dirección` | La dirección de la billetera del router del primer Jetton  |
| `jetton_wallet1` | `dirección` | La dirección de la billetera del router del segundo Jetton |

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**

Envía un mensaje con op `set_fees` a un pool de liquidez.

### `collect_fees` (0x1fcb7d3d)

Recauda las comisiones del protocolo de un pool. Deben proporcionarse las direcciones de monedero Jetton apropiadas.

#### **TL-B**

```
collect_fees#1fcb7d3d query_id:uint64 jetton_wallet0:MsgAddress jetton_wallet1:MsgAddress = InternalMsgBody;
```

#### **Argumentos**

| Nombre           | Tipo        | Descripción                                                |
| ---------------- | ----------- | ---------------------------------------------------------- |
| `jetton_wallet0` | `dirección` | La dirección de la billetera del router del primer Jetton  |
| `jetton_wallet1` | `dirección` | La dirección de la billetera del router del segundo Jetton |

#### **Mensajes salientes**

Envía un mensaje a un pool de liquidez con `collect_fees` código de operación.

### `lock` (0x878f9b0e)

Detiene el paso de todos los `transfer_notification` mensajes. Bloquea efectivamente `swap` y `provide_lp` las transacciones a través de este router.

#### **TL-B**

```
lock#878f9b0e query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno.

#### **Mensajes salientes**

Ninguno.

### `unlock` (0x6ae4b0ef)

Permite el paso de todos los `transfer_notification` mensajes. Habilita `swap` y `provide_lp` las transacciones a través de este router.

#### **TL-B**

```
unlock#6ae4b0ef query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

Ninguno.

### `init_code_upgrade` (0xdf1e233d)

Inicia la actualización de código para el router. Deben proporcionarse los datos apropiados con el nuevo código del router. Los cambios no surtirán efecto hasta que `finalize_upgrades` sea recibido por el router. El retraso mínimo entre iniciar la actualización de código y finalizar los cambios es de siete días.

#### **TL-B**

```
init_code_upgrade#df1e233d query_id:uint64 code:^Cell = InternalMsgBody;
```

#### **Argumentos**

| Nombre | Tipo   | Descripción                          |
| ------ | ------ | ------------------------------------ |
| `code` | `cell` | Código del nuevo contrato del router |

#### **Mensajes salientes**

Ninguno

### `init_admin_upgrade` (0x2fb94384)

Inicia el cambio de administrador para el router. Debe proporcionarse una dirección apropiada para el nuevo administrador del router. Los cambios no surtirán efecto hasta que `finalize_upgrades` sea recibido por el router. El retraso mínimo entre iniciar el cambio de administrador y finalizar los cambios es de dos días.

#### **TL-B**

```
init_admin_upgrade#2fb94384 query_id:uint64 admin:MsgAddress = InternalMsgBody;
```

#### **Argumentos**

| Nombre  | Tipo        | Descripción                       |
| ------- | ----------- | --------------------------------- |
| `admin` | `dirección` | Nueva dirección del administrador |

#### **Mensajes salientes**

Ninguno

### `cancel_admin_upgrade` (0xa4ed9981)

Cancela un cambio de administrador si hay un cambio de administrador pendiente.

#### **TL-B**

```
cancel_admin_upgrade#a4ed9981 query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

Ninguno

### `cancel_code_upgrade` (0x357ccc67)

Cancela una actualización de código si hay un cambio de código pendiente.

#### **TL-B**

```
cancel_code_upgrade#357ccc67 query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

Ninguno

### `finalize_upgrades` (0x6378509f)

Finaliza las actualizaciones del código del router y el cambio de administrador. Para que los cambios surtan efecto debe transcurrir el tiempo apropiado desde la inicialización de la actualización. Para la actualización de código, el retraso es de siete días; para un cambio de administrador, el retraso es de dos días.

#### **TL-B**

```
finalize_upgrades#6378509f query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

Ninguno

### `reset_gas` (0x42a0fb43)

Actualiza la cantidad de $TON (en nanoTons) en el router a `REQUIRED_TON_RESERVE` (100000) del router. El $TON restante se enviará al administrador del router.

#### **TL-B**

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

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

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

### `reset_pool_gas` (0xf6aa9737)

Actualiza la cantidad de $TON (en nanoTons) en un pool a `REQUIRED_TON_RESERVE` de un pool. Reenvía este mensaje a un contrato de pool para el par de tokens Jetton proporcionado.

#### **TL-B**

```
reset_pool_gas#2fb94384 query_id:uint64 jetton_wallet0:MsgAddress jetton_wallet1:MsgAddress = InternalMsgBody;
```

#### **Argumentos**

| Nombre           | Tipo        | Descripción                                                |
| ---------------- | ----------- | ---------------------------------------------------------- |
| `jetton_wallet0` | `dirección` | La dirección de la billetera del router del primer Jetton  |
| `jetton_wallet1` | `dirección` | La dirección de la billetera del router del segundo Jetton |

#### **Mensajes salientes**

Envía un mensaje a un pool de liquidez con `reset_gas` código de operación que transporta el gas restante

***

## Manejadores de mensajes internos

### `pay_to` (0xf93bb43f)

Inicia una transferencia de tokens Jetton desde monederos pertenecientes a este router, llamada desde los pools (en swap, provisión de liquidez, reembolso, etc.).

#### **TL-B**

```
ref_coins_data$_ amount0_out:Grams token0_address:MsgAddress amount1_out:Grams token1_address:MsgAddress = RefCoinsData;
pay_to#f93bb43f query_id:uint64 owner:MsgAddress exit_code:uint32 ref_coins_data:^RefCoinsData = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre           | Tipo        | Descripción                                                     |
| ---------------- | ----------- | --------------------------------------------------------------- |
| `op`             | `uint32`    | Código de operación; igual a `pay_to`                           |
| `query_id`       | `uint64`    | ID de consulta                                                  |
| `owner`          | `dirección` | Dirección de un receptor                                        |
| `exit_code`      | `uint32`    | Código de salida                                                |
| `ref_coins_data` | `cell`      | Celda con direcciones de monedero Jetton y cantidades de tokens |

#### **`ref_coins_data` body**

| Nombre           | Tipo        | Descripción                                                       |
| ---------------- | ----------- | ----------------------------------------------------------------- |
| `amount0_out`    | `coins`     | Cantidad del primer token Jetton (en unidades básicas del token)  |
| `token0_address` | `dirección` | La dirección del monedero del router del primer Jetton            |
| `amount1_out`    | `coins`     | Cantidad del segundo token Jetton (en unidades básicas del token) |
| `token1_address` | `dirección` | La dirección del monedero del router del segundo Jetton           |

#### **Mensajes salientes**

Envía la transferencia de `amount0_out` tokens a `owner` mensaje a `token0_address` monedero si `amount0_out` > 0

Envía la transferencia de `amount1_out` tokens a `owner` mensaje a `token1_address` monedero si `amount1_out` > 0

***

## Constantes

| Nombre                 | Valor  | Descripción                                                                           |
| ---------------------- | ------ | ------------------------------------------------------------------------------------- |
| `WORKCHAIN`            | 0      | Id de workchain                                                                       |
| `REQUIRED_TON_RESERVE` | 100000 | Cantidad de $TON (en nanoTons) que debe permanecer en el contrato del router como gas |
| `TWODAYS`              | 172800 | Dos días en segundos                                                                  |
| `SEVENDAYS`            | 604800 | Siete días en segundos                                                                |


---

# 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/router.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.
