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

# Perubahan aturan

> Bagaimana aturan trading, parameter risiko, dan perilaku protokol berubah: masa pemberitahuan, tinggi blok berlaku, dan mengapa aturan pada blok masa lalu tidak pernah bisa ditulis ulang.

Ada tiga jenis perubahan yang sampai ke jaringan yang sedang berjalan: **perubahan parameter** (batas risiko, daftar tarif, batas funding), **perubahan perilaku** (bagaimana eksekusi itu sendiri bekerja), dan **perubahan pasar** ([listing dan delisting](/id/programs/listings)).

Ketiganya berbeda dalam cara diumumkan. Ketiganya berbagi satu sifat, dan sifat itulah yang penting: perubahan mulai berlaku pada **titik tertentu dalam riwayat chain**, dan riwayat sebelum titik itu tidak terpengaruh.

<h2 id="parameter-changes">
  Perubahan parameter
</h2>

Parameter risiko, tier leverage, batas funding, batas posisi, dan daftar tarif adalah konfigurasi on-chain. Mengubah salah satunya adalah transaksi protokol yang dieksekusi di dalam blok, pada urutan teratas [prioritas blok](/id/trading/tx-sequencing).

Karena nilainya adalah state chain, perubahannya teramati, bukan dilaporkan. Anda tidak perlu diberi tahu saat margin pemeliharaan di satu pasar berubah — Anda bisa membaca berapa nilainya sekarang, dan berapa nilainya di blok mana pun di masa lalu.

Key konfigurasi juga **berversi**. Ketika bentuk nilainya yang berubah, bukan sekadar angkanya, bentuk baru itu ditulis di bawah key baru dan key lama tetap bisa dibaca. Klien yang menetapkan konfigurasi secara langsung tetap bekerja melewati perubahan itu; klien yang menanam jalur key-nya secara hard-code akan langsung tahu ada yang berubah, bukan diam-diam membaca data basi. Lihat [Model state](/id/protocol/architecture/state/model).

<h2 id="behavioral-changes">
  Perubahan perilaku
</h2>

Mengubah *perilaku* eksekusi adalah persoalan yang lebih sulit daripada mengubah angka, karena setiap validator harus melakukan perubahan itu pada saat yang persis sama. Perubahan yang mendarat di node berbeda pada waktu berbeda bukanlah peluncuran bertahap — itu fork.

Intention menanganinya dengan **gate on-chain** (sakelar fitur on-chain). Setiap gate adalah satu key state yang memuat satu tinggi blok: tinggi saat perilaku baru mulai berlaku.

<div className="dg" data-dg="gated-change">
  <div className="dg-c" style={{aspectRatio:"720 / 250"}}>
    <svg className="dg-w" viewBox="0 0 720 250" aria-hidden="true">
      <path className="dg-wire" d="M 163.00 43.00 L 176.60 43.00" />

      <path className="dg-head" d="M 183.00 43.00 L 176.60 47.40 L 176.60 38.60 Z" />

      <path className="dg-wire" d="M 350.00 43.00 L 363.60 43.00" />

      <path className="dg-head" d="M 370.00 43.00 L 363.60 47.40 L 363.60 38.60 Z" />

      <path className="dg-wire" d="M 537.00 43.00 L 550.60 43.00" />

      <path className="dg-head" d="M 557.00 43.00 L 550.60 47.40 L 550.60 38.60 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"0.0000%",width:"22.0833%",height:"34.4000%"}}><span className="dg-t">Perilaku baru dikirim</span><span className="dg-s">ada di binary, belum aktif</span></div>
    <div className="dg-b dg--blue" style={{left:"25.9722%",top:"0.0000%",width:"22.0833%",height:"34.4000%"}}><span className="dg-t">Gate ditulis</span><span className="dg-s">satu key state berisi tinggi blok masa depan</span></div>
    <div className="dg-b dg--blue" style={{left:"51.9444%",top:"0.0000%",width:"22.0833%",height:"34.4000%"}}><span className="dg-t">Setiap validator baca tinggi yang sama</span></div>
    <div className="dg-b dg--green" style={{left:"77.9167%",top:"0.0000%",width:"22.0833%",height:"34.4000%"}}><span className="dg-t">Perilaku berubah tepat di blok itu</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"49.6000%",width:"31.8519%",height:"46.4000%"}}><span className="dg-t">Tingginya harus di masa depan</span><span className="dg-s">Gate tidak bisa disetel ke tinggi yang sudah lewat. Aturan tunggal itulah yang membuat perubahannya serentak.</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"34.0741%",top:"49.6000%",width:"31.8519%",height:"46.4000%"}}><span className="dg-t">Gate tidak ada berarti nonaktif</span><span className="dg-s">Node yang me-replay riwayat tidak membaca key pada tinggi itu dan mengambil jalur lama, jadi replay tetap benar tanpa matriks kompatibilitas.</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"68.1481%",top:"49.6000%",width:"31.8519%",height:"46.4000%"}}><span className="dg-t">Dibaca pada versi yang dieksekusi</span><span className="dg-s">Tidak pernah dari cache. Membaca nilai terkini saat me-replay blok lama akan menerapkan aturan hari ini pada riwayat kemarin.</span></div>
  </div>
</div>

Tiga sifat mengikuti dari situ, dan masing-masing memikul beban:

