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

# Model state

> Apa yang termasuk state on-chain, bagaimana state itu diberi key dan versi, serta representasi state mana dari ketiganya yang otoritatif.

Ada tiga hal berbeda yang sama-sama disebut “state” di dalam mesin trading, dan mencampuradukkan ketiganya adalah cara sistem sampai pada jawaban yang berbeda-beda tergantung siapa yang ditanya. Halaman ini memisahkan ketiganya dan menyebut mana yang otoritatif.

<h2 id="three-representations">
  Tiga representasi
</h2>

<div className="dg" data-dg="state-model">
  <div className="dg-c" style={{aspectRatio:"720 / 288"}}>
    <svg className="dg-w" viewBox="0 0 720 288" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 215.00 90.00 L 243.60 90.00" />

      <path className="dg-head dg--blue" d="M 250.00 90.00 L 243.60 94.40 L 243.60 85.60 Z" />

      <path className="dg-wire dg--green" d="M 470.00 90.00 L 498.60 90.00" />

      <path className="dg-head dg--green" d="M 505.00 90.00 L 498.60 94.40 L 498.60 85.60 Z" />

      <path className="dg-wire dg--green dg-dash" d="M 615.00 145.00 L 615.00 176.00 L 105.00 176.00 L 105.00 151.40" />

      <path className="dg-head dg--green" d="M 105.00 145.00 L 109.40 151.40 L 100.60 151.40 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"13.8889%",width:"29.1667%",height:"34.7222%"}}><span className="dg-t">State mesin</span><span className="dg-s">pasar · akun · posisi · order book · lembaga kliring</span><span className="dg-n">bertahan lintas blok · rekonstruksi</span></div>
    <div className="dg-b dg--yellow dg-dashed" style={{left:"35.4167%",top:"13.8889%",width:"29.1667%",height:"34.7222%"}}><span className="dg-t">Working set blok</span><span className="dg-s">harga mark · akun tersentuh · eksekusi · output</span><span className="dg-n">hidup satu blok · sebuah jurnal</span></div>
    <div className="dg-b dg--green" style={{left:"70.8333%",top:"13.8889%",width:"29.1667%",height:"34.7222%"}}><span className="dg-t">State on-chain</span><span className="dg-s">key-value berversi, terautentikasi Merkle</span><span className="dg-n">otoritasnya</span></div>
    <div className="dg-b dg--orange dg-left" style={{left:"0.0000%",top:"72.9167%",width:"100.0000%",height:"23.6111%"}}><span className="dg-t">Kegagalan yang dicegah</span><span className="dg-s">Mesin yang salinan in-memory-nya menyimpang dari apa yang terkomit terus menyajikan jawaban, dan setiap jawaban itu salah dengan cara yang baru terlihat saat penyelesaian.</span></div>
    <div className="dg-lbl" style={{left:"50.0000%",top:"61.1111%",width:"45.8333%",whiteSpace:"normal"}}>state mesin harus bisa diturunkan dari catatan terkomit, tidak pernah sebaliknya</div>
  </div>
</div>

**State mesin** adalah apa yang dipegang [kernel](/id/protocol/architecture/kernel) di antara blok: metadata pasar, akun, posisi, order book, state instrumen, state lembaga kliring. Ini representasi kerja — ditata mengikuti pola akses yang benar-benar dimiliki matching dan kliring, bukan mengikuti kebutuhan penyimpanan.

**Working set blok** hanya ada selama satu blok dieksekusi: harga mark yang dipatok di awal, akun dan order mana yang tersentuh, eksekusi yang dihasilkan, output yang sedang dirakit. Isinya jurnal tentang apa yang terjadi selama blok itu berjalan.

**State on-chain** adalah hasil yang sudah terkomit: entri key-value berversi, diautentikasi oleh struktur Merkle, tahan lama dan bisa di-replay. Inilah yang di-sync node, yang menjadi acuan bukti, dan yang dibaca [indexer](/id/protocol/architecture/indexer).

