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

# Router (v2)

## Métodos get fuera de la cadena

### `get_vault_address`

Devuelve una dirección de una bóveda para un activo y usuario especificados.

```
(slice) get_vault_address(slice user, slice token_wallet) method_id;
```

#### **Argumentos**

| Clave     | Tipo        | Índice | Descripción                                        |
| --------- | ----------- | ------ | -------------------------------------------------- |
| `usuario` | `dirección` | 0      | La dirección del `Bóveda`propietario de            |
| `token`   | `dirección` | 1      | La dirección del `Enrutador`la billetera jetton de |

#### **Resultado**

Devuelve `VaultV2` objeto para `Bóveda`la dirección de

### `get_pool_address`

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

Es necesario especificar las direcciones de las billeteras Jetton de los `Enrutador` como argumentos de este método. Estas direcciones se pueden obtener con `get_wallet_address` del minter Jetton.

```
(slice) get_pool_address(slice token_wallet0, slice token_wallet1) method_id;
```

#### **Argumentos**

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

#### **Resultado**

Devuelve `Pool` dirección.

### `get_router_data`

Devuelve el estado actual de la `Enrutador`

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

#### **Argumentos**

`Ninguno`

#### **Resultado**

Devuelve `RouterData` estructura que contiene el estado actual de la `Enrutador`.

**`RouterData` estructura**

