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

# IntentionBFT

> Konsensus: bagaimana urutan dan vektor harga tersertifikasi dikomit bersama, dan bagaimana jaringan ini ditata.

IntentionBFT adalah protokol konsensus Intention — protokol BFT keluarga HotStuff yang diperluas untuk infrastruktur finansial. Keamanan berlaku tanpa syarat di bawah ambang batas kegagalan; keaktifan berlaku setelah jaringan stabil.

Konsensus di sini melakukan dua hal yang tidak dilakukan konsensus chain serbaguna: mengomit **urutan** sebagai objek kelas satu, dan mengomit **vektor harga tersertifikasi** dalam peristiwa yang sama. Semua yang bisa dijamin [kernel](/id/protocol/architecture/kernel) tentang eksekusi bergantung pada tuntasnya kedua hal itu sebelum eksekusi dimulai.

## Model

IntentionBFT mentoleransi lawan Byzantine yang menguasai hingga sepertiga total stake. Karena itu stake jujur selalu lebih dari dua pertiga, dan kuorum standarnya adalah himpunan validator mana pun yang gabungan stake-nya melebihi dua pertiga — yang halaman-halaman ini sebut **kuorum berbobot stake $2f+1$**. Jaringannya sinkron sebagian: sebelum titik stabilisasi, penundaan bersifat sembarang; setelahnya, penundaan antarvalidator jujur terbatas.

