52 / 736BIP125

Replace-by-Fee (RBF)

Mengganti transaksi belum terkonfirmasi dengan versi berbiaya lebih tinggi

Replace-by-Fee (RBF) memungkinkan transaksi Bitcoin yang masih menunggu diganti dengan transaksi berbiaya lebih tinggi. Dompet dapat memakainya untuk membantu pembayaran yang belum masuk blok; pembayaran yang sudah terkonfirmasi tidak bisa dibatalkan dengan cara ini.

Mengirim pembayaran belum berarti pembayaran itu terkonfirmasi. Sebelum penambang memasukkannya ke blok, node, yaitu program yang memeriksa dan meneruskan transaksi Bitcoin, dapat menyimpannya dalam Mempool, daftar transaksi tertunda milik masing-masing node. Dalam kondisi tertentu, RBF mengizinkan node menerima transaksi baru sebagai gantinya, dengan membelanjakan setidaknya satu UTXO yang sama, yaitu output yang belum dibelanjakan. Pengganti harus memiliki tanda tangan yang sah dan dikirim ke jaringan; biaya yang lebih tinggi saja tidak menjamin konfirmasi cepat.

Anna mengirim 20.000 sat, tetapi pembayarannya masih menunggu. Singkatan sat berarti satoshi, satuan terkecil bitcoin. Dompetnya menawarkan kenaikan biaya lewat RBF. Dalam contoh sederhana, transaksi awal membelanjakan 50.000 sat: 20.000 sat untuk penerima, 200 sat untuk biaya, dan 29.800 sat kembali kepada Anna sebagai kembalian. Pengganti tetap dapat membayar penerima 20.000 sat, menaikkan biaya menjadi 2.000 sat, dan mengembalikan 28.000 sat kepada Anna. Angka ini menjelaskan mekanisme, bukan rekomendasi biaya saat ini. Sebelum menandatangani, Anna memeriksa alamat, jumlah yang diterima penerima, dan biaya total baru. Dompet harus dapat menandatangani input yang diperlukan; dompet perangkat keras mungkin perlu dihubungkan lagi. Pengganti memiliki txid baru, yaitu pengenal transaksinya, sehingga penerima mungkin memerlukan tautan pelacakan baru. Menaikkan biaya berbeda dari membuat pembayaran kedua yang berdiri sendiri dengan UTXO lain: kedua pembayaran terpisah itu bisa terkonfirmasi dan kamu membayar dua kali. [1] [2] [12]

Dompet dapat menampilkan dana masuk sebelum konfirmasi pertama. Ini disebut zero-conf: pembayaran sudah terlihat, tetapi belum berada dalam blok. Versi lain mungkin terkonfirmasi lebih dahulu dan dana masuk yang ditampilkan bisa menghilang. Jadi, label ‘RBF dinonaktifkan’ tidak membuktikan pembayaran sudah aman. Menyerahkan barang untuk pembayaran tanpa konfirmasi berarti secara sadar mengambil risiko usaha. Setelah transaksi masuk blok, RBF tidak dapat menulis ulang transaksi tersebut. Kemungkinan reorganisasi rantai adalah risiko berbeda, sehingga pembayaran bernilai lebih besar biasanya menunggu lebih banyak konfirmasi. [1]

RBF sendiri tidak mewajibkan penerima awal tetap sama. Pengganti dapat menaikkan biaya sambil membayar orang yang sama, atau mengirim dana ke tempat lain. Kedua versi mencoba membelanjakan UTXO yang sama: secara teknis ini percobaan yang berkonflik, atau Double Spend. Istilah itu sendiri belum menentukan apakah terjadi penipuan. Namun, penyerang tidak bisa sembarang menandatangani pembayaran orang lain: pengganti tetap harus memenuhi syarat pembelanjaan, termasuk tanda tangan yang diperlukan. Jika dompet menawarkan ‘pembatalan’ dengan mengganti pembayaran menjadi pembayaran kepada diri sendiri, itu upaya mendahului transaksi awal, bukan pembatalan yang terjamin. [1]