**Tingginya harus berada di masa depan ketika ditulis.** Gate tidak bisa disetel ke tinggi yang sudah lewat. Aturan tunggal itulah yang membuat perubahannya serentak — setiap validator mencapai blok itu dengan key yang sama sudah terlihat.

**Gate yang tidak ada berarti nonaktif.** Node yang me-replay riwayat tidak membaca key apa pun pada tinggi-tinggi itu dan mengambil persis jalur kode lama. Replay historis tetap benar dengan sendirinya, tanpa siapa pun memelihara matriks kompatibilitas.

**Gate dibaca pada versi yang sedang dieksekusi, tidak pernah dari cache.** Membaca nilai terkini saat me-replay blok lama akan menerapkan aturan hari ini pada riwayat kemarin dan menghasilkan state root yang berbeda. Jadi nilainya selalu dibaca dari tampilan eksekusi blok yang sedang dieksekusi.

Mekanisme yang sama mendukung pengaktifan bertahap: flag bisa diperkenalkan dalam keadaan nonaktif, diverifikasi terhadap trafik nyata, lalu dinyalakan pada tinggi yang dijadwalkan — bukan dikirim sebagai pembaruan binary sekali jadi.

<h2 id="notice-periods">
  Masa pemberitahuan
</h2>

Pemberitahuan sebanding dengan apa yang bisa dilakukan perubahan itu terhadap posisi yang sudah Anda pegang.

| Perubahan                                                                                                 | Pemberitahuan                                                   |
| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| **Memengaruhi posisi terbuka** — kebutuhan margin, tier leverage, batas funding, delisting                | Diumumkan sebelum tanggal berlaku, dengan tanggalnya dinyatakan |
| **Memengaruhi integrasi** — permukaan API, bentuk pesan, tata letak key                                   | Diumumkan sebelumnya, dengan jalur migrasi                      |
| **Hanya memengaruhi biaya** — daftar tarif, tier rebate                                                   | Diumumkan sebelum tanggal berlaku                               |
| **Mengoreksi risiko yang sedang berjalan** — parameter yang diperketat sebagai respons atas kondisi pasar | Bisa berlaku seketika                                           |

Baris terakhir adalah pengecualian yang nyata, bukan celah. Batas posisi yang harus menunggu seminggu untuk diperketat adalah batas posisi yang tidak berguna persis pada minggu saat batas itu dibutuhkan. Ketika pengecualian itu dipakai, perubahannya dan alasannya diterbitkan bersamanya.

<Warning>
  Perubahan pada kebutuhan margin atau tier leverage mengubah harga likuidasi pada posisi yang sudah Anda pegang. Perubahan itu tidak menutup apa pun, dan tidak memperingatkan Anda satu per satu. Jika Anda membawa posisi melewati perubahan parameter risiko yang sudah diumumkan, hitung ulang jarak Anda ke likuidasi terhadap nilai yang baru, bukan terhadap nilai yang berlaku saat Anda membuka posisi. Lihat [Leverage](/id/trading/leverage).
</Warning>

<h2 id="what-cannot-change">
  Yang tidak bisa berubah
</h2>

Aturan yang berlaku pada blok yang sudah dikomit.

Setiap perubahan aturan mulai berlaku pada tinggi yang berada di masa depan ketika perubahan itu dicatat, jadi me-replay blok lama selalu menerapkan aturan yang aktif saat itu. Apakah sebuah aturan berlaku pada versi tertentu di masa lalu — pertanyaan itu hanya punya satu jawaban, dan jawabannya hari ini sama dengan jawabannya setahun lagi.

Ini jaminan yang lebih kuat daripada kebijakan yang diterbitkan. Bukan soal protokol *tidak akan* menulis ulang riwayat — melainkan bahwa mekanismenya tidak punya cara merepresentasikan aturan yang dimulai di masa lalu. Lihat [Model state](/id/protocol/architecture/state/model).

<h2 id="announcements">
  Pengumuman
</h2>

<Note>
  Komitmen pemberitahuan pada halaman ini mulai berlaku pada **testnet publik, 20 September 2026**. [Testnet privat](/id/protocol/architecture/network-status) mengubah parameter dan perilaku tanpa pemberitahuan — testnet itu memang ada untuk menyetelnya.
</Note>

Begitu masa pemberitahuan mulai berlaku, setiap perubahan dicatat di [changelog protokol](/id/protocol/roadmap/changelog) dengan tanggal mulai berlakunya, dan diumumkan sebelum tanggal itu ketika tabel di atas menuntutnya.

Entri diberi tanggal berdasarkan **kapan perubahan itu mulai berlaku di jaringan**, bukan kapan diumumkan.

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

<CardGroup cols={2}>
  <Card title="Changelog protokol" href="/id/protocol/roadmap/changelog">
    Catatan bertanggal tentang apa saja yang sudah dirilis.
  </Card>

  <Card title="Listing dan delisting" href="/id/programs/listings">
    Perubahan pasar dan masa pemberitahuannya.
  </Card>

  <Card title="Model state" href="/id/protocol/architecture/state/model">
    Mengapa key konfigurasi diberi versi dan ditetapkan secara langsung.
  </Card>

  <Card title="Leverage" href="/id/trading/leverage">
    Apa yang dilakukan perubahan parameter risiko terhadap posisi terbuka.
  </Card>
</CardGroup>