**State on-chain adalah otoritasnya.** Working set blok adalah jurnal yang dipakai untuk membangun output deterministik — bukan sumber kebenaran. State mesin adalah rekonstruksi state on-chain yang dioptimalkan untuk eksekusi; representasi itu harus bisa diturunkan dari catatan yang sudah terkomit, tidak pernah sebaliknya.

Membalik urutan ini menghasilkan kegagalan yang khas dan mudah dikenali: mesin yang salinan in-memory-nya sudah menyimpang dari apa yang terkomit akan terus menyajikan jawaban, dan setiap jawaban itu salah dengan cara yang baru terlihat saat penyelesaian.

<h2 id="keys">
  Key
</h2>

State on-chain dialamatkan lewat key. State trading dikelompokkan ke dalam namespace bernama yang diberi versi secara eksplisit — misalnya konfigurasi biaya, indeks perpetual, tabel tier leverage, dan daftar peran administratif.

Sufiks versi bukan hiasan. Ketika bentuk konfigurasi berubah, konfigurasi itu pindah ke versi baru dari key-nya, dan key sebelumnya dipertahankan agar state yang ditulis dengan skema lama tetap bisa dibaca selama migrasi. Pembaca yang meng-hard-code satu versi dan tidak pernah memeriksa ulang akan diam-diam membaca konfigurasi usang setelah migrasi; pembaca yang me-resolve key yang sedang berlaku tidak akan begitu.

<Note>
  Inilah sebabnya konfigurasi harus dibaca dari chain, bukan dikunci di kode klien. [Layanan tier biaya](/id/protocol/architecture/programs) membaca konfigurasi biaya yang sedang berlaku pada setiap siklus persis karena alasan ini — tabel tier yang ditanam di dalam klien adalah tabel yang cepat atau lambat akan berbeda dari tabel yang sedang diterapkan jaringan.
</Note>

<h2 id="versions">
  Versi
</h2>

Setiap blok yang terkomit menaikkan satu versi. Nilai state disimpan terhadap versi saat nilai itu ditulis, yang berarti store-nya bukan sekadar “state saat ini” melainkan “state pada versi mana pun”.

Properti itulah yang sekaligus memungkinkan beberapa hal:

* **Bukti** dapat dihasilkan terhadap versi tertentu, bukan hanya terhadap keadaan sekarang.
* **Replay** dapat dimulai dari versi mana pun, bukan hanya dari genesis.
* **Pembacaan** bisa bersifat historis — indexer yang merekonstruksi riwayat posisi sedang meminta versi lama, bukan memindai log.
* **Pruning** menjadi keputusan kebijakan tentang seberapa jauh ke belakang data disimpan, bukan batasan struktural.

<h2 id="what-ends-up-committed">
  Apa yang akhirnya terkomit
</h2>

Eksekusi kernel menghasilkan dua hal per blok. Setiap transaksi membawa penulisan dan event-nya sendiri, terikat padanya. Efek yang bukan milik satu transaksi pengguna mana pun — aliran funding, pergerakan dana asuransi, penghitung di tingkat blok — masuk ke kanal sistem tersendiri.

Di antara keduanya, tidak ada yang hilang. Tidak ada efek eksekusi di dalam kernel yang tidak muncul di output transaksi maupun di kanal sistem. Kelengkapan itulah yang membuat catatan terkomit bisa diperlakukan sebagai cerita utuh, bukan ringkasannya, dan itu pula alasan event bisa dilacak balik ke transaksi penyebabnya bahkan ketika matching berjalan secara batch.

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

<CardGroup cols={2}>
  <Card title="Penyimpanan dan bukti" href="/id/protocol/architecture/state/storage">
    Bagaimana state yang terkomit disimpan secara fisik, diautentikasi, dan di-prune.
  </Card>

  <Card title="Sinkronisasi state" href="/id/protocol/architecture/state/sync">
    Bagaimana node yang belum pernah melihat chain menyusul sampai ke posisi terkini.
  </Card>

  <Card title="IntentionKernel" href="/id/protocol/architecture/kernel">
    Tempat state mesin dan working set blok berada.
  </Card>

  <Card title="Indexer" href="/id/protocol/architecture/indexer">
    Mengubah state yang terkomit menjadi sesuatu yang bisa di-query.
  </Card>
</CardGroup>