| Clave                   | Tipo        | Índice | Descripción                                                                                                                                                            |
| ----------------------- | ----------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                    | `uint32`    | 0      | `Enrutador` id                                                                                                                                                         |
| `dex_type`              | `string`    | 1      | `Enrutador` tipo                                                                                                                                                       |
| `is_locked`             | `bool`      | 2      | true si `transfer_notification` las operaciones están bloqueadas (`swap`, `provide_lp`)                                                                                |
| `admin_address`         | `dirección` | 3      | Dirección de la cuenta administradora del contrato                                                                                                                     |
| `temp_upgrade`          | `cell`      | 4      | 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`      | 5      | Código del `Enrutador`contrato de pool de liquidez de                                                                                                                  |
| `jetton_lp_wallet_code` | `cell`      | 6      | Código del contrato de la billetera LP                                                                                                                                 |
| `lp_account_code`       | `cell`      | 7      | Código del contrato de la cuenta LP                                                                                                                                    |
| `vault_code`            | `cell`      | 8      | Código del contrato de la cuenta LP                                                                                                                                    |

Notas:

* posibles `dex_type` valores:
  * `constant_product`
  * `stableswap`
  * `weighted_stableswap`
  * `weighted_const_product`

### `get_router_version`

Devuelve la `Enrutador` versión actual

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

#### **Argumentos**

`Ninguno`

#### **Resultado**

Devuelve `VersionData` estructura que contiene `Enrutador` versión.

**`RouterData` estructura**

| Clave        | Tipo     | Índice | Descripción                                  |
| ------------ | -------- | ------ | -------------------------------------------- |
| `mayor`      | `uint`   | 0      | Versión mayor                                |
| `menor`      | `uint`   | 1      | Versión menor                                |
| `desarrollo` | `string` | 2      | Contiene información adicional de la versión |

***

## operaciones transfer\_notification

### `transfer_notification` (0x7362d09c)

Mensajes recibidos de billeteras Jetton pertenecientes al `Enrutador` al recibir una transferencia de token de un usuario. El usuario debe incluir una carga útil personalizada con 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 forward_payload:^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                                |
| `payload`       | `cell`      | Celda con datos                                      |

#### **`payload` body**

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

Notas:

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

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

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

### `swap` (0x6664de2a)

Intercambia tokens. Este mensaje se recibe cuando la billetera Jetton del Router envía un mensaje tras la confirmación de la transferencia de tokens de un usuario con una carga útil personalizada. El `Enrutador` entonces envía un `swap` mensaje a la dirección del contrato del pool correspondiente.

Comprobar [ejemplos](/es/seccion-para-desarrolladores/dex/smart-contracts/v2/examples/swap.md) para ver el flujo detallado de mensajes.

#### **TL-B**

```
swap#6664de2a token_wallet1:MsgAddress refund_address:MsgAddress excesses_address:MsgAddress tx_deadline:uint64 cross_swap_body:^[min_out:Coins receiver:MsgAddress fwd_gas:Coins custom_payload:(Maybe ^Cell) refund_fwd_gas:Coins refund_payload:(Maybe ^Cell) ref_fee:uint16 ref_address:MsgAddress] = DexPayload;
```

#### **`payload` body**

| Nombre               | Tipo        | Descripción                                                        |
| -------------------- | ----------- | ------------------------------------------------------------------ |
| `op`                 | `uint32`    | Op de intercambio                                                  |
| `other_token_wallet` | `dirección` | Dirección de la otra `Enrutador` wallet del token                  |
| `refund_address`     | `dirección` | Dirección a la que se enviará el reembolso si el intercambio falla |
| `excesses_address`   | `dirección` | Dirección a la que se enviarán los excesos de TON                  |
| `plazo`              | `uint64`    | Marca de tiempo del plazo de ejecución para esta tx                |
| `additional_data`    | `cell`      | Celda con datos adicionales                                        |

#### **`additional_data` body**

| Nombre             | Tipo        | Descripción                                                                                                             |
| ------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------- |
| `min_out`          | `coins`     | Cantidad mínima requerida de tokens a recibir                                                                           |
| `receiver_address` | `dirección` | Dirección a la que se enviarán los tokens después del intercambio                                                       |
| `fwd_gas`          | `coins`     | Gas usado para reenviar un mensaje en `transfer_notification` después del intercambio si `custom_payload` está presente |
| `custom_payload`   | `maybe_ref` | Payload enviado en `transfer_notification` después del intercambio                                                      |
| `refund_fwd_gas`   | `coins`     | Gas usado para reenviar un mensaje en `transfer_notification` si el intercambio falla si `refund_payload` está presente |
| `refund_payload`   | `maybe_ref` | Payload enviado en `transfer_notification` si el intercambio falla                                                      |
| `ref_fee`          | `uint16`    | Comisión del referidor                                                                                                  |
| `referral_address` | `dirección` | Dirección del referidor                                                                                                 |

Notas:

* el intercambio fallará si un usuario debe recibir menos de `min_out` de tokens como resultado
* el valor máximo permitido de `ref_fee` es 100 (1%)

#### **Mensajes salientes**

Envía un mensaje con op `swap` to `Pool`

### `provide_lp` (0x37c096df)

Proporciona liquidez para un pool. Este mensaje se recibe cuando la billetera 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. El `Enrutador` entonces envía un `provide_lp` mensaje a la dirección del contrato del pool correspondiente.

Comprobar [ejemplos](/es/seccion-para-desarrolladores/dex/smart-contracts/v2/examples/lp-provide.md) para ver el flujo detallado de mensajes.

#### **TL-B**

```
provide_lp#37c096df token_wallet1:MsgAddress refund_address:MsgAddress excesses_address:MsgAddress tx_deadline:uint64 cross_provide_lp_body:^[min_lp_out:Coins to_address:MsgAddress both_positive:uint1 fwd_amount:Coins custom_payload:(Maybe ^Cell)] = DexPayload;
```

#### **`payload` body**

| Nombre               | Tipo        | Descripción                                                        |
| -------------------- | ----------- | ------------------------------------------------------------------ |
| `op`                 | `uint32`    | Op de provide LP                                                   |
| `other_token_wallet` | `dirección` | Dirección de la otra `Enrutador` wallet del token                  |
| `refund_address`     | `dirección` | Dirección a la que se enviará el reembolso si el intercambio falla |
| `excesses_address`   | `dirección` | Dirección a la que se enviarán los excesos de TON                  |
| `plazo`              | `uint64`    | Marca de tiempo del plazo de ejecución para esta tx                |
| `additional_data`    | `cell`      | Celda con datos adicionales                                        |

#### **`additional_data` body**

| Nombre             | Tipo        | Descripción                                                                                                       |
| ------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------- |
| `min_lp_out`       | `coins`     | Cantidad mínima requerida de tokens LP a recibir                                                                  |
| `receiver_address` | `dirección` | Dirección a la que se enviarán los tokens LP                                                                      |
| `both_positive`    | `uint1`     | Disparar el depósito de liquidez solo si ambas cantidades de tokens no son cero                                   |
| `fwd_gas`          | `coins`     | Gas usado para reenviar un mensaje en `transfer_notification` después de acuñar si `custom_payload` está presente |
| `custom_payload`   | `maybe_ref` | Payload enviado en `transfer_notification` después de acuñar LP                                                   |

#### **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` | 0x2993ade0 | Envía un mensaje con una dirección de pool para un par de tokens solicitado; contraparte de `get_pool_address` |

