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

# Mempool

> Bagaimana transaksi diterima, ditahan, diurutkan, dan disebarkan sebelum konsensus mengomitnya ke dalam blok.

Mempool berdiri di antara transaksi bertanda tangan dan blok yang dikomit. Mempool-lah yang memutuskan apa yang layak ditahan, dalam urutan apa transaksi seorang pengirim menjadi memenuhi syarat, peer mana yang mendengar tentang transaksi tertentu, dan apa yang dibuang ketika permintaan melebihi kapasitas.

Untuk jaringan trading, ini menopang beban dan bukan sekadar pelengkap. Lalu lintas order dan pembatalan datang dalam lonjakan, terpusat pada segelintir pengirim, dan sensitif terhadap latensi secara asimetris: pembatalan yang tiba terlambat lebih buruk daripada order yang tiba terlambat. Struktur di bawah ini ada karena antrean FIFO tunggal tidak menangani satu pun dari hal itu dengan baik.

<h2 id="the-path-in">
  Jalur masuk
</h2>

<div className="dg" data-dg="mempool-admission">
  <div className="dg-c" style={{aspectRatio:"720 / 252"}}>
    <svg className="dg-w" viewBox="0 0 720 252" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 124.00 145.00 L 145.60 145.00" />

      <path className="dg-head dg--blue" d="M 152.00 145.00 L 145.60 149.40 L 145.60 140.60 Z" />

      <path className="dg-wire dg--orange" d="M 340.00 145.00 L 356.00 145.00 L 356.00 46.00 L 365.60 46.00" />

      <path className="dg-head dg--orange" d="M 372.00 46.00 L 365.60 50.40 L 365.60 41.60 Z" />

      <path className="dg-wire dg--sky" d="M 340.00 145.00 L 365.60 145.00" />

      <path className="dg-head dg--sky" d="M 372.00 145.00 L 365.60 149.40 L 365.60 140.60 Z" />

      <path className="dg-wire dg--sky dg-soft" d="M 541.00 145.00 L 566.40 120.45" />

      <path className="dg-head dg--sky" d="M 571.00 116.00 L 569.46 123.61 L 563.34 117.28 Z" />

      <path className="dg-wire dg--sky dg-soft" d="M 541.00 145.00 L 566.55 171.40" />

      <path className="dg-head dg--sky" d="M 571.00 176.00 L 563.39 174.46 L 569.71 168.34 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"46.8254%",width:"16.6667%",height:"21.4286%"}}><span className="dg-t">Transaksi tertanda tangan</span></div>
    <div className="dg-b dg--yellow" style={{left:"21.6667%",top:"42.8571%",width:"25.0000%",height:"29.3651%"}}><span className="dg-t">Validasi</span><span className="dg-s">tanda tangan · format · state akun · mampukah pengirim membayar</span></div>
    <div className="dg-b dg--orange dg-left" style={{left:"52.2222%",top:"7.9365%",width:"47.7778%",height:"20.6349%"}}><span className="dg-t">Dibuang dengan alasan</span><span className="dg-s">bukan diam-diam — pengirim diberi alasan</span></div>
    <div className="dg-b dg--sky" style={{left:"52.2222%",top:"46.8254%",width:"22.2222%",height:"21.4286%"}}><span className="dg-t">Penyimpan transaksi</span></div>
    <div className="dg-b dg--sky" style={{left:"80.0000%",top:"36.5079%",width:"20.0000%",height:"19.0476%"}}><span className="dg-t">Siaran ke peer</span></div>
    <div className="dg-b dg--sky" style={{left:"80.0000%",top:"60.3175%",width:"20.0000%",height:"19.0476%"}}><span className="dg-t">Pembentukan batch, lalu konsensus</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"85.7143%",width:"100.0000%"}}><div className="dg-n">Validasi murah dan lokal, sehingga sumber daya mahal di hilir hanya dipakai untuk transaksi yang benar-benar bisa dieksekusi.</div></div>
    <div className="dg-lbl" style={{left:"49.4444%",top:"36.5079%"}}>ditolak</div>
    <div className="dg-lbl" style={{left:"49.4444%",top:"51.9841%"}}>diterima</div>
  </div>
</div>

