> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Client order ID

> Lampirkan identifier Anda sendiri pada order agar bisa membatalkan dan merekonsiliasi memakai nilai yang Anda pilih, bukan nilai yang ditetapkan chain.

Saat Anda mengirim order, chain menetapkan order ID untuknya. ID itu otoritatif, tetapi Anda baru mengetahuinya *setelah* order diterima — dan itu masalah kalau yang perlu Anda lakukan justru membatalkan order yang penerimaannya tidak pernah Anda lihat.

Client order ID menyelesaikan itu. Anda membuat sendiri identifier-nya, melampirkannya saat pengiriman, dan bisa bertindak atas order itu memakai identifier tersebut sejak detik Anda mengirimnya.

<h2 id="why-this-matters-more-than-it-sounds">
  Mengapa ini lebih penting daripada kedengarannya
</h2>

Bayangkan pengiriman order yang timeout. Apakah order itu sampai ke chain? Anda tidak tahu. Tanpa client order ID, pilihan Anda adalah mengueri order terakhir lalu menebak berdasarkan pasar, sisi, harga, dan kuantitas — atau tidak melakukan apa-apa dan berharap.

Dengan client order ID, ambiguitasnya lenyap. Anda membatalkan memakai identifier yang Anda buat. Kalau order itu ada, order itu dibatalkan. Kalau tidak pernah sampai, pembatalan itu tidak menemukan apa pun. Bagaimanapun, Anda berakhir pada state yang diketahui — dan itulah yang sebenarnya dibutuhkan sistem yang berjalan tanpa diawasi manusia.

Ini juga yang membuat rekonsiliasi bisa dikerjakan. Catatan Anda sendiri memakai identifier yang Anda tetapkan sebagai kunci, jadi mencocokkan pandangan Anda dengan pandangan chain adalah pencarian nilai, bukan tebakan heuristik.

## Format

Identifier-nya adalah **nilai 16 byte**, dikirim sebagai string heksadesimal huruf kecil berawalan `0x` sepanjang 32 karakter.

```
0xa1b2c3d4e5f6789012345678901234ab
```

Tiga aturan yang ditegakkan protokol:

* **Hanya huruf kecil.** Heksadesimal huruf besar ditolak, bukan dinormalkan.
* **Panjang harus persis.** Nilai yang lebih pendek atau lebih panjang ditolak.
* **Nilai nol seluruhnya dicadangkan.** `0x00000000...0000` adalah penanda sentinel yang berarti *tidak ada*, dan tidak bisa dipakai sebagai identifier.

Field ini opsional. Order tanpa client order ID berperilaku normal dalam segala hal — order semacam itu hanya tidak bisa dibatalkan lewat client order ID, melainkan lewat order ID yang ditetapkan chain.

<h2 id="uniqueness">
  Keunikan
</h2>

Keunikan berlaku dalam lingkup **subakun**: kombinasi alamat penanda tangan dan subakun di bawahnya.

Ada dua konsekuensinya. Subakun berbeda di bawah alamat yang sama boleh memakai identifier yang sama tanpa konflik — berguna saat menjalankan strategi independen yang masing-masing membuat ID sendiri. Dan di dalam satu subakun, memakai ulang identifier yang sedang dipegang order aktif adalah error, bukan penggantian.

<Note>
  Buat identifier secara acak, bukan berurutan. Penghitung memang menggoda karena membuat urutan terlihat, tetapi restart yang menghilangkan penghitung menghasilkan tabrakan dengan order yang masih aktif, sedangkan 16 byte acak praktis tidak pernah bertabrakan.
</Note>

<h2 id="what-you-can-do-with-it">
  Apa yang bisa Anda lakukan dengannya
</h2>

| Operasi                            | Perilaku                                                                                  |
| ---------------------------------- | ----------------------------------------------------------------------------------------- |
| **Batalkan lewat client order ID** | Membatalkan order aktif yang membawa identifier itu, tanpa perlu ID yang ditetapkan chain |
| **Cari lewat client order ID**     | Mengambil state dan riwayat order saat ini                                                |
| **Rekonsiliasi**                   | Cocokkan catatan Anda sendiri dengan catatan chain memakai identifier yang Anda tetapkan  |

<h2 id="lifetime">
  Masa hidup
</h2>

Identifier itu milik order, bukan milik sesi Anda. Nilainya tetap bisa dikueri setelah order tereksekusi atau dibatalkan, dan itulah yang membuatnya berguna untuk rekonsiliasi setelah kejadian.

Identifier bisa dipakai ulang begitu order yang ditandainya tidak lagi aktif. Dalam praktik hampir tidak ada alasan untuk memakai ulang — nilai acak baru tidak memakan biaya apa pun dan menghapus keraguan tentang order mana yang dirujuk catatan historis.

<h2 id="where-to-go-next">
  Selanjutnya
</h2>

<CardGroup cols={2}>
  <Card title="Mengubah order" href="/id/trading/modify-orders">
    Mengubah order aktif, dan apa yang terjadi pada identifier-nya.
  </Card>

  <Card title="Jenis order" href="/id/trading/order-types">
    Apa saja yang bisa Anda lampiri identifier.
  </Card>

  <Card title="Developer" href="/id/developers/overview">
    Mengirim order dan menangani respons yang ambigu di dalam kode.
  </Card>

  <Card title="Pengurutan transaksi" href="/id/trading/tx-sequencing">
    Mengapa pembatalan yang dikirim di blok yang sama berjalan lebih dulu daripada order agresif.
  </Card>
</CardGroup>