### `getter_pool_address` (0x2993ade0)

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#2993ade0 query_id:uint64 token0:MsgAddress token1:MsgAddress = InternalMsgBody;
```

#### **Cuerpo del mensaje**

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

#### **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 el comercio en todos los pools, cambiar las comisiones en un pool determinado, actualizar el `Enrutador` código, etc.

#### **Tabla de operaciones comunes**

| Nombre                 | Valor      | Descripción                                                                                              |
| ---------------------- | ---------- | -------------------------------------------------------------------------------------------------------- |
| `set_fees`             | 0x58274069 | Cambia los parámetros de comisión de un pool                                                             |
| `reset_pool_gas`       | 0x66d0dff2 | Actualizar la cantidad de TON (en nanoTons) en un pool a `storage_fee::router` de un pool                |
| `update_pool_status`   | 0x2af4607c | Cambiar `Pool` estado                                                                                    |
| `update_status`        | 0x38a6022f | Cambiar `Enrutador` estado                                                                               |
| `init_code_upgrade`    | 0x03601fc8 | Iniciar actualización de código para el `Enrutador`                                                      |
| `init_admin_upgrade`   | 0x0b02fd5b | Iniciar cambio de administrador para el `Enrutador`                                                      |
| `cancel_admin_upgrade` | 0x72d6b3b4 | Cancela un cambio de administrador                                                                       |
| `cancel_code_upgrade`  | 0x1f72111a | Cancela una actualización de código                                                                      |
| `finalize_upgrades`    | 0x4e6707b7 | Finalizar las actualizaciones del `Enrutador` código y cambio de administrador                           |
| `reset_gas`            | 0x29d22935 | Actualizar la cantidad de TON (en nanoTons) en el `Enrutador` to `storage_fee::router` de el `Enrutador` |
| `set_params`           | 0x2b8b3b62 | Cambiar parámetros específicos del pool                                                                  |

### `set_fees` (0x58274069)

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

```
set_fees#58274069 query_id:uint64 new_lp_fee:uint16 new_protocol_fee:uint16 new_protocol_fee_address:MsgAddress jetton_info:^[jetton_wallet0:MsgAddress jetton_wallet1:MsgAddress excesses_recipient:MsgAddress] = InternalMsgBody;
```

#### **Argumentos**

| Nombre                     | Tipo        | Descripción                                         |
| -------------------------- | ----------- | --------------------------------------------------- |
| `new_lp_fee`               | `uint16`    | Nuevo ratio de comisión de liquidez del pool        |
| `new_protocol_fee`         | `uint16`    | Nuevo ratio de comisión del protocolo               |
| `new_protocol_fee_address` | `dirección` | Dirección para recibir las comisiones del protocolo |
| `additional_data`          | `cell`      | Celda con direcciones de monedero                   |

#### **`additional_data` body**

| Nombre             | Tipo        | Descripción                                                   |
| ------------------ | ----------- | ------------------------------------------------------------- |
| `jetton_wallet0`   | `dirección` | La dirección del `Enrutador`billetera de el primer Jetton de  |
| `jetton_wallet1`   | `dirección` | La dirección del `Enrutador`billetera de el segundo Jetton de |
| `excesses_address` | `dirección` | La dirección a la que se enviarán los excedentes de TON       |

Notas:

* la proporción de la comisión es el valor de la comisión dividido por `params::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.