Transaksi divalidasi sebelum disimpan sama sekali. Validasi bersifat murah dan lokal — tanda tangan, format, state akun, dan apakah pengirim mampu membayar apa yang dimintanya — dan validasi itu ada agar sumber daya mahal di hilir hanya dipakai untuk transaksi yang benar-benar bisa dieksekusi. Penolakan di sini mengembalikan alasan kepada pengirim alih-alih diam-diam menghilang.

<h2 id="how-transactions-are-held">
  Bagaimana transaksi ditahan
</h2>

Transaksi yang diterima tidak disimpan sebagai satu antrean datar. Penyimpan transaksi memelihara beberapa tampilan atas himpunan yang sama, masing-masing menjawab pertanyaan yang berbeda.

<div className="dg" data-dg="mempool-views">
  <div className="dg-c" style={{aspectRatio:"720 / 332"}}>
    <svg className="dg-w" viewBox="0 0 720 332" aria-hidden="true">
      <path className="dg-wire dg-soft" d="M 195.00 148.00 L 245.00 36.00" />

      <path className="dg-wire dg-soft" d="M 195.00 148.00 L 245.00 92.00" />

      <path className="dg-wire dg-soft" d="M 195.00 148.00 L 245.00 148.00" />

      <path className="dg-wire dg-soft" d="M 195.00 148.00 L 245.00 204.00" />

      <path className="dg-wire dg-soft" d="M 195.00 148.00 L 245.00 260.00" />
    </svg>

    <div className="dg-b dg--blue dg-round" style={{left:"0.0000%",top:"31.0241%",width:"26.3889%",height:"27.1084%"}}><span className="dg-t">Satu himpunan transaksi diterima</span><span className="dg-s">lima tampilan, bukan lima antrean</span></div>
    <div className="dg-b dg--sky" style={{left:"34.7222%",top:"3.0120%",width:"65.2778%",height:"15.6627%"}}><span className="dg-t">Urutan per akun</span><span className="dg-s">Untuk pengirim ini, mana transaksi berikutnya?</span></div>
    <div className="dg-b dg--sky" style={{left:"34.7222%",top:"19.8795%",width:"65.2778%",height:"15.6627%"}}><span className="dg-t">Indeks prioritas</span><span className="dg-s">Di antara semua pengirim, apa yang lebih dulu ke konsensus?</span></div>
    <div className="dg-b dg--sky" style={{left:"34.7222%",top:"36.7470%",width:"65.2778%",height:"15.6627%"}}><span className="dg-t">Indeks kedaluwarsa</span><span className="dg-s">Apa yang sudah lewat tenggatnya?</span></div>
    <div className="dg-b dg--sky" style={{left:"34.7222%",top:"53.6145%",width:"65.2778%",height:"15.6627%"}}><span className="dg-t">Indeks lini masa</span><span className="dg-s">Apa yang belum didengar peer ini?</span></div>
    <div className="dg-b dg--yellow" style={{left:"34.7222%",top:"70.4819%",width:"65.2778%",height:"15.6627%"}}><span className="dg-t">Tempat parkir</span><span className="dg-s">Bentuknya benar tetapi belum memenuhi syarat?</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"89.1566%",width:"100.0000%"}}><div className="dg-n">Tempat parkir adalah tempat bug integrasi menjadi terlihat: transaksi yang valid tetapi belum jadi yang berikutnya bagi pengirimnya diparkir, bukan ditolak — dan memenuhi syarat begitu celah di depannya tertutup.</div></div>
  </div>
</div>

| Tampilan               | Pertanyaan yang dijawabnya                                                   |
| ---------------------- | ---------------------------------------------------------------------------- |
| **Urutan per akun**    | Untuk pengirim ini, transaksi mana yang berikutnya?                          |
| **Indeks prioritas**   | Di antara semua pengirim, apa yang harus ditawarkan lebih dulu ke konsensus? |
| **Indeks kedaluwarsa** | Apa yang sudah lewat tenggatnya dan harus dihapus?                           |
| **Indeks lini masa**   | Apa yang belum didengar peer ini?                                            |
| **Tempat parkir**      | Apa yang bentuknya benar tetapi belum memenuhi syarat?                       |