<div className="dg" data-dg="bft-prices">
  <div className="dg-c" style={{aspectRatio:"720 / 318"}}>
    <svg className="dg-w" viewBox="0 0 720 318" aria-hidden="true">
      <path className="dg-wire" d="M 163.00 78.00 L 176.60 78.00" />

      <path className="dg-head" d="M 183.00 78.00 L 176.60 82.40 L 176.60 73.60 Z" />

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

      <path className="dg-head" d="M 370.00 78.00 L 363.60 82.40 L 363.60 73.60 Z" />

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

      <path className="dg-head" d="M 557.00 78.00 L 550.60 82.40 L 550.60 73.60 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Sidecar oracle</span><span className="dg-s">satu per validator</span></div>
    <div className="dg-b dg--blue" style={{left:"25.9722%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Validasi dan tanda tangan validator</span><span className="dg-s">kesegaran terhadap ambang batas yang dikonfigurasi</span></div>
    <div className="dg-b dg--blue" style={{left:"51.9444%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Gossip antarvalidator</span><span className="dg-s">sebagai pesan jaringan konsensus</span></div>
    <div className="dg-b dg--green" style={{left:"77.9167%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Harga tersertifikasi</span><span className="dg-s">per epoch dan ronde</span></div>
    <div className="dg-b dg--orange dg-left" style={{left:"0.0000%",top:"48.4277%",width:"100.0000%",height:"21.3836%"}}><span className="dg-t">Ketersediaan harga: prasyarat produksi blok</span><span className="dg-s">Validator hanya berhak mengusulkan blok jika bisa menyajikan observasi harga yang valid untuk ronde berjalan — sehingga tanda tangan yang mengomit transaksi juga mengomit harga yang menjadi dasar penyelesaiannya.</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"75.4717%",width:"100.0000%",height:"19.4969%"}}><span className="dg-t">Apa yang tidak diklaim</span><span className="dg-s">Ini mengikat harga pada transaksi. Ini tidak membuat harganya benar — konsensus menyertifikasi bahwa kuorum validator mengirimkan observasi ini pada ronde ini, tidak lebih.</span></div>
  </div>
</div>

Setiap ronde punya leader yang ditunjuk. Di dalam satu ronde, usulan mengumpulkan agregat tanda tangan $2f+1$ secara berturut-turut, dan fase-fasenya di-pipeline melintasi ronde yang bersebelahan, sehingga blok mencapai finalitas dalam dua putaran pesan jaringan pada kasus umum. Di bawah responsivitas optimistik, kemajuan dibatasi oleh penundaan pesan yang sebenarnya; backoff `pacemaker` baru aktif ketika jaringan bersifat adversarial atau terpartisi.

<h2 id="committing-an-ordering">
  Mengomit urutan
</h2>

Urutan transaksi di dalam blok dinaikkan menjadi objek yang dikomit konsensus alih-alih dibiarkan sebagai artefak eksekusi. Hash blok mencakup muatan yang telah diurutkan, sehingga pengurutan ulang apa pun setelah konsensus membatalkan tanda tangan yang mengomitnya.

Efeknya: begitu blok difinalisasi, kuorum berbobot stake $2f+1$ telah menandatangani komitmen atas urutan persis itu, dan tidak ada validator jujur yang akan menandatangani urutan berbeda atas transaksi yang sama di ronde yang sama. Digabung dengan eksekusi berurutan di atas urutan terkomit itu, inilah yang mengubah replay deterministik dari konvensi implementasi menjadi properti yang bisa diperiksa siapa pun.

<Note>
  Keleluasaan leader di dalam satu usulan — batch tersedia mana yang disertakan dan bagaimana menyusunnya — tetap menjadi permukaan sisa, yang diredam oleh reputasi leader dan oleh kenyataan bahwa seorang leader tidak bisa memproduksi blok sama sekali tanpa observasi harga yang valid. Konstruksi fair-ordering yang lebih kuat dilacak sebagai kandidat upgrade di masa depan.
</Note>

<h2 id="batch-availability">
  Ketersediaan batch
</h2>

Pada protokol naif, leader mengusulkan blok yang muatannya membawa seluruh transaksi ronde tersebut, sehingga ukuran pesan konsensus terkopel dengan throughput. IntentionBFT memisahkan penyebaran data dari pengurutan.

Validator terus-menerus menyebarkan batch transaksi di latar belakang. Setiap batch diakui sampai pengirim asalnya bisa membuktikan ketersediaan berbobot stake $2f+1$, dan baru setelah itu usulan boleh merujuknya — lewat digest, bukan lewat isinya. Pesan konsensus tetap kecil berapa pun throughput-nya, dan blok yang dikomit selalu bisa di-replay, karena tidak ada blok yang bisa merujuk data yang hanya dipegang minoritas Byzantine.

<h2 id="certifying-prices">
  Menyertifikasi harga
</h2>

Validator sekaligus pengamat harga, dan setiap blok membawa harga yang dipakai saat blok itu dieksekusi.

<div className="dg" data-dg="bft-topology">
  <div className="dg-c" style={{aspectRatio:"720 / 322"}}>
    <svg className="dg-w" viewBox="0 0 720 322" aria-hidden="true">
      <path className="dg-wire dg-soft" d="M 215.00 95.00 L 215.00 99.00" />

      <path className="dg-wire dg-soft" d="M 215.00 167.00 L 215.00 171.00" />

      <path className="dg-wire dg-soft" d="M 215.00 239.00 L 215.00 243.00" />
    </svg>

    <div className="dg-b dg--blue dg-left" style={{left:"0.0000%",top:"9.3168%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Validator</span><span className="dg-s">konsensus · mempool · sidecar oracle · kernel · penyimpanan</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"9.3168%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Satu-satunya pemberi suara</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"0.0000%",top:"31.6770%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Full node validator</span><span className="dg-s">mengikuti dan mengeksekusi blok terkomit; tanpa suara</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"31.6770%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Pelindung — menyerap lalu lintas baca publik dan koneksi peer agar validator tidak terpapar langsung ke internet terbuka</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"0.0000%",top:"54.0373%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Full node publik</span><span className="dg-s">siapa pun bisa menjalankan; mengikuti, melayani baca</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"54.0373%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Lapisan terbuka</span></div>
    <div className="dg-b dg--green dg-left" style={{left:"0.0000%",top:"76.3975%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Klien</span><span className="dg-s">front end · agen trading · market maker · indexer</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"76.3975%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Klien terhubung ke full node, bukan ke validator. Yang butuh latensi terendah dan pandangan terlengkap menjalankan full node sendiri.</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"59.7222%"}}><div className="dg-n">Empat lapisan, menjauh dari konsensus</div></div>
    <div className="dg-free" style={{left:"63.6111%",top:"0.0000%",width:"36.3889%"}}><div className="dg-n">Alasan tiap lapisan</div></div>
  </div>
</div>

Setiap validator menjalankan [sidecar oracle](/id/protocol/architecture/oracle)-nya sendiri, yang mengumpulkan data venue dan menghasilkan satu harga indeks per instrumen. Validator menarik harga itu, memvalidasinya — termasuk kesegaran terhadap ambang batas yang dikonfigurasi — menandatanganinya, dan menyebarkan kiriman bertanda tangan itu ke validator lain sebagai pesan jaringan konsensus. Harga tersertifikasi dirakit per epoch dan ronde lalu dibawa di dalam blok, sehingga tanda tangan yang mengomit transaksi juga mengomit harga yang menjadi dasar penyelesaian transaksi tersebut.

Validator hanya berhak mengusulkan blok jika bisa menyajikan observasi harga yang valid untuk ronde berjalan. Ketersediaan harga karenanya adalah prasyarat produksi blok, bukan input yang diharap-harap ditemukan oleh eksekusi.

<Warning>
  Ini mengikat harga pada transaksi; ini tidak membuat harganya benar. Konsensus menyertifikasi bahwa kuorum validator mengirimkan observasi ini pada ronde ini. Apakah venue yang mendasarinya akurat adalah pertanyaan terpisah, yang dibahas oleh aturan agregasi di halaman [Oracle](/id/protocol/architecture/oracle) dan dibatasi oleh [pengungkapan risiko](/id/protocol/security/risks).
</Warning>

<h2 id="leader-reputation">
  Reputasi leader
</h2>

Leader dipilih ronde demi ronde lewat rotasi berbobot stake yang deterministik, diperluas dengan heuristik reputasi atas jendela bergerak. Validator dengan usulan gagal berulang — menandakan ketidaktersediaan atau perilaku adversarial — diturunkan pada pemilihan berikutnya, dan slotnya dibagikan ulang ke validator yang belakangan responsif. Dengan begitu, validator yang tidak tersedia tidak menghambat kemajuan hanya karena mengklaim kepemimpinan atas slot yang ditugaskan kepadanya.

Karena observasi harga menjadi syarat kelayakan mengusulkan, reputasi juga harus menghindari pemusatan kepemimpinan pada validator dengan konektivitas data pasar terbaik. Persyaratan keragaman venue — observasi diambil dari beberapa sumber independen per instrumen — menutup jalur itu.

<h2 id="epochs-and-reconfiguration">
  Epoch dan rekonfigurasi
</h2>

Waktu diorganisasi menjadi epoch. Di dalam satu epoch, himpunan validator dan sebagian besar parameter bersifat tetap. Pada batas epoch, keduanya dapat berubah lewat rekonfigurasi yang diotorisasi tata kelola: perubahan himpunan validator, perubahan parameter konsensus, pembaruan parameter risiko, dan tindakan darurat. Transisinya atomik — setiap validator jujur melihat transisi yang sama pada tinggi blok yang sama.

<h2 id="network-topology">
  Topologi jaringan
</h2>

<div className="dg" data-dg="bft-round">
  <div className="dg-c" style={{aspectRatio:"720 / 318"}}>
    <svg className="dg-w" viewBox="0 0 720 318" aria-hidden="true">
      <path className="dg-rule dg-dash" d="M 90 40 L 90 266" />

      <path className="dg-rule dg-dash" d="M 360 40 L 360 266" />

      <path className="dg-rule dg-dash" d="M 630 40 L 630 266" />

      <path className="dg-wire dg--blue" d="M 94.00 64.00 L 349.60 64.00" />

      <path className="dg-head dg--blue" d="M 356.00 64.00 L 349.60 68.40 L 349.60 59.60 Z" />

      <path className="dg-wire dg--sky" d="M 364.00 92.00 L 414.00 92.00 L 414.00 114.00 L 374.40 114.00" />

      <path className="dg-head dg--sky" d="M 368.00 114.00 L 374.40 109.60 L 374.40 118.40 Z" />

      <path className="dg-wire dg--sky dg-dash" d="M 356.00 146.00 L 100.40 146.00" />

      <path className="dg-head dg--sky" d="M 94.00 146.00 L 100.40 141.60 L 100.40 150.40 Z" />

      <path className="dg-wire dg--blue" d="M 94.00 218.00 L 349.60 218.00" />

      <path className="dg-head dg--blue" d="M 356.00 218.00 L 349.60 222.40 L 349.60 213.60 Z" />

      <path className="dg-wire dg--green dg-dash" d="M 364.00 254.00 L 619.60 254.00" />

      <path className="dg-head dg--green" d="M 626.00 254.00 L 619.60 258.40 L 619.60 249.60 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"2.2222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Leader</span></div>
    <div className="dg-b dg--sky" style={{left:"39.7222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Validator</span></div>
    <div className="dg-b dg--green" style={{left:"77.2222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Chain</span></div>
    <div className="dg-b dg-dashed dg-tight dg-solid" style={{left:"14.4444%",top:"52.2013%",width:"33.6111%",height:"8.1761%"}}><span className="dg-s">Agregat berbobot stake 2f+1</span></div>
    <div className="dg-b dg--green" style={{left:"68.8889%",top:"86.7925%",width:"31.1111%",height:"11.9497%"}}><span className="dg-s">Urutan dan harga kini tak dapat diubah</span></div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"15.0943%",width:"34.4444%",whiteSpace:"normal"}}>Usulkan blok — digest batch dan harga tersertifikasi</div>
    <div className="dg-lbl" style={{left:"72.7778%",top:"32.3899%",width:"26.3889%",whiteSpace:"normal"}}>Verifikasi ketersediaan, urutan, harga</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"40.8805%"}}>Suara</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"63.5220%"}}>Sertifikasi ronde</div>
    <div className="dg-lbl" style={{left:"68.7500%",top:"74.8428%"}}>Komit</div>
  </div>
</div>

**Validator** ikut serta dalam konsensus. Masing-masing menjalankan tumpukan penuh: konsensus, mempool, sidecar oracle, eksekusi kernel, dan penyimpanan. Merekalah satu-satunya peserta yang memberi suara.

**Full node validator** berada tepat di belakang validator. Mereka mengikuti blok yang dikomit dan mengeksekusinya, tetapi tidak memberi suara. Tujuannya adalah pelindung — mereka menyerap lalu lintas baca publik dan koneksi peer agar validator tidak terpapar langsung ke internet terbuka.

**Full node publik** adalah lapisan terbuka. Siapa pun bisa menjalankannya. Mereka mengikuti chain, mengeksekusi blok yang dikomit, melayani pembacaan, dan memasok sistem di hilir.

**Klien** — front end, agen trading, market maker, indexer — terhubung ke full node, bukan ke validator. Klien yang butuh pandangan terlengkap dengan latensi terendah menjalankan full node-nya sendiri alih-alih bergantung pada milik orang lain.

Node yang bergabung ke jaringan secara bawaan tidak me-replay chain dari genesis; lihat [sinkronisasi state](/id/protocol/architecture/state/sync) untuk cara node baru mengejar ketertinggalan.

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

<CardGroup cols={2}>
  <Card title="Mempool" href="/id/protocol/architecture/mempool">
    Apa yang sampai ke konsensus, dalam urutan apa, dan apa yang dibuang.
  </Card>

  <Card title="IntentionKernel" href="/id/protocol/architecture/kernel">
    Apa yang terjadi pada blok setelah urutan dan harganya dikomit.
  </Card>

  <Card title="Oracle" href="/id/protocol/architecture/oracle">
    Bagaimana harga indeks dihasilkan sebelum validator menandatanganinya.
  </Card>

  <Card title="Menjalankan node" href="/id/developers/run-a-node">
    Mengapa himpunan validator tertutup, dan bagaimana menanyakan cara bergabung.
  </Card>
</CardGroup>
