> 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/pt-br/canton-zk-evm/deposits-withdrawals-payments.md).

# Depósitos, saques e pagamentos

Como o gateway conecta depósitos, saques e pagamentos EVM às suas etapas no Canton.

O gateway é um contrato EVM incluído no gênesis da cadeia. Ele registra o que um bloco precisa que o Canton faça. Cada solicitação é uma perna. A prova do bloco se compromete com o estado do gateway, incluindo o hash das pernas na ordem em que foram registradas.

Esta página descreve o commit `a84e84e439a5cc669c0ae61facf7c8c995d9d564`. Leia o completo [README do gateway](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/gateway/README.md) e [interface Daml](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/daml/README.md).

| Perna     | Chamada do gateway               | Ação EVM                                            | Ação Canton em `Avançar`                                        |
| --------- | -------------------------------- | --------------------------------------------------- | --------------------------------------------------------------- |
| Depósito  | `claim(id, token, amount)`       | Emite tokens encapsulados para o chamador.          | Executa a alocação do depositante para o gateway.               |
| Saque     | `withdraw(token, amount, party)` | Queima os tokens encapsulados do chamador.          | Paga o token Canton da custódia do gateway à parte nomeada.     |
| Pagamento | `pay(id, token, to, amount)`     | Transfere um ERC-20 do pagador para o beneficiário. | Executa a alocação nomeada pelos termos de pagamento acordados. |

## Depositar um token Canton

O depositante aloca um token Canton para o gateway, com o operador como executor. O depositante assina um `DepositRequest` que nomeia o id do depósito, o endereço EVM autorizado a reivindicar e a alocação.

Esse endereço EVM chama `claim`. O gateway emite para seu chamador e registra a perna do depósito. O destinatário precisa de tROME para gas. O construtor corresponde a perna à solicitação, ao token registrado e à alocação.

`Avançar` executa a alocação para a custódia do gateway e compromete o bloco que emitiu os tokens encapsulados. Um token encapsulado tem 10 casas decimais, correspondendo aos valores do Canton. A conversão entre os dois valores é exata, sem arredondamento.

## Sacar para uma parte Canton

O detentor chama `withdraw` com o token encapsulado, o valor e o id completo da parte Canton. O gateway queima os tokens encapsulados e registra o recebedor na perna.

O recebedor deve ter assinado um `WithdrawalAcceptance`. Ele permanece ativo até ser arquivado. O construtor também precisa de holdings desbloqueados do gateway suficientes do instrumento registrado. Ele deixa a transação de fora se essas condições não forem atendidas.

`Avançar` paga o recebedor por meio da fábrica de transferências do registro de tokens. A transferência Canton e o bloco que contém a queima são comprometidos juntos. O construtor inclui no máximo um saque de um instrumento por bloco, conforme descrito no [README do construtor](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/builder/README.md).

## Vincule um pagamento a uma única alocação

U aloca um token Canton para V. U e V assinam `DvpTerms` nomeando a alocação, o id do pagamento, o token EVM, o beneficiário EVM e o valor. O id do pagamento é o SHA-256 do texto UTF-8 `<id da parte de U>,<id da parte de V>,<rótulo>`, escrito em hexadecimal minúsculo. Os termos rejeitam qualquer outro id.

V aprova o gateway e chama `pay` com esse id. O gateway move o ERC-20 de V para o beneficiário e registra a perna do pagamento. `Avançar` usa os termos assinados para executar a alocação de U para V.

Uma transferência simples de ERC-20 não registra nenhuma perna. Mesmo uma transferência do mesmo token para o mesmo beneficiário no mesmo bloco não pode substituir `pay`. O [fluxo de pagamento do design](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/docs/DESIGN.md#the-flows) explica esse vínculo.

## O que a prova fixa

Cada perna registra seu tipo, id, token, conta, valor e parte Canton, quando aplicável. O gateway faz o hash das pernas em ordem. `Avançar` verifica se suas pernas anexadas produzem o hash no estado provado do gateway. Uma perna ausente, extra, reordenada ou alterada faz a transação falhar. A verificação também cobre blocos sem pernas.

Provar o bloco não reserva sua alocação Canton. O remetente ainda pode retirar a alocação antes da liquidação. Se isso acontecer após a prova, o Canton recusa `Avançar` e o reth retorna ao último bloco confirmado. O mesmo bloco provado não pode ser reenviado com sua perna removida. A próxima construção deixa o pagamento de fora, como demonstrado em [execução 4](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/demo/README.md#results).

## Limites de token e custódia

Os tokens Canton são mantidos pela parte gateway no participante do operador. Quem quer que execute esse participante pode movê-los. Registrar um token também significa confiar no código Daml do seu registro, que é executado com a autoridade do gateway.

Tokens enviados diretamente para o endereço EVM do gateway não podem ser recuperados. Se um token cobra uma taxa de transferência ou, de outra forma, transfere uma quantidade diferente, a perna do pagamento ainda registra a quantidade solicitada, em vez da quantidade realmente transferida. Leia [Modelo de confiança e limites](/pt-br/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/pt-br/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.