### `update_status` (0x38a6022f)

Cambia `Enrutador` `is_locked` var al valor opuesto. Si `is_locked == 1` bloquea `transfer_notification` mensajes. Bloquea efectivamente `swap` y `provide_lp` las transacciones a través de este `Enrutador`.

#### **TL-B**

```
update_status#38a6022f query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno.

#### **Mensajes salientes**

Ninguno.

### `init_code_upgrade` (0x03601fc8)

Inicia la actualización de código para el `Enrutador`. Se debe proporcionar un dato apropiado con el nuevo `Enrutador` código. Los cambios no tendrán efecto hasta que `finalize_upgrades` se reciba por el `Enrutador`. 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#3601fc8 query_id:uint64 new_code:^Cell = InternalMsgBody;
```

#### **Argumentos**

| Nombre     | Tipo   | Descripción                           |
| ---------- | ------ | ------------------------------------- |
| `new_code` | `cell` | Código del nuevo `Enrutador` contrato |

#### **Mensajes salientes**

Los excedentes se enviarán a `admin_address`

### `init_admin_upgrade` (0x0b02fd5b)

Inicia el cambio de administrador para el `Enrutador`. Se debe proporcionar una dirección adecuada para un nuevo `Enrutador` administrador. Los cambios no tendrán efecto hasta que `finalize_upgrades` se reciba por el `Enrutador`. El retraso mínimo entre iniciar el cambio de administrador y finalizar los cambios es de dos días.

#### **TL-B**

```
init_admin_upgrade#b02fd5b query_id:uint64 new_admin_address:MsgAddress = InternalMsgBody;
```

#### **Argumentos**

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

#### **Mensajes salientes**

Los excedentes se enviarán a `admin_address`

### `cancel_admin_upgrade` (0x72d6b3b4)

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

#### **TL-B**

```
cancel_admin_upgrade#72d6b3b4 query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

Los excedentes se enviarán a `admin_address`

### `cancel_code_upgrade` (0x1f72111a)

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

#### **TL-B**

```
cancel_code_upgrade#1f72111a query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

Los excedentes se enviarán a `admin_address`

### `finalize_upgrades` (0x4e6707b7)

Finaliza las actualizaciones del `Enrutador` código y los cambios de administrador. Para que los cambios surtan efecto debe pasar el tiempo apropiado desde su inicio. 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#4e6707b7 query_id:uint64 = InternalMsgBody;
```

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

Ninguno

### `reset_gas` (0x29d22935)

Actualiza la cantidad de TON (en nanoTons) en el `Enrutador` to `storage_fee::router` (100000) del `Enrutador`. El TON restante se enviará al `Enrutador` administrador.

#### **TL-B**

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

#### **Argumentos**

Ninguno

#### **Mensajes salientes**

Los excedentes se enviarán a `admin_address`

### `reset_pool_gas` (0x66d0dff2)

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

#### **TL-B**

```
reset_pool_gas#66d0dff2 query_id:uint64 jetton_wallet0:MsgAddress jetton_wallet1:MsgAddress excesses_recipient:MsgAddress = InternalMsgBody;
```

#### **Argumentos**

| Nombre             | Tipo        | Descripción                                                   |
| ------------------ | ----------- | ------------------------------------------------------------- |
| `jetton_wallet0`   | `dirección` | La dirección del `Enrutador`billetera de el primer Jetton de  |
| `jetton_wallet1`   | `dirección` | La dirección del `Enrutador`billetera de el segundo Jetton de |
| `excesses_address` | `dirección` | La dirección a la que se enviarán los excedentes de TON       |

#### **Mensajes salientes**

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

### `update_pool_status` (0x2af4607c)

Cambia `Pool` `is_locked` var al valor opuesto. Si `is_locked == 1` bloquea los intercambios y las retiradas de liquidez de este `Pool`

#### **TL-B**

```
update_pool_status#2af4607c query_id:uint64 jetton_wallet0:MsgAddress jetton_wallet1:MsgAddress excesses_recipient:MsgAddress = InternalMsgBody;
```

#### **Argumentos**

| Nombre             | Tipo        | Descripción                                                   |
| ------------------ | ----------- | ------------------------------------------------------------- |
| `jetton_wallet0`   | `dirección` | La dirección del `Enrutador`billetera de el primer Jetton de  |
| `jetton_wallet1`   | `dirección` | La dirección del `Enrutador`billetera de el segundo Jetton de |
| `excesses_address` | `dirección` | La dirección a la que se enviarán los excedentes de TON       |

#### **Mensajes salientes**

Los excedentes se enviarán a `excesses_address`

***

## Manejadores de mensajes internos

### `pay_to` (0x657b54f5)

Inicia una transferencia de tokens Jetton desde billeteras pertenecientes a este `Enrutador`, llamada desde pools (en intercambio, provisión de liquidez, reembolso, etc.).

#### **TL-B**

```
pay_to#657b54f5 query_id:uint64 to_address:MsgAddress excesses_address:MsgAddress original_caller:MsgAddress exit_code:uint32 custom_payload:(Maybe ^Cell) additional_info:^[fwd_ton_amount:Coins amount0_out:Coins token0_address:MsgAddress amount1_out:Coins token1_address:MsgAddress] = 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                                    |
| `to_address`       | `dirección` | Dirección de un receptor                          |
| `excesses_address` | `dirección` | Dirección a la que se enviarán los excesos de TON |
| `original_caller`  | `dirección` | Dirección del remitente original de la tx         |
| `exit_code`        | `uint32`    | Código de salida                                  |
| `custom_payload`   | `maybe_ref` | Payload enviado en `transfer_notification`        |
| `additional_data`  | `cell`      | Celda con datos adicionales                       |

