> ## 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.

# Matching

> Order book, bagaimana prioritas harga-waktu direpresentasikan, dan bagaimana masa berlaku order serta pencegahan self-trade diselesaikan terhadapnya.

Matching adalah tahap di dalam [eksekusi kernel](/id/protocol/architecture/kernel), bukan layanan yang diajak bicara oleh chain. Tahap ini mengambil order milik blok dalam urutan terkomitnya, menjalankannya terhadap order book, dan menghasilkan eksekusi. Yang tidak dilakukannya: memindahkan saldo siapa pun — itu tugas [lembaga kliring](/id/protocol/architecture/clearinghouse), dan terjadi setelah matching selesai.

Pemisahan itulah yang membuat engine ini dapat diuji. Matching menjawab *apa yang bertransaksi dengan apa*. Lembaga Kliring menjawab *berapa biayanya dan siapa kini berutang kepada siapa*.

<h2 id="the-book">
  Order book
</h2>

Setiap instrumen punya order book sendiri, disimpan di memori sebagai tiga struktur yang bekerja sama:

<div className="dg" data-dg="matching-book">
  <div className="dg-c" style={{aspectRatio:"720 / 302"}}>
    <svg className="dg-w" viewBox="0 0 720 302" aria-hidden="true">
      <path className="dg-wire dg-soft" d="M 348.60 82.00 L 352.60 82.00" />

      <path className="dg-wire dg-soft" d="M 438.20 82.00 L 442.20 82.00" />

      <path className="dg-wire dg-soft" d="M 527.80 82.00 L 531.80 82.00" />

      <path className="dg-wire dg-soft" d="M 617.40 82.00 L 621.40 82.00" />

      <path className="dg-wire dg--blue" d="M 205.00 68.00 L 238.60 68.00" />

      <path className="dg-head dg--blue" d="M 245.00 68.00 L 238.60 72.40 L 238.60 63.60 Z" />

      <path className="dg-wire dg--sky" d="M 205.00 162.00 L 238.60 162.00" />

      <path className="dg-head dg--sky" d="M 245.00 162.00 L 238.60 166.40 L 238.60 157.60 Z" />
    </svg>

    <div className="dg-band" style={{left:"34.7222%",top:"9.9338%",width:"65.2778%",height:"56.2914%"}}><span className="dg-cap">Slab arena — satu wilayah slot order teralokasi di muka</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"9.9338%",width:"27.7778%",height:"25.1656%"}}><span className="dg-t">Level harga</span><span className="dg-s">peta terurut, harga → level</span><span className="dg-n">puncak ditemukan dengan berjalan ke ujung, bukan memindai</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"41.0596%",width:"27.7778%",height:"25.1656%"}}><span className="dg-t">Indeks order</span><span className="dg-s">id order → slot</span><span className="dg-n">batal dan ubah berwaktu konstan</span></div>
    <div className="dg-b dg--yellow" style={{left:"36.9444%",top:"19.5364%",width:"11.0556%",height:"15.2318%"}}><span className="dg-t">order</span></div>
    <div className="dg-b dg--yellow" style={{left:"49.3889%",top:"19.5364%",width:"11.0556%",height:"15.2318%"}}><span className="dg-t">order</span></div>
    <div className="dg-b dg--yellow" style={{left:"61.8333%",top:"19.5364%",width:"11.0556%",height:"15.2318%"}}><span className="dg-t">order</span></div>
    <div className="dg-b dg--yellow" style={{left:"74.2778%",top:"19.5364%",width:"11.0556%",height:"15.2318%"}}><span className="dg-t">order</span></div>
    <div className="dg-b dg--yellow" style={{left:"86.7222%",top:"19.5364%",width:"11.0556%",height:"15.2318%"}}><span className="dg-t">order</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"36.9444%",top:"41.3907%",width:"60.8333%",height:"15.2318%"}}><span className="dg-s">Rantai berkait ganda dalam urutan kedatangan, sehingga prioritas dalam level bersifat posisional, bukan dihitung.</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"74.8344%",width:"100.0000%",height:"20.5298%"}}><span className="dg-t">Alasan urutan pakai ulang tetap</span><span className="dg-s">Slot yang dibebaskan dipakai ulang dalam urutan tetap dan indeks di-seed tetap. Bukan pilihan performa: dua validator dengan urutan pakai ulang berbeda akan fork.</span></div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"17.8808%",width:"15.2778%",whiteSpace:"normal"}}>kepala tiap level</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"62.9139%",width:"15.2778%",whiteSpace:"normal"}}>akses langsung</div>
  </div>
</div>

