> For the complete documentation index, see [llms.txt](https://docs.rome.builders/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rome.builders/es/canton-zk-evm/deposits-withdrawals-payments.md).

# Depósitos, retiros y pagos

Cómo la pasarela vincula los depósitos, retiros y pagos de EVM con sus tramos de Canton.

El gateway es un contrato EVM incluido en el génesis de la cadena. Registra lo que un bloque necesita que Canton haga. Cada solicitud es un tramo. La prueba del bloque se compromete con el estado del gateway, incluido el hash de los tramos en el orden en que se registraron.

Esta página describe commit `a84e84e439a5cc669c0ae61facf7c8c995d9d564`. Lea el texto completo [README del gateway](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/gateway/README.md) y [interfaz Daml](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/daml/README.md).

| Tramo    | Llamada al gateway               | Acción de EVM                                     | Acción de Canton en `Avanzar`                                              |
| -------- | -------------------------------- | ------------------------------------------------- | -------------------------------------------------------------------------- |
| Depósito | `claim(id, token, amount)`       | Acuña tokens envueltos para el llamador.          | Ejecuta la asignación del depositante al gateway.                          |
| Retiro   | `withdraw(token, amount, party)` | Quema los tokens envueltos del llamador.          | Paga el token de Canton desde la custodia del gateway a la parte nombrada. |
| Pago     | `pay(id, token, to, amount)`     | Transfiere un ERC-20 del pagador al beneficiario. | Ejecuta la asignación nombrada por los términos de pago acordados.         |

## Depositar un token de Canton

El depositante asigna un token de Canton al gateway, con el operador como ejecutor. El depositante firma una `DepositRequest` que nombra el id del depósito, la dirección de EVM autorizada para reclamar y la asignación.

Esa dirección de EVM llama a `claim`. El gateway acuña para su llamador y registra el tramo del depósito. El destinatario necesita tROME para gas. El builder hace coincidir el tramo con la solicitud, el token registrado y la asignación.

`Avanzar` ejecuta la asignación a la custodia del gateway y confirma el bloque que acuñó los tokens envueltos. Un token envuelto tiene 10 decimales, en línea con las cantidades de Canton. La conversión entre las dos cantidades es exacta, sin redondeo.

## Retirar a una parte de Canton

El titular llama a `withdraw` con el token envuelto, la cantidad y el id completo de la parte de Canton. El gateway quema los tokens envueltos y registra al receptor en el tramo.

El receptor debe haber firmado una `WithdrawalAcceptance`. Permanece activa hasta que se archive. El builder también necesita suficientes tenencias desbloqueadas del gateway del instrumento registrado. Omite la transacción si estas condiciones no se cumplen.

`Avanzar` paga al receptor a través de la fábrica de transferencias del registro de tokens. La transferencia de Canton y el bloque que contiene la quema se confirman conjuntamente. El builder incluye como máximo un retiro de un instrumento por bloque, como se describe en el [README del builder](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/builder/README.md).

## Vincular un pago a una sola asignación

U asigna un token de Canton a V. U y V firman `DvpTerms` que nombra la asignación, el id del pago, el token de EVM, el beneficiario de EVM y la cantidad. El id del pago es SHA-256 del texto UTF-8 `<U's party id>,<V's party id>,<label>`, escrito en hexadecimal en minúsculas. Los términos rechazan cualquier otro id.

V aprueba el gateway y llama a `pay` con ese id. El gateway mueve el ERC-20 de V al beneficiario y registra el tramo de pago. `Avanzar` usa los términos firmados para ejecutar la asignación de U a V.

Una transferencia normal de ERC-20 no registra ningún tramo. Incluso una transferencia del mismo token al mismo beneficiario en el mismo bloque no puede sustituir a `pay`. El [flujo de pago del diseño](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/docs/DESIGN.md#the-flows) explica este vínculo.

## Qué fija la prueba

Cada tramo registra su tipo, id, token, cuenta, cantidad y parte de Canton cuando corresponda. El gateway calcula el hash de los tramos en orden. `Avanzar` comprueba que sus tramos adjuntos produzcan el hash en el estado del gateway probado. Un tramo faltante, adicional, reordenado o modificado hace que la transacción falle. La comprobación también cubre bloques sin tramos.

Demostrar el bloque no reserva su asignación de Canton. El remitente aún puede recuperar la asignación antes de la liquidación. Si eso ocurre después de la prueba, Canton rechaza `Avanzar` y reth vuelve al último bloque confirmado. El mismo bloque probado no puede volver a enviarse con su tramo eliminado. La siguiente compilación omite el pago, como se demuestra en [ejecución 4](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/demo/README.md#results).

## Límites de tokens y custodia

Los tokens de Canton son mantenidos por la parte del gateway en el participante del operador. Quienquiera que ejecute ese participante puede moverlos. Registrar un token también significa confiar en el código Daml de su registro, que se ejecuta con la autoridad del gateway.

Los tokens enviados directamente a la dirección EVM del gateway no pueden recuperarse. Si un token cobra una comisión por transferencia o transfiere de otro modo una cantidad distinta, el tramo de pago sigue registrando la cantidad solicitada, en lugar de la cantidad realmente transferida. Lea [Modelo de confianza y límites](/es/canton-zk-evm/trust-model.md).


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.rome.builders/es/canton-zk-evm/deposits-withdrawals-payments.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