**Tempat parkir** paling layak diperhatikan karena di situlah satu kelas bug integrasi menjadi terlihat. Transaksi bisa sepenuhnya valid tetapi tetap bukan yang berikutnya dalam antrean pengirimnya — paling sering karena transaksi terdahulu dari akun yang sama belum tiba atau belum dikomit. Transaksi seperti itu diparkir, bukan ditolak: transaksi itu tetap tersedia, dan menjadi memenuhi syarat begitu celah di depannya tertutup. Karena itu klien yang mengirim di luar urutan hanya mengalami penundaan, bukan kegagalan; tetapi klien yang tidak pernah menutup celahnya akan meninggalkan pekerjaan terparkir sampai kedaluwarsa.

**Indeks lini masa**-lah yang membuat penyebaran ke peer bersifat inkremental. Setiap peer dilacak sudah dilayani sejauh mana di sepanjang lini masa, sehingga siaran hanya mengirimkan apa yang kurang bagi peer itu, bukan mengirim ulang seluruh isi mempool. Lini masa dibagi ke dalam beberapa `bucket`, bukan satu barisan tunggal, sehingga satu pengirim berat tidak bisa memonopoli setiap slot siaran.

<h2 id="dissemination-and-fairness">
  Penyebaran dan keadilan
</h2>

Node tidak mempelajari transaksi sendiri-sendiri. Node yang menerima transaksi menyiarkannya ke peer, dan peer tidak diperlakukan sama — peer di hulu diprioritaskan agar transaksi bergerak menuju validator yang bisa menindaklanjutinya, bukan menyebar rata ke seluruh jaringan.

Keadilan dilacak dari riwayat terkini, bukan ditegakkan per pesan. Mempool menyimpan catatan bergulir tentang pengirim mana dan jenis lalu lintas mana yang belakangan memakai kapasitas, dan memakainya untuk membentuk apa yang dilayani berikutnya. Inilah mekanisme yang menjaga agar badai order-dan-pembatalan dari satu akun tidak menggusur trafik jaringan lainnya, tanpa perlu batas laju keras per akun yang justru akan menghukum market making yang sah.

<h2 id="handoff-to-consensus">
  Serah terima ke konsensus
</h2>

Konsensus tidak mengambil transaksi dari mempool satu per satu. Transaksi dikumpulkan menjadi **batch**, batch disebarkan ke validator di latar belakang, dan setiap batch diakui sampai pengirim asalnya bisa membuktikan bahwa cukup banyak bagian jaringan memegangnya. Baru setelah itu usulan blok boleh merujuknya.

Konsekuensinya, usulan blok membawa digest batch alih-alih badan transaksi, sehingga ukuran pesan konsensus tetap datar saat throughput naik — dan blok yang dikomit selalu bisa di-replay, karena data di baliknya sudah dibuktikan tersedia sebelum dirujuk. Lihat [IntentionBFT](/id/protocol/architecture/intention-bft) untuk cara bukti itu dibentuk dan dipakai.

<Note>
  Ini juga alasan admisi mempool tidak sama dengan penyertaan. Transaksi yang diterima, disimpan, dan disiarkan sudah masuk antrean, tetapi belum diurutkan. Nasib sebuah transaksi belum pasti sampai konsensus mengomit blok yang memuatnya.
</Note>

<h2 id="what-this-means-for-a-client">
  Apa artinya ini bagi klien
</h2>

* **Penolakan saat pengiriman itu informatif.** Penolakan terjadi sebelum transaksi disimpan, dan alasannya menjelaskan sesuatu yang bisa diperbaiki klien.
* **Diam bukan berarti penolakan.** Transaksi bisa saja terparkir di belakang celah yang dibuat klien itu sendiri. Lacak apa yang sudah dikirim dan apa yang sudah dikomit; jangan menganggap bahwa tidak adanya konfirmasi berarti transaksi dibuang.
* **Urutan di dalam satu akun penting; urutan antarakun tidak.** Dua transaksi dari satu pengirim punya urutan terdefinisi. Dua transaksi dari pengirim berbeda diurutkan oleh konsensus, bukan oleh siapa yang mengirim lebih dulu.
* **Pembatalan tidak diistimewakan di mempool.** Prioritas pembatalan adalah properti [eksekusi kernel](/id/protocol/architecture/kernel), tempat pembatalan berjalan sebelum penempatan agresif di blok yang sama — bukan properti antrean.