| Struktur         | Peran                                                                                                                                             |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Level harga**  | Peta terurut dari harga ke level, sehingga bid terbaik dan ask terbaik ditemukan dengan berjalan ke ujung alih-alih memindai                      |
| **Rantai order** | Senarai berkait ganda yang merangkai order dalam urutan kedatangan, sehingga prioritas di dalam satu level bersifat posisional alih-alih dihitung |
| **Indeks order** | Peta langsung dari ID order ke slotnya, sehingga pembatalan dan perubahan berwaktu konstan alih-alih berupa pencarian                             |

Order tinggal di dalam `slab arena` — wilayah teralokasi di muka dengan alokasi dan pelepasan berwaktu konstan. Karena itu operasi order book tidak melakukan alokasi di jalur panas, dan slot yang dibebaskan dipakai ulang dalam urutan tetap alih-alih di mana pun alokator kebetulan menaruhnya. Detail terakhir itu bukan pilihan performa: jika dua validator memakai ulang slot dalam urutan berbeda, apa pun yang mengamati tata letak slot akan menyimpang.

Disiplin yang sama berlaku pada indeks order, yang di-seed secara tetap alih-alih acak. Peta hash dengan seed per proses adalah pertahanan standar terhadap serangan kolisi; di jalur eksekusi konsensus, itu adalah fork.

Harga berupa bilangan bulat di sepanjang jalur — satuan subtick, bukan desimal. Lihat [Presisi](/id/trading/precision) untuk pemetaannya ke apa yang Anda kirim.

<h2 id="priority">
  Prioritas
</h2>

Prioritas ditentukan harga dulu, lalu posisi dalam rantai pada harga itu. “Waktu” adalah posisi kanonis order tersebut dalam barisan blok yang dikomit, bukan kapan order itu tiba di suatu node.

Inilah yang menghapus perlombaan latensi intrablok. Dua order dalam blok yang sama punya urutan prioritas terdefinisi yang dihitung identik oleh setiap validator, dan sedekat apa pun Anda dengan node tertentu tidak mengubahnya. Antarblok, kedatangan tetap berpengaruh — tetapi satuan persaingannya adalah blok, bukan mikrodetik.

Urutan tahap kernel memperkuat hal ini: pembatalan dieksekusi sebelum penempatan agresif di dalam satu blok, sehingga kuotasi terpasang tidak bisa diambil order yang masuk di blok yang sama dengan pembatalannya.

<h2 id="matching-an-order">
  Mencocokkan order
</h2>

<div className="dg" data-dg="matching-walk">
  <div className="dg-c" style={{aspectRatio:"720 / 334"}}>
    <svg className="dg-w" viewBox="0 0 720 334" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 134.00 144.00 L 155.60 144.00" />

      <path className="dg-head dg--blue" d="M 162.00 144.00 L 155.60 148.40 L 155.60 139.60 Z" />

      <path className="dg-wire dg--sky" d="M 320.00 144.00 L 345.60 144.00" />

      <path className="dg-head dg--sky" d="M 352.00 144.00 L 345.60 148.40 L 345.60 139.60 Z" />

      <path className="dg-wire dg--green" d="M 510.00 144.00 L 535.60 144.00" />

      <path className="dg-head dg--green" d="M 542.00 144.00 L 535.60 148.40 L 535.60 139.60 Z" />

      <path className="dg-wire dg--sky" d="M 633.00 114.00 L 633.00 80.00 L 241.00 80.00 L 241.00 103.60" />

      <path className="dg-head dg--sky" d="M 241.00 110.00 L 236.60 103.60 L 245.40 103.60 Z" />

      <path className="dg-wire dg--green" d="M 633.00 174.00 L 633.00 213.60" />

      <path className="dg-head dg--green" d="M 633.00 220.00 L 628.60 213.60 L 637.40 213.60 Z" />

      <path className="dg-wire dg--sky" d="M 241.00 178.00 L 241.00 213.60" />

      <path className="dg-head dg--sky" d="M 241.00 220.00 L 236.60 213.60 L 245.40 213.60 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"35.3293%",width:"18.0556%",height:"15.5689%"}}><span className="dg-t">Order masuk</span></div>
    <div className="dg-b dg--yellow dg-round" style={{left:"23.0556%",top:"34.1317%",width:"20.8333%",height:"17.9641%"}}><span className="dg-t">Melintasi order book?</span></div>
    <div className="dg-b dg--sky" style={{left:"49.4444%",top:"35.3293%",width:"20.8333%",height:"15.5689%"}}><span className="dg-t">Konsumsi level lawan terbaik</span></div>
    <div className="dg-b dg--green" style={{left:"75.8333%",top:"35.3293%",width:"24.1667%",height:"15.5689%"}}><span className="dg-t">Terbitkan eksekusi</span></div>
    <div className="dg-b dg--green" style={{left:"75.8333%",top:"67.0659%",width:"24.1667%",height:"25.7485%"}}><span className="dg-t">Selesai</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"10.5556%",top:"67.0659%",width:"45.8333%",height:"25.7485%"}}><span className="dg-t">Pasang atau tolak sisanya, sesuai masa berlaku</span><span className="dg-s">GTC terpasang · IOC membatalkannya · FOK tidak dieksekusi kecuali penuh · post-only ditolak alih-alih melintasi</span></div>
    <div className="dg-lbl" style={{left:"60.6944%",top:"23.9521%",width:"27.7778%",whiteSpace:"normal"}}>sisa — ambil level berikutnya</div>
    <div className="dg-lbl" style={{left:"87.9167%",top:"58.9820%"}}>tanpa sisa</div>
  </div>