RBF mengubah transaksi tertunda itu sendiri. Child Pays for Parent (CPFP) mempertahankan transaksi awal dan membuat transaksi baru yang membelanjakan salah satu outputnya. Untuk memperoleh biaya transaksi baru, penambang harus memasukkan transaksi awal juga, sehingga dapat menilai tarif gabungan keduanya. Transaksi baru disebut anak dan transaksi awal disebut induk. Siapa pun yang dapat membelanjakan output terkait dapat membuatnya, misalnya penerima pembayaran atau pengirim yang memakai kembaliannya. Dukungan dompet, tanda tangan yang diperlukan, dan hubungan antartransaksi menentukan kemungkinannya. CPFP tidak mengganti pembayaran awal dan juga tidak menjamin waktu konfirmasi. [2]

Mempool bukan satu antrean bersama untuk seluruh Bitcoin. Setiap node memiliki daftar dan aturan sendiri untuk menerima serta meneruskan transaksi tertunda. RBF termasuk kebijakan lokal ini, bukan konsensus yang menentukan keabsahan blok. Karena itu, penambang dapat memilih transaksi konflik yang sah meskipun node lain sebelumnya tidak menyimpannya. Full Node kemudian memeriksa seluruh blok menurut aturan Bitcoin; pilihan mempool sebelumnya tidak menentukan hasilnya. Diterimanya pengganti oleh satu node tidak menjanjikan penerimaan di semua node. [1] [6]

Pengguna perlu membedakan dua angka: biaya total dan tarif yang ditawarkan berdasarkan ukuran transaksi. Pada ukuran contoh 200 vB, 200 sat berarti 1 sat/vB; dengan ukuran sama, 2.000 sat berarti 10 sat/vB. Byte virtual, vB, adalah satuan ukuran yang diturunkan dari bobot transaksi. Penyusunan ulang bisa mengubah ukurannya, sehingga dompet harus menghitung ulang tarif juga. Biaya total adalah jumlah satoshi; tarif biaya adalah jumlah per byte virtual dalam sat/vB. Untuk penggantian tunggal Core 30, biaya harus menutup jumlah biaya seluruh transaksi yang dikeluarkan, ditambah biaya menurut incrementalrelayfee untuk ukuran pengganti. Tarifnya harus melampaui tarif transaksi yang berkonflik langsung. Tarif lebih tinggi saja atau sekadar menambah satoshi tidak cukup; incrementalrelayfee bawaan Core 30 adalah 0,1 sat/vB, tetapi pengaturan node dapat berbeda. [2] [9]

Pembayaran tertunda berikutnya mungkin sudah bergantung pada pembayaran pertama: seseorang membelanjakan output dari transaksi pertama yang belum terkonfirmasi. Transaksi lanjutan ini disebut turunan. Jika induknya dihapus, turunannya juga tidak dapat digunakan dalam mempool, sehingga node harus mempertimbangkan seluruh kelompok yang terdampak. Mengganti transaksi induk dapat mengeluarkan turunannya yang membelanjakan output induk dari mempool. Jadi perbandingan tidak selalu hanya dua transaksi. Untuk penggantian tunggal, Core 30 membatasi jumlah hitungan turunan transaksi yang berkonflik langsung, termasuk masing-masing transaksi itu sendiri, hingga 100; turunan bersama bisa dihitung lebih dari sekali. Biaya dan hubungan paket dapat memengaruhi keberhasilan penggantian. [2]

