Compact Block Filters adalah ringkasan kecil isi blok Bitcoin. Dompet mengunduhnya lalu memeriksa pada perangkat sendiri blok mana yang mungkin memuat pembayarannya. Barulah blok tersebut diminta secara utuh. Cara ini menghemat data dan lebih sedikit mengungkap sasaran pencarian. Namun, kecocokan filter bukan bukti pembayaran dan tidak menggantikan pemeriksaan lengkap aturan Bitcoin.
Anna menunggu pembayaran di dompet ponselnya. Dompet adalah aplikasi atau perangkat untuk menerima dan mengirim bitcoin. Blok adalah kumpulan transaksi, tetapi ponsel tidak harus mengunduh setiap kumpulan secara utuh. Ia bisa lebih dahulu memeriksa filter kecil, seperti mencari halaman lewat indeks buku. Untuk blok dan jenis filter yang sama, semua pengguna mendapat ringkasan yang sama; pemilihan hal yang menyangkut Anna dilakukan di ponselnya. Dokumen teknis BIP 157 dan BIP 158 membagi tugas: yang pertama mengatur pengambilan serta pemeriksaan filter, yang kedua isi dan pembuatannya. Dompet terlebih dahulu memverifikasi header blok, yaitu catatan dasar yang menghubungkan blok menjadi rantai. Setelah itu ia mengambil data pemeriksaan filter dan filternya. Jika cocok, dompet mengunduh blok lengkap dan mencari transaksi sebenarnya. Compact Blocks dalam BIP 152 memiliki nama serupa, tetapi menyelesaikan masalah berbeda: meneruskan blok baru dengan cepat antarnode. Node adalah perangkat lunak yang memeriksa transaksi dan blok serta berkomunikasi dengan peserta jaringan lainnya. [1] [2] [5] [6]
Transaksi Bitcoin membuat output: nilai beserta syarat untuk membelanjakannya nanti. Kode syarat itu disebut scriptPubKey. Input transaksi baru menunjuk ke output terdahulu yang dibelanjakan. Karena itu filter basic dengan penanda 0x00 memuat skrip output baru sekaligus skrip output terdahulu yang dibelanjakan dalam blok. Anna dapat mencari penerimaan maupun pengeluaran. Skrip output baru yang diawali OP_RETURN dikecualikan; instruksi ini menjadikan output tidak dapat dibelanjakan. Input khusus transaksi coinbase juga dikecualikan, sebab transaksi itu mengalokasikan imbalan penambang tanpa membelanjakan output terdahulu. Elemen kosong dibuang dan elemen berulang hanya dihitung sekali. Ini bukan daftar semua pengenal transaksi txid, teks alamat atau data witness seperti tanda tangan. Untuk membuat filter yang benar, dibutuhkan pula output terdahulu yang dibelanjakan, bukan hanya blok baru. [2]
Server dapat mengirim ringkasan kepada Anna yang sengaja menghilangkan pembayarannya. Karena itu dompet juga memeriksa hubungan dengan filter sebelumnya. Hash adalah sidik jari digital singkat suatu data. Menerapkan SHA-256 dua kali pada filter tersimpan menghasilkan double-SHA256-nya. Sidik jari itu digabungkan dengan header filter sebelumnya, lalu di-hash dengan cara sama untuk membentuk header berikutnya. Mengubah filter lama pun mengubah data pemeriksaan setelahnya. Namun, header blok yang dilindungi penambangan tidak memuat hash rantai filter tambahan ini. Jika semua server memberikan rantai palsu yang sama, sidik jarinya masih dapat cocok sempurna. Konsistensi matematis saja tidak membuktikan ringkasan sesuai dengan blok sebenarnya. [1]
Karena itu BIP 157 menyarankan sambungan ke beberapa node independen, disebut peers dalam pertukaran ini. Sambungan aman ke node tepercaya, misalnya node sendiri, menjadi alternatif. Jika rantai filter berbeda, dompet mencari titik pertentangan pertama. Ia dapat membangun ulang filter yang benar dari blok tersebut dan output terdahulu yang diperlukan. Jaminan mengenali filter benar mengasumsikan setidaknya satu peer jujur; beberapa sambungan ke penyerang yang sama tidak memenuhi syarat. Rantai itu sendiri juga dapat berubah: saat reorganisasi, node mengganti sebagian ujungnya dengan cabang yang memiliki lebih banyak akumulasi kerja terbukti. Dompet harus mengikuti filter cabang itu dan menilai ulang pembayaran terdampak. Konfirmasi yang pernah ditemukan tetap bergantung pada rantai yang diterima jaringan. [1] [2]
Dalam pendekatan BIP 37 yang lebih lama, dompet mengirim filter pribadi mengenai data yang ingin dipantau kepada server. Compact Block Filters membalik proses: dompet mengunduh data umum lalu memilih yang relevan pada perangkat sendiri. Ini membatasi bocornya informasi tentang skrip yang dipantau. Penyedia tetap melihat blok lengkap mana yang Anna minta kemudian dan dapat menghubungkannya dengan alamat IP, yaitu alamat jaringan koneksinya. Kunjungan berulang dapat mengungkap pola lain. BIP 157 menyarankan pemilihan sumber blok lengkap secara acak dari node yang sudah dihubungi oleh dompet. Blok dapat berasal dari node berbeda dengan penyedia filternya. Privasi membaik, tetapi anonimitas tidak terjamin. [1]
Filter menjelaskan blok yang sudah masuk ke rantai. Filter tidak mencakup Mempool saat ini, yaitu transaksi belum terkonfirmasi yang disimpan node tertentu untuk diteruskan atau ditambang. Kecocokan juga tidak membuktikan Anna memiliki kunci untuk membelanjakan dana yang ditemukan. Kunci privat adalah nilai angka rahasia yang dipakai dompet untuk membuat tanda tangan digital yang mengizinkan pembelanjaan dana. Dompet perlu memeriksa transaksi sebenarnya dan penyertaannya dalam blok. Meski begitu, klien ringan tidak memeriksa setiap transaksi dalam setiap blok terhadap semua aturan seperti Full Node. Penghematan sumber daya berarti kompromi keamanan yang nyata. Ketersediaan data adalah persoalan berbeda: Pruned Node dapat menghapus blok lama setelah memverifikasinya sambil menyimpan filter. Anna memperoleh ringkasan, tetapi harus mengambil blok lama lengkap dari tempat lain. Pemangkasan data saja tidak berarti node berhenti memverifikasi aturan secara penuh. [1] [5]
Ukuran kecil memiliki konsekuensi: filter dapat menjawab “mungkin ada” meskipun elemen yang dicari tidak ada dalam blok. Inilah false positive, atau kecocokan keliru. Anna lalu mengunduh blok tanpa perlu, tetapi dompet tidak menemukan pembayaran yang dikira ada dan tidak boleh menghitungnya. Filter yang benar tidak melewatkan elemen yang memang dicakup aturannya; sifat itu tidak menjadikan data karangan server tidak jujur dapat dipercaya. Secara teknis, SipHash-2-4 mengubah elemen menjadi angka dalam rentang berukuran N × M, dengan N sebagai jumlah elemen. Angka diurutkan dan selisihnya disimpan secara ringkas menggunakan pengodean Golomb-Rice. P=19 mengatur pengodean; M=784931 memengaruhi kecocokan acak, dengan peluang sekitar 1/M untuk satu kueri di luar himpunan. Byte adalah satuan umum untuk ukuran data. Kunci SipHash adalah 16 byte pertama hash blok dalam urutan little-endian, yaitu byte yang kurang signifikan lebih dahulu. Ini bukan kunci rahasia dompet. Di sini SipHash mengubah elemen menjadi angka untuk filter, bukan mengenkripsinya. Filter tersimpan diawali N dalam format CompactSize untuk bilangan bulat nonnegatif. [2]
Pada peninjauan 2026-10-17, kedua dokumen berstatus Deployed: protokol telah digunakan, bukan berarti semua dompet mendukungnya. Contoh konfigurasi ini khusus untuk Bitcoin Core 29.0. -blockfilterindex membangun indeks lokal. Melayani node lain membutuhkan -peerblockfilters dan indeks basic; NODE_COMPACT_FILTERS mengumumkan dukungan tersebut. Antarmuka pemrograman RPC menyediakan getblockfilter, yang mengembalikan bidang filter dan header untuk blok pilihan. RPC yang berfungsi saja tidak membuktikan node lain bisa mendapatkan filter lewat jaringan. Bagi pembaca spesifikasi: getcfilters/cfilter membawa filter, getcfheaders/cfheaders membawa data penghubung, dan getcfcheckpt/cfcheckpt menyediakan titik pemeriksaan rantai tambahan ini. Itu nama pesan jaringan, bukan perintah yang harus diketik pengguna dompet ponsel. [3] [4]
Untuk gambaran yang lebih utuh, baca entri ini bersama Neutrino, Full Node, Pruned Node, Privasi Bitcoin, Compact Blocks, Mempool. Entri ini juga dirujuk dari Compact Block Filters, Neutrino.