#### **`additional_data` body**

| Nombre           | Tipo        | Descripción                                                       |
| ---------------- | ----------- | ----------------------------------------------------------------- |
| `fwd_gas`        | `coins`     | Gas usado para reenviar `custom_payload` si está presente         |
| `amount0_out`    | `coins`     | Cantidad del primer token Jetton (en unidades básicas del token)  |
| `token0_address` | `dirección` | La dirección del `Enrutador`billetera del primer Jetton de        |
| `amount1_out`    | `coins`     | Cantidad del segundo token Jetton (en unidades básicas del token) |
| `token1_address` | `dirección` | La dirección del `Enrutador`billetera del segundo Jetton de       |

#### **Mensajes salientes**

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

o

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

o

Envía `swap` a algún `Pool` si `custom_payload` es `cross_swap`

### `pay_vault` (0x63381632)

Deposita una cantidad de tokens en un `Bóveda` contrato; se usa si `swap` se hizo con referido

#### **TL-B**

```
pay_vault#63381632 query_id:uint64 owner:MsgAddress excesses_address:MsgAddress additional_info:^[amount0_out:Coins token0_address:MsgAddress amount1_out:Coins token1_address:MsgAddress] = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre             | Tipo        | Descripción                                             |
| ------------------ | ----------- | ------------------------------------------------------- |
| `op`               | `uint32`    | Código de operación; igual a `pay_vault`                |
| `query_id`         | `uint64`    | ID de consulta                                          |
| `to_address`       | `dirección` | Dirección de un receptor                                |
| `excesses_address` | `dirección` | La dirección a la que se enviarán los excedentes de TON |
| `additional_data`  | `cell`      | Celda con datos adicionales                             |

#### **`additional_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 `Enrutador`billetera del primer Jetton de        |
| `amount1_out`    | `coins`     | Cantidad del segundo token Jetton (en unidades básicas del token) |
| `token1_address` | `dirección` | La dirección del `Enrutador`billetera del segundo Jetton de       |

#### **Mensajes salientes**

Envía `deposit_ref_fee` a un token correspondiente `Bóveda` de `to_address`

### `vault_pay_to` (0x2100c922)

Inicia una transferencia de tokens Jetton desde billeteras pertenecientes a este `Enrutador`, llamada desde una `Bóveda` cuando un propietario retira sus comisiones de referido acumuladas.

