38 / 6912X

Pembelanjaan ganda

Upaya pembelanjaan ganda menggunakan dua atau lebih transaksi Bitcoin yang saling bertentangan yang membelanjakan setidaknya satu UTXO yang sama pada riwayat yang tidak kompatibel satu sama lain. Node tidak membaca saldo apa pun dua kali: mereka memeriksa input terhadap UTXO mereka dan tampilan mempool serta bukti kerja memutuskan riwayat valid mana yang bertahan.

Konflik dapat diamati bahkan sebelum penyelesaian, namun pembelanjaan ganda yang berhasil hanya terjadi ketika korban membelanjakan nilai untuk satu transaksi dan pihak lain menang dalam rantai yang diterima. Oleh karena itu, pembayaran dompet yang diganti, kenaikan biaya yang tidak disengaja, atau konflik yang gagal tidak secara otomatis merupakan penipuan. Perlombaan zero-conf dan penimpaan blok yang dilakukan memiliki biaya dan risiko yang berbeda secara mendasar.

Setiap masukan mengacu pada keluaran sebelumnya menggunakan txid dan indeks. Dua transaksi berada dalam konflik ketika setidaknya satu input mengacu pada titik keluar yang sama dan tidak terpakai, namun mereka tidak dapat membayar pada saat yang sama. Saat memvalidasi sebuah blok, node memeriksa apakah input tersebut ada dan belum digunakan sebelumnya dalam riwayat tertentu atau di tempat lain di blok yang sama. Hanya satu cabang yang bertahan dalam set UTXO yang valid; serangan tersebut tidak menghasilkan salinan satoshi, ia mencoba membuat penerima bertindak pada cabang yang kalah. [Laporan resmi Bitcoin — Transaksi, Server Stempel Waktu, dan Perhitungan] [Panduan Pengembang Bitcoin — Transaksi] [Bitcoin Core — validation.cpp]

Tidak ada mempool global atau urutan konsensus transaksi yang belum dikomit sebelum penambangan. Rekan-rekan pertama-tama dapat melihat berbagai konflik karena promosi, topologi, kebijakan biaya, status paket, atau isolasi gerhana. Yang pertama dilihat adalah kebijakan relai, bukan kewajiban penambang untuk mengonfirmasi opsi pertama. Txid di backend pedagang hanya membuktikan bahwa satu kandidat yang ditandatangani telah tiba, bukan seluruh jaringan telah melihatnya atau memenangkan satu blok. [Panduan Pengembang Bitcoin — Pemrosesan Pembayaran] [Bitcoin Core — Penggantian Mempool]

Ganti dengan biaya memungkinkan node untuk mengganti konflik mempool yang memenuhi aturan biaya dan anti-DoS; full-RBF telah menjadi kebijakan default di Bitcoin Core sejak versi 28. Pengirim dapat secara sah meningkatkan biaya pembayaran yang macet dan mempertahankan keluaran penerima, atau mengalihkan nilainya. Dalam kedua kasus tersebut, konsensus melihat kandidat yang sama dan menerima varian dalam sejarah penambangan yang valid. Sinyal RBF, penggantian, atau benjolan saja tidak membuktikan penipuan; transaksi tanpa sinyal sekali lagi tidak aman untuk zero-conf. [Bitcoin Core — Penggantian Mempool] [BIP 125 — Ikut serta Penggantian Penuh dengan Biaya]

Dalam serangan ras, pembayar mengirimkan satu transaksi ke pedagang dan konflik ke penambang atau rekan lainnya, sehingga pedagang mengeluarkan barang yang tidak dapat dikembalikan sebelum blok memilih satu opsi. Hasilnya tergantung pada promosi, tampilan jaringan pedagang, pilihan penambang, dan waktu transfer. Pendengar yang lebih mandiri akan meningkatkan deteksi, namun tidak akan menciptakan finalitas deterministik. Nama ras, Finney, dan Vector76 adalah model skenario, bukan susunan transaksi atau berbagai aturan konsensus. [Panduan Pengembang Bitcoin — Pemrosesan Pembayaran] [Karam dkk. — Perilaku buruk dalam Bitcoin]

Penyerang gaya Finney dengan kemampuan menambang secara pribadi pertama-tama menemukan blok yang berisi konflik mengembalikan nilai kepadanya, kemudian membayar pedagang zero-conf dengan UTXO yang sama, dan menerbitkan blok tersembunyi setelah menerima barang. Rencana tersebut hanya berhasil jika blok tersebut tetap dapat digunakan dan diterima oleh jaringan sebelum blok saingan yang jujur ​​menggagalkan persiapannya; penyerang mempertaruhkan hadiah blok dan biaya penambangan. Menunggu transaksi pedagang untuk dimasukkan dalam blok terverifikasi mengakhiri urutan klasik, namun tidak menghilangkan risiko penataan ulang di kemudian hari. [Laporan resmi Bitcoin — Transaksi, Server Stempel Waktu, dan Perhitungan] [Karame dkk. — Perilaku buruk dalam Bitcoin]

Setelah dikonfirmasi, konflik tidak bisa lagi mendorong pembayaran keluar dari mempool: cabang alternatif yang valid harus melewati pembayaran, memasukkan pembelanjaan kedua, dan mendapatkan lebih banyak rantai daripada rantai aktif penerima. Reorganisasi dapat terjadi bahkan tanpa penipuan dalam blok yang hampir bersamaan atau insiden perangkat lunak atau jaringan; pembelanjaan ganda yang berhasil terhadap korban hanya untuk mendapatkan nilai dengan memenangkan konflik. Bitcoin Core dapat menampilkan konfirmasi negatif dan konflik dompet untuk transaksi dompet yang hilang. [Bitcoin Core — Validasi] [Bitcoin Core — validation.cpp] [Bitcoin Core RPC — gettransaction]

