Bayangkan seseorang mengirim bitcoin kepadamu dengan biaya rendah dan pembayarannya belum terkonfirmasi. Jika dompetmu mendukung CPFP untuk pembayaran itu, kamu bisa membuat transaksi lanjutan, misalnya ke alamatmu sendiri yang lain. Transaksi awal disebut induk dan yang baru disebut anak: anak membelanjakan output yang dibuat oleh transaksi induk, yakni sejumlah dana beserta syarat pembelanjaannya. Untuk mendapatkan biaya anak, penambang juga membutuhkan induk. Pembayaran awal tetap sama; tawaran biaya lebih besar dapat membantu konfirmasi, tetapi tidak menjamin waktunya.
Anna sedang menunggu 100 000 sat. Singkatan sat berarti satoshi, satuan bitcoin terkecil. Pembayaran sudah terlihat, tetapi pengirim memilih biaya rendah dan transaksinya belum masuk blok. Dompet Anna mengizinkan output yang belum terkonfirmasi itu dibelanjakan. Anna membuat transaksi baru ke alamatnya sendiri dengan biaya lebih tinggi. Ia tidak membayar pengirim atau layanan khusus: ia membayar biaya transaksi Bitcoin biasa. Penambang tidak dapat mengonfirmasi transaksi baru tanpa transaksi awal, karena output yang dibelanjakan tidak ada dalam rantai yang sedang divalidasi. Induk harus sudah terkonfirmasi sebelumnya atau ditempatkan sebelum anak dalam blok yang sama, bersama leluhur lain yang belum terkonfirmasi dan memang diperlukan. Sebaliknya, induk tetap bisa terkonfirmasi tanpa anak. [3] [5]
Ambil contoh sederhana tanpa leluhur lain yang belum terkonfirmasi. Induk berukuran 200 vB dan membayar 200 sat. Byte virtual, vB, adalah ukuran yang diturunkan dari bobot transaksi; sat/vB menunjukkan jumlah satoshi yang ditawarkan per satuan tersebut. Anak berukuran 100 vB dan Anna membayar 2 800 sat untuknya. Jika anak hanya memiliki satu output, dari 100 000 sat yang diterima akan tersisa 97 200 sat. Kedua transaksi bersama-sama membayar 3 000 sat untuk 300 vB, yaitu 10 sat/vB. Anak sendiri menawarkan 28 sat/vB, tetapi penambang juga perlu memasukkan induk yang berbiaya rendah. Melihat angka tinggi milik anak saja mengabaikan ketergantungan ini. Ini contoh perhitungan, bukan rekomendasi tarif hari ini; dompet memeriksa ukuran sebenarnya dan total biaya yang dibutuhkan. Leluhur tambahan yang diperlukan akan mengubah hitungan. Detail lanjutan: saat menerima paket secara lokal, transaksi yang sudah diterima tidak dihitung kembali, dan node, yaitu program yang memeriksa dan meneruskan transaksi, dapat menggunakan biaya yang dimodifikasi. Tarif yang ditampilkan dalam konteks itu belum tentu sama dengan perhitungan gabungan sederhana untuk penambang. Biaya yang dimodifikasi adalah nilai lokal untuk pengambilan keputusan node; nilai ini tidak mengubah biaya yang benar-benar dibayarkan transaksi. [3]
CPFP bukan tombol yang memungkinkan siapa saja mempercepat transaksi orang lain. Kamu harus berwenang membelanjakan salah satu output induk dan memenuhi syaratnya, termasuk tanda tangan. Anna bisa melakukannya sebagai penerima; pengirim mungkin dapat memakai output yang mengembalikan sisa dananya, disebut change. Sekadar melihat jumlah dana di penjelajah atau Watch-only Wallet tidak cukup. Watch-only Wallet digunakan untuk memantau pembayaran, tetapi tidak menyimpan kunci privat yang diperlukan untuk membelanjakan dana. Dompet juga harus mendukung pembelanjaan output yang belum terkonfirmasi. Sebelum menandatangani, periksa output mana yang dibelanjakan, ke mana dana dikirim, berapa sisanya, dan berapa total biayanya. Jika output kecil, biaya dapat menghabiskan bagian besar dari nilainya. [5]
Replace-by-Fee (RBF) membuat transaksi baru yang berkonflik untuk mengganti transaksi awal. Keduanya membelanjakan setidaknya satu input yang sama, tetapi keseluruhan kumpulan input tidak harus identik. CPFP mempertahankan pembayaran awal beserta pengenalnya dan menambahkan transaksi lain. RBF membutuhkan pemenuhan syarat input transaksi pengganti; CPFP biasa membutuhkan pemenuhan syarat output pembayaran awal. Karena itu, penerima mungkin bisa memakai CPFP meskipun tidak bisa menandatangani penggantian milik pengirim. Mengirim pembayaran lain yang tidak terkait dengan biaya tinggi tidak membantu: anak harus benar-benar bergantung pada pembayaran yang tertunda. [3]
Tarif gabungan yang lebih tinggi memberi penambang alasan lebih kuat untuk mengambil kedua transaksi, tetapi tidak memesan tempat di blok berikutnya. Transaksi dengan biaya lebih tinggi bisa datang, atau paket mungkin tidak sampai ke sebagian penambang. Jadi, pantau konfirmasi pembayaran awal dan anak. Keterangan bahwa node telah menerima transaksi belum berarti konfirmasi dalam blok. Jika pengirim mengganti pembayaran awal melalui RBF, anak yang merujuk output lama tidak dapat otomatis terhubung ke transaksi baru yang berbeda; situasinya perlu dinilai kembali. Membuat anak juga tidak mengubah dana masuk yang belum terkonfirmasi menjadi pembayaran yang terjamin. [3]
Bagian berikut membahas aturan untuk pembaca yang ingin mendalami topik dan menjalankan node sendiri. Mempool adalah daftar transaksi tertunda milik satu node, bukan antrean bersama seluruh jaringan. Paket adalah sekelompok transaksi yang diajukan bersama. Bedakan tiga keputusan: apakah transaksi valid, apakah node menerimanya, dan apakah penambang memilihnya. Konsensus menentukan keabsahan transaksi dan blok. Kebijakan mempool menentukan penerimaan dan penerusan lokal; aturan penambang menentukan pilihan untuk blok kandidat. CPFP tidak mengubah konsensus. Paket yang menguntungkan secara ekonomi dapat melanggar kebijakan lokal, dan penerimaan oleh satu node tidak mengikat node atau penambang lain. [3] [5]
Cara meneruskan induk dan anak bersama terus berkembang. Package CPFP berarti menilai transaksi terkait sebagai sebuah paket. RPC adalah perintah untuk berinteraksi dengan node; minrelaytxfee menyebut tarif minimum node untuk penerusan biasa. TRUC adalah aturan khusus transaksi dengan hubungan leluhur dan keturunan yang dibatasi. Riwayat berikut berlaku untuk versi Bitcoin Core yang disebutkan. Bitcoin Core 26 menambahkan RPC submitpackage dan package CPFP: anak dapat membantu induk di bawah tarif minimum mempool yang dinamis, tetapi saat itu tidak di bawah tarif minimum penerusan. Batasan itu tidak berlaku selamanya. Core 31 mengizinkan induk di bawah minrelaytxfee, termasuk biaya nol, pada penerusan paket satu induk dan satu anak yang didukung, juga untuk transaksi non-TRUC; induk belum terkonfirmasi lainnya dari anak harus sudah berada di mempool. Penerimaan lokal tetap tidak menjamin penyebaran yang sama di seluruh jaringan. [1] [2]
Node tidak bisa menerima jaringan ketergantungan sebesar apa pun. Leluhur dibutuhkan sebelum transaksi lain, sedangkan keturunan membelanjakan output di bagian berikutnya dalam rantai ketergantungan. WU berarti satuan bobot transaksi dan topologi menjelaskan hubungan antartransaksi. Batas teknis ini merupakan kebijakan versi node yang bersangkutan. Batas melindungi memori, sumber daya prosesor, dan bandwidth. Core versi lama membatasi jumlah dan ukuran leluhur serta turunan; Core 31 mengganti batas mempool itu dengan batas cluster yang terhubung. Batas paket terpisah tetap berlaku: dokumentasi Core 31 menetapkan paling banyak 25 transaksi dan bobot total 404000 WU. Bobot bukan ukuran virtual. Topologi salah, konflik, atau pelanggaran aturan lokal tentang bentuk transaksi yang diterima (standardness) dapat menghalangi CPFP meskipun biayanya cukup. [2] [3]
Transaksi tertunda yang saling terkait tidak selalu dapat dinilai secara ekonomi satu per satu. Cluster Mempool memungkinkan node mempertimbangkan kelompok yang terhubung. Cluster adalah seluruh kelompok terhubung; kelompok lebih kecil yang diproses saat pemilihan transaksi disebut chunk. Ini bukan potongan blok yang sudah terkonfirmasi. Bitcoin Core 31 memakai Cluster Mempool: cluster terdiri dari transaksi yang terhubung lewat hubungan induk–anak ke arah mana pun. Batas bawaan per cluster adalah 64 transaksi dan ukuran virtual 101 kB; keduanya dapat dikonfigurasi. Pengurutan memperhitungkan kelompok yang ditambang bersama, disebut chunks, dan tarif biayanya. CPFP carveout terdahulu memberi pengecualian terbatas atas batas turunan; Core 31 menghapusnya, sehingga batas jumlah transaksi cluster tidak dapat dilewati dengan cara ini. [2] [4]
Perintah dalam bagian ini tidak bisa saling menggantikan. Pengujian mungkin hanya menjelaskan hasil; pengajuan paket dapat benar-benar menerima dan meneruskan transaksi bertanda tangan. Kolom vsize menunjukkan ukuran virtual. Dompet biasa dapat menangani detail ini untuk pengguna. Pada Core 31, RPC getmempoolentry menampilkan biaya transaksi yang ada dalam mempool node tersebut, vsize, ketergantungan, dan data chunk; getmempoolcluster menampilkan cluster terkait. RPC testmempoolaccept menjalankan uji lokal tanpa menerima atau menyiarkan; untuk beberapa transaksi, leluhur harus mendahului turunan dan transaksi tidak boleh berkonflik satu sama lain atau dengan mempool. RPC submitpackage benar-benar mengajukan paket yang didukung untuk diterima ke mempool dan diteruskan, bukan sekadar menguji. Periksa hasil setiap transaksi, versi, dan konfigurasi; tidak ada hasil yang menjamin transaksi akan dimasukkan ke dalam blok. [2] [6] [7] [8] [9]
Untuk gambaran yang lebih utuh, baca entri ini bersama Replace-by-Fee (RBF), Transaction Fees, Fee Rate, Mempool, Transaksi, UTXO. Entri ini juga dirujuk dari Change Address, Konfirmasi, Pembelanjaan ganda, Fee Rate.