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

# Deposit, penarikan, dan pembayaran

Cara gateway mengikat deposit, penarikan, dan pembayaran EVM ke sisi Canton mereka.

Gateway adalah kontrak EVM yang disertakan dalam genesis rantai. Ia mencatat apa yang perlu dilakukan Canton oleh sebuah blok. Setiap permintaan adalah sebuah leg. Bukti blok mengikat status gateway, termasuk hash dari leg-leg dalam urutan saat dicatat.

Halaman ini menjelaskan commit `a84e84e439a5cc669c0ae61facf7c8c995d9d564`. Baca selengkapnya [README gateway](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/gateway/README.md) dan [antarmuka Daml](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/daml/README.md).

| Langkah    | Panggilan gateway                | Tindakan EVM                               | Tindakan Canton dalam `Maju`                                               |
| ---------- | -------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------- |
| Setoran    | `claim(id, token, amount)`       | Cetak token terbungkus kepada pemanggil.   | Jalankan alokasi penyetor ke gateway.                                      |
| Penarikan  | `withdraw(token, amount, party)` | Bakar token terbungkus milik pemanggil.    | Bayarkan token Canton dari kustodian gateway kepada pihak yang disebutkan. |
| Pembayaran | `pay(id, token, to, amount)`     | Transfer ERC-20 dari pembayar ke penerima. | Jalankan alokasi yang disebutkan oleh syarat pembayaran yang disepakati.   |

## Setor token Canton

Penyetor mengalokasikan token Canton ke gateway, dengan operator sebagai pelaksana. Penyetor menandatangani sebuah `DepositRequest` yang menyebut ID setoran, alamat EVM yang diizinkan untuk melakukan claim, dan alokasinya.

Alamat EVM itu memanggil `claim`. Gateway mencetak token kepada pemanggilnya dan mencatat leg setoran. Penerima membutuhkan tROME untuk gas. Builder mencocokkan leg dengan permintaan, token yang terdaftar, dan alokasinya.

`Maju` mengeksekusi alokasi ke kustodian gateway dan melakukan komit pada blok yang mencetak token terbungkus. Token terbungkus memiliki 10 desimal, sesuai dengan jumlah Canton. Konversi antara kedua jumlah tersebut tepat, tanpa pembulatan.

## Tarik ke pihak Canton

Pemegang memanggil `withdraw` dengan token terbungkus, jumlah, dan ID lengkap pihak Canton. Gateway membakar token terbungkus dan mencatat penerima dalam leg.

Penerima harus telah menandatangani sebuah `WithdrawalAcceptance`. Itu tetap aktif sampai diarsipkan. Builder juga membutuhkan cukup kepemilikan gateway yang tidak terkunci atas instrumen yang terdaftar. Builder akan mengabaikan transaksi jika kondisi ini tidak terpenuhi.

`Maju` membayar penerima melalui pabrik transfer milik registri token. Transfer Canton dan blok yang berisi pembakaran di-commit bersama-sama. Builder hanya menyertakan paling banyak satu penarikan satu instrumen per blok, seperti dijelaskan dalam [README builder](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/builder/README.md).

## Ikat pembayaran ke satu alokasi

U mengalokasikan token Canton kepada V. U dan V menandatangani `DvpTerms` yang menyebut alokasi, ID pembayaran, token EVM, penerima EVM, dan jumlahnya. ID pembayaran adalah SHA-256 dari teks UTF-8 `<ID pihak U>,<ID pihak V>,<label>`, ditulis dalam heksadesimal huruf kecil. Syarat-syarat tersebut menolak ID lainnya.

V menyetujui gateway dan memanggil `pay` dengan ID itu. Gateway memindahkan ERC-20 dari V ke penerima dan mencatat leg pembayaran. `Maju` menggunakan syarat yang telah ditandatangani untuk mengeksekusi alokasi dari U ke V.

Transfer ERC-20 biasa tidak mencatat leg apa pun. Bahkan transfer token yang sama ke penerima yang sama dalam blok yang sama tidak dapat menggantikan `pay`. The [alur pembayaran desain](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/docs/DESIGN.md#the-flows) menjelaskan pengikatan ini.

## Apa yang dipastikan oleh bukti

Setiap leg mencatat jenis, ID, token, akun, jumlah, dan pihak Canton jika berlaku. Gateway meng-hash leg secara berurutan. `Maju` memeriksa bahwa leg yang dilampirkannya menghasilkan hash dalam status gateway yang telah dibuktikan. Leg yang hilang, berlebih, diubah urutannya, atau diubah akan membuat transaksi gagal. Pemeriksaan ini juga mencakup blok tanpa leg.

Membuktikan blok tidak mencadangkan alokasi Canton-nya. Pengirim masih dapat mengambil kembali alokasi tersebut sebelum penyelesaian. Jika itu terjadi setelah pembuktian, Canton menolak `Maju` dan reth kembali ke blok terakhir yang telah di-commit. Blok yang sama yang telah dibuktikan tidak dapat diajukan ulang dengan leg-nya dihapus. Build berikutnya menghilangkan pembayaran, seperti ditunjukkan dalam [run 4](https://github.com/rome-protocol/canton-zk-evm/blob/a84e84e439a5cc669c0ae61facf7c8c995d9d564/demo/README.md#results).

## Batas token dan kustodian

Token Canton dipegang oleh pihak gateway pada partisipan operator. Siapa pun yang menjalankan partisipan itu dapat memindahkannya. Mendaftarkan sebuah token juga berarti mempercayai kode Daml dari registrinya, yang berjalan dengan otoritas gateway.

Token yang dikirim langsung ke alamat EVM gateway tidak dapat dipulihkan. Jika sebuah token mengenakan biaya transfer atau dengan cara lain mentransfer jumlah yang berbeda, leg pembayaran tetap mencatat jumlah yang diminta, bukan jumlah yang benar-benar ditransfer. Baca [Model kepercayaan dan batasan](/id/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/id/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.