Node juga harus mencegah seseorang membebaninya dengan perhitungan pengganti yang terus berulang. Inilah perlindungan terhadap DoS, serangan pada ketersediaan layanan. UTXO adalah output transaksi sebelumnya yang belum dibelanjakan; input transaksi baru merujuk kepadanya. Aturan berikut secara khusus menjelaskan Bitcoin Core 30, bukan hukum Bitcoin yang tidak dapat berubah. Kebijakan Bitcoin Core 30 untuk satu transaksi pengganti juga membatasi input baru belum terkonfirmasi dan jumlah transaksi yang dikeluarkan. Pengganti harus memenuhi aturan lokal tentang bentuk transaksi yang diterima (standardness), aturan penerusan, dan aturan keabsahan, bukan sekadar membelanjakan UTXO yang sama. Batas melindungi kapasitas pemrosesan, memori, dan bandwidth; aturan penggantian paket harus dinilai terpisah sesuai versi node. Core 31 mengubah kebijakan ini dengan Cluster Mempool, yang menilai transaksi tertunda yang saling terhubung sebagai kelompok. Penggantian harus memperbaiki feerate diagram, yaitu grafik yang membandingkan akumulasi biaya dengan ruang yang ditempati secara bertahap. Syarat lain tetap berlaku, termasuk total biaya yang cukup dan biaya tambahan untuk meneruskan transaksi pengganti. Karena itu, jangan langsung menerapkan batas Core 30 di atas pada versi lebih baru; periksa aturan node yang kamu gunakan. [2] [13]

Mengapa beberapa dompet masih menampilkan sakelar RBF? Node yang menerapkan kebijakan opt-in RBF awal memerlukan sinyal persetujuan penggantian sebelumnya. Bitcoin Core 24 membuat full-RBF dapat dikonfigurasi tanpa syarat itu, Core 28 mengaktifkannya secara bawaan, dan Core 29 menghapus sakelar mempoolfullrbf. Rincian BIP125 berikut menjelaskan sinyal awal tersebut, bukan aturan universal semua node saat ini. BIP125 menjelaskan sinyal opt-in eksplisit jika setidaknya satu input memiliki nSequence di bawah 0xfffffffe, serta pewarisan sinyal dari leluhur belum terkonfirmasi. Ini kebijakan historis, bukan syarat konsensus. Full-RBF memungkinkan penilaian pengganti tanpa sinyal tersebut; ketiadaannya tidak menjamin pembayaran tak bisa diganti. [1] [3] [4] [5] [6]

Bagian ini ditujukan untuk penggunaan node sendiri. RPC adalah perintah untuk meminta data atau mengendalikan perangkat lunak; kamu tidak perlu mengetahuinya untuk memakai tombol kenaikan biaya. getmempoolentry menampilkan keadaan transaksi yang ada dalam mempool node tersebut; testmempoolaccept menguji satu calon pengganti bertanda tangan terhadap mempool dan aturan node saat ini tanpa menyiarkannya. Hasil tidak menjanjikan penerimaan node lain atau penambangan. Core 28 mengaktifkan full-RBF lewat setelan bawaan mempoolfullrbf; Core 29 menghapus opsi itu. getmempoolinfo memberikan parameter biaya, tetapi kolom fullrbf ditandai usang dalam Core 30; selalu periksa versi dan konfigurasi sebenarnya. [5] [6] [7] [8] [10] [11]

Untuk gambaran yang lebih utuh, baca entri ini bersama Transaction Fees, Mempool, CPFP (Child Pays for Parent), Pembelanjaan ganda, Konfirmasi, Fee Rate. Entri ini juga dirujuk dari Change Address, Konfirmasi, Pembelanjaan ganda, Fee Rate.

DOC · 001BIP 125 — Opt-in Full Replace-by-Fee SignalingSpesifikasi DOC · 002Bitcoin Core v30.0 — Mempool replacement policyDokumentasi DOC · 003Bitcoin Core 0.12.0 release notesDokumentasi DOC · 004Bitcoin Core 24.0.1 release notesDokumentasi DOC · 005Bitcoin Core 28.0 release notesDokumentasi DOC · 006Bitcoin Core 29.0 release notesDokumentasi DOC · 007Bitcoin Core getmempoolinfo RPCDokumentasi DOC · 008Bitcoin Core testmempoolaccept RPCDokumentasi DOC · 009Bitcoin Core 30.0 release notesDokumentasi DOC · 010Bitcoin Core getmempoolentry RPCDokumentasi DOC · 011Bitcoin Core v30.0 — Mempool RPC implementationSumber primer DOC · 012Bitcoin Core 30.0 — bumpfee RPCDokumentasi DOC · 013Bitcoin Core v31.0 — Mempool replacement policyDokumentasi
Direvisi: Utamakan sumber · Bukan nasihat investasi