#### **TL-B**

```
vault_pay_to#2100c922 query_id:uint64 amount_out:Coins token_address:MsgAddress to_address:MsgAddress = InternalMsgBody;
```

#### **Cuerpo del mensaje**

| Nombre          | Tipo        | Descripción                                               |
| --------------- | ----------- | --------------------------------------------------------- |
| `op`            | `uint32`    | Código de operación; igual a `vault_pay_to`               |
| `query_id`      | `uint64`    | ID de consulta                                            |
| `amount_out`    | `coins`     | Cantidad del token Jetton (en unidades básicas del token) |
| `token_address` | `dirección` | La dirección del `Enrutador`billetera del Jetton de       |
| `to_address`    | `dirección` | Dirección de un receptor                                  |

#### **Mensajes salientes**

Envía la transferencia de `amount_out` tokens a `to_address` mensaje a `token_address` billetera

***

## Cargas útiles personalizadas de intercambio

### Reenviar intercambio a otro router

Usa una carga útil de intercambio normal como `custom_payload` en el intercambio inicial con el otro `Enrutador` dirección como el `receiver_address`. El valor de `fwd_gas` debe ser distinto de cero y suficiente para realizar el siguiente intercambio.

### Carga útil de cross-swap

Esta carga útil permite encadenar operaciones de intercambio en el mismo `Enrutador`; `fwd_gas` se ignora.

#### **TL-B**

```
cross_swap#69cf1a5b token_wallet1:MsgAddress refund_address:MsgAddress excesses_address:MsgAddress tx_deadline:uint64 cross_swap_body:^[min_out:Coins receiver:MsgAddress fwd_gas:Coins custom_payload:(Maybe ^Cell) refund_fwd_gas:Coins refund_payload:(Maybe ^Cell) ref_fee:uint16 ref_address:MsgAddress] = DexPayload;
```

#### **`custom_payload` body**

| Nombre               | Tipo        | Descripción                                                        |
| -------------------- | ----------- | ------------------------------------------------------------------ |
| `op`                 | `uint32`    | Op de cross-swap (0x69cf1a5b)                                      |
| `other_token_wallet` | `dirección` | Dirección de la otra `Enrutador` wallet del token                  |
| `refund_address`     | `dirección` | Dirección a la que se enviará el reembolso si el intercambio falla |
| `excesses_address`   | `dirección` | Dirección a la que se enviarán los excesos de TON                  |
| `plazo`              | `uint64`    | Marca de tiempo del plazo de ejecución para esta tx                |
| `additional_data`    | `cell`      | Celda con datos adicionales                                        |

#### **`additional_data` body**

| Nombre             | Tipo        | Descripción                                                                                                             |
| ------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------- |
| `min_out`          | `coins`     | Cantidad mínima requerida de tokens a recibir                                                                           |
| `receiver_address` | `dirección` | Dirección a la que se enviarán los tokens después del intercambio                                                       |
| `fwd_gas`          | `coins`     | Gas usado para reenviar un mensaje en `transfer_notification` después del intercambio si `custom_payload` está presente |
| `custom_payload`   | `maybe_ref` | Payload enviado en `transfer_notification` después del intercambio                                                      |
| `refund_fwd_gas`   | `coins`     | Gas usado para reenviar un mensaje en `transfer_notification` si el intercambio falla si `refund_payload` está presente |
| `refund_payload`   | `maybe_ref` | Payload enviado en `transfer_notification` si el intercambio falla                                                      |
| `ref_fee`          | `uint16`    | Comisión del referidor                                                                                                  |
| `referral_address` | `dirección` | Dirección del referidor                                                                                                 |

***

## Constantes

| Nombre                | Valor    | Descripción                                                                       |
| --------------------- | -------- | --------------------------------------------------------------------------------- |
| `storage_fee::router` | 10000000 | Cantidad de TON (en nanoTons) que debe quedar en el `Enrutador` contrato como gas |
| `params::twodays`     | 172800   | Dos días en segundos                                                              |
| `params::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/v2/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.