</div>

Matcher berulang kali mengonsumsi kepala sisi lawan, menerbitkan satu eksekusi untuk setiap maker yang diambilnya, sampai order masuk habis atau order book tidak lagi bersilangan. Apa yang terjadi pada sisanya ditentukan oleh masa berlaku order:

* **GTC** — pasang sisanya di order book.
* **IOC** — batalkan sisanya.
* **FOK** — jika order tidak bisa dieksekusi penuh, tidak ada yang dieksekusi sama sekali.
* **ALO** — post-only: jika order akan mengambil likuiditas, order itu ditolak alih-alih melintasi order book.

Eksekusi membawa atribusi sejak dihasilkan. Setiap eksekusi mencatat posisinya dalam barisan eksekusi untuk instrumennya, dan posisi per instrumen itu kemudian diselesaikan menjadi satu urutan tunggal untuk seluruh blok saat output dirakit. Inilah yang membuat sebuah event bisa dilacak kembali, di kemudian hari, ke transaksi persis dan titik persis di dalam blok yang menyebabkannya.

<h2 id="self-trade-prevention">
  Pencegahan self-trade
</h2>

Ketika order masuk akan bertemu likuiditas terpasang milik pemilik yang sama, pencocokan itu ditekan alih-alih dieksekusi. Sisi mana yang mengalah dapat dikonfigurasi:

| Mode             | Perilaku                                                  |
| ---------------- | --------------------------------------------------------- |
| **Expire taker** | Order yang masuk dibatalkan                               |
| **Expire maker** | Order terpasang dibatalkan dan order yang masuk berlanjut |
| **Expire both**  | Keduanya dibatalkan                                       |

Maker yang dibatalkan dengan cara ini dikumpulkan selama matching dan dihapus sebagai bagian dari blok yang sama, sehingga order book tidak membawa order yang sudah ditekan.

Kepemilikan untuk pemeriksaan ini ditentukan pada tingkat akun yang dilacak order book. Lihat [Pencegahan self-trade](/id/trading/self-trade-prevention) untuk sudut pandang sisi trading.

<h2 id="what-matching-does-not-do">
  Apa yang tidak dilakukan matching
</h2>

Matching tidak menghitung biaya, tidak merealisasi laba dan rugi, tidak menyesuaikan posisi, dan tidak memeriksa margin. Semua itu terjadi setelah matching, di [lembaga kliring](/id/protocol/architecture/clearinghouse), digerakkan oleh eksekusi yang dihasilkan matching.

Matching juga tidak memutuskan apakah order boleh ada. Kecukupan margin, batas order terbuka, kendala reduce-only, dan konversi market-to-limit sudah diselesaikan sebelum order sampai ke order book. Saat matcher melihat order, pertanyaannya tinggal di titik mana order itu ditempatkan di order book.

<h2 id="where-to-go-next">
  Ke mana selanjutnya
</h2>

<CardGroup cols={2}>
  <Card title="Lembaga Kliring" href="/id/protocol/architecture/clearinghouse">
    Apa yang terjadi pada saldo dan posisi setelah eksekusi terbentuk.
  </Card>

  <Card title="Jenis order" href="/id/trading/order-types">
    Sudut pandang sisi trading: apa yang bisa Anda kirim dan bagaimana masing-masing berperilaku.
  </Card>

  <Card title="Order book" href="/id/trading/order-book">
    Kedalaman, level, dan cara membaca order book sebagai trader.
  </Card>

  <Card title="IntentionKernel" href="/id/protocol/architecture/kernel">
    Letak matching dalam eksekusi blok.
  </Card>
</CardGroup>