Pembagian hashrate penyerang, kedalaman konfirmasi, dan nilai yang dapat diperoleh menentukan ras stochastic dari pekerjaan pribadi dan jujur. Di bawah 50% bukan berarti peluangnya nol; mayoritas permanen secara signifikan meningkatkan kemungkinan untuk mengejar ketertinggalan, namun hal ini tidak memungkinkan penambang untuk memalsukan tanda tangan, membelanjakan UTXO asing, melampaui penerbitan, atau memaksa node penuh untuk menerima blok yang tidak valid. Biaya termasuk hashpower, energi, hilangnya imbalan jujur, risiko kerugian, likuiditas dan eksposur; Pendapatan juga dapat mencakup posisi pasar, sehingga harga sewa mesin saja tidak cukup. [Laporan resmi Bitcoin — Transaksi, Server Stempel Waktu, dan Perhitungan] [Rosenfeld — Analisis Pembelanjaan Ganda Berbasis Hashrate] [Garay, Kiayias, dan Leonardos — Protokol Tulang Punggung Bitcoin]

Setiap penerapan tambahan memaksa cabang alternatif untuk mengulang lebih banyak simpanan dan, berdasarkan asumsi, mengurangi kemungkinan keberhasilan. Tidak ada nomor aman universal: kopi, mobil, deposit bursa, dan penarikan yang tidak dapat dikembalikan menunjukkan nilai, motivasi, dan kemungkinan koreksi yang berbeda. Enam afirmasi yang sering dikutip adalah sebuah konvensi, bukan konsensus. Kebijakan tersebut juga harus memantau distribusi hashrate, pengaturan ulang yang tidak biasa, kepercayaan pada backend, risiko gerhana, dan kemampuan serah terima yang dapat dibalik. [Panduan Pengembang Bitcoin — Pemrosesan Pembayaran] [Rosenfeld — Analisis Pembelanjaan Ganda Berbasis Hashrate]

Backend dapat memantau pembelanjaan mempool yang bertentangan pada node penuhnya sendiri, memanggil gettxspendingprevout, membaca konflik dompet, membandingkan tip aktif dan memperingatkan tentang hilangnya konfirmasi. Lebih banyak node peers atau independen mengurangi titik buta, namun tidak adanya konflik yang terdeteksi merupakan bukti lemah: penyerang dapat mencegatnya atau mengirimkannya ke tempat lain. Explorer menampilkan tampilan simpul khusus dan mungkin tertunda. Deteksi memungkinkan untuk menghentikan pengeluaran; ia tidak dapat memerintahkan penambang untuk menang atau mengubah zero-conf menjadi konfirmasi. [RPC Inti Bitcoin — dapatkantransaksi] [RPC Inti Bitcoin — gettxspendingprevout] [Karame dkk. — Perilaku buruk dalam Bitcoin]

Untuk penyelesaian onchain, validasi dengan node penuh Anda sendiri, ikat pesanan dengan txid, output dan jumlah yang tepat, atur kedalaman sesuai dengan kemungkinan kerugian, jika terjadi reorganisasi atau konflik, hentikan pemenuhan dan pisahkan saldo yang dikreditkan dari jumlah yang dapat ditarik. Jangan perlakukan keturunan perubahan yang belum dikonfirmasi sebagai keturunan yang independen dari induknya. Lightning menangani pembayaran berulang yang cepat secara berbeda: titik pendanaan yang dikonfirmasi menjadi jangkar saluran dan aturan komitmen/pencabutan mengontrol status offchain; saluran zero-conf secara sadar memercayai pemberi dana dan tidak menghilangkan risiko pembelanjaan ganda pendanaan. [BOLT 2 — Protokol Sejawat] [Bitcoin Optech — Saluran tanpa konferensi]

Untuk gambaran yang lebih utuh, baca entri ini bersama Transaksi, Konfirmasi, Mempool, Proof of Work, Replace-by-Fee (RBF), Bitcoin. Entri ini juga dirujuk dari Konfirmasi, Reorg, Stale Block, Replace-by-Fee (RBF).

DOC · 001Bitcoin whitepaper — Transactions, Timestamp Server and CalculationsDokumentasi ↗DOC · 002Bitcoin Developer Guide — Payment ProcessingDokumentasi ↗DOC · 003Bitcoin Developer Guide — TransactionsDokumentasi ↗DOC · 004Bitcoin Core — ValidationDokumentasi ↗DOC · 005Bitcoin Core — Mempool ReplacementsDokumentasi ↗DOC · 006BIP 125 — Opt-in Full Replace-by-FeeSpesifikasi ↗DOC · 007Bitcoin Core — validation.cppDokumentasi ↗DOC · 008Bitcoin Core RPC — gettransactionDokumentasi ↗DOC · 009Bitcoin Core RPC — gettxspendingprevoutDokumentasi ↗DOC · 010Rosenfeld — Analysis of Hashrate-Based Double SpendingDokumentasi ↗DOC · 011Karame et al. — Misbehavior in BitcoinDokumentasi ↗DOC · 012Garay, Kiayias and Leonardos — The Bitcoin Backbone ProtocolDokumentasi ↗DOC · 013BOLT 2 — Peer ProtocolSpesifikasi ↗DOC · 014Bitcoin Optech — Zero-conf channelsDokumentasi ↗
Ditinjau 1 Agustus 2026Utamakan sumber · Bukan nasihat investasi