Tempat belajar Bitcoin Protocol
tanpa batas, dari genesis block
hingga Lightning Network.
Kita semua menggunakan uang setiap hari. Tapi kalau ditanya "apa itu uang?" kebanyakan orang akan terdiam sejenak. Jawaban yang muncul biasanya: kertas di dompet, angka di aplikasi bank, atau koin di laci meja. Semua itu benar. Tapi semua itu juga hanya bentuknya, bukan esensinya.
Uang, pada dasarnya, adalah teknologi sosial. Bukan benda fisik, bukan logam mulia, bukan angka digital. Uang adalah kesepakatan, sebuah kepercayaan kolektif bahwa sesuatu memiliki nilai dan bisa dipertukarkan.
Selembar uang Rp 100.000 tidak bernilai karena kertasnya. Ia bernilai karena jutaan orang sepakat bahwa ia bernilai. Kalau kesepakatan itu runtuh, uang itu tidak lebih dari kertas.
Untuk memahami kenapa kesepakatan ini muncul, kita perlu mundur jauh ke masa sebelum uang ada sama sekali.
Bayangkan sebuah desa kecil. Petani punya beras. Nelayan punya ikan. Tukang kayu punya kursi. Mereka butuh satu sama lain, dan satu-satunya cara untuk mendapatkan yang dibutuhkan adalah barter: menukar barang dengan barang secara langsung.
Masalahnya sederhana tapi fatal: bagaimana kalau nelayan butuh beras, tapi petani tidak butuh ikan, melainkan butuh kursi? Transaksi tidak bisa terjadi. Para ekonom menyebut ini coincidence of wants, kebetulan kebutuhan yang harus bertemu dua arah sekaligus. Barter hanya bekerja di komunitas yang sangat kecil.
Solusinya adalah menemukan sesuatu yang semua orang mau terima, bukan karena mereka butuh benda itu secara langsung, tapi karena mereka tahu orang lain juga akan menerimanya. Inilah asal mula uang.
Sepanjang sejarah, manusia pernah menggunakan kerang, garam, batu raksasa di Kepulauan Yap, bulu hewan, tembaga, perak, hingga emas. Bukan karena benda-benda itu cantik atau langka saja, tapi karena komunitas sepakat untuk mempercayainya sebagai alat tukar.
Dari eksperimen panjang ini, para ekonom merumuskan tiga fungsi utama uang yang baik:
Medium of exchange. Uang harus bisa dipakai untuk membeli dan menjual. Ia menghapus kebutuhan akan coincidence of wants.
Store of value. Uang harus bisa disimpan dan tetap bernilai di masa depan. Ikan segar tidak bisa menjadi uang yang baik karena ia membusuk.
Unit of account. Uang harus bisa dijadikan satuan pengukur nilai. Berapa harga seekor sapi? Tiga puluh karung beras, atau satu angka yang disepakati bersama?
Emas bertahan ribuan tahun sebagai uang terbaik yang pernah ada. Langka secara alami, tahan lama, bisa dibagi, dan sulit dipalsukan. Tapi emas punya satu kelemahan besar: berat dan sulit dipindahkan.
Maka manusia menciptakan kertas, bukti kepemilikan emas yang tersimpan di gudang. Lebih praktis, lebih mudah dibawa. Dan di sinilah cerita mulai berubah. Karena kertas jauh lebih mudah dicetak daripada emas ditambang.
Uang bukan tentang benda yang kamu pegang. Uang adalah tentang kepercayaan yang kamu dan orang lain sepakati, dan siapa yang memegang kendali atas kesepakatan itu.
Pertanyaan terakhir inilah yang akan kita kejar di sepanjang Prologue ini, dan yang pada akhirnya melahirkan Bitcoin.
Pernah nggak kamu nanya ke orang tua atau kakek nenek, berapa harga sebungkus mie instan dulu? Atau berapa harga bensin pertama kali mereka beli? Jawabannya pasti bikin geleng-geleng kepala. Bukan karena mie-nya berubah. Bukan karena bensinnya berubah. Tapi karena uangnya yang berubah.
Ini bukan kebetulan. Dan ini bukan takdir.
Dari emas ke kertas
Selama ribuan tahun, uang punya jangkar. Jangkar itu bernama emas. Setiap lembar kertas yang beredar punya padanan emas yang tersimpan di brankas pemerintah. Sistem ini disebut gold standard. Artinya, tidak ada yang bisa sembarangan mencetak uang lebih banyak dari emas yang dimiliki.
Ini membuat uang jujur. Nilainya stabil. Pemerintah tidak bisa seenaknya.
Tapi jangkar itu diputus.
15 Agustus 1971
Presiden Amerika Serikat Richard Nixon berdiri di depan kamera televisi dan mengumumkan sesuatu yang mengubah sistem keuangan dunia selamanya. Amerika Serikat tidak lagi mengaitkan dolar dengan emas. Keputusan ini dikenal sebagai Nixon Shock.
Alasannya saat itu terdengar masuk akal: ekonomi sedang sulit, perang Vietnam menguras anggaran, dan cadangan emas Amerika mulai menipis karena negara-negara lain mulai menukarkan dolar mereka dengan emas sungguhan.
Jadi Nixon memutus talinya. Dolar tidak lagi dijamin emas. Dan karena hampir semua mata uang dunia saat itu dikaitkan ke dolar, satu keputusan itu mengubah seluruh sistem keuangan global sekaligus.
Sejak hari itu, uang yang kamu pegang tidak dijamin apa-apa. Nilainya ditopang oleh satu hal: kepercayaan bahwa pemerintah akan mengelolanya dengan bertanggung jawab.
Ketika mesin cetak menyala
Masalahnya, kepercayaan itu sering dikhianati.
Tanpa jangkar emas, pemerintah dan bank sentral punya kemampuan baru: mencetak uang sebanyak yang mereka mau. Dan godaan itu sangat besar, terutama di saat krisis.
Ketika ekonomi ambruk di 2008, bank-bank besar di Amerika nyaris kolaps. Respons pemerintah? Cetak uang. Triliunan dolar dipompa ke sistem keuangan dalam program yang disebut quantitative easing.
Ketika pandemi Covid-19 melanda di 2020, hal yang sama terjadi lagi, dalam skala yang jauh lebih besar. Amerika mencetak lebih dari 40% dari seluruh dolar yang pernah ada dalam sejarah, hanya dalam dua tahun.
Akibatnya? Inflasi meledak. Harga naik. Daya beli uang yang kamu simpan di tabungan turun, tanpa kamu melakukan apa-apa, tanpa kamu dimintai izin.
Siapa yang paling dirugikan?
Bukan orang kaya. Orang kaya menyimpan kekayaan mereka dalam bentuk aset, saham, properti, emas, hal-hal yang nilainya ikut naik ketika uang dicetak.
Yang paling dirugikan adalah orang biasa. Yang menyimpan uangnya di rekening tabungan. Yang gajinya tidak naik secepat harga-harga. Yang bekerja keras menabung selama bertahun-tahun, hanya untuk melihat daya beli tabungannya perlahan terkikis.
Inflasi adalah pajak yang tidak pernah dipungut secara terbuka. Tidak ada surat pemberitahuan. Tidak ada pemungutan suara. Ia bekerja diam-diam, setiap hari, dan hampir tidak pernah dipertanyakan.
Pertanyaan yang mulai muncul
Kalau uang bisa dicetak kapan saja oleh siapa yang berkuasa, apakah uang itu masih bisa disebut jujur? Kalau nilai tabunganmu bisa terkikis oleh keputusan yang dibuat tanpa sepengetahuanmu, apakah kamu benar-benar memiliki uang itu?
Pertanyaan-pertanyaan inilah yang mulai membuat sebagian orang berpikir: harus ada cara lain.
Kamu pernah nggak ngerasa kayak gini: sudah kerja keras, sudah hemat, sudah nabung, tapi kok rasanya nggak pernah cukup? Harga-harga terus naik, tapi tabungan kamu diam di tempat. Ada yang salah. Tapi salahnya di mana?
Sebagian ekonom punya jawaban yang sudah ada sejak lebih dari seratus tahun lalu. Mereka bukan dari Wall Street. Bukan dari Washington. Mereka dari Wina, Austria.
Apa itu Austrian Economics?
Austrian Economics, atau Mazhab Wina, adalah sebuah tradisi pemikiran ekonomi yang lahir di akhir abad ke-19. Tokoh-tokohnya antara lain Carl Menger, Ludwig von Mises, dan Friedrich Hayek. Nama terakhir bahkan memenangkan Nobel Ekonomi pada 1974.
Tapi lupakan dulu nama-nama itu. Yang penting adalah satu ide inti yang mereka perjuangkan: uang yang baik adalah uang yang jujur.
Jujur dalam artian: nilainya tidak bisa dimanipulasi semau penguasa. Jumlahnya tidak bisa ditambah seenaknya. Ia mencerminkan kerja keras nyata, bukan angka yang dicetak di atas kertas.
Cantillon Effect: siapa yang menang, siapa yang kalah
Ketika uang baru dicetak, ia tidak langsung menyebar merata ke semua orang. Ia mengalir dari atas ke bawah. Bank sentral menerimanya pertama, lalu bank-bank besar, lalu pengusaha, baru kemudian sampai ke pekerja dan pensiunan.
Masalahnya, harga-harga sudah naik duluan sebelum uang itu sampai ke bawah. Jadi siapa yang dapat uang pertama, bisa beli dengan harga lama. Siapa yang dapat terakhir, sudah kesiangan.
Para ekonom menyebut ini Cantillon Effect, dinamai dari ekonom Richard Cantillon yang pertama kali mendeskripsikannya di abad ke-18. Coba simulasikan sendiri di bawah.
Sound money: uang yang sehat
Lawan dari uang yang bisa dimanipulasi adalah apa yang disebut sound money, uang yang sehat. Kriterianya sederhana:
Langka. Jumlahnya terbatas dan tidak bisa sembarangan ditambah. Emas adalah contoh klasiknya karena untuk mendapatkan emas baru, seseorang harus menambangnya, membutuhkan waktu, tenaga, dan biaya nyata.
Tahan lama. Nilainya tidak membusuk, tidak rusak, dan bisa disimpan dalam jangka panjang.
Tidak bisa dimanipulasi. Tidak ada satu pihak pun yang bisa mengubah aturan mainnya di tengah jalan.
Sound money bukan soal emas atau logam mulia. Ia adalah soal prinsip: uang seharusnya berfungsi sebagai penyimpan nilai yang jujur, bukan alat yang bisa digunakan penguasa untuk memindahkan kekayaan secara diam-diam.
Kenapa ini penting untuk Bitcoin?
Satoshi Nakamoto, pencipta Bitcoin, tidak muncul dari ruang hampa. Ia muncul dari tradisi pemikiran yang sudah lama mempertanyakan sistem uang yang ada.
Bitcoin dirancang dengan prinsip sound money sebagai fondasinya. Jumlah Bitcoin dibatasi hanya 21 juta koin, selamanya. Tidak ada bank sentral Bitcoin. Tidak ada yang bisa mencetak lebih banyak karena merasa perlu.
Untuk pertama kalinya dalam sejarah, manusia punya pilihan: uang digital yang langka, terbuka, dan tidak bisa dimanipulasi oleh siapapun.
Bayangkan kamu punya file foto. Kamu bisa kirim ke satu orang, lalu kirim lagi ke orang lain, lalu ke seribu orang sekaligus. File aslinya tetap ada. Semua orang dapat salinannya.
Sekarang bayangkan uang digital bekerja dengan cara yang sama. Kamu punya Rp 100.000 dalam bentuk file digital. Kamu kirim ke Toko A. Lalu kamu kirim file yang sama ke Toko B. Uang yang sama, dipakai dua kali. Inilah yang disebut double-spend problem.
Di dunia fisik, masalah ini tidak ada. Kalau kamu kasih uang kertas Rp 100.000 ke seseorang, kamu tidak punya uang itu lagi. Perpindahannya nyata dan tidak bisa diulang. Tapi di dunia digital, semua hal adalah salinan. Tidak ada yang namanya original.
Solusi lama: percayakan ke bank
Selama ini solusinya adalah menaruh pihak ketiga di tengah. Bank memastikan uang benar-benar dipotong dari saldomu sebelum sampai ke penerima. Tidak ada yang bisa double-spend karena bank mengontrol catatannya.
Tapi ini punya harga: kamu harus percaya banknya jujur, tidak bangkrut, dan tidak membekukan akunmu. Sejarah membuktikan harapan itu tidak selalu terpenuhi.
Percobaan sebelum Bitcoin
DigiCash, b-money, Bit Gold, semua mencoba membuat uang digital tanpa bank. Semua gagal di titik yang sama: bagaimana memastikan tidak ada yang membelanjakan uang yang sama dua kali, tanpa mempercayai siapapun di tengah?
Yang dibutuhkan adalah buku besar yang terbuka untuk semua, tidak dimiliki siapapun, dan tidak bisa dimanipulasi. Itulah yang diciptakan Satoshi pada 2008. Namanya: blockchain.
Bitcoin menyelesaikan double-spend problem tanpa bank, tanpa pihak ketiga. Ia membuat uang digital berperilaku seperti uang cash: ketika kamu kirim, ia benar-benar berpindah. Kamu tidak punya lagi.
Cash memecahkan double-spend secara fisik. Tapi ia tidak bisa membuktikan kepemilikan di dunia digital. Kalau kamu punya uang cash dan seseorang mencurinya, tidak ada cara matematis untuk membuktikan uang itu milikmu.
Bitcoin memecahkan keduanya sekaligus. Anti double-spend seperti cash, sekaligus bisa membuktikan kepemilikan secara digital. Rahasianya ada di sebuah penemuan dari tahun 1970-an yang mengubah dunia: public-key cryptography.
Dua kunci, satu identitas
Bayangkan kamu punya gembok dan kunci. Kamu bisa bagikan gembok itu ke siapa saja. Siapapun bisa menggunakannya untuk mengunci pesan untukmu. Tapi hanya kamu yang punya kuncinya. Hanya kamu yang bisa membuka.
Itulah cara kerja public-key cryptography. Public key adalah gembokmu, boleh dibagikan ke siapa saja. Di Bitcoin, ini seperti alamat rekeningmu. Private key adalah kuncimu, tidak boleh diketahui siapapun. Ia membuktikan bahwa kamu adalah pemilik sah dari public key tersebut.
Ketika kamu mengirim Bitcoin, kamu menandatangani transaksi dengan private key-mu. Jaringan bisa memverifikasi tanda tangan itu menggunakan public key-mu, tanpa perlu tahu siapa kamu sebenarnya.
Untuk pertama kalinya, seseorang bisa membuktikan kepemilikan sesuatu secara digital, tanpa menyebutkan nama, tanpa kartu identitas, tanpa bank yang memverifikasi. Matematika yang membuktikan. Bukan institusi.
Seluruh sistem Bitcoin berdiri di atas prinsip ini. Private key-mu adalah identitasmu. Siapapun yang memegang private key, memegang Bitcoin. Bukan nama di buku rekening, bukan kartu identitas, bukan tanda tangan di atas kertas.
Ada yang menyadari lebih awal.
Bukan dengan turun ke jalan. Bukan dengan orasi. Mereka duduk di depan layar, menulis kode, dan pelan-pelan membangun sesuatu yang tidak bisa disensor, tidak bisa dihentikan, dan tidak perlu izin siapapun untuk berjalan.
Mereka menyebut diri mereka Cypherpunks.
Internet yang terbuka terlalu lebar
Ketika internet lahir di era ARPANET tahun 1969, ia dirancang untuk menghubungkan institusi akademik dan militer yang saling percaya. Tidak ada yang memikirkan privasi, karena semua penggunanya memang komunitas kecil yang saling kenal.
Tapi internet tumbuh. Publik masuk. Dan fondasinya tidak ikut berubah.
Data bergerak dalam bentuk terbuka, tidak terenkripsi. Siapapun yang berada di jalur koneksimu bisa membaca apa yang kamu kirim, persis seperti membaca kartu pos, bukan surat dalam amplop tertutup. Pemerintah bisa memantau. Korporasi bisa mengumpulkan. Tidak ada yang perlu izin untuk mengintip.
Internet tidak rusak. Ia hanya tidak pernah didesain untuk melindungimu.
Dari mana mereka berasal?
Tahun 1992. Tiga orang bertemu di San Francisco: Eric Hughes, Timothy C. May, dan John Gilmore. Mereka mulai mengumpulkan orang-orang yang berpikiran sama dalam sebuah mailing list. Di puncaknya, lebih dari 700 orang aktif di dalamnya, termasuk beberapa nama yang kelak mengubah lanskap teknologi dunia.
Mereka adalah matematikawan, programmer, dan kriptografer. Bukan aktivis jalanan. Tapi mereka punya keyakinan yang tajam: privasi adalah hak, bukan keistimewaan yang diberikan oleh negara.
The Cypherpunk Manifesto
Tahun 1993, Eric Hughes menulis sebuah manifesto. Tenang, tapi tegas sampai ke tulang:
"Privacy is necessary for an open society in the electronic age."
Privasi bukan tentang menyembunyikan sesuatu. Ia tentang kemampuan untuk memilih, apa yang kamu ungkapkan, kepada siapa, dan kapan. Dan solusi mereka bukan meminta. Solusi mereka adalah membangun.
Warisan yang tidak kelihatan
Banyak teknologi yang kamu pakai sehari-hari tumbuh dari benih yang ditanam gerakan ini. HTTPS yang mengamankan browsing-mu. Enkripsi end-to-end di aplikasi chat. Jaringan yang memungkinkan komunikasi tanpa pengawasan.
Dan yang paling berdampak: pada 31 Oktober 2008, seseorang dengan nama samaran Satoshi Nakamoto mengirimkan sebuah paper ke mailing list kriptografi. Judulnya sederhana. Dampaknya tidak.
"Bitcoin: A Peer-to-Peer Electronic Cash System."
Satoshi tidak muncul dari ruang hampa. Ia adalah ujung dari benang panjang yang ditenun selama puluhan tahun oleh orang-orang yang tidak menunggu dunia berubah, tapi memilih untuk mengubahnya sendiri, satu baris kode dalam satu waktu.
Cypherpunks menulis kode. Bukan petisi. Bukan lobi. Mereka percaya bahwa perubahan nyata tidak datang dari izin yang diberikan penguasa, tapi dari teknologi yang sudah terlanjur berjalan.
Bitcoin bukan percobaan pertama
Kalau cypherpunk memang menulis kode, wajar bertanya: kode apa yang mereka tulis sebelum Bitcoin? Di bagian Double-Spend Problem tadi kita sempat menyebut DigiCash, b-money, dan bit gold dalam satu kalimat sebagai percobaan yang gagal. Sekarang kita berhenti lebih lama di sana, karena yang menarik bukan bahwa mereka gagal, melainkan seberapa dekat mereka sudah sampai.
Percobaan paling awal datang dari David Chaum, yang pada 1989 mendirikan DigiCash. Uangnya benar-benar privat, memakai teknik kriptografi yang membuat bank tidak bisa melihat siapa membelanjakan apa. Secara teknis ia berhasil. Tapi DigiCash tetap sebuah perusahaan, dan uangnya tetap diterbitkan oleh satu pihak. Ketika perusahaan itu bangkrut pada 1998, uangnya ikut lenyap. Pelajarannya keras: privasi saja tidak cukup kalau masih ada satu titik yang bisa gagal.
Pada 1997 Adam Back membuat Hashcash, yang kita bahas lagi di 5.2. Idenya sederhana: sebelum mengirim email, komputermu harus menyelesaikan perhitungan yang sedikit memakan waktu. Bagi orang biasa itu tidak terasa, bagi pengirim spam jutaan email itu jadi mahal. Untuk pertama kalinya ada cara membuat sesuatu di dunia digital berbiaya nyata. Tapi bukti kerja Hashcash tidak bisa dipindahtangankan. Ia habis dipakai sekali, tidak bisa diberikan ke orang lain, dan tidak ada jumlah totalnya. Ia perangko, bukan uang.
Setahun kemudian, 1998, dua usulan muncul hampir bersamaan. Wei Dai menulis b-money, yang mengusulkan agar semua peserta menyimpan salinan catatan siapa punya berapa, dan uang baru lahir dari kerja komputasi. Nick Szabo menulis bit gold, yang merangkai hasil kerja komputasi menjadi rantai bersambung sehingga urutannya bisa dibuktikan.
Bacalah dua kalimat barusan sekali lagi dan kamu akan merasakan sesuatu yang aneh: keduanya terdengar hampir persis seperti Bitcoin. Catatan yang disimpan semua orang, uang yang lahir dari kerja, rantai yang membuktikan urutan. Semua sudah ada di atas kertas satu dekade sebelum Satoshi.
Lalu apa yang kurang? Satu hal, dan itu yang paling sulit. Kalau semua orang menyimpan catatan sendiri, apa yang terjadi ketika catatan mereka berbeda? Siapa yang berhak memutuskan versi mana yang benar? Baik b-money maupun bit gold menyadari masalah ini dan menawarkan jawaban, tapi jawabannya selalu berujung pada sekelompok pihak terpilih yang harus dipercaya. Persis masalah yang ingin mereka hindari sejak awal. Ini masalah double-spend yang sama seperti di bagian sebelumnya, hanya dilihat dari sudut lain.
Yang sebenarnya ditambahkan Satoshi
Di sinilah letak lompatannya, dan ia lebih kecil sekaligus lebih besar daripada yang biasa dibayangkan orang. Satoshi tidak menciptakan bukti kerja, tidak menciptakan tanda tangan digital, tidak menciptakan rantai hash. Semua itu sudah ada.
Yang ia lakukan adalah menyadari bahwa bukti kerja bisa memikul dua tugas sekaligus. Pendahulunya memakai bukti kerja hanya untuk membuat sesuatu mahal diproduksi. Satoshi memakainya juga untuk memutuskan catatan siapa yang berlaku: versi yang paling banyak menumpuk kerja di belakangnya, itulah yang menang. Tidak perlu memilih siapa yang berwenang, karena kewenangan itu diganti oleh sesuatu yang tidak bisa dipalsukan, yaitu energi yang sudah terlanjur dibakar.
Itu sebabnya pertanyaan "kenapa baru 2009, padahal bahannya sudah ada sejak 1998" punya jawaban yang mungkin mengecewakan sekaligus melegakan. Yang hilang selama sepuluh tahun itu bukan sebuah komponen, bukan penemuan matematis baru, dan bukan komputer yang lebih cepat. Yang hilang adalah satu cara memandang komponen yang sudah tergeletak di depan mata semua orang.
Sejarah ini juga menjelaskan sesuatu yang akan kamu temui berulang kali di buku ini. Bitcoin jarang menambahkan hal baru. Ia hampir selalu menyusun ulang yang sudah ada, dengan sangat hati-hati, karena setiap bagian yang ditambahkan adalah bagian yang bisa gagal.
3 Januari 2009.
Dunia baru saja keluar dari salah satu krisis keuangan terburuk dalam sejarah modern. Bank-bank raksasa di Amerika dan Eropa nyaris ambruk. Pemerintah mengucurkan triliunan dolar uang pajak untuk menyelamatkan institusi yang sama yang menyebabkan krisis itu sendiri.
Di suatu tempat yang tidak diketahui siapapun, seseorang menyalakan sebuah jaringan.
Blok pertama
Dalam sistem Bitcoin, semua transaksi dicatat dalam satuan yang disebut block. Setiap block terhubung ke block sebelumnya, membentuk rantai yang tidak bisa dimanipulasi. Rantai ini disebut blockchain.
Block pertama yang pernah ada disebut Genesis Block. Block #0. Awal dari segalanya. Dan di dalamnya, Satoshi meninggalkan sebuah pesan yang tertulis selamanya:
"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"
Ini adalah judul halaman depan surat kabar The Times pada hari itu. Hari ketika Bitcoin lahir.
Mengapa pesan itu penting
Pesannya bukan kebetulan. Bukan sekadar timestamp. Di satu sisi, ia berfungsi sebagai bukti bahwa Genesis Block benar-benar dibuat pada tanggal itu. Di sisi lain, ia adalah pernyataan. Sebuah kritik yang tenang tapi tajam terhadap sistem keuangan yang sedang diselamatkan oleh uang rakyat di hari yang sama.
Siapa Satoshi?
Tidak ada yang tahu. Satoshi Nakamoto berkomunikasi melalui email dan forum selama dua tahun setelah Bitcoin lahir. Lalu, pada April 2011, ia mengirim pesan terakhirnya kepada seorang developer: "I've moved on to other things." Dan menghilang.
Identitasnya tidak pernah terkonfirmasi. Yang tersisa hanyalah kodenya. Whitepaper-nya. Dan Genesis Block yang masih berdiri hingga hari ini, dengan pesan yang sama, tidak berubah, tidak bisa diubah.
Bitcoin adalah satu-satunya sistem keuangan di dunia yang penciptanya memilih untuk menghilang. Tidak ada CEO. Tidak ada pendiri yang memegang kendali. Tidak ada yang bisa dihubungi untuk mengubah aturannya. Ini bukan kelemahan. Ini adalah fitur yang paling penting dari semua.
Seluruh sistem keuangan yang ada hari ini berdiri di atas kepercayaan.
Kamu percaya bankmu tidak akan bangkrut. Kamu percaya pemerintah tidak akan membekukan akunmu. Kamu percaya perusahaan transfer tidak akan menahan uangmu. Kepercayaan itu tidak ada jaminannya, ia hanya bergantung pada niat baik institusi yang memegang kendali.
Sejarah membuktikan, niat baik itu tidak selalu cukup.
Trustless bukan berarti tidak ada kepercayaan
Kata trustless sering disalahpahami. Ia bukan berarti tidak perlu percaya siapapun sama sekali. Ia berarti kamu tidak perlu mempercayai orang atau institusi tertentu, karena yang kamu percaya adalah matematika dan kode yang bisa diverifikasi oleh siapapun.
Di Bitcoin, tidak ada direktur yang bisa mengubah aturan. Tidak ada rapat dewan yang memutuskan kebijakan moneter. Tidak ada kantor pusat yang bisa dilobi atau ditekan. Aturannya tertulis dalam kode, terbuka untuk semua, dan berlaku sama untuk semua orang di seluruh dunia.
Kepercayaan yang didesentralisasi
Kalau kamu kirim Bitcoin ke seseorang, transaksi itu diverifikasi bukan oleh satu bank, tapi oleh ribuan komputer di seluruh dunia secara bersamaan. Tidak ada satupun yang punya otoritas lebih dari yang lain. Untuk memanipulasi sistemnya, seseorang harus menguasai lebih dari separuh seluruh jaringan sekaligus, sebuah tugas yang secara praktis mustahil.
Inilah yang membuat Bitcoin berbeda dari semua sistem keuangan sebelumnya. Bukan karena ia digital. Bukan karena ia baru. Tapi karena untuk pertama kalinya, kepercayaan tidak lagi bergantung pada subjektivitas manusia yang bisa salah, bisa disuap, dan bisa berubah pikiran.
Bitcoin tidak meminta kamu percaya pada Satoshi. Tidak meminta kamu percaya pada pengembangnya. Tidak meminta kamu percaya pada siapapun. Ia hanya meminta kamu verifikasi sendiri. Dan itulah yang membuat segalanya berbeda.
Kalau kamu tanya sepuluh orang tentang Bitcoin, kamu akan dapat sepuluh jawaban berbeda.
Ada yang bilang Bitcoin adalah investasi. Ada yang bilang spekulasi. Ada yang bilang penipuan. Ada yang bilang masa depan. Semua jawaban itu bicara tentang harga, bukan tentang apa Bitcoin sebenarnya.
Bitcoin adalah cryptocurrency, tapi bukan bagian dari industri "kripto".
Ini penting untuk dipahami sejak awal. Bitcoin secara teknis adalah cryptocurrency karena ia menggunakan kriptografi sebagai fondasi teknologinya. Tapi istilah "kripto" yang kamu dengar sehari-hari adalah sesuatu yang berbeda.
"Kripto" adalah label yang lahir dari tempat sesuatu diperdagangkan, bukan dari cara kerjanya. Exchange dan media keuangan mengelompokkan Bitcoin bersama ribuan token lain karena semuanya diperjualbelikan di bursa yang sama, disimpan di dompet yang mirip, dan dilaporkan di kolom berita yang sama. Sebagai pengelompokan komersial, itu masuk akal dan tidak ada yang salah dengannya.
Masalahnya muncul ketika pengelompokan komersial itu dibaca sebagai pernyataan teknis. Karena secara teknis, isi keranjang itu sangat berbeda satu sama lain. Ada token yang punya CEO. Ada yang whitepapernya bisa diubah kapan pun. Ada yang dibuat untuk dijual ke publik, bukan untuk menyelesaikan masalah nyata. Menaruh semuanya dalam satu kata membuat perbedaan yang paling penting jadi tidak terlihat.
Bitcoin tidak punya CEO. Tidak punya tim marketing. Tidak punya investor awal yang menunggu untuk exit. Tidak punya aturan yang bisa diubah oleh siapapun secara sepihak.
Bitcoin adalah protokol. Seperti HTTP adalah protokol untuk web, atau TCP/IP adalah protokol untuk internet. Protokol tidak dimiliki siapapun, tidak bisa dimatikan siapapun, dan tidak butuh izin siapapun untuk digunakan.
Bahwa Bitcoin menggunakan kriptografi dalam cara kerjanya membuatnya secara teknis masuk dalam definisi cryptocurrency. Tapi menyebutnya bagian dari industri "kripto" sama seperti menyebut email sebagai bagian dari industri spam hanya karena keduanya menggunakan protokol yang sama.
Bitcoin adalah tiga hal sekaligus
Jaringan. Bitcoin adalah jaringan komputer yang tersebar di seluruh dunia, berjalan tanpa server pusat, tanpa kantor pusat, dan tanpa siapapun yang bisa mematikannya. Siapapun bisa bergabung, siapapun bisa keluar. Jaringan tetap berjalan selama ada satu node pun yang hidup.
Protokol. Bitcoin adalah seperangkat aturan yang disepakati oleh semua peserta jaringan. Aturan tentang bagaimana transaksi dibuat, diverifikasi, dan dicatat. Aturan tentang berapa banyak Bitcoin yang bisa ada. Aturan yang tidak bisa diubah oleh satu pihak manapun secara sepihak.
Mata uang. Bitcoin adalah unit nilai yang bisa dikirim dari satu orang ke orang lain, di mana saja di dunia, tanpa perantara, tanpa izin, dan tanpa batas waktu operasional.
Kalau internet adalah protokol untuk memindahkan informasi, Bitcoin adalah protokol untuk memindahkan nilai. Keduanya terbuka, keduanya tidak dimiliki siapapun, dan keduanya mengubah cara dunia bekerja. Dan seperti internet, Bitcoin tidak peduli siapa yang salah paham tentangnya. Ia tetap berjalan.
Bayangkan kamu ingin mengirim uang ke temanmu yang tinggal di kota lain.
Cara biasa: kamu buka aplikasi bank, ketik nomor rekening, ketik jumlah, klik kirim. Di balik layar, bankmu menghubungi bank temanmu, keduanya memperbarui catatan masing-masing, dan setelah proses yang melibatkan beberapa lembaga perantara, uang "tiba" dalam hitungan menit sampai hari. Kamu tidak tahu persis apa yang terjadi di tengah. Kamu hanya percaya sistemnya bekerja.
Di Bitcoin, tidak ada yang di tengah.
Apa yang sebenarnya terjadi
Ketika kamu mengirim Bitcoin, kamu membuat sebuah pesan digital yang berisi tiga hal: berapa banyak yang kamu kirim, ke alamat mana, dan tanda tangan digital dari private key-mu sebagai bukti bahwa kamu adalah pemilik sah Bitcoin tersebut.
Pesan ini disiarkan ke seluruh jaringan Bitcoin. Ribuan node di seluruh dunia menerimanya, memverifikasinya, dan meneruskannya ke node lain. Dalam hitungan detik, transaksimu sudah diketahui oleh seluruh jaringan.
Tapi belum selesai.
Masuk ke dalam block
Transaksimu kemudian menunggu untuk dimasukkan ke dalam sebuah block oleh para miner. Miner adalah komputer-komputer yang bersaing memecahkan teka-teki matematika yang sangat sulit. Yang berhasil pertama mendapat hak untuk menulis block berikutnya, sekaligus mendapat reward dalam bentuk Bitcoin baru.
Begitu transaksimu masuk ke dalam block, ia tercatat permanen di blockchain. Tidak bisa dihapus, tidak bisa diubah, tidak bisa dibatalkan.
Berapa lama?
Satu block Bitcoin rata-rata muncul setiap 10 menit. Untuk transaksi yang dianggap final dan aman, umumnya ditunggu 6 konfirmasi, artinya 6 block berturut-turut setelah block yang berisi transaksimu. Sekitar satu jam.
Dibandingkan transfer bank antar negara yang bisa memakan 3 sampai 5 hari kerja, satu jam adalah kemajuan yang signifikan. Dan tidak ada yang bisa memblokir, menunda, atau membatalkannya di tengah jalan.
Di Bitcoin, tidak ada yang perlu kamu hubungi kalau transaksimu bermasalah. Tidak ada customer service. Tidak ada tombol "batalkan". Transaksi yang sudah dikonfirmasi adalah transaksi yang selesai, selamanya.
Tidak ada yang menjalankannya. Dan itulah yang membuatnya berjalan.
Ini terdengar paradoks. Setiap sistem yang kita kenal punya seseorang di baliknya. Server punya administrator. Bank punya direksi. Aplikasi punya developer yang bisa update atau matikan kapanpun. Tapi Bitcoin tidak punya satupun dari itu.
Yang menjalankan Bitcoin adalah jaringan itu sendiri, yang terdiri dari tiga jenis peserta:
Node
Node adalah komputer yang menyimpan salinan lengkap seluruh blockchain Bitcoin dan memverifikasi setiap transaksi yang masuk. Siapapun bisa menjalankan node, dengan hardware yang relatif terjangkau. Node tidak dapat bayaran. Mereka menjalankannya karena mereka ingin berpartisipasi dalam jaringan dan memverifikasi sendiri bahwa aturan Bitcoin diikuti dengan benar.
Node adalah penjaga aturan. Kalau ada transaksi yang tidak valid, node menolaknya. Kalau ada miner yang mencoba curang, node menolak block-nya. Tidak ada otoritas pusat yang perlu dihubungi.
Miner
Miner adalah komputer yang bersaing memecahkan teka-teki matematika untuk mendapat hak menulis block berikutnya. Mereka menginvestasikan hardware dan listrik yang nyata. Sebagai imbalanya, miner yang berhasil mendapat Bitcoin baru, disebut block reward, plus biaya transaksi dari transaksi yang mereka masukkan ke block.
Mining adalah proses yang membuat blockchain aman. Untuk memalsukan satu transaksi lama, seseorang harus mengulang seluruh proof of work dari block itu sampai sekarang, lebih cepat dari seluruh jaringan yang sedang berjalan. Secara praktis mustahil.
Pengguna
Pengguna adalah siapapun yang menyimpan atau mengirim Bitcoin. Mereka tidak perlu menjalankan node atau miner. Cukup punya wallet dan alamat Bitcoin.
Kenapa tidak bisa dimatikan?
Karena tidak ada satu titik pun yang kalau dihilangkan akan membuat semuanya berhenti. Node tersebar di ratusan negara. Miner beroperasi di berbagai yurisdiksi. Tidak ada server pusat untuk diserang, tidak ada CEO untuk ditangkap, tidak ada kantor untuk ditutup.
Bitcoin berjalan karena ribuan orang di seluruh dunia memilih untuk menjalankannya, bukan karena ada satu entitas yang memaksanya berjalan. Dan selama satu node pun masih hidup di suatu tempat di bumi ini, Bitcoin masih ada.
Sebelum masuk ke cara kerjanya, ada satu hal yang perlu diluruskan dulu.
Kata "blockchain" sudah mengalami nasib yang sama seperti kata "kripto". Industri mengambilnya, memakainya untuk menjual segalanya, dan maknanya jadi kabur. "Blockchain untuk supply chain." "Blockchain untuk voting." "Blockchain untuk kesehatan." Hampir semua dari itu tidak butuh blockchain sama sekali, dan bisa diselesaikan lebih efisien dengan database biasa.
Jadi sebelum belajar cara kerjanya, penting untuk tahu: tidak semua yang disebut blockchain adalah blockchain.
Blockchain Bitcoin vs "blockchain" industri
Blockchain Bitcoin adalah sistem yang benar-benar terdesentralisasi. Tidak ada yang mengontrol siapa boleh menulis atau membaca. Tidak ada admin yang bisa mengubah aturan. Tidak ada perusahaan di baliknya. Tidak ada tombol off. Keamanannya datang dari proof of work dan konsensus ribuan node independen di seluruh dunia.
Kebanyakan "blockchain" yang dijual industri kripto adalah database terpusat dengan tampilan blockchain. Ada perusahaan yang mengontrolnya. Ada tim yang bisa mengubah aturannya kapanpun. Ada server yang bisa dimatikan. Ini bukan blockchain dalam arti yang Satoshi maksud. Ini marketing.
Semua yang disebut blockchain belum tentu blockchain. Tapi blockchain Bitcoin adalah blockchain yang sesungguhnya.
Apa itu block?
Bayangkan sebuah buku besar catatan transaksi. Setiap halaman berisi daftar transaksi yang terjadi dalam satu periode waktu. Setiap halaman baru merujuk ke halaman sebelumnya, membentuk rantai yang tidak bisa diputus. Itulah blockchain. Tapi tidak ada yang memilikinya, dan semua orang bisa melihatnya.
Setiap block berisi tiga hal utama:
Data transaksi. Daftar semua transaksi yang terjadi dalam periode itu. Siapa mengirim berapa ke siapa.
Hash block ini. Semacam sidik jari digital dari seluruh isi block. Kalau satu huruf pun berubah, hash-nya berubah total.
Hash block sebelumnya. Inilah yang membentuk rantai. Setiap block terikat ke block sebelumnya melalui hash-nya.
Kenapa tidak bisa dimanipulasi?
Coba bayangkan seseorang ingin memalsukan transaksi di block #500. Ia harus mengubah isi block itu. Tapi begitu isinya berubah, hash block #500 berubah. Itu berarti block #501 yang menyimpan hash #500 kini tidak valid. Block #502 juga tidak valid. Dan seterusnya sampai block terbaru.
Untuk memalsukan satu transaksi lama, seseorang harus menghitung ulang seluruh rantai dari block itu sampai sekarang, lebih cepat dari seluruh jaringan yang sedang menambah block baru setiap 10 menit. Secara praktis mustahil.
Siapa yang menyimpannya?
Semua orang yang menjalankan node Bitcoin menyimpan salinan lengkap seluruh blockchain. Bukan di satu server, tapi di ribuan komputer di seluruh dunia. Tidak ada satu titik pun yang bisa diserang untuk menghapus atau mengubah catatan.
Blockchain bukan teknologi ajaib. Ia adalah kombinasi sederhana dari kriptografi, konsensus, dan insentif ekonomi yang bekerja bersama untuk menciptakan sesuatu yang belum pernah ada sebelumnya: catatan yang jujur, tanpa penjaga yang perlu dipercaya.
Ketika Satoshi merancang Bitcoin, ia membuat satu keputusan yang tidak biasa: jumlah Bitcoin yang pernah ada di dunia ini dibatasi. Tepat 21 juta. Tidak lebih, tidak kurang, selamanya.
Bukan kebijakan yang bisa diubah rapat. Bukan regulasi yang bisa diamandemen. Ia tertulis langsung dalam kode, dan untuk mengubahnya dibutuhkan persetujuan dari seluruh jaringan, sesuatu yang secara praktis tidak mungkin terjadi.
Kenapa 21 juta?
Tidak ada jawaban matematis yang definitif untuk angka ini. Satoshi tidak pernah menjelaskan secara spesifik. Yang jelas adalah prinsip di baliknya: Bitcoin harus langka. Kelangkaan yang bisa diverifikasi, bukan kelangkaan yang dijanjikan.
Ini berbeda fundamental dari uang fiat. Tidak ada yang tahu berapa jumlah dolar, rupiah, atau euro yang beredar besok. Angkanya bisa berubah kapanpun ada keputusan politik atau ekonomi yang membutuhkannya. Bitcoin tidak bisa.
Bagaimana Bitcoin baru lahir?
Bitcoin baru tidak dicetak oleh bank sentral. Ia lahir melalui proses mining. Setiap kali miner berhasil menemukan block baru, ia mendapat sejumlah Bitcoin sebagai reward. Inilah satu-satunya cara Bitcoin baru masuk ke sirkulasi.
Tapi reward ini tidak tetap selamanya.
Halving
Setiap 210.000 block, sekitar empat tahun sekali, reward mining dipotong menjadi setengahnya. Proses ini disebut halving.
Saat Bitcoin pertama lahir tahun 2009, reward per block adalah 50 BTC. Setelah halving pertama tahun 2012, menjadi 25 BTC. Lalu 12,5 BTC. Lalu 6,25 BTC. Dan seterusnya, terus dipotong setengah, sampai sekitar tahun 2140 ketika reward mendekati nol dan seluruh 21 juta Bitcoin sudah beredar.
Mekanisme ini adalah yang memastikan supply Bitcoin tidak bisa dimanipulasi. Tidak ada yang bisa mempercepat jadwal ini. Tidak ada yang bisa mengubah aturannya di tengah jalan.
Emas langka karena susah ditambang. Bitcoin langka karena matematikanya tidak mengizinkan lebih dari 21 juta. Satu bergantung pada alam, satu bergantung pada kode. Keduanya tidak bisa dipalsukan.
| Era | Tahun | Block | Reward | Total Supply | % dari 21 Juta |
|---|
Uang yang baik seharusnya tidak bisa dibohongi.
Tidak bisa dicetak diam-diam. Tidak bisa dibekukan semena-mena. Tidak bisa disensor karena alasan politik. Tidak bisa diencerkan nilainya oleh keputusan segelintir orang di ruang tertutup.
Selama ribuan tahun, manusia mencari bentuk uang yang memenuhi semua itu. Emas mendekati, tapi bisa disita. Uang kertas praktis, tapi bisa dicetak. Uang digital lebih efisien, tapi dikontrol institusi.
Bitcoin adalah percobaan pertama yang berhasil menjawab semua itu sekaligus. Bukan karena ia menghasilkan keuntungan. Bukan karena harganya naik. Tapi karena untuk pertama kalinya dalam sejarah, ada bentuk uang yang aturannya tidak bisa dimanipulasi oleh siapapun.
Itulah yang dimaksud dengan uang yang jujur.
Namanya menyesatkan.
Wallet dalam Bitcoin tidak menyimpan Bitcoin. Ini hal pertama yang harus diluruskan. Bitcoin tidak ada di dalam aplikasi di ponselmu. Ia tidak tersimpan di perangkatmu. Ia ada di blockchain, dan blockchain ada di ribuan komputer di seluruh dunia.
Yang disimpan wallet adalah sesuatu yang jauh lebih penting: kunci.
Bayangkan Bitcoin seperti brankas yang terkunci di tempat umum yang bisa dilihat semua orang. Semua orang tahu isi brankasnya berapa. Tapi hanya orang yang punya kuncinya yang bisa membuka dan memindahkan isinya. Wallet adalah tempat kamu menyimpan kunci itu.
Bukan rekening, bukan saldo
Rekening bank menyimpan catatanmu di server milik bank. Bank tahu siapa kamu, berapa saldo kamu, dan bisa mengubah atau membekukannya kapanpun.
Wallet Bitcoin tidak seperti itu. Tidak ada nama, tidak ada identitas, tidak ada institusi yang menyimpan datamu. Yang ada hanyalah sepasang kunci matematika yang membuktikan bahwa kamu adalah pemilik sah dari Bitcoin di alamat tertentu.
Apa yang sebenarnya ada di dalam wallet?
Semuanya berawal dari satu angka, lalu turun berantai:
Private key. Angka acak yang sangat besar, dibuat sekali dan tidak bisa ditebak oleh siapapun. Ini adalah bukti kepemilikan. Siapapun yang tahu private key-mu, bisa memindahkan Bitcoin-mu. Siapapun.
Public key. Diturunkan secara matematis dari private key. Ia tidak dirahasiakan, tapi bukan ini yang kamu berikan ke orang lain. Tugasnya adalah membuktikan ke jaringan bahwa transaksimu benar-benar berasal darimu.
Address. Diturunkan sekali lagi dari public key, lebih pendek dan lebih tahan salah ketik. Inilah yang kamu bagikan ketika ingin menerima Bitcoin. Seperti nomor rekening, tapi tanpa identitasmu di baliknya.
Wallet bukan tempat menyimpan Bitcoin. Wallet adalah tempat menyimpan kunci yang membuktikan kamu pemilik Bitcoin. Kalau kamu kehilangan kuncinya, Bitcoin-mu tidak hilang dari blockchain, tapi tidak ada yang bisa mengaksesnya lagi, selamanya.
Di balik setiap wallet Bitcoin, ada sebuah angka.
Bukan angka biasa. Ini adalah angka acak yang sangat besar, 256 bit, atau sekitar 78 digit desimal. Angka ini tidak dibuat oleh manusia, tidak dipilih oleh server, dan tidak didaftarkan ke siapapun. Ia lahir dari keacakan murni di perangkatmu sendiri, pada saat wallet dibuat.
Inilah private key-mu.
Seberapa acak?
Jumlah kemungkinan private key adalah 2²⁵⁶, atau sekitar 1,2 × 10⁷⁷. Sebagai pembanding: jumlah atom di seluruh alam semesta yang bisa kita observasi diperkirakan sekitar 10⁸⁰. Ruang private key belum sebesar itu, tapi berada di kelas angka yang sama, dan itu sudah jauh melewati apa pun yang bisa disisir oleh komputer, sekarang maupun nanti. Peluang dua orang menghasilkan private key yang sama secara tidak sengaja, secara praktis, adalah nol. Ini bukan janji. Ini matematika.
Dari private key lahir public key
Private key tidak pernah dibagikan ke siapapun. Tapi dari private key, bisa diturunkan sebuah public key melalui proses matematika satu arah.
Satu arah artinya: dari private key, public key bisa dihitung dalam sepersekian detik. Arah sebaliknya tidak punya jalan pintas yang diketahui siapapun. Bukan karena ada informasi yang hilang di tengah jalan, sebab public key sepenuhnya ditentukan oleh private key-mu dan tidak ada yang tercecer. Tapi karena membalikkannya menuntut kerja komputasi yang, dengan metode terbaik yang kita punya hari ini, tidak akan selesai dalam umur alam semesta.
Mudah dihitung ke depan, tidak mungkin ditelusuri balik. Seluruh keamanan Bitcoin bersandar pada ketimpangan ini.
Lalu public key ini buat apa?
Sampai di sini kita baru tahu public key itu aman dibagikan. Tapi kenapa ia perlu ada sama sekali?
Untuk menjawabnya, ada satu benda ketiga yang belum kita sebut: tanda tangan digital.
Ketika kamu mengirim Bitcoin, wallet-mu tidak mengirimkan private key ke mana-mana. Yang ia lakukan adalah mengambil dua bahan, yaitu private key-mu dan isi transaksinya (berapa jumlahnya dan ke alamat mana), lalu mengolah keduanya menjadi satu angka baru. Angka itulah tanda tangannya.
Dua sifat tanda tangan inilah yang membuat seluruh sistem bekerja.
Ia terikat pada satu transaksi. Karena lahir dari isi transaksi itu sendiri, ia hanya sah untuk transaksi itu. Ubah jumlahnya sedikit, ganti alamat tujuannya, dan tanda tangan yang sama langsung tidak cocok lagi. Ia tidak bisa digunting dari satu transaksi lalu ditempel ke transaksi lain.
Ia bisa diperiksa tanpa private key. Ini bagian yang paling penting. Siapapun yang memegang public key-mu bisa memastikan tanda tangan itu dibuat oleh pemegang private key yang cocok, tanpa pernah tahu private key-nya. Memeriksa tidak menuntut rahasia yang sama dengan membuat.
Di sinilah pembagian tugasnya jadi jelas. Private key membuat tanda tangan, dan hanya ia yang bisa. Public key memeriksa tanda tangan, dan siapapun bisa. Satu untuk membuktikan, satu untuk memverifikasi.
Dan itulah alasan sebenarnya public key aman dibagikan. Bukan sekadar karena ia tidak membocorkan private key, tapi karena yang ia berikan ke orang lain hanyalah kemampuan memeriksa, tidak pernah kemampuan membuat.
Bagaimana persisnya angka itu dihitung, dan kenapa memeriksa jauh lebih murah daripada memalsukan, kita bongkar di Bab 4 saat masuk ke ECDSA dan Schnorr.
Kenapa ini penting?
Karena seluruh sistem kepemilikan Bitcoin berdiri di atas prinsip ini. Tidak ada username. Tidak ada password. Tidak ada verifikasi email. Kepemilikanmu dibuktikan semata-mata oleh kemampuanmu menghasilkan tanda tangan yang valid menggunakan private key, dan jaringan bisa memverifikasinya menggunakan public key tanpa perlu tahu siapa kamu.
Private key adalah identitasmu di Bitcoin. Siapapun yang memegangnya, memegang Bitcoin-mu. Tidak ada "lupa password", tidak ada "reset via email", tidak ada layanan pelanggan yang bisa membantumu. Ia adalah tanggung jawab yang absolut.
Private key menghasilkan public key. Tapi public key belum bisa langsung dipakai sebagai alamat untuk menerima Bitcoin. Ada satu langkah lagi.
Public key diproses melalui serangkaian fungsi hash, menghasilkan sebuah string yang lebih pendek dan lebih mudah dibaca. Inilah address Bitcoin. Alamat inilah yang kamu bagikan ke orang lain ketika ingin menerima Bitcoin. Bukan private key, bukan public key, tapi alamat yang diturunkan dari keduanya.
Kenapa tidak langsung pakai public key?
Dua alasan utama. Pertama, keamanan. Dengan menyembunyikan public key di balik hash, ada lapisan perlindungan tambahan kalau suatu hari ada kemajuan komputasi yang menjadi ancaman. Satu catatan penting: perlindungan ini hanya berlaku selama address itu belum pernah kamu pakai untuk mengirim. Begitu kamu membelanjakan dana darinya, public key-mu ikut terungkap di blockchain. Inilah alasan sebenarnya di balik saran yang sering kamu dengar untuk tidak memakai ulang satu address, dan kita bahas lebih jauh di 10.5. Kedua, praktis. Public key adalah string panjang yang sulit dibaca manusia. Address jauh lebih pendek dan punya mekanisme checksum yang mendeteksi kesalahan ketik.
Format address yang berbeda
Kalau kamu pernah melihat address Bitcoin, mungkin kamu perhatikan ada yang dimulai dengan angka 1, ada yang dengan 3, dan ada yang dengan bc1. Masing-masing merepresentasikan generasi teknologi yang berbeda dengan kemampuan dan efisiensi yang berbeda pula. Detail teknis di balik setiap format akan kita bahas di Bab 6.
Satu private key bisa menghasilkan banyak address berbeda tergantung format yang dipakai. Tapi semua address itu tetap milik satu private key yang sama. Inilah kenapa wallet modern bisa menampilkan beberapa address sekaligus tanpa membuat kamu kehilangan kendali.
Bagaimana wallet tahu address mana miliknya?
Kalimat barusan menyisakan satu pertanyaan. Kalau satu kunci bisa menghasilkan banyak address dalam beberapa format sekaligus, bagaimana wallet tahu persis address mana saja yang harus ia awasi? Dulu jawabannya berantakan: setiap wallet punya caranya sendiri, dan memindahkan cadangan dari satu aplikasi ke aplikasi lain sering berakhir dengan saldo yang tampak hilang padahal cuma tidak terdeteksi.
Jawaban modernnya adalah output descriptor, sebuah baris teks yang menyatakan aturannya secara lengkap. Bentuknya kira-kira begini:
wpkh([d34db33f/84h/0h/0h]xpub6.../0/*)
Dibaca satu per satu, isinya masuk akal. wpkh memberitahu formatnya, yaitu P2WPKH atau bc1q yang kita bahas di 6.4. Bagian dalam kurung siku adalah asal-usulnya, menandai perangkat mana dan jalur turunan mana yang dipakai. xpub6... adalah kunci publik induk yang bisa menurunkan seluruh anak. Dan /0/* berarti "semua address di cabang penerimaan", dengan bintang sebagai pengganti nomor urut yang tidak terbatas.
Satu baris itu memuat semua yang dibutuhkan untuk menemukan kembali seluruh danamu, tanpa mengandung satu pun rahasia. Ia memakai xpub, bukan xprv, jadi ia bisa memindai tapi tidak bisa membelanjakan. Kamu bisa menyimpannya bersama seed phrase, dan ia justru melengkapi: seed phrase memberi kemampuan menandatangani, descriptor memberi tahu di mana harus mencari.
Descriptor juga bisa menyatakan aturan yang lebih rumit dari sekadar satu kunci, termasuk multisig yang kita bahas di 6.5. Di situlah ia bertemu Miniscript dari 6.2: descriptor menjadi cara menuliskan syarat pembelanjaan yang bisa dibaca manusia sekaligus dipahami perangkat lunak. Karena itu, kalau kamu memakai skema yang lebih dari satu kunci, menyimpan descriptor bukan lagi tambahan yang bagus untuk dimiliki, melainkan bagian dari cadangan itu sendiri. Tanpa descriptor, seed phrase saja belum tentu cukup untuk menyusun ulang wallet multisig.
Private key adalah segalanya di Bitcoin. Tapi ada satu masalah praktis: private key adalah string 64 karakter hex yang tidak mungkin dihafal manusia.
Tidak ada yang bisa mengingat itu. Dan kalau hilang, Bitcoin-mu hilang selamanya.
Solusinya adalah seed phrase, juga disebut mnemonic phrase atau recovery phrase. Urutannya sebenarnya kebalikan dari yang sering dibayangkan orang. Wallet tidak mengubah private key menjadi kata. Yang terjadi: wallet membuat keacakan awal, menuliskannya sebagai serangkaian kata biasa, lalu dari kata-kata itulah seluruh private key-mu diturunkan. Seed phrase datang lebih dulu, private key menyusul.
Bagaimana cara kerjanya?
Seed phrase biasanya terdiri dari 12 atau 24 kata yang dipilih dari daftar 2048 kata standar yang disebut BIP-39 wordlist. Kata-kata ini bukan acak sembarangan. Mereka dipilih karena mudah dibedakan satu sama lain, menghindari kata yang mirip secara visual maupun bunyi.
Dengan 2048 kata dan 12 posisi, kombinasi kata yang mungkin adalah 2048¹². Tapi tidak semua kombinasi itu sah: kata terakhir membawa checksum, sehingga frasa 12 kata sebenarnya mewakili 128 bit entropi, dan frasa 24 kata mewakili 256 bit. Angka yang terakhir itu persis sebesar ruang private key yang kita hitung di 2.2, yaitu sekitar 1,2 × 10⁷⁷ kemungkinan. Peluang dua orang menghasilkan seed phrase yang sama secara tidak sengaja, secara praktis, adalah nol. Dua belas kata yang terdengar sepele itu memikul beban yang sama dengan angka 256 bit di bab sebelumnya.
Dari seed phrase ini, wallet bisa menghasilkan kembali seluruh hierarki kunci. Tidak hanya satu private key, tapi ratusan bahkan ribuan address sekaligus. Inilah yang disebut HD wallet, atau Hierarchical Deterministic wallet.
Satu seed phrase, satu wallet
Seed phrase adalah representasi lengkap dari seluruh wallet-mu. Siapapun yang punya seed phrase-mu, punya akses ke semua Bitcoin di wallet tersebut, dari semua address, semua format, semua network.
Ini berarti dua hal penting. Pertama, backup seed phrase adalah backup seluruh wallet. Tidak perlu backup tiap private key satu per satu. Kedua, seed phrase harus disimpan offline, di tempat yang aman, tidak pernah difoto, tidak pernah diketik di komputer yang terhubung internet, dan tidak pernah diberikan ke siapapun dengan alasan apapun.
Tidak ada perusahaan wallet yang legitimate yang pernah meminta seed phrase-mu. Tidak ada support yang butuh seed phrase-mu. Tidak ada form yang perlu kamu isi dengan seed phrase-mu. Kalau ada yang memintanya, itu penipuan. Selalu.
Masalah yang belum kita selesaikan
Saran standar soal seed phrase terdengar sederhana: tulis di kertas, simpan di tempat aman. Tapi coba pikirkan baik-baik dan kamu akan menemukan bahwa saran itu menarik dua arah sekaligus. Semakin banyak salinan yang kamu buat, semakin kecil risiko kehilangan, tapi semakin besar peluang salah satunya ditemukan orang. Semakin sedikit salinan dan semakin tersembunyi, semakin aman dari pencuri, tapi semakin mudah lenyap karena kebakaran, banjir, atau sekadar lupa di mana menaruhnya.
Tidak ada jumlah salinan yang menyelesaikan keduanya. Selama satu kertas berisi seluruh rahasia, kamu hanya bisa memilih risiko mana yang lebih kamu takuti.
Memecah rahasia jadi kepingan
Ada cara keluar dari tarik-menarik itu, dan namanya Shamir Secret Sharing. Rahasianya dipecah menjadi beberapa keping, misalnya lima, dengan syarat cukup tiga keping untuk menyusunnya kembali. Yang membuatnya menarik bukan pembagiannya, melainkan sifat matematisnya: satu atau dua keping tidak membocorkan apa-apa. Bukan membocorkan sebagian, bukan mempersempit tebakan, benar-benar nol. Sampai keping ketiga berkumpul, isinya sama tidak bergunanya dengan angka acak.
Artinya kamu bisa menyebar lima keping di lima tempat berbeda. Dua boleh hilang tanpa kamu kehilangan apa pun, dan dua boleh ditemukan orang tanpa mereka mendapat apa pun. Tarik-menarik tadi selesai.
Tapi ada satu kelemahan yang jarang disebut. Untuk memakainya, keping-keping itu harus disatukan kembali di satu perangkat, dan pada detik itu seluruh seed phrase-mu utuh kembali di satu tempat. Kalau perangkat itu sedang disusupi, semua kerja tadi sia-sia. Multisig yang kita bahas di 6.5 tidak punya masalah ini, karena kuncinya tidak pernah disatukan: masing-masing menandatangani sendiri-sendiri di perangkatnya sendiri. Karena itu banyak yang menganggap multisig lebih aman untuk jumlah besar, dan Shamir lebih cocok untuk cadangan yang jarang disentuh.
Dan kalau kamu meninggal?
Ini pertanyaan yang jarang dibahas buku Bitcoin, padahal justru paling sering terjadi. Sifat yang membuat Bitcoin benar-benar milikmu, yaitu tidak ada pihak yang bisa mengambilnya tanpa kuncimu, berlaku juga bagi keluargamu. Tidak ada bank yang bisa dihubungi, tidak ada surat kematian yang bisa ditunjukkan, tidak ada proses hukum yang bisa memaksa jaringan menyerahkan apa pun. Kalau pengetahuan itu ikut hilang bersamamu, dananya ikut hilang selamanya.
Yang mengejutkan, hambatan terbesarnya biasanya bukan teknis. Ahli warismu perlu tahu tiga hal, dan hanya yang ketiga yang berbau teknologi: bahwa Bitcoin itu ada, di mana kepingannya disimpan, dan bagaimana memakainya. Banyak kasus kehilangan bukan karena kriptografinya sulit, melainkan karena keluarga tidak pernah tahu ada yang harus dicari.
Pendekatannya bermacam-macam. Ada yang menitipkan sebagian keping Shamir ke pengacara atau anggota keluarga yang berbeda. Ada yang memakai multisig di mana satu kunci dipegang pihak ketiga yang hanya ikut menandatangani setelah kematian terbukti. Ada juga yang memakai timelock, sehingga sebuah transaksi ke ahli waris otomatis menjadi sah setelah jangka waktu tertentu berlalu tanpa diperbarui. Cara terakhir itu kita bahas di Bab 15.
Satu peringatan yang perlu ditutup dengan jujur: kerumitan itu sendiri adalah risiko. Skema warisan yang terlalu berbelit sudah menghilangkan lebih banyak Bitcoin daripada skema yang sederhana, karena pemiliknya sendiri lupa cara kerjanya, atau ahli warisnya menyerah di tengah jalan. Rencana yang benar-benar dipahami oleh orang yang akan menjalankannya jauh lebih berharga daripada rencana yang canggih di atas kertas.
Wallet adalah tempat menyimpan kunci. Tapi tidak semua wallet diciptakan sama. Ada yang lebih nyaman, ada yang lebih aman, ada yang keduanya dengan trade-off tertentu.
Perbedaan utama antara jenis wallet bukan di tampilannya, tapi di satu pertanyaan: di mana private key disimpan?
Hot Wallet
Hot wallet adalah wallet yang terhubung ke internet. Aplikasi di ponselmu, ekstensi browser, aplikasi desktop yang online, semuanya masuk kategori ini.
Kelebihannya mudah diakses, cepat untuk transaksi sehari-hari, dan biasanya gratis. Kekurangannya karena terhubung ke internet, ia lebih rentan terhadap serangan. Malware, phishing, atau celah keamanan di aplikasi bisa mengekspos private key-mu.
Hot wallet cocok untuk jumlah kecil yang sering dipakai, seperti dompet di saku. Kamu tidak menaruh semua tabunganmu di dompet fisik yang dibawa ke mana-mana.
Cold Wallet
Cold wallet adalah wallet yang tidak pernah terhubung ke internet. Private key dibuat dan disimpan di perangkat yang offline sepenuhnya.
Jenis yang paling umum adalah hardware wallet, perangkat fisik khusus seperti USB yang menyimpan private key di dalam chip yang terisolasi. Untuk menandatangani transaksi, kamu menghubungkan perangkat ini ke komputer, tapi private key tidak pernah keluar dari perangkat.
Yang paling sederhana adalah paper wallet, private key dan seed phrase dicetak atau ditulis di atas kertas dan disimpan di tempat aman. Tidak ada yang bisa meretasnya secara digital karena ia tidak digital.
Tapi paper wallet sudah lama tidak lagi direkomendasikan, dan alasannya penting untuk dipahami sebelum kamu membuatnya. Untuk membelanjakan dananya, kamu harus memasukkan private key itu ke perangkat yang terhubung internet, dan pada saat itu juga seluruh keunggulan offline-nya hilang. Ia juga tidak mendukung hierarki address seperti seed phrase modern, sehingga satu kertas hanya melayani satu address. Kalau tujuanmu penyimpanan jangka panjang, seed phrase yang ditulis tangan dan disimpan offline memberikan keamanan yang sama tanpa kelemahan-kelemahan itu.
Cold wallet cocok untuk menyimpan jumlah besar dalam jangka panjang, seperti brankas di rumah.
Aturan praktis
Tidak ada yang salah dengan memakai keduanya. Banyak pengguna Bitcoin menyimpan sebagian kecil di hot wallet untuk transaksi harian, dan menyimpan sebagian besar di cold wallet untuk jangka panjang.
Keamanan Bitcoin bukan tentang platform atau aplikasi yang paling canggih. Ia tentang seberapa baik kamu menjaga private key-mu dari jangkauan orang lain dan koneksi internet.
Sepenuhnya terputus: air-gapped signing
Hardware wallet biasa tetap ditancapkan ke komputer lewat USB saat menandatangani. Private key-nya memang tidak ikut keluar, tapi tetap ada jalur data antara perangkat rahasiamu dan mesin yang mungkin terinfeksi. Bagi sebagian orang, jalur itu sendiri sudah terlalu banyak.
Air-gapped signing menghapusnya sama sekali. Perangkat penandatangan tidak pernah menyentuh komputer, tidak lewat USB, tidak lewat Bluetooth, tidak lewat apa pun. Yang berpindah antara keduanya hanya gambar: kode QR yang ditampilkan di satu layar lalu dipotret kamera perangkat satunya.
Alurnya bersandar pada PSBT yang kita bahas di 3.6. Komputermu menyusun transaksi yang belum ditandatangani, lalu menampilkannya sebagai QR. Perangkat air-gapped memindai QR itu, menunjukkan isinya di layarnya sendiri supaya kamu bisa memeriksa jumlah dan alamat tujuan, lalu menandatanganinya. Hasilnya ditampilkan sebagai QR baru, dipindai balik oleh komputer, dan barulah disiarkan ke jaringan.
Perhatikan bahwa yang berpindah bolak-balik cuma transaksi, tidak pernah kuncinya. Dan karena jalurnya berupa gambar, malware di komputer tidak punya saluran untuk menjangkau perangkat penandatangan. Beberapa perangkat bahkan dijual tanpa port data sama sekali, hanya kamera, layar, dan slot kartu microSD.
Ada satu langkah yang tidak boleh dilewati, dan justru di situ kekuatannya. Layar perangkat penandatangan menunjukkan jumlah dan alamat tujuan sebelum kamu setujui. Periksa di layar itu, bukan di layar komputer. Kalau komputermu disusupi dan diam-diam mengganti alamat tujuan, satu-satunya tempat kebohongan itu ketahuan adalah layar perangkat yang tidak terhubung ke mana-mana.
Ada satu pertanyaan yang lebih penting dari memilih aplikasi wallet mana yang terbaik: siapa yang memegang private key-mu?
Jawabannya menentukan segalanya.
Custodial wallet
Custodial artinya ada pihak lain yang menyimpan private key-mu atas namamu. Exchange seperti Binance, Coinbase, atau Indodax adalah contoh paling umum. Ketika kamu membeli Bitcoin di sana dan tidak menariknya, Bitcoin itu ada di wallet mereka, bukan wallet-mu.
Kamu hanya punya saldo di buku rekening mereka. Seperti menabung di bank.
Ini nyaman. Tidak perlu urus seed phrase, tidak perlu takut salah kirim, ada customer service kalau ada masalah. Tapi ada harga yang harus dibayar: kamu tidak benar-benar memegang Bitcoin-mu.
Exchange bisa membekukan akunmu. Exchange bisa bangkrut. Exchange bisa diretas. Semua ini sudah terjadi, berkali-kali, di berbagai platform di seluruh dunia.
Non-custodial wallet
Non-custodial artinya kamu sendiri yang memegang private key. Tidak ada pihak ketiga yang bisa memblokir, membekukan, atau mengambil Bitcoin-mu.
Tapi tanggung jawabnya penuh ada di tanganmu. Tidak ada customer service. Tidak ada pemulihan akun. Kalau seed phrase hilang, Bitcoin hilang selamanya.
"Not your keys, not your coins"
Ini bukan sekadar slogan. Ini adalah prinsip fundamental Bitcoin. Selama private key ada di tangan orang lain, kamu tidak benar-benar memiliki Bitcoin. Kamu memiliki janji dari orang lain bahwa mereka akan memberikanmu Bitcoin kalau kamu memintanya.
Dan janji bisa diingkari.
Custodial wallet bukan pilihan yang setara dengan non-custodial. Ia adalah trade-off yang sadar: kamu menukar kedaulatan atas uangmu dengan kenyamanan. Pahami konsekuensinya sebelum memilih.
Kalau kamu pernah transfer uang lewat bank, kamu terbiasa dengan model yang sederhana: saldo berkurang di satu rekening, bertambah di rekening lain. Bank mencatat perubahannya. Selesai.
Bitcoin tidak bekerja seperti itu.
Di Bitcoin, tidak ada yang namanya "saldo." Tidak ada angka yang tersimpan di suatu tempat yang bertuliskan "kamu punya 1 BTC." Yang ada adalah sejarah transaksi, dan dari sejarah itulah dihitung berapa Bitcoin yang bisa kamu gunakan saat ini.
Transaksi adalah instruksi pemindahan
Setiap transaksi Bitcoin adalah sebuah pesan yang ditandatangani secara kriptografi, berisi dua hal utama: dari mana Bitcoin ini berasal, dan ke mana Bitcoin ini akan pergi.
"Dari mana" adalah referensi ke transaksi sebelumnya yang memberikan Bitcoin kepadamu. "Ke mana" adalah instruksi kepada siapa Bitcoin ini dikirim dan berapa jumlahnya.
Jaringan memverifikasi bahwa kamu memang berhak memindahkan Bitcoin yang kamu referensikan, lalu menyiarkan transaksi ke seluruh node. Kalau valid, ia masuk ke dalam block, dan menjadi bagian permanen dari blockchain.
Bukan angka, tapi rantai
Ini yang membuat Bitcoin berbeda secara fundamental dari sistem keuangan konvensional. Kepemilikanmu bukan angka di database. Ia adalah rantai kriptografi yang bisa ditelusuri sampai ke block pertama, Genesis Block, yang ditambang Satoshi pada Januari 2009.
Setiap Bitcoin yang ada di dunia ini bisa dilacak asal-usulnya. Tidak ada yang bisa muncul dari ketiadaan.
Di Bitcoin, "memiliki" Bitcoin artinya memiliki kemampuan untuk menandatangani transaksi yang mereferensikan output yang belum digunakan. Bukan angka di database, tapi kunci yang membuka sebuah output. Konsep ini akan jadi jauh lebih jelas di 3.2.
UTXO adalah singkatan dari Unspent Transaction Output. Ini adalah konsep paling penting di Bab 3, dan mungkin salah satu konsep paling sering disalahpahami di Bitcoin.
Lupakan konsep saldo
Di sistem perbankan, kepemilikanmu direpresentasikan sebagai angka: saldo. Bank menyimpan angka itu di database mereka dan mengubahnya setiap kali ada transaksi.
Bitcoin tidak punya saldo. Yang Bitcoin punya adalah kumpulan output transaksi yang belum digunakan. Setiap output itu punya nilai tertentu dan hanya bisa digunakan sekali, oleh orang yang punya kunci yang tepat. Itulah UTXO.
Analogi uang kertas
Cara termudah memahami UTXO adalah membayangkan uang kertas fisik. Kalau kamu punya uang kertas Rp 100.000, kamu tidak punya "saldo Rp 100.000." Kamu punya selembar kertas bernilai Rp 100.000 yang fisiknya ada di tanganmu.
Kalau kamu mau membayar Rp 30.000, kamu tidak bisa memotong uang kertasnya. Kamu serahkan seluruh Rp 100.000, pedagang mengambil Rp 30.000, dan mengembalikan Rp 70.000 kepadamu. UTXO bekerja persis seperti itu. Kamu tidak bisa membelanjakan sebagian. Kamu harus membelanjakan seluruhnya, dan sisanya kembali kepadamu sebagai UTXO baru.
"Saldo" Bitcoin sebenarnya
Kalau wallet-mu menampilkan "0.55 BTC", itu bukan satu angka di satu tempat. Itu bisa saja hasil penjumlahan dari beberapa UTXO: misalnya satu UTXO bernilai 0.05 BTC dari Alice, satu UTXO bernilai 0.12 BTC dari Bob, satu UTXO bernilai 0.08 BTC dari mining reward, dan satu UTXO bernilai 0.30 BTC dari Charlie. Wallet-mu menjumlahkan semua UTXO yang bisa kamu tandatangani, dan menampilkannya sebagai satu angka.
Kenapa UTXO?
Model UTXO punya beberapa keunggulan. Pertama, ia memudahkan verifikasi: untuk mengecek apakah sebuah transaksi valid, node hanya perlu memastikan UTXO yang direferensikan ada dan belum digunakan. Kedua, ia mencegah double-spend secara alami: begitu sebuah UTXO dipakai, ia hilang dari set UTXO yang aktif dan tidak bisa dipakai lagi.
Seluruh state Bitcoin bisa diringkas dalam satu set data: UTXO set. Ini adalah daftar semua output transaksi yang belum digunakan di seluruh jaringan. Per pertengahan 2026 ukurannya sekitar 11 GB, berisi lebih dari 170 juta UTXO. Setiap full node menyimpannya dan menggunakannya untuk memvalidasi setiap transaksi baru.
Siapa yang memilih UTXO untukmu?
Di simulasi tadi kamu memilih sendiri UTXO mana yang dipakai. Dalam pemakaian sehari-hari kamu tidak pernah melakukan itu. Kamu mengetik jumlah dan alamat, lalu menekan kirim. Tapi keputusan itu tetap harus diambil oleh seseorang, dan yang mengambilnya adalah wallet-mu. Proses itu namanya coin selection, dan ia menjelaskan banyak hal yang terasa aneh bagi pengguna baru.
Kenapa penting? Karena seperti yang kita lihat di 3.4, ongkos transaksi ditentukan oleh bentuknya, bukan nilainya. Setiap UTXO yang ikut dipakai menambah satu input, dan setiap input menambah ukuran. Memilih tiga UTXO kecil alih-alih satu UTXO besar bisa melipatgandakan fee untuk pembayaran yang jumlahnya sama persis.
Wallet menghadapi beberapa tujuan yang saling bertabrakan. Ia ingin fee semurah mungkin, jadi sebaiknya memakai sesedikit mungkin input. Ia juga ingin menghindari kembalian yang terlalu kecil, karena kembalian receh hari ini akan jadi UTXO yang mahal dibelanjakan besok. Dan idealnya ia tidak membocorkan lebih banyak informasi daripada yang perlu, karena setiap UTXO yang disatukan dalam satu transaksi memberitahu dunia bahwa keduanya milik orang yang sama. Kita bahas akibat privasinya di Bab 10.
Cara paling ideal adalah menemukan kombinasi yang jumlahnya pas, sehingga tidak perlu ada output kembalian sama sekali. Transaksinya jadi lebih kecil, lebih murah, dan tidak menyisakan jejak kembalian yang bisa dianalisis. Bitcoin Core menyebut pencarian ini branch and bound, dan ia memang mencoba menemukan kecocokan pas itu lebih dulu. Masalahnya kecocokan seperti itu jarang ada, jadi kalau pencarian gagal, wallet jatuh ke cara lain yang menerima adanya kembalian.
Di sinilah beberapa hal yang membingungkan pengguna baru jadi masuk akal. Kenapa mengirim jumlah kecil kadang jauh lebih mahal dari biasanya? Karena danamu tersebar di banyak UTXO receh, dan wallet terpaksa menyatukan banyak input. Kenapa fee bisa berbeda padahal jumlah yang dikirim sama? Karena bentuk transaksinya berbeda, meski nilainya sama.
Itu juga sebabnya banyak wallet menyediakan pilihan memilih UTXO secara manual, biasanya bernama coin control. Untuk pemakaian biasa, membiarkan wallet memilih sudah cukup. Tapi begitu kamu peduli pada privasi atau sedang menghadapi fee tinggi, mengambil alih keputusan itu bisa sangat berarti. Dan kalau danamu sudah terlanjur tersebar di banyak UTXO kecil, ada langkah khusus untuk merapikannya yang kita bahas di 10.4.
address dihitung node dari scriptPubKey, bukan data on-chain
Kirim transaksi dulu untuk melihat raw data UTXO yang dikonsumsi.
Setiap transaksi Bitcoin punya dua bagian utama: input dan output. Input adalah referensi ke UTXO yang kamu konsumsi. Output adalah instruksi ke mana Bitcoin pergi setelah transaksi ini.
Input
Input bukan angka. Input adalah pointer ke output transaksi sebelumnya yang belum digunakan. Ia berisi dua hal: referensi ke UTXO mana yang dikonsumsi, dan bukti bahwa kamu berhak menggunakannya berupa tanda tangan kriptografi dari private key-mu.
Satu transaksi bisa punya banyak input. Ini terjadi ketika kamu perlu menggabungkan beberapa UTXO kecil untuk membayar jumlah yang lebih besar, seperti menggabungkan beberapa lembar uang kertas kecil untuk membayar sesuatu yang nilainya lebih besar.
Output
Output menentukan ke mana Bitcoin pergi. Setiap output berisi dua hal: jumlah BTC yang dikirim, dan kondisi yang harus dipenuhi untuk membelanjakan output ini di masa depan. Kondisi itu biasanya sederhana: siapapun yang bisa membuktikan mereka memiliki private key yang sesuai dengan alamat ini boleh membelanjakan output ini.
Satu transaksi juga bisa punya banyak output. Kamu bisa mengirim ke beberapa alamat sekaligus dalam satu transaksi, dan output kembalian ke diri sendiri juga dihitung sebagai output terpisah.
Fee tersembunyi
Ada satu hal menarik: fee miner tidak ditulis secara eksplisit di dalam transaksi. Fee adalah selisih antara total nilai input dan total nilai output. Kalau kamu punya input senilai 0.1 BTC dan membuat output senilai 0.099 BTC, maka 0.001 BTC sisanya otomatis menjadi fee untuk miner yang memasukkan transaksimu ke dalam block.
Inilah kenapa sangat penting untuk selalu cek total output sebelum menandatangani transaksi. Kalau kamu lupa membuat output kembalian dan hanya membuat satu output ke penerima, seluruh selisihnya menjadi fee miner. Ada kasus nyata di mana seseorang membayar fee ribuan dolar karena lupa menambahkan output kembalian.
Selain jumlah dan tujuan, sebuah transaksi juga bisa membawa kondisi waktu: kapan paling awal ia boleh masuk ke block, atau berapa lama sebuah UTXO harus menunggu sebelum bisa dibelanjakan. Bitcoin punya empat mekanisme untuk itu, dan seluruhnya kita bongkar di Bab 15.
address dihitung node dari scriptPubKey, bukan data on-chain
Pilih skenario transaksi untuk melihat raw data-nya.
Fee di Bitcoin tidak bekerja seperti biaya transfer di bank. Tidak ada tarif tetap, tidak ada persentase dari nilai yang dikirim, dan tidak ada yang menetapkannya secara terpusat.
Fee di Bitcoin ditentukan oleh pasar.
Bagaimana fee dihitung
Di Bitcoin, fee dihitung berdasarkan ukuran transaksi dalam bytes, bukan berdasarkan nilai Bitcoin yang dikirim. Mengirim 1 BTC dan mengirim 0.00001 BTC bisa punya fee yang sama persis kalau ukuran transaksinya sama.
Satuan yang dipakai adalah satoshi per vbyte (sat/vB). Satu satoshi adalah unit terkecil Bitcoin: 0.00000001 BTC. Satu vbyte adalah ukuran transaksi dalam virtual bytes, satuan yang memperhitungkan efisiensi format transaksi modern.
Kenapa fee bisa naik turun
Setiap block Bitcoin punya kapasitas terbatas, sekitar 1-4 MB per block, dan block baru muncul rata-rata setiap 10 menit. Ketika banyak orang ingin bertransaksi sekaligus, ruang di block menjadi rebutan.
Miner memilih transaksi mana yang masuk ke block mereka. Mereka akan memprioritaskan transaksi yang menawarkan fee per vbyte tertinggi karena itu memaksimalkan pendapatan mereka. Transaksi dengan fee rendah akan menunggu lebih lama, atau bahkan tidak masuk ke block sama sekali kalau jaringan sangat sibuk.
Hubungan fee dan UTXO
Semakin banyak input dalam transaksi, semakin besar ukuran transaksinya dalam bytes, semakin tinggi fee yang perlu dibayar. Inilah kenapa wallet modern berusaha mengelola UTXO dengan efisien, mengumpulkan UTXO kecil-kecil ketika fee sedang murah, supaya tidak perlu menggunakan banyak input saat fee sedang mahal.
RBF (Replace by Fee)
Kalau transaksimu sudah disiarkan ke jaringan tapi belum masuk ke block dan fee-nya terlalu rendah, ada mekanisme yang disebut RBF atau Replace by Fee. Kamu bisa mengirim ulang transaksi yang sama dengan fee lebih tinggi, dan miner akan memprioritaskan versi yang baru. Satu syarat yang sering terlewat: transaksi aslinya harus sudah ditandai sebagai replaceable sejak dibuat. Kalau tidak ditandai, banyak node akan menolak versi penggantinya. Detail mekanismenya, termasuk alternatif kalau kamu penerima dan bukan pengirim, kita bahas di 9.3.
Fee bukan biaya yang diambil oleh "Bitcoin." Fee adalah insentif yang kamu tawarkan kepada miner supaya mereka memprioritaskan transaksimu. Tidak ada perusahaan, tidak ada platform, tidak ada pihak ketiga yang menerimanya. Fee langsung masuk ke miner yang menemukan block-mu.
getmempoolentry
Atur slider dan pilih fee rate untuk melihat raw data-nya.
Ketika kamu mengirim transaksi Bitcoin, ia tidak langsung masuk ke blockchain. Ia masuk ke antrian dulu.
Antrian itu disebut mempool, kependekan dari memory pool. Setiap node di jaringan Bitcoin menyimpan mempool-nya sendiri, daftar transaksi yang sudah disiarkan, sudah divalidasi, tapi belum dikonfirmasi ke dalam block.
Perjalanan sebuah transaksi
Begitu kamu menandatangani dan menyiarkan transaksi, ia menyebar ke seluruh node jaringan dalam hitungan detik melalui proses yang disebut gossiping. Setiap node meneruskan transaksi yang valid ke node-node tetangganya. Tapi masuk ke mempool bukan berarti selesai. Transaksimu masih menunggu di sana sampai seorang miner memutuskan untuk memasukkannya ke dalam block yang sedang mereka tambang.
Miner memilih transaksi
Miner tidak wajib memasukkan semua transaksi di mempool. Mereka memilih transaksi mana yang menghasilkan total fee tertinggi untuk block mereka. Strategi yang paling umum adalah memilih transaksi dengan fee per vbyte tertinggi terlebih dahulu sampai kapasitas block penuh. Inilah kenapa fee rate yang kamu pilih menentukan seberapa cepat transaksimu dikonfirmasi.
Mempool bisa penuh
Saat jaringan sangat sibuk, ukuran mempool bisa membengkak sampai ratusan megabyte. Transaksi dengan fee terlalu rendah bisa terjebak di sana berjam-jam, bahkan berhari-hari. Beberapa node bahkan akan menghapus transaksi dengan fee sangat rendah dari mempool mereka kalau memori sudah penuh.
Konfirmasi
Begitu transaksimu masuk ke sebuah block, ia mendapat satu konfirmasi. Setiap block baru yang ditambang di atas block tersebut menambah satu konfirmasi lagi. Semakin banyak konfirmasi, semakin sulit untuk membalik transaksi itu, semakin final transaksimu. Untuk transaksi kecil sehari-hari, satu konfirmasi biasanya sudah cukup. Untuk transaksi besar, kebanyakan orang menunggu 6 konfirmasi sebelum menganggap transaksi benar-benar final.
Mempool bukan satu antrian global yang sama untuk semua orang. Setiap node punya mempool-nya sendiri dengan aturan dan kapasitas yang bisa berbeda. Tapi karena node saling berbagi transaksi, secara praktis sebagian besar node punya isi mempool yang mirip.
Broadcast transaksi terlebih dahulu untuk melihat raw data-nya.
Kita sudah belajar semua komponen: UTXO, input, output, fee, mempool, konfirmasi. Sekarang kita satukan semuanya dalam satu gambaran utuh.
Inilah perjalanan lengkap sebuah transaksi Bitcoin, dari awal sampai akhir.
1. Pembuatan
Wallet memilih UTXO yang cukup untuk menutupi jumlah yang ingin dikirim plus fee. Ia menyusun transaksi dengan input yang mereferensikan UTXO tersebut, output ke penerima, dan output kembalian ke pengirim kalau ada sisa.
2. Penandatanganan
Private key pengirim digunakan untuk membuat tanda tangan kriptografi yang membuktikan kepemilikan UTXO yang direferensikan. Tanda tangan ini unik untuk transaksi ini dan tidak bisa dipakai ulang untuk transaksi lain.
3. Broadcast
Transaksi yang sudah ditandatangani disiarkan ke jaringan. Node pertama yang menerimanya memvalidasi: apakah UTXO-nya ada dan belum dipakai? Apakah tanda tangannya valid? Kalau ya, ia meneruskan ke node-node tetangganya.
4. Mempool
Transaksi masuk ke mempool di setiap node yang menerimanya. Ia menunggu di sana bersama ribuan transaksi lain. Fee rate menentukan seberapa cepat miner memilihnya.
5. Seleksi miner
Ketika seorang miner sedang menyusun block baru, ia memilih transaksi dari mempool berdasarkan fee per vbyte tertinggi. Transaksimu masuk ke kandidat block yang sedang ditambang.
6. Block ditemukan
Miner menemukan bukti kerja yang valid dan menyiarkan block ke jaringan. Node-node lain memverifikasi dan menambahkannya ke blockchain. UTXO yang direferensikan ditandai spent. Output baru menjadi UTXO segar milik penerima.
7. Konfirmasi bertambah
Setiap block baru yang ditambang di atas block tersebut menambah satu konfirmasi. Semakin banyak konfirmasi, semakin dalam transaksi tertanam di blockchain, semakin tidak mungkin dibalik.
PSBT: Partially Signed Bitcoin Transaction
Lifecycle di atas menggambarkan transaksi yang ditandatangani oleh satu pihak. Tapi bagaimana kalau transaksi perlu ditandatangani oleh beberapa pihak, misalnya multisig 2-of-3, atau kalau penandatanganan dilakukan di hardware wallet yang terpisah dari wallet yang menyusun transaksi?
PSBT (BIP 174) adalah format standar untuk transaksi yang sedang "dalam proses" ditandatangani. Ia memisahkan dua peran yang sebelumnya selalu digabung: peran penyusun transaksi (yang memilih UTXO, menentukan output, dan menghitung fee) dan peran penandatangan (yang punya private key). Dengan PSBT, kedua peran ini bisa dilakukan oleh perangkat atau pihak yang berbeda.
Alurnya: wallet software menyusun transaksi dan mengekspornya sebagai file PSBT. File ini berisi semua informasi yang dibutuhkan untuk menandatangani: input mana yang perlu ditandatangani, script yang harus dipenuhi, dan metadata tambahan. Hardware wallet atau penandatangan lain membaca file PSBT, memverifikasi detailnya, menambahkan tanda tangannya, dan mengembalikan PSBT yang sudah sebagian ditandatangani. Setelah semua tanda tangan terkumpul, PSBT digabungkan dan difinalisasi menjadi transaksi yang siap di-broadcast.
Seluruh proses ini, dari pembuatan sampai konfirmasi pertama, bisa selesai dalam 10 menit kalau jaringan tidak sedang sibuk dan fee-mu cukup. Tanpa bank, tanpa izin, tanpa jam kerja, tanpa hari libur. Di manapun di dunia, kapanpun.
Bayangkan sebuah mesin ajaib. Kamu bisa memasukkan apapun ke dalamnya: selembar kertas, satu kata, atau seluruh isi perpustakaan nasional. Mesin itu akan selalu mengeluarkan sebuah kartu berukuran sama, berisi deretan angka dan huruf sepanjang 64 karakter.
Itulah fungsi hash.
Seperti sidik jari, tapi untuk data
Setiap data punya "sidik jari" hash yang unik. Seperti sidik jari manusia, hash sebuah data bisa dipakai untuk memverifikasi identitasnya tanpa perlu membandingkan seluruh isinya. Dan seperti sidik jari, dari hash tidak bisa direkonstruksi data aslinya.
Kalau kamu ingin memastikan file yang kamu unduh tidak rusak atau dimanipulasi di tengah jalan, kamu bisa membandingkan hash-nya dengan hash yang disediakan oleh sumbernya. Kalau hash-nya sama, file-nya identik. Kalau berbeda satu bit pun, hash-nya berbeda total.
Sifat pertama: deterministik
Input yang sama selalu menghasilkan output yang sama. SHA-256("Bitcoin") akan selalu menghasilkan hash yang persis sama, di komputer manapun, kapanpun. Tidak ada variasi, tidak ada keacakan.
Sifat kedua: avalanche effect
Ubah satu huruf kecil saja, dan seluruh hash berubah total. "Bitcoin" dan "bitcoin" menghasilkan hash yang tidak punya kesamaan sama sekali. Tidak ada pola yang bisa ditebak, tidak ada transisi yang mulus. Satu perubahan kecil, gempa besar di output.
Ini seperti resep kue. Kalau kamu ganti satu gram gula dengan garam, rasanya berubah drastis. Tidak ada cara untuk menebak berapa banyak yang diganti hanya dari mencicipi hasilnya.
Sifat ketiga: satu arah
Dari output, tidak mungkin merekonstruksi input. Ini bukan soal kunci rahasia atau enkripsi. Ini soal matematika. Tidak ada persamaan yang bisa dibalik. Satu-satunya cara untuk menemukan input dari sebuah hash adalah mencoba semua kemungkinan satu per satu. Untuk SHA-256, dengan seluruh komputer di dunia bekerja bersama, membutuhkan waktu lebih dari usia alam semesta. Bukan hiperbola.
Sifat keempat: collision resistant
SHA-256 menghasilkan output 256-bit, artinya ada 2²⁵⁶ kemungkinan output yang berbeda. Kemungkinan dua input berbeda menghasilkan hash yang sama, secara praktis, adalah nol.
SHA-256 di Bitcoin
Bitcoin menggunakan SHA-256 hampir di mana-mana. Untuk menghasilkan alamat dari public key. Untuk menghubungkan block satu sama lain di blockchain. Sebagai inti dari proses mining. Setiap block berisi hash dari block sebelumnya, membentuk rantai yang tidak bisa dimanipulasi tanpa menghitung ulang seluruh rantai sesudahnya.
SHA-256 bukan enkripsi. Enkripsi bisa dibalik kalau kamu punya kuncinya. Hash tidak bisa dibalik sama sekali. Ini perbedaan fundamental yang sering disalahpahami, bahkan oleh orang yang sudah lama berkecimpung di dunia teknologi.
Di Bab 2 kita belajar bahwa private key menghasilkan public key melalui proses satu arah. Sekarang saatnya kita pahami mengapa proses itu tidak bisa dibalik.
Jawabannya ada di sebuah cabang matematika yang disebut Elliptic Curve Cryptography, atau ECC. Tapi kita tidak akan mulai dari matematikanya. Kita mulai dari masalahnya.
Masalah yang harus dipecahkan
Bayangkan kamu ingin membuat sistem di mana seseorang bisa membuktikan identitasnya tanpa mengungkapkan rahasia yang membuktikan identitas itu. Seperti ini: kamu ingin membuktikan bahwa kamu tahu jalan menuju sebuah tempat tersembunyi, tanpa harus menunjukkan petanya kepada siapapun. Kamu cukup tiba di sana. Orang lain bisa memverifikasi bahwa kamu sampai, tapi tidak bisa merekonstruksi rute yang kamu ambil.
Untuk itu, dibutuhkan operasi matematika yang punya satu sifat krusial: mudah dilakukan ke satu arah, tapi mustahil dibalik.
Analogi kunci kombinasi
Bayangkan sebuah kunci kombinasi dengan puluhan digit. Memutar kenopnya sesuai kombinasi yang kamu tahu: gampang, beberapa detik. Menemukan kombinasinya kalau kamu tidak tahu: tidak ada jalan selain mencoba, dan jumlah percobaannya jauh melampaui waktu yang tersedia bagi siapapun.
Perhatikan bahwa yang menghalangi bukan hilangnya informasi. Kombinasinya masih ada di sana, utuh, menentukan posisi kenop secara pasti. Yang menghalangi adalah ongkos untuk menemukannya kembali. Ini bedanya dengan mencampur cat, di mana komposisi aslinya benar-benar musnah. ECC bekerja seperti kunci kombinasi, bukan seperti cat: hasilnya sepenuhnya ditentukan oleh input, tapi menelusuri balik menuntut kerja yang tidak akan pernah selesai.
Lompatan di atas kurva
Kurva eliptik adalah garis matematika dengan bentuk tertentu. Di atas kurva ini, ada satu titik awal yang sudah disepakati semua orang, disebut titik generator G. Dari titik G, kita bisa "melompat" ke titik berikutnya dengan aturan matematika tertentu. Dari sana melompat lagi. Dan lagi. Setiap lompatan mengikuti aturan yang sama, tapi menghasilkan titik yang tersebar acak di seluruh kurva.
Private key adalah jumlah lompatan yang kamu lakukan. Bisa jadi angka yang sangat besar, sampai 2²⁵⁶ kemungkinan. Public key adalah titik akhir tempat kamu mendarat. Menghitung titik akhir dari jumlah lompatan: mudah, butuh milidetik. Menemukan jumlah lompatan dari titik akhir: mustahil secara komputasi. Tidak ada jalan pintas.
Format public key
Titik akhir di kurva eliptik adalah sepasang koordinat (x, y). Di Bitcoin, koordinat ini dikodekan menjadi string hex. Format yang paling umum dipakai sekarang adalah format compressed: prefix 02 kalau y positif, atau 03 kalau y negatif, diikuti koordinat x dalam hex. Karena kurva eliptik simetris, penerima bisa menghitung ulang y dari x dan prefix kapanpun dibutuhkan.
SECP256K1
Bitcoin menggunakan kurva eliptik spesifik yang disebut SECP256K1. Kurva ini dipilih karena sifat matematisnya yang efisien, aman, dan tidak ada pintu belakang yang tersembunyi.
Keamanan seluruh sistem kepemilikan Bitcoin berdiri di atas satu masalah matematika yang belum terpecahkan: dari titik akhir, tidak ada cara menemukan berapa lompatan yang dilakukan. Selama masalah ini belum terpecahkan, private key tidak bisa diturunkan dari public key.
Kita sudah tahu bahwa private key menghasilkan public key lewat ECC. Sekarang pertanyaannya: bagaimana private key digunakan untuk membuktikan kepemilikan tanpa mengungkapkan private key itu sendiri?
Jawabannya adalah tanda tangan digital. Di Bitcoin, mekanisme ini disebut ECDSA, Elliptic Curve Digital Signature Algorithm.
Analogi surat bermaterai
Bayangkan kamu mengirim surat resmi. Kamu tidak ingin siapapun bisa memalsukan suratmu, dan penerima harus bisa memastikan surat itu benar-benar dari kamu. Di dunia fisik, kamu pakai tanda tangan dan materai. Di dunia Bitcoin, kamu pakai ECDSA.
Bedanya dengan tanda tangan fisik: tanda tangan ECDSA unik untuk setiap pesan. Tanda tangan kamu untuk transaksi senilai 0.1 BTC hari ini berbeda sepenuhnya dengan tanda tangan kamu untuk transaksi senilai 0.1 BTC besok, meski private key yang dipakai sama. Tidak ada yang bisa menyalin tanda tanganmu dari satu transaksi dan menempelkannya ke transaksi lain.
Bagaimana signing bekerja
Ketika kamu mengirim Bitcoin, wallet mengambil data transaksi, menggabungkannya dengan private key-mu, dan menghasilkan dua angka: r dan s. Keduanya bersama-sama membentuk tanda tangan ECDSA. Proses ini juga melibatkan angka acak rahasia yang disebut nonce. Nonce ini harus benar-benar acak dan tidak boleh dipakai dua kali. Kalau satu nonce yang sama dipakai untuk menandatangani dua transaksi berbeda, private key-mu bisa dihitung balik sepenuhnya hanya dari kedua tanda tangan itu. Ini bukan kelemahan teoretis: kesalahan implementasi semacam ini pernah menguras wallet di dunia nyata. Perhatikan juga bahwa nonce di sini tidak ada hubungannya dengan nonce yang dicari miner di Bab 5. Namanya kebetulan sama, konsepnya berbeda.
Bagaimana verification bekerja
Siapapun yang punya public key dan tanda tangan bisa memverifikasi bahwa tanda tangan itu dibuat oleh pemilik private key yang sesuai, tanpa perlu tahu private key-nya. Jaringan Bitcoin melakukan verifikasi ini untuk setiap transaksi yang masuk. Kalau tanda tangan tidak valid, transaksi ditolak.
Satu input, satu tanda tangan
Setiap input dalam transaksi harus ditandatangani secara terpisah. Kalau transaksimu punya tiga input dari tiga UTXO berbeda, kamu perlu membuat tiga tanda tangan berbeda, masing-masing membuktikan kepemilikan UTXO yang bersangkutan.
ECDSA memungkinkan sesuatu yang luar biasa: kamu bisa membuktikan bahwa kamu tahu sebuah rahasia, tanpa mengungkapkan rahasianya. Jaringan tahu kamu punya private key yang benar, tapi tidak pernah melihat private key-mu.
Tanda tangani transaksi di Tahap 1 terlebih dahulu.
ECDSA sudah bekerja dengan baik selama Bitcoin ada. Tapi ada algoritma tanda tangan lain yang lebih elegan, lebih efisien, dan punya sifat-sifat yang membuka kemungkinan baru: Schnorr signature.
Schnorr diaktifkan di Bitcoin melalui upgrade Taproot pada November 2021.
Kenapa bukan Schnorr dari awal?
Selama hampir dua dekade, Schnorr signature dilindungi paten dan nyaris tidak dipakai siapapun. Paten itu kedaluwarsa pada 2008, beberapa bulan sebelum Bitcoin dirilis. Jadi alasan Satoshi memilih ECDSA bukan soal paten. Saat itu Schnorr belum distandarisasi, belum teruji luas, dan belum tersedia di OpenSSL, pustaka kriptografi yang jadi sandaran kode awal Bitcoin. ECDSA memenuhi ketiganya. Butuh bertahun-tahun sesudahnya bagi komunitas Bitcoin untuk mematangkan Schnorr dan mencapai konsensus untuk mengaktifkannya secara aman.
Keunggulan pertama: lebih sederhana
Schnorr punya bukti keamanan yang lebih kuat dan lebih mudah dianalisis. ECDSA lebih kompleks dan punya lebih banyak sudut yang bisa salah diimplementasikan, seperti masalah nonce yang kita bahas di 4.3.
Keunggulan kedua: linear dan bisa digabung
Ini yang paling penting. Tanda tangan Schnorr bisa digabungkan secara matematis. Kalau dua orang masing-masing punya private key, mereka bisa membuat satu tanda tangan tunggal yang mewakili keduanya. Orang luar tidak bisa membedakan apakah tanda tangan itu dari satu orang atau seratus orang.
Keunggulan ketiga: lebih privat
Karena tanda tangan bisa digabung, transaksi multisignature terlihat identik dengan transaksi biasa dari luar. Tidak ada yang bisa tahu apakah sebuah transaksi membutuhkan 2 dari 3 tanda tangan atau cukup 1.
Keunggulan keempat: lebih efisien
Tanda tangan yang digabung lebih kecil ukurannya dari kumpulan tanda tangan terpisah. Ini menghemat ruang di block dan menurunkan fee untuk transaksi kompleks.
MuSig
Kemampuan menggabungkan tanda tangan Schnorr ini diimplementasikan dalam protokol yang disebut MuSig. Dengan MuSig, beberapa pihak bisa berkolaborasi membuat satu tanda tangan tanpa ada satu pihak pun yang tahu private key pihak lain.
Taproot
Schnorr adalah fondasi dari Taproot, upgrade Bitcoin terbesar sejak SegWit. Taproot memungkinkan kondisi pengeluaran yang kompleks disembunyikan di balik tanda tangan tunggal yang sederhana. Selama semua pihak setuju, transaksi terlihat seperti transaksi biasa. Hanya kalau ada sengketa, kondisi kompleks itu terungkap.
Schnorr bukan sekadar upgrade teknis. Ia adalah fondasi dari privasi dan skalabilitas Bitcoin generasi berikutnya. Setiap transaksi Taproot yang terlihat sederhana bisa menyembunyikan logika yang sangat kompleks di baliknya.
Setiap block Bitcoin berisi ratusan bahkan ribuan transaksi. Ada satu pertanyaan sederhana yang butuh jawaban efisien: bagaimana cara membuktikan bahwa sebuah transaksi tertentu ada di dalam sebuah block, tanpa harus mengunduh dan memeriksa seluruh isi block?
Jawabannya adalah Merkle Tree.
Pohon dari hash
Merkle Tree adalah struktur data berbentuk pohon yang dibangun dari hash. Cara kerjanya: pertama, setiap transaksi di-hash menghasilkan Transaction ID atau TXID. Ini adalah "daun" dari pohon. Kedua, daun-daun itu dipasangkan dua-dua. Setiap pasangan digabungkan dan di-hash lagi, menghasilkan satu hash baru di level di atasnya. Ketiga, proses ini terus berulang ke atas sampai hanya tersisa satu hash tunggal di puncak.
Hash tunggal di puncak itu disebut Merkle Root.
Merkle Root di header block
Merkle Root inilah yang disimpan di header setiap block Bitcoin. Bukan seluruh daftar transaksi, tapi hasil dari struktur pohon yang hierarkis ini. Merkle Root merangkum seluruh isi block dalam satu hash berukuran 32 byte. Kalau satu transaksi berubah, TXID-nya berubah, yang mengubah hash di atasnya, sampai Merkle Root ikut berubah. Tidak ada yang bisa memanipulasi transaksi tanpa mengubah Merkle Root.
Merkle Proof
Yang membuat Merkle Tree benar-benar powerful adalah Merkle Proof. Untuk membuktikan bahwa transaksi T ada di dalam sebuah block, kamu tidak perlu melihat seluruh isi block. Kamu hanya perlu TXID transaksi T, beberapa hash "saudara" di sepanjang jalur dari T ke root, dan Merkle Root yang ada di header block. Dengan elemen-elemen itu, siapapun bisa memverifikasi bahwa T memang ada di block tersebut dengan menghitung ulang jalur hash dari bawah ke atas.
SPV (Simplified Payment Verification)
Merkle Proof adalah fondasi dari SPV, cara kerja wallet ringan seperti wallet di smartphone. Wallet SPV tidak mengunduh seluruh blockchain yang ratusan gigabyte. Ia hanya mengunduh header block, lalu meminta Merkle Proof untuk transaksi yang relevan. Cukup untuk memverifikasi pembayaran tanpa menjadi full node.
Untuk membuktikan satu transaksi di block yang berisi 2.000 transaksi, kamu hanya butuh sekitar 11 hash. Bukan 2.000, bukan 1.999, tapi 11. Ini karena pohon biner tumbuh secara logaritmik, efisiensi yang elegan dari matematika sederhana.
Klik salah satu Tx untuk melihat Merkle Root dan Merkle Proof dalam format raw.
Kita sudah mempelajari semua komponen kriptografi yang membentuk Bitcoin: hash function, ECC, ECDSA, Schnorr, dan Merkle Tree. Sekarang saatnya melihat bagaimana semuanya bekerja bersama sebagai satu sistem yang utuh.
Hash menjaga integritas blockchain
Setiap block berisi hash dari block sebelumnya. Ini berarti kalau kamu ingin mengubah transaksi di block lama, kamu harus menghitung ulang hash seluruh rantai block sesudahnya. Sementara itu jaringan terus menambang block baru. Kamu tidak akan pernah bisa mengejar. Inilah kenapa semakin banyak konfirmasi sebuah transaksi, semakin aman. Setiap block baru yang ditambang di atasnya membuat serangan semakin tidak mungkin.
ECC dan ECDSA menjaga kepemilikan
Tanpa private key yang benar, tidak ada yang bisa menandatangani transaksi yang valid dari alamat Bitcoin-mu. Jaringan memverifikasi setiap tanda tangan sebelum menerima transaksi. Tidak ada otoritas pusat, tidak ada password yang bisa direset, tidak ada "lupa sandi." Kepemilikan murni bersifat kriptografis.
Merkle Tree menjaga efisiensi verifikasi
Tanpa Merkle Tree, untuk memverifikasi satu transaksi kamu harus mengunduh seluruh block. Dengan Merkle Tree, kamu hanya butuh beberapa hash. Ini yang membuat Bitcoin bisa digunakan di perangkat dengan sumber daya terbatas tanpa harus mempercayai pihak ketiga.
Schnorr menjaga privasi dan skalabilitas
Dengan Schnorr, transaksi kompleks terlihat seperti transaksi biasa. Privasi meningkat, ukuran transaksi mengecil, dan fee turun. Ini bukan sekadar upgrade teknis tapi perubahan fundamental pada cara Bitcoin bisa digunakan.
Sistem yang saling mengunci
Yang membuat Bitcoin berbeda bukan satu komponen kriptografinya, tapi bagaimana semuanya saling mengunci. Hash memastikan riwayat tidak bisa diubah. ECC memastikan kepemilikan tidak bisa dipalsukan. Merkle Tree memastikan verifikasi bisa dilakukan secara efisien. Schnorr memastikan privasi dan efisiensi terus meningkat. Tidak ada satu titik kegagalan. Tidak ada satu pihak yang bisa memanipulasi sistem. Kepercayaan dibangun dari matematika, bukan dari institusi.
Satoshi tidak menemukan semua matematika ini. SHA-256, ECC, Merkle Tree, semuanya sudah ada sebelum Bitcoin. Yang Satoshi lakukan adalah merangkai komponen-komponen yang sudah ada menjadi satu sistem yang untuk pertama kalinya memecahkan masalah double-spend tanpa otoritas pusat. Itu yang membuat Bitcoin bukan sekadar teknologi, tapi sebuah penemuan.
Lalu bagaimana dengan komputer kuantum?
Dua kali di buku ini kita menyandarkan argumen pada kalimat "kalau suatu hari ada kemajuan komputasi yang menjadi ancaman": waktu membahas alamat di 2.3, dan waktu membahas P2PKH di 6.3. Sudah waktunya kalimat itu dijelaskan.
Yang terancam bukan seluruh kriptografi Bitcoin, melainkan satu bagiannya saja. Fungsi hash seperti SHA-256 relatif tahan: komputer kuantum mempercepat pencariannya, tapi tidak meruntuhkannya, dan memperpanjang ukuran hash sudah cukup untuk mengimbangi. Yang benar-benar rapuh adalah tanda tangan. Algoritma Shor, kalau dijalankan di komputer kuantum yang cukup besar, bisa menghitung private key dari public key. Persis kebalikan dari sifat satu arah yang kita bahas di 4.2, dan seluruh kepemilikan Bitcoin berdiri di atas sifat itu.
Tapi perhatikan syaratnya: public key harus terlihat lebih dulu. Di sinilah kebiasaan menyembunyikan public key di balik hash, yang kita bahas di 2.3, ternyata berubah dari sekadar kerapian menjadi perlindungan yang serius.
Berapa banyak yang sebenarnya terpapar?
Berbagai analisis pada 2026 memperkirakan sekitar 6,5 sampai 6,9 juta BTC, kira-kira sepertiga dari seluruh pasokan, sudah memperlihatkan public key-nya di blockchain. Angka itu terbagi dua. Sekitar 1,9 juta berasal dari format P2PK paling awal yang memang menaruh public key langsung di output, termasuk sekitar 1,7 juta yang diduga milik Satoshi sendiri. Sisanya, sekitar 4,1 juta, terpapar bukan karena formatnya melainkan karena pemakaian ulang alamat. Inilah harga nyata dari kebiasaan yang kita bahas di 10.5.
Artinya, sebagian besar keterpaparan itu bukan cacat protokol. Ia hasil pilihan pengguna, dan itu berarti sebagian besarnya bisa dihindari.
Perdebatan yang sedang berlangsung
Pada Februari 2026 muncul BIP-360, yang mengusulkan format output baru bernama P2MR. Ia mirip Taproot tapi membuang jalur key path, sehingga tidak ada public key yang tampil di blockchain saat output dibuat. Ini menutup keterpaparan untuk transaksi baru, tapi tidak menolong koin yang public key-nya sudah terlanjur terlihat.
Dua bulan kemudian muncul BIP-361, dan di sinilah perdebatannya memanas. Usulan itu menawarkan jadwal bertahap: setelah beberapa tahun, jaringan berhenti menerima output ke format lama, lalu beberapa tahun berikutnya verifikasi ECDSA dan Schnorr dimatikan sepenuhnya. Koin yang belum pindah menjadi beku secara permanen.
Reaksinya keras, dan kedua sisinya punya dasar. Yang menolak menyebutnya penyitaan: membekukan koin orang lain karena mereka tidak sempat atau tidak bisa pindah, termasuk pemilik yang sudah meninggal, bertentangan dengan janji bahwa tidak ada yang bisa mengambil Bitcoin-mu. Yang mendukung menjawab bahwa membiarkannya juga bukan sikap netral: kalau tidak dibekukan, koin itu akan diambil oleh siapa pun yang lebih dulu punya komputer kuantum, dan yang beredar bukan lagi Bitcoin yang dimiliki melainkan Bitcoin yang dicuri. Pilihannya bukan antara menyita dan tidak menyita, melainkan antara membekukan atau menyerahkan.
Bagian yang akan menua, dan bagian yang tidak
Per pertengahan 2026, kedua usulan itu masih berupa usulan dan belum diaktifkan. Kalau kamu membaca ini beberapa tahun kemudian, besar kemungkinan keadaannya sudah bergeser. Mungkin salah satunya sudah aktif, mungkin keduanya digantikan usulan lain, mungkin perdebatannya masih berjalan. Nama dan nomor BIP di atas memang akan menua, begitu juga angka 6,9 juta itu, dan begitu juga setiap perkiraan tentang kapan komputer kuantum yang cukup besar benar-benar ada. Riwayat perkiraan semacam itu penuh dengan tenggat yang lewat begitu saja.
Tapi empat hal berikut tidak akan menua, dan itulah yang sebenarnya perlu kamu bawa dari bagian ini. Pertama, yang terancam hanya tanda tangan, bukan fungsi hash. Kedua, ancaman itu baru berlaku setelah public key terlihat di blockchain. Ketiga, keterpaparan terbesar datang dari pemakaian ulang alamat, bukan dari cacat protokol. Keempat, setiap solusi pada akhirnya harus memilih antara membekukan koin yang terlanjur terpapar atau membiarkannya diambil, dan tidak ada pilihan ketiga yang menyenangkan semua pihak.
Kalau kamu ingin tahu keadaan terkini, yang perlu dicari bukan berita tentang komputer kuantum, melainkan dua pertanyaan yang jauh lebih membumi: apakah sudah ada format output tahan kuantum yang aktif di jaringan, dan apakah wallet yang kamu pakai sudah mendukungnya. Selebihnya kebisingan.
Dan apa pun jawaban kedua pertanyaan itu nanti, yang bisa kamu lakukan sendiri tetap sama sederhananya: jangan pakai ulang alamat. Selama public key-mu belum pernah tampil di blockchain, kamu tidak berada di kelompok yang terpapar, hari ini maupun sepuluh tahun lagi. Nasihat yang di 10.5 terdengar seperti soal privasi ternyata juga soal ketahanan jangka panjang.
Setiap pagi, miliaran orang di seluruh dunia bangun dan sepakat tentang satu hal tanpa pernah membicarakannya: jam berapa sekarang. Tidak ada yang memutuskan ini. Tidak ada rapat, tidak ada pemungutan suara. Tapi semua orang di zona waktu yang sama melihat jam yang sama dan sepakat bahwa sekarang adalah pukul tujuh pagi. Ini adalah konsensus.
Konsensus ada di mana-mana
Konsensus adalah proses di mana sekelompok pihak mencapai kesepakatan bersama tentang sesuatu. Ia bisa terjadi secara formal maupun informal, dengan otoritas pusat maupun tanpa. Di parlemen, konsensus dicapai melalui voting. Di pasar saham, konsensus tentang harga sebuah saham dicapai melalui transaksi jual beli yang terus-menerus. Di internet, protokol TCP/IP adalah konsensus tentang bagaimana data harus dikirim antar komputer. Di masyarakat, bahasa adalah konsensus tentang apa arti sebuah kata.
Konsensus yang mudah dan konsensus yang sulit
Kebanyakan konsensus yang kita kenal punya satu ciri yang sama: ada otoritas pusat yang menjadi jangkar. Bank sentral menetapkan nilai mata uang. Pemerintah menetapkan hukum. Otoritas ini membuat konsensus menjadi relatif mudah. Tapi bagaimana kalau tidak ada wasit? Bagaimana kalau semua pihak setara, tidak ada yang punya otoritas lebih, dan sebagian dari mereka bahkan mungkin tidak jujur? Ini adalah konsensus yang sulit. Dan ini persis masalah yang dihadapi Bitcoin.
Dua konsekuensi tidak mengikuti konsensus
Dalam sistem apa pun yang berbasis konsensus, pihak yang tidak mengikuti kesepakatan bersama menghadapi dua pilihan. Pertama, kembali ke konsensus. Mereka menyadari bahwa versi mereka berbeda dari mayoritas, menyesuaikan diri, dan melanjutkan bersama. Kedua, membentuk golongan sendiri. Mereka tetap mempertahankan versi mereka, memisahkan diri dari mayoritas, dan membentuk sistem paralel. Di dunia Bitcoin, ini disebut fork.
Masalah konsensus Bitcoin
Bitcoin tidak punya otoritas pusat. Yang ada adalah ribuan node yang tersebar di seluruh dunia, masing-masing menyimpan salinan blockchain-nya sendiri. Pertanyaannya: kalau dua node mendapat informasi berbeda tentang block yang sama, siapa yang benar? Bagaimana ribuan komputer yang tidak saling kenal bisa sepakat tentang satu versi sejarah yang sama? Solusi Bitcoin untuk masalah ini adalah Proof of Work, yang akan kita bahas di 5.2.
Satoshi bukan yang pertama memikirkan masalah konsensus tanpa otoritas pusat. Ilmuwan komputer sudah bergulat dengan ini sejak 1982 dalam apa yang disebut Byzantine Generals Problem. Yang Satoshi lakukan adalah menemukan solusi praktis pertama yang bisa bekerja di sistem terbuka, tanpa izin, dan tanpa kepercayaan awal antar pihak.
Soft fork dan hard fork
Ketika ada usulan perubahan aturan di Bitcoin, cara perubahannya menentukan apakah jaringan akan tetap bersatu atau terbelah permanen.
Soft fork adalah perubahan aturan yang backward compatible. Node lama masih bisa berkomunikasi dengan node baru, tapi node baru punya aturan yang lebih ketat. Kuncinya: aturan baru adalah himpunan bagian dari aturan lama, sehingga block yang sah menurut aturan baru otomatis juga sah menurut aturan lama. Node lama tidak menolaknya. Dan karena mayoritas hashrate menegakkan aturan baru, rantai merekalah yang tumbuh lebih panjang. Berkat aturan longest chain, node lama akhirnya mengikuti rantai yang lebih panjang, bahkan tanpa harus memperbarui software mereka. SegWit yang diaktifkan pada 2017 adalah contoh soft fork.
Hard fork adalah perubahan aturan yang tidak backward compatible. Node lama tidak bisa mengenali block dari node baru, dan sebaliknya. Split yang terjadi bersifat permanen. Dua rantai tumbuh sejajar selamanya, membentuk dua jaringan dan dua mata uang yang berbeda. Tidak ada longest chain yang bisa mendamaikan keduanya karena mereka sudah berbicara dalam bahasa yang berbeda. Bitcoin Cash yang memisahkan diri dari Bitcoin pada 2017 adalah contoh hard fork.
Perbedaan kuncinya: di soft fork, node lama tidak perlu tahu bahwa ada aturan baru. Di hard fork, node lama dan baru tidak bisa lagi hidup di jaringan yang sama.
Konsensus Bitcoin membutuhkan cara untuk membuktikan bahwa seseorang telah melakukan pekerjaan nyata sebelum bisa mengusulkan block baru. Cara itu disebut Proof of Work.
Teka-teki yang asimetris
Proof of Work adalah sebuah teka-teki matematika dengan sifat yang sangat spesifik: sangat sulit dipecahkan, tapi sangat mudah diverifikasi. Temukan sebuah angka yang jika digabungkan dengan data block lalu di-hash dengan SHA-256d, menghasilkan hash yang dimulai dengan sejumlah angka nol. Angka yang dicari itu disebut nonce. Tidak ada cara pintar untuk menemukannya. Satu-satunya cara adalah mencoba satu per satu, miliaran kali per detik, sampai hash yang memenuhi syarat ditemukan.
Target dan leading zeros
Jaringan Bitcoin menetapkan sebuah target: hash dari block header harus lebih kecil dari angka tertentu. Dalam praktiknya, ini berarti hash harus dimulai dengan sejumlah angka nol di depan. Semakin banyak angka nol yang dibutuhkan, semakin sulit teka-tekinya. Saat ini, hash block Bitcoin yang valid harus dimulai dengan sekitar 19 hingga 20 angka nol.
Kenapa ini efektif?
Karena sifat hash function yang sudah kita pelajari di Bab 4: output tidak bisa diprediksi. Tidak ada cara untuk tahu lebih dulu nonce mana yang akan menghasilkan hash yang valid. Setiap percobaan independen, hasil percobaan sebelumnya tidak membantu sama sekali. Ini berarti satu-satunya keunggulan yang bisa dimiliki seseorang adalah kecepatan komputasi.
Bukti yang bisa diverifikasi
Begitu nonce ditemukan, memverifikasinya hanya butuh satu kali perhitungan hash. Node lain tinggal mengambil block header, menghitung SHA-256d, dan memeriksa apakah hasilnya memenuhi target. Satu detik, selesai. Inilah asimetrinya: butuh triliunan percobaan untuk menemukan, tapi hanya satu percobaan untuk memverifikasi.
Proof of Work bukan penemuan Satoshi. Konsep ini pertama kali diusulkan oleh Cynthia Dwork dan Moni Naor pada 1993, dan dipopulerkan oleh Adam Back dalam sistem Hashcash pada 1997 untuk melawan spam email. Satoshi mengadaptasinya sebagai mekanisme konsensus untuk Bitcoin, penggunaan yang jauh melampaui tujuan aslinya.
Kita sudah tahu bahwa miner harus menemukan nonce yang membuat hash block header memenuhi target. Tapi apa sebenarnya isi block header itu? Dan bagaimana proses mining dari awal sampai akhir?
Anatomi sebuah block
Setiap block Bitcoin terdiri dari dua bagian: header dan body. Body berisi daftar transaksi yang dikumpulkan dari mempool. Header berisi 6 field dengan total ukuran tepat 80 bytes, dan inilah yang di-hash miner triliunan kali per detik.
Proses mining dari awal sampai akhir
Pertama, miner mengumpulkan transaksi dari mempool dan memilih yang membayar fee tertinggi. Kedua, miner menyusun block candidate: menghitung Merkle Root dari semua transaksi yang dipilih dan mengisi semua field header kecuali nonce. Ketiga, miner mulai mencoba nonce dari 0, 1, 2, dan seterusnya. Kalau seluruh ruang nonce habis tanpa hasil, miner mengubah timestamp atau urutan transaksi, yang mengubah Merkle Root, lalu mulai lagi dari nonce 0. Keempat, begitu hash yang valid ditemukan, miner segera menyiarkan block ke seluruh jaringan.
Coinbase transaction
Setiap block selalu berisi satu transaksi khusus di posisi pertama: coinbase transaction. Ia tidak punya input dari UTXO manapun. Ia menciptakan bitcoin baru dari nol sebagai hadiah untuk miner yang berhasil menemukan block. Coinbase transaction juga berisi field bebas yang disebut coinbase data. Satoshi mengisi field ini dengan pesan terkenal pada genesis block: "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks."
80 bytes. Itulah ukuran block header Bitcoin. Tidak lebih, tidak kurang. Seluruh keamanan jaringan bergantung pada proses meng-hash 80 bytes ini triliunan kali per detik, di seluruh dunia, setiap sepuluh menit.
Bitcoin dirancang untuk menghasilkan satu block setiap sepuluh menit. Tapi bagaimana jaringan bisa mempertahankan ritme ini ketika jumlah miner terus berubah?
Masalah yang harus dipecahkan
Kalau lebih banyak miner bergabung, hashrate jaringan naik, dan block ditemukan lebih cepat dari sepuluh menit. Kalau miner keluar, hashrate turun, dan block ditemukan lebih lambat. Tanpa mekanisme penyesuaian, interval antar block akan kacau.
Cara kerja difficulty adjustment
Setiap 2016 block, Bitcoin secara otomatis menyesuaikan difficulty. Angka 2016 bukan angka sembarang: dengan target 10 menit per block, 2016 block seharusnya membutuhkan tepat 2 minggu. Rumusnya sederhana: bandingkan waktu aktual yang dibutuhkan untuk menambang 2016 block terakhir dengan waktu idealnya. Kalau lebih cepat, difficulty naik. Kalau lebih lambat, difficulty turun.
Batas penyesuaian
Untuk mencegah perubahan yang terlalu ekstrem, Bitcoin membatasi penyesuaian maksimal 4 kali lipat naik atau 4 kali lipat turun dalam satu periode. Ini melindungi jaringan dari lonjakan atau penurunan hashrate yang sangat tiba-tiba.
Siapa yang memutuskan?
Tidak ada yang memutuskan. Setiap node menghitung adjustment ini secara mandiri menggunakan aturan yang sama, dan hasilnya selalu identik. Ini adalah contoh lain dari konsensus tanpa otoritas pusat.
Kenapa sepuluh menit?
Satoshi memilih sepuluh menit sebagai kompromi. Cukup cepat agar transaksi tidak menunggu terlalu lama, tapi cukup lambat agar block bisa menyebar ke seluruh jaringan sebelum miner lain menemukan block berikutnya.
Difficulty adjustment adalah salah satu mekanisme paling elegan di Bitcoin. Ia memastikan bahwa tidak peduli berapa banyak komputasi yang dilemparkan ke jaringan, satu block tetap muncul setiap sepuluh menit. Bitcoin tidak bisa di-spam dengan hashrate.
Setiap kali miner berhasil menemukan block yang valid, mereka mendapat dua jenis pendapatan: block reward dan transaction fee. Tapi ada satu bagian dari block reward yang unik di Bitcoin: ia berkurang setengahnya setiap empat tahun sekali.
Block reward
Block reward adalah bitcoin baru yang diciptakan dari nol melalui coinbase transaction. Ini adalah satu-satunya cara bitcoin baru masuk ke sirkulasi. Tidak ada cara lain. Ketika Satoshi menambang genesis block pada Januari 2009, block reward adalah 50 BTC. Setiap block baru menambahkan 50 BTC ke sirkulasi.
Halving
Setiap 210.000 block, block reward dipotong setengahnya. Dengan rata-rata 10 menit per block, 210.000 block membutuhkan waktu sekitar 4 tahun. Halving pertama terjadi pada November 2012: reward turun dari 50 menjadi 25 BTC. Halving kedua pada Juli 2016: turun menjadi 12,5 BTC. Halving ketiga pada Mei 2020: turun menjadi 6,25 BTC. Halving keempat pada April 2024: turun menjadi 3,125 BTC. Proses ini akan terus berlanjut sampai sekitar tahun 2140.
Kenapa 21 juta?
Di 1.5 kita bilang tidak ada penjelasan definitif kenapa Satoshi memilih angka 21 juta. Itu masih berlaku, dan tidak bertentangan dengan yang berikut ini. Yang tidak pernah dijelaskan Satoshi adalah kenapa ia memilih 50 BTC per block dan jarak 210.000 block. Begitu dua angka itu ditetapkan, 21 juta bukan lagi pilihan, melainkan konsekuensi yang mengikuti dengan sendirinya. Kalau semua era dijumlahkan dari 50 BTC, 25 BTC, 12,5 BTC, dan seterusnya sampai tak terhingga, hasilnya mendekati tepat 21 juta BTC. Ini adalah deret geometri yang konvergen.
Setelah reward nol
Kalau block reward nol, apa yang memotivasi miner? Transaction fee. Seiring reward turun, fee diharapkan naik karena permintaan ruang block meningkat. Ini adalah transisi bertahap selama lebih dari 100 tahun dari subsidi ke ekonomi fee murni.
Halving adalah mekanisme disinflasi yang sudah terprogram sejak awal. Perlu ditegaskan istilahnya: suplai Bitcoin tetap bertambah setiap block, hanya lajunya yang terus melambat menuju nol. Yang berkurang adalah kecepatan pencetakan, bukan jumlah yang beredar. Berbeda dengan bank sentral yang bisa mencetak uang kapanpun, jadwal emisi Bitcoin tidak bisa diubah oleh siapapun. Setiap node memverifikasi bahwa coinbase transaction tidak melebihi reward yang diizinkan.
Proof of Work memastikan bahwa untuk mengubah riwayat transaksi, seseorang harus mengulangi seluruh pekerjaan komputasi yang sudah dilakukan. Tapi ada satu skenario yang sering dibahas: bagaimana kalau seseorang menguasai lebih dari separuh hashrate jaringan?
Apa yang bisa dilakukan penyerang?
Dengan lebih dari 50% hashrate, penyerang bisa melakukan double-spend. Caranya: kirim bitcoin ke pihak lain, tunggu konfirmasi, sementara itu tambang rantai alternatif secara diam-diam. Karena punya hashrate lebih besar, rantai alternatif tumbuh lebih cepat. Setelah barang diterima, siarkan rantai alternatif. Berdasarkan aturan longest chain, jaringan mengadopsi rantai baru, dan transaksi pembayaran asli menghilang. Penyerang juga bisa menyensor transaksi tertentu, menolak memasukkan transaksi dari alamat tertentu ke dalam block.
Apa yang tidak bisa dilakukan penyerang?
Banyak yang salah paham. Penyerang tidak bisa mencuri bitcoin dari wallet orang lain. Tidak bisa memalsukan tanda tangan kriptografi. Tidak bisa mencetak bitcoin baru di luar jadwal halving. Tidak bisa mengubah aturan konsensus. Kriptografi yang mendasari Bitcoin tidak tersentuh oleh serangan ini.
Kenapa serangan ini tidak masuk akal secara ekonomi?
Untuk menguasai 51% hashrate Bitcoin saat ini, penyerang harus mengoperasikan lebih banyak ASIC dari seluruh miner jujur di dunia, dengan biaya hardware, listrik, dan infrastruktur mencapai miliaran dolar. Kalau serangan berhasil dan terdeteksi, kepercayaan terhadap Bitcoin runtuh, harga jatuh, dan seluruh hardware penyerang kehilangan nilainya. Penyerang menghancurkan investasinya sendiri.
Bagaimana kalau motivasinya bukan profit, tapi kehancuran?
Ini pertanyaan yang lebih serius. Bayangkan aktor sekelas negara yang rela menggelontorkan sumber daya hampir tak terbatas hanya untuk merusak Bitcoin, tanpa peduli kerugian ekonomi. Apakah Bitcoin bisa bertahan?
Jawabannya: ya, tapi membutuhkan respons aktif dari komunitas. Serangan 51% yang berkelanjutan akan terdeteksi sangat cepat. Ribuan node di seluruh dunia akan melihat reorg besar yang tidak wajar. Komunitas developer bisa mengusulkan perubahan algoritma hashing melalui hard fork. Kalau algoritma diganti, seluruh hardware ASIC yang digunakan penyerang seketika menjadi tidak berguna. Penyerang harus membeli hardware baru lagi dari awal, sementara komunitas hanya perlu memperbarui software.
Ini adalah perang yang sangat asimetris: mempertahankan jauh lebih murah dari menyerang. Setiap serangan baru membutuhkan investasi hardware baru yang masif. Setiap respons hanya membutuhkan update kode.
Serangan 51% dan desentralisasi
Inilah kenapa desentralisasi mining bukan sekadar idealisme, tapi pertahanan nyata. Semakin tersebar hashrate di seluruh dunia di antara ribuan operator independen, semakin mahal dan semakin sulit bagi satu pihak untuk menguasai mayoritas. Tidak ada satu titik yang bisa diserang, disuap, atau dipaksa untuk menyerah.
Ketahanan Bitcoin terhadap serangan 51% bukan hanya soal biaya. Ia juga soal insentif, desentralisasi, dan kemampuan komunitas untuk beradaptasi. Sebuah jaringan yang bisa mengganti algoritma hashing dalam hitungan hari adalah jaringan yang sangat sulit dihancurkan secara permanen, bahkan oleh aktor dengan sumber daya hampir tak terbatas.
Setiap transaksi Bitcoin yang pernah ada menyertakan satu pertanyaan dan satu jawaban. Pertanyaannya ada di output: "Siapa yang bisa membelanjakan bitcoin ini?" Jawabannya ada di input transaksi berikutnya: "Inilah bukti bahwa saya berhak membelanjakannya." Kedua hal ini dikodekan dalam program kecil yang disebut Script.
Bagaimana Script bekerja
Script adalah bahasa berbasis stack. Tidak ada variabel, tidak ada loop, tidak ada fungsi. Yang ada hanya dua hal: data dan perintah. Data didorong ke atas tumpukan (push). Perintah mengambil data dari tumpukan, melakukan sesuatu, dan mengembalikan hasilnya (pop). Eksekusi berjalan dari kiri ke kanan, satu instruksi pada satu waktu.
Bayangkan sebuah tumpukan piring. Kamu bisa menaruh piring di atas (push) atau mengambil piring dari atas (pop). Script bekerja persis seperti ini, tapi isinya adalah data dan hasil perhitungan.
Kenapa tidak Turing complete?
Satoshi sengaja merancang Script agar tidak Turing complete. Tidak ada loop, tidak ada rekursi, tidak ada kondisi yang bisa berjalan tanpa batas. Ini bukan kekurangan, tapi keputusan desain yang sangat disengaja. Setiap node di jaringan harus memverifikasi setiap transaksi. Kalau Script bisa berisi loop tanpa batas, satu transaksi jahat bisa melumpuhkan seluruh jaringan. Dengan Script yang terbatas, waktu eksekusi selalu terprediksi dan singkat.
scriptPubKey dan scriptSig
scriptPubKey adalah "kunci gembok" yang dipasang di output. Ia mendefinisikan kondisi yang harus dipenuhi untuk membelanjakan output tersebut. scriptSig adalah "kunci" yang dibawa oleh pengirim transaksi berikutnya. Ia berisi data yang diperlukan untuk memenuhi kondisi di scriptPubKey. Untuk transaksi SegWit, scriptSig digantikan atau dilengkapi oleh witness field yang bekerja dengan prinsip yang sama tapi lebih efisien.
Script adalah salah satu bagian Bitcoin yang paling sering disalahpahami. Banyak yang mengira Bitcoin hanya bisa melakukan transaksi sederhana. Padahal dengan Script, Bitcoin bisa mengekspresikan kondisi pengeluaran yang sangat kompleks, mulai dari multisig sampai time-locked transaction, semuanya tanpa server pusat dan tanpa kepercayaan.
Script terdiri dari dua jenis elemen: data dan opcodes. Data adalah nilai yang didorong ke stack. Opcodes adalah perintah yang mengoperasikan data tersebut.
Kategori opcodes
Stack operations memanipulasi isi stack tanpa perhitungan. OP_DUP menduplikasi nilai teratas. OP_DROP membuangnya. OP_SWAP menukar dua nilai teratas. Arithmetic operations melakukan matematika sederhana: OP_ADD menjumlahkan, OP_SUB mengurangi. Comparison operations membandingkan nilai: OP_EQUAL push TRUE kalau sama, OP_EQUALVERIFY langsung gagalkan script kalau tidak sama. Crypto operations melakukan kriptografi: OP_SHA256 menghash, OP_HASH160 dipakai untuk membuat alamat, OP_CHECKSIG memverifikasi tanda tangan. Flow control mengarahkan eksekusi: OP_IF untuk kondisi, OP_VERIFY untuk memastikan nilai TRUE, OP_RETURN untuk membuat output yang tidak bisa dibelanjakan.
Opcode yang dinonaktifkan
Bitcoin pernah punya opcode yang lebih ekspresif, termasuk operasi string, perkalian, dan bitwise. Sebagian besar dinonaktifkan pada 2010 setelah ditemukan celah keamanan. Operasi seperti OP_CAT bisa membuat stack tumbuh eksponensial dan digunakan untuk serangan DoS. OP_MUL dan OP_DIV berpotensi crash node karena perilaku edge case yang tidak terdefinisi dengan baik. Ini adalah contoh bagaimana Bitcoin memilih keamanan di atas fitur.
OP_RETURN
OP_RETURN layak disebut tersendiri. Ia menghentikan eksekusi script sepenuhnya dan menandai output sebagai provably unspendable, tidak mungkin dibelanjakan, bukan karena kunci yang salah, tapi karena script-nya dirancang untuk tidak pernah menghasilkan TRUE. Dipakai untuk menyematkan data kecil ke blockchain: hash dokumen, pesan, atau metadata lainnya. Batas ukuran datanya bukan aturan konsensus, melainkan relay policy yang bisa berbeda tiap node dan implementasi — konvensi lama: 80 bytes.
Miniscript
Menulis Bitcoin Script secara manual sangat rawan kesalahan. Script yang kelihatan benar bisa punya bug halus yang menyebabkan dana terkunci selamanya atau bisa dicuri. Miniscript adalah bahasa terstruktur yang dikompilasi ke Bitcoin Script, dirancang agar script bisa dianalisis secara otomatis: apakah bisa dibelanjakan, berapa biayanya, apakah ada kondisi yang saling bertentangan?
Miniscript mendefinisikan sekumpulan "fragment" yang bisa digabungkan secara aman: kunci tunggal, multisig, timelock, hash preimage, dan kombinasinya dengan AND, OR, dan threshold. Setiap fragment punya tipe yang ketat sehingga compiler bisa memverifikasi bahwa script yang dihasilkan benar-benar bisa dieksekusi sesuai intensi. Wallet yang mendukung Miniscript bisa membaca script apapun yang dibuat dengan Miniscript dan langsung tahu kondisi-kondisi pengeluarannya.
Dengan sekitar 200 opcode yang terdefinisi, sebagian besar tidak aktif, Script Bitcoin terlihat sederhana. Tapi kesederhanaan inilah yang membuatnya aman. Setiap opcode yang aktif telah diuji dan diaudit selama lebih dari satu dekade. Tidak ada kejutan.
| Opcode | Hex | Kepanjangan | Kategori | Efek ke stack |
|---|
P2PKH adalah singkatan dari Pay-to-Public-Key-Hash. Ini adalah format transaksi Bitcoin yang paling klasik dan paling banyak dipakai sejak Bitcoin lahir. Kalau kamu pernah melihat alamat Bitcoin yang dimulai dengan angka 1, itulah P2PKH.
Bagaimana P2PKH bekerja
Idenya sederhana: alih-alih menyebutkan kunci publik penerima secara langsung di output, yang disimpan adalah hash dari kunci publik tersebut. Inilah "Public Key Hash" dalam P2PKH. Ketika seseorang ingin membelanjakan output P2PKH, mereka harus membuktikan dua hal: pertama, bahwa mereka tahu kunci publik yang menghasilkan hash tersebut. Kedua, bahwa mereka punya private key yang sesuai dengan kunci publik itu, dibuktikan dengan tanda tangan digital.
scriptPubKey P2PKH
scriptPubKey adalah "kunci gembok" yang dipasang di output. Untuk P2PKH, bentuknya selalu sama: OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG. Artinya: siapapun yang bisa membuktikan bahwa mereka tahu kunci publik yang hash-nya adalah ini, dan bisa menandatangani dengan private key yang sesuai, boleh membelanjakan output ini.
scriptSig P2PKH
scriptSig adalah "kunci" yang dibawa pengirim. Untuk P2PKH hanya ada dua elemen: <Tanda Tangan> <Kunci Publik>. Sangat sederhana.
Proses verifikasi
Node menggabungkan scriptSig dan scriptPubKey, lalu menjalankannya sebagai satu script. Stack dijalankan dari kiri ke kanan. OP_DUP menduplikasi kunci publik. OP_HASH160 meng-hash satu salinannya. OP_EQUALVERIFY membandingkan hasil hash dengan hash yang tersimpan di output. Kalau cocok, OP_CHECKSIG memverifikasi tanda tangan terhadap kunci publik. Kalau semua berhasil, hasilnya TRUE dan transaksi valid.
Kenapa hash, bukan kunci publik langsung?
Karena hash memberikan lapisan keamanan ekstra. Selama output belum dibelanjakan, kunci publik tidak pernah terekspos di blockchain. Yang tampil hanya hash-nya. Ini berarti bahkan kalau suatu hari nanti komputasi kuantum bisa memecahkan kriptografi kurva eliptik, bitcoin yang belum pernah dibelanjakan masih terlindungi oleh hash.
P2PKH sudah ada sejak block pertama Bitcoin. Meski sekarang ada format yang lebih efisien seperti P2WPKH, P2PKH tetap valid dan masih banyak digunakan. Kompatibilitas ke belakang adalah salah satu prinsip utama Bitcoin.
P2PKH bekerja dengan baik selama bertahun-tahun. Tapi seiring Bitcoin tumbuh, ada masalah yang semakin mendesak: block penuh, fee mahal, dan satu celah teknis yang disebut transaction malleability.
Transaction malleability
Transaction malleability adalah kemampuan pihak ketiga untuk mengubah Transaction ID (txid) sebuah transaksi tanpa membatalkan transaksinya. Ini mungkin karena txid dihitung dari seluruh data transaksi termasuk scriptSig, dan scriptSig bisa dimodifikasi sedikit tanpa membuat tanda tangan tidak valid. Malleability membuat Lightning Network dan payment channel yang lebih kompleks sangat sulit dibangun di atas Bitcoin.
SegWit (Segregated Witness)
SegWit diaktifkan pada Agustus 2017 melalui soft fork. Idenya elegan: pisahkan data tanda tangan (witness data) dari data transaksi utama. Dalam transaksi SegWit, scriptSig dikosongkan. Data tanda tangan dipindahkan ke struktur terpisah yang disebut witness field. Karena txid sekarang hanya dihitung dari data transaksi tanpa witness data, transaction malleability sepenuhnya teratasi. Sebagai bonus, witness data mendapat diskon biaya: satu byte witness dihitung sebagai 0.25 vbyte, bukan 1 byte.
P2WPKH
P2WPKH adalah singkatan dari Pay-to-Witness-Public-Key-Hash, versi SegWit dari P2PKH. scriptPubKey-nya jauh lebih pendek: hanya OP_0 <Public Key Hash>. OP_0 menandakan ini adalah SegWit version 0, diikuti hash kunci publik 20 bytes. Tanda tangan dan kunci publik tidak lagi ada di scriptSig, keduanya ada di witness field yang diproses secara terpisah.
Alamat P2WPKH
Alamat P2WPKH menggunakan format bech32 yang dimulai dengan bc1q. Format ini hanya menggunakan huruf kecil, tidak mengandung karakter yang membingungkan seperti 0, O, I, dan l, dan punya error detection yang lebih baik dari Base58Check.
Kompatibilitas
Node lama yang tidak mengerti SegWit melihat scriptPubKey OP_0 <hash> sebagai output yang selalu bisa dibelanjakan. Ini disengaja sebagai bagian dari desain soft fork: node lama tidak perlu memvalidasi witness data, mereka hanya perlu tidak menolaknya.
SegWit adalah salah satu upgrade terbesar dalam sejarah Bitcoin. Ia menyelesaikan transaction malleability, membuat fee lebih efisien, dan membuka jalan untuk Lightning Network. Semua ini dicapai melalui soft fork, tanpa memecah jaringan.
Bayangkan sebuah perusahaan yang ingin menyimpan bitcoin dengan aturan: tidak boleh ada satu orang pun yang bisa memindahkan dana sendirian. Dibutuhkan setidaknya 2 dari 3 direktur untuk menyetujui setiap transaksi. Bagaimana Bitcoin mengekspresikan aturan ini?
P2MS (bare multisig)
Sebelum P2SH, Bitcoin punya format multisig yang disebut P2MS atau Pay-to-Multisig. Scriptnya langsung meletakkan semua kunci publik di scriptPubKey: OP_2 <pubkey1> <pubkey2> <pubkey3> OP_3 OP_CHECKMULTISIG. Masalahnya, semua kunci publik langsung terekspos di blockchain sejak output dibuat. Lebih buruk lagi, tidak ada format alamat standar untuk P2MS. Pengirim harus tahu struktur script lengkapnya, bukan sekadar alamat.
P2SH (Pay-to-Script-Hash)
P2SH diaktifkan pada 2012 sebagai soft fork. Idenya brilian: sembunyikan script yang kompleks di balik sebuah hash. Penerima membuat redeem script yang mendefinisikan kondisi pengeluaran, lalu meng-hash-nya. Hash inilah yang dimasukkan ke scriptPubKey: OP_HASH160 <redeem script hash> OP_EQUAL. Hanya 3 elemen. Script yang sebenarnya baru terungkap saat output dibelanjakan.
Alamat P2SH
Hash dari redeem script di-encode menggunakan Base58Check dengan prefix yang menghasilkan alamat dimulai dengan angka 3. Pengirim cukup tahu alamat ini tanpa perlu tahu struktur multisig di dalamnya.
Keuntungan P2SH
Pertama, privasi: script kondisi yang kompleks tidak terekspos sampai saat dibelanjakan. Kedua, standarisasi: penerima bisa memberikan alamat biasa tanpa harus menjelaskan struktur multisig mereka kepada pengirim. Ketiga, beban di penerima: biaya untuk menyertakan script yang panjang ditanggung penerima saat spending, bukan pengirim saat membuat output.
P2SH-P2WPKH
P2SH bisa juga membungkus script SegWit, disebut P2SH-P2WPKH atau wrapped SegWit. Dipakai sebagai jalan tengah untuk wallet lama yang belum mendukung bech32 tapi ingin menikmati keuntungan SegWit. Alamatnya tetap dimulai dengan 3 tapi di dalamnya berisi witness program.
P2SH mengubah cara Bitcoin mengekspresikan kondisi pengeluaran yang kompleks. Alih-alih meletakkan seluruh logika di output, logikanya disembunyikan di balik hash. Ini adalah contoh bagaimana Bitcoin berkembang melalui abstraksi yang elegan, tanpa mengubah aturan dasar.
Taproot diaktifkan pada November 2021 melalui soft fork. Ia adalah upgrade Bitcoin terbesar sejak SegWit, dan membawa tiga perubahan sekaligus: Schnorr signature, MAST, dan sebuah format output baru bernama P2TR.
Masalah yang diselesaikan Taproot
Sebelum Taproot, ada dua masalah yang mengganggu. Pertama, privasi: transaksi multisig, lightning channel, dan transaksi sederhana terlihat berbeda di blockchain. Siapapun bisa melihat bahwa sebuah output adalah multisig atau smart contract hanya dari bentuk scriptnya. Kedua, efisiensi: script yang kompleks dengan banyak kondisi harus menyertakan seluruh kondisi saat dibelanjakan, bahkan kondisi yang tidak dipakai.
Schnorr signature
Schnorr signature menggantikan ECDSA untuk transaksi Taproot. Keunggulan utamanya adalah key aggregation: beberapa kunci publik bisa digabungkan menjadi satu kunci publik tunggal. Ini berarti multisig 3-dari-5 bisa terlihat persis sama dengan transaksi biasa satu penandatangan di blockchain. Tidak ada yang bisa membedakan keduanya hanya dari melihat output.
MAST (Merkelized Alternative Script Trees)
MAST memungkinkan sebuah output memiliki banyak kondisi pengeluaran alternatif, masing-masing sebagai cabang dari Merkle tree. Saat dibelanjakan, pengirim hanya perlu mengungkapkan cabang yang dipakai, bukan seluruh pohon. Cabang yang tidak dipakai tetap tersembunyi selamanya. Ini menghemat ruang di blockchain dan menjaga privasi kondisi yang tidak terpakai.
P2TR (Pay-to-Taproot)
P2TR menggabungkan Schnorr dan MAST dalam satu format output yang elegan. scriptPubKey-nya sangat sederhana: OP_1 <tweaked public key>. OP_1 menandakan SegWit version 1, diikuti sebuah kunci publik 32 bytes yang sudah dimodifikasi untuk menyertakan komitmen terhadap seluruh script tree. Output P2TR bisa dibelanjakan dengan key path (tanda tangan Schnorr langsung) atau script path (ungkap salah satu cabang MAST).
Alamat P2TR
Alamat P2TR menggunakan format bech32m yang dimulai dengan bc1p. Berbeda dari bech32 yang dipakai P2WPKH, bech32m mempunyai checksum yang diperbarui untuk menangani panjang witness program yang berbeda.
Tapscript
Tapscript adalah versi Script yang dipakai di dalam script path spending Taproot. Ia bukan bahasa baru, melainkan revisi dari Script lama dengan beberapa perubahan penting. OP_CHECKSIG tetap ada dan kini bekerja dengan Schnorr signature. Yang dinonaktifkan adalah OP_CHECKMULTISIG, digantikan oleh opcode baru bernama OP_CHECKSIGADD. Ini memungkinkan multisig yang lebih efisien karena semua tanda tangan bisa diperiksa secara paralel, bukan satu per satu seperti di Script lama.
Tapscript juga memperkenalkan OP_SUCCESS: sekelompok opcode yang saat ini selalu menghasilkan sukses. Ini bukan bug, melainkan desain yang disengaja untuk memudahkan upgrade Script di masa depan tanpa hard fork. Kalau suatu saat OP_SUCCESS tertentu diberi makna baru melalui soft fork, script lama yang menggunakannya otomatis mendukung semantik baru.
Taproot bukan sekadar upgrade teknis. Ia adalah perubahan filosofi: dari "buktikan semuanya" menjadi "buktikan hanya yang perlu dibuktikan." Kondisi yang tidak terpakai tidak perlu diungkapkan. Ini membuat Bitcoin lebih privat, lebih efisien, dan lebih ekspresif sekaligus.
Bitcoin by design lambat dan mahal untuk transaksi kecil. Setiap transaksi harus dikonfirmasi di blockchain, menunggu 10 menit per block, dan bersaing dengan transaksi lain untuk ruang block yang terbatas. Di saat jaringan ramai, fee bisa mencapai puluhan dolar untuk transaksi senilai beberapa sen.
Ini bukan bug. Ini trade-off yang disengaja.
Mengapa block dibatasi?
Block size yang besar berarti node harus menyimpan dan memproses lebih banyak data. Semakin besar block, semakin mahal biaya menjalankan node. Semakin mahal biaya node, semakin sedikit orang yang mau menjalankannya. Semakin sedikit node, semakin terpusat jaringan. Sentralisasi adalah musuh utama Bitcoin.
Satoshi memahami ini. Bitcoin dirancang untuk menjadi settlement layer yang aman, bukan sistem pembayaran ritel. Setiap transaksi yang masuk ke blockchain adalah transaksi yang sudah final dan tidak bisa diubah, seperti settlement antar bank, bukan seperti gesek kartu di kasir.
Trilemma skalabilitas
Ada tiga sifat yang diinginkan dari sistem pembayaran: terdesentralisasi, aman, dan skalabel. Secara bersamaan, ketiganya tidak bisa dicapai sepenuhnya dalam satu layer. Bitcoin memilih desentralisasi dan keamanan. Skalabilitas diselesaikan di layer lain.
Layer 2 sebagai jawaban
Solusinya bukan memperbesar block, tapi membangun layer di atas Bitcoin yang bisa menangani transaksi dengan cepat dan murah, tapi tetap mewarisi keamanan Bitcoin sebagai settlement layer akhir. Lightning Network adalah implementasi paling matang dari ide ini.
Perdebatan ini bukan perdebatan teoretis. Ia sempat membelah komunitas Bitcoin pada 2017 dan berakhir dengan hard fork yang melahirkan Bitcoin Cash, sebuah jaringan terpisah dengan block yang jauh lebih besar.
Keduanya masih berjalan sampai hari ini, jadi kamu bisa melihat sendiri konsekuensi dari dua pilihan itu. Bitcoin Cash memang memberikan fee yang jauh lebih murah, persis seperti yang dijanjikan. Yang juga terjadi: hash rate yang mengamankannya tinggal sebagian kecil dari Bitcoin, dan adopsinya jauh lebih sempit. Rantai dengan hash rate lebih rendah lebih murah untuk diserang, dan itu konsekuensi aritmetika, bukan pendapat.
Apakah harga itu sepadan dengan fee yang lebih murah adalah pertanyaan yang sampai sekarang masih diperdebatkan dengan sungguh-sungguh oleh orang-orang yang paham betul apa yang mereka bicarakan. Yang penting kamu pahami dari bab ini bukan siapa yang menang, melainkan kenapa memperbesar block bukan pilihan gratis. Setiap tambahan kapasitas dibayar dengan naiknya biaya menjalankan node, dan node adalah yang membuat aturan Bitcoin bisa ditegakkan tanpa mempercayai siapapun.
Lightning Network dibangun di atas satu konsep sederhana: tidak semua transaksi perlu dicatat di blockchain. Yang perlu dicatat hanya dua hal: saat channel dibuka dan saat channel ditutup.
Ide dasarnya
Bayangkan dua orang, Alice dan Bob, yang sering bertransaksi satu sama lain. Daripada setiap transaksi masuk ke blockchain, mereka bisa membuka sebuah payment channel: mengunci sejumlah bitcoin di sebuah multisig address bersama, lalu bertransaksi di antara mereka secara off-chain sesuka hati, dan hanya menetapkan saldo akhir ke blockchain saat selesai. Selama channel terbuka, Alice dan Bob bisa saling mengirim bitcoin ribuan kali tanpa satu pun transaksi menyentuh blockchain. Hanya dua transaksi on-chain yang terjadi: satu untuk membuka channel, satu untuk menutupnya.
Multisig 2-dari-2: fondasi channel
Di balik setiap payment channel adalah sebuah multisig 2-dari-2. Berbeda dengan multisig biasa seperti di P2SH yang bisa 2-dari-3 atau 3-dari-5 dengan toleransi satu pihak absen, multisig Lightning tidak punya toleransi sama sekali. Kedua pihak harus menandatangani untuk menutup channel secara kooperatif. Ini bukan kelemahan, ini adalah desain yang disengaja. Tidak ada satu pihak pun yang bisa unilateral mengambil dana kecuali lewat mekanisme yang sudah disepakati sebelumnya.
Commitment transaction
Setiap kali saldo berubah di dalam channel, Alice dan Bob saling bertukar commitment transaction: transaksi yang belum disiarkan yang merepresentasikan distribusi saldo terkini. Kalau salah satu pihak ingin keluar dari channel, mereka bisa menyiarkan commitment transaction terakhir ke blockchain.
Tiga skenario penutupan channel
Pertama, penutupan kooperatif: kedua pihak setuju, menandatangani closing transaction bersama, dana langsung dibagi sesuai saldo akhir. Ini yang paling efisien. Kedua, penutupan paksa: salah satu pihak menghilang atau tidak mau kooperatif. Pihak yang jujur bisa menyiarkan commitment transaction terakhir secara unilateral, tapi harus menunggu time-lock selesai sebelum bisa mengambil dananya. Ketiga, hukuman atas kecurangan: kalau seseorang mencoba menyiarkan commitment transaction lama yang lebih menguntungkan dirinya, pihak lain punya window waktu untuk mendeteksi dan menyiarkan revocation key. Hasilnya: pihak yang curang kehilangan seluruh dananya di channel.
Insentif yang membuat curang tidak masuk akal
Kalau Alice mencoba curang dengan menyiarkan state lama, Bob bisa mengambil seluruh dana di channel sebagai hukuman, bukan hanya miliknya saja. Alice kehilangan segalanya. Ini membuat kecurangan sangat mahal dan irasional secara ekonomi.
Tapi bagaimana kalau Bob sedang tidur?
Di sinilah seluruh mekanisme hukuman tadi punya syarat yang belum kita sebut. Bob hanya bisa menghukum kalau ia melihat state lama itu muncul di blockchain, dan ia harus melihatnya sebelum timelock Alice habis, biasanya sekitar satu hari. Kalau node Bob mati, ponselnya kehabisan baterai, atau ia sedang berlibur seminggu, Alice bisa curang dan lolos begitu saja.
Ini bukan celah teoretis. Justru inilah beda paling nyata antara Bitcoin on-chain dan Lightning. Bitcoin biasa tidak menuntut apa pun darimu setelah transaksi dikonfirmasi: kamu bisa hilang sepuluh tahun dan dananya tetap aman. Lightning menuntut kehadiran, karena keamanannya bersandar pada seseorang yang mengawasi dalam jendela waktu tertentu.
Jawabannya adalah watchtower, sebuah layanan yang mengawasi blockchain menggantikan kamu. Kamu menitipkan padanya sepotong data terenkripsi untuk setiap state yang dicabut. Data itu tidak memberitahu watchtower siapa kamu, berapa saldomu, atau channel mana yang kamu punya. Ia baru berguna kalau state lama yang cocok benar-benar muncul di blockchain, dan pada saat itulah watchtower bisa menyusun penalty transaction dan menyiarkannya untukmu.
Yang menarik, kamu tidak perlu memercayai watchtower. Ia tidak bisa mencuri danamu, tidak bisa membuka channel-mu, dan tidak tahu apa-apa selama tidak ada kecurangan. Risiko terburuknya cuma satu: ia lalai dan tidak melakukan apa-apa, yang membuatmu kembali ke posisi seperti tidak punya watchtower sama sekali. Karena itu banyak pengguna menitip ke beberapa watchtower sekaligus.
Jadi kalimat "curang tidak masuk akal" tadi perlu satu tambahan supaya jujur: curang tidak masuk akal selama ada yang mengawasi. Menyediakan pengawas itu, entah lewat node yang selalu menyala atau lewat watchtower, adalah ongkos yang dibayar Lightning demi kecepatannya.
Payment channel bukan penemuan Lightning Network. Benihnya sudah ada di kode Bitcoin paling awal: Satoshi menyertakan mekanisme penggantian transaksi berbasis nSequence yang ia jelaskan lewat korespondensi, bukan lewat whitepaper. Idenya lalu dikembangkan beberapa peneliti sebelum Lightning. Kenapa mekanisme awal itu gagal bekerja, kita bahas di 15.3. Yang Lightning lakukan adalah menghubungkan banyak channel menjadi jaringan yang bisa melakukan routing pembayaran antar pihak yang tidak punya channel langsung.
Payment channel antara dua pihak sudah powerful. Tapi bayangkan ini: Alice ingin membayar Carol, tapi Alice dan Carol tidak punya channel langsung. Haruskah mereka membuka channel baru hanya untuk satu transaksi? Tentu tidak. Lightning punya cara yang lebih elegan.
Bayar lewat perantara
Kalau Alice punya channel ke Bob, dan Bob punya channel ke Carol, Alice bisa membayar Carol lewat Bob. Bob jadi perantara. Tidak perlu channel baru, tidak perlu interaksi on-chain sama sekali. Tapi ini langsung memunculkan pertanyaan yang sangat wajar: kenapa Alice harus percaya Bob? Bagaimana kalau Bob mengambil uang Alice tapi tidak meneruskannya ke Carol? Jawabannya: Alice tidak perlu percaya Bob sama sekali. Ini yang membuat Lightning luar biasa.
Kunci dan rahasia
Bayangkan sebuah gembok dengan kunci yang unik. Carol yang membuat gembok itu, dan hanya Carol yang punya kuncinya. Carol memberikan foto gembok itu kepada Alice, tapi menyimpan kuncinya untuk dirinya sendiri. Alice berkata kepada Bob: "Aku akan memberikan 0.01 BTC kepadamu, tapi hanya kalau kamu bisa menunjukkan kunci yang membuka gembok ini. Kalau dalam 24 jam kamu tidak bisa menunjukkannya, uangnya kembali ke aku." Bob tahu bahwa Carol punya kuncinya. Jadi Bob berkata kepada Carol: "Aku akan memberikan 0.01 BTC kepadamu, tapi hanya kalau kamu menunjukkan kunci itu kepadaku. Kalau dalam 12 jam tidak ada, uangnya kembali ke aku." Carol menunjukkan kuncinya kepada Bob, mengambil 0.01 BTC. Bob sekarang punya kunci itu, menunjukkannya kepada Alice, mengambil 0.01 BTC. Selesai.
Dalam bahasa teknis: HTLC
Mekanisme "gembok dan kunci" ini dalam dunia Bitcoin disebut HTLC, singkatan dari Hash Time-Locked Contract. "Gembok" adalah hash dari sebuah rahasia. "Kunci" adalah rahasia itu sendiri. HTLC bukan teknologi baru. Ia adalah Bitcoin Script biasa, kombinasi dari OP_HASH160 yang sudah kita pelajari di Bab 6 dan OP_CHECKLOCKTIMEVERIFY yang dibahas tuntas di Bab 15. Lightning tidak mengubah Bitcoin, ia hanya memanfaatkan apa yang sudah ada.
Kenapa timelock Bob lebih pendek dari Alice?
Alice memberi Bob waktu 24 jam, tapi Bob memberi Carol waktu 12 jam. Ini bukan kebetulan. Bob butuh cukup waktu untuk bereaksi setelah Carol mengungkapkan kuncinya. Kalau waktunya sama, Bob mungkin tidak sempat mengklaim dari Alice sebelum time-lock habis. Semakin panjang rantai perantara, semakin bertingkat time-lock-nya.
Privasi lewat onion routing
Setiap perantara hanya tahu satu hal: dari mana pembayaran datang dan ke mana harus diteruskan. Bob tahu ia menerima dari Alice dan harus meneruskan ke Carol, tapi Bob tidak tahu apakah Alice adalah pengirim asli atau apakah Carol adalah penerima akhir. Teknik ini disebut onion routing, sama seperti yang dipakai Tor.
HTLC adalah salah satu konstruksi kriptografi paling elegan di Bitcoin. Ia memungkinkan pembayaran melewati banyak perantara yang tidak saling percaya, tanpa satupun perantara bisa mencuri dana. Semua dijamin oleh matematika, bukan kepercayaan.
Di 7.2 kita sudah melihat tiga skenario penutupan channel dari sisi konsepnya. Sekarang kita lihat sisi teknisnya: transaksi apa yang sebenarnya disiarkan ke blockchain, dalam urutan apa, dan berapa ongkosnya.
Membuka channel: funding transaction
Membuka channel adalah satu transaksi Bitcoin biasa. Alice dan Bob masing-masing berkontribusi dana ke sebuah output multisig 2-dari-2. Output ini disebut funding output. Sebelum funding transaction disiarkan ke jaringan, Alice dan Bob sudah harus bertukar commitment transaction pertama mereka. Ini penting: kalau funding transaction disiarkan tanpa commitment transaction yang valid dan salah satu pihak tiba-tiba tidak kooperatif, dana bisa terjebak selamanya. Jadi urutannya: buat commitment transaction dulu, baru siarkan funding transaction.
Tiga cara menutup channel
Pertama, cooperative close: kedua pihak setuju menutup channel. Mereka menandatangani closing transaction bersama yang langsung membagi dana sesuai saldo akhir. Ini cara terbaik: cepat, murah, dan tidak perlu menunggu time-lock. Kedua, force close: salah satu pihak tidak bisa dihubungi atau tidak mau kooperatif. Pihak yang jujur menyiarkan commitment transaction terakhir. Ada time-lock yang harus ditunggu sebelum dana bisa diambil, biasanya beberapa ratus block. Ini memberi waktu bagi pihak lain untuk mendeteksi kalau ada kecurangan. Ketiga, penalty close: kalau seseorang menyiarkan commitment transaction yang sudah kedaluwarsa, pihak yang jujur bisa menyiarkan justice transaction dan mengambil seluruh dana di channel sebagai hukuman.
Biaya membuka dan menutup channel
Setiap kali membuka channel, ada satu transaksi on-chain. Setiap kali menutup channel, ada satu transaksi on-chain lagi. Jadi biaya on-chain selalu dua kali fee transaksi, tidak peduli berapa banyak transaksi terjadi di dalam channel. Ini yang membuat Lightning sangat ekonomis untuk penggunaan rutin: bayar ribuan transaksi dengan biaya on-chain dua kali saja.
Channel capacity dan likuiditas
Channel punya kapasitas terbatas. Kalau Alice membuka channel dengan 0.1 BTC, ia tidak bisa mengirim lebih dari 0.1 BTC lewat channel itu dalam total. Likuiditas adalah sumber daya yang harus dikelola dengan hati-hati di Lightning Network.
Membuka channel adalah keputusan ekonomi: berapa lama akan dipakai, seberapa besar kapasitas yang dibutuhkan, dan berapa fee on-chain yang rela dibayar. Untuk pengguna kasual, wallet Lightning modern mengelola ini secara otomatis melalui channel yang dikelola penyedia layanan.
Sejauh ini kita sudah memahami bagaimana channel bekerja dan bagaimana pembayaran bisa dirouting. Tapi bagaimana cara pengguna sehari-hari sebenarnya melakukan pembayaran di Lightning? Jawabannya adalah invoice.
Apa itu invoice?
Invoice adalah permintaan pembayaran yang dibuat oleh penerima. Ia berisi semua informasi yang dibutuhkan pengirim untuk menyelesaikan pembayaran: jumlah yang harus dibayar, hash dari rahasia HTLC, node ID penerima, dan masa berlaku invoice. Invoice biasanya direpresentasikan sebagai string teks panjang yang dimulai dengan lnbc (untuk mainnet) atau kode QR yang bisa discan. Formatnya disebut BOLT-11, salah satu standar protokol Lightning.
Alur pembayaran
Carol ingin menerima 0.001 BTC dari Alice. Carol membuat invoice. Di balik layar, Carol membuat rahasia R dan menghitung H = hash(R), lalu memasukkan H ke dalam invoice. Carol membagikan invoice kepada Alice lewat QR code atau copy-paste. Alice membuka invoice di wallet-nya. Wallet secara otomatis menemukan rute terbaik ke Carol. Alice mengkonfirmasi. Wallet melakukan routing pembayaran HTLC. Carol mengungkapkan R untuk mengklaim pembayaran. Dari sudut pandang pengguna: scan QR, konfirmasi, selesai. Kurang dari satu detik.
Kelemahan invoice klasik
Invoice BOLT-11 punya beberapa keterbatasan. Pertama, single-use: setiap invoice hanya bisa dibayar sekali. Kedua, penerima harus online saat pembayaran datang untuk mengungkapkan R. Ketiga, tidak ada bukti pembayaran yang bisa diverifikasi pihak ketiga.
BOLT-12: offers
Standar baru yang sedang berkembang, BOLT-12, memperkenalkan konsep "offer": sebuah kode statis yang bisa digunakan berkali-kali. Saat pengirim ingin membayar, wallet mereka menghubungi node penerima untuk meminta invoice baru yang unik. Ini menyelesaikan masalah single-use dan memungkinkan pembayaran berulang seperti langganan.
LNURL: satu alamat, berkali-kali dipakai
Di luar standar BOLT, ada pendekatan lain yang sudah banyak dipakai: LNURL. Berbeda dari invoice BOLT-11 yang one-time, LNURL adalah protokol berbasis HTTP yang memungkinkan wallet pengirim untuk meminta invoice baru setiap kali ingin membayar, cukup dari satu alamat statis. Artinya penerima bisa membagikan satu kode atau alamat seperti nama@domain.com, dan pengirim bisa membayar berulang kali tanpa penerima perlu membuat invoice baru setiap saat. Penggunaan lnbc (BOLT-11) tetap jauh lebih umum di transaksi sehari-hari, tapi LNURL hadir sebagai solusi praktis untuk kasus seperti donasi, tip, atau pembayaran berulang.
Lightning invoice adalah antarmuka antara protokol yang kompleks dan pengguna yang hanya ingin scan dan bayar. Di balik QR code sederhana itu tersembunyi payment hash, routing hints, dan tanda tangan kriptografis. Abstraksi yang baik membuat teknologi yang rumit terasa seperti magic.
Lightning Network adalah teknologi yang luar biasa, tapi bukan solusi sempurna. Memahami keterbatasannya sama pentingnya dengan memahami kelebihannya.
Likuiditas yang terkunci
Untuk membuka channel, pengguna harus mengunci bitcoin di dalamnya. Bitcoin yang terkunci ini tidak bisa dipakai untuk hal lain selama channel terbuka. Untuk node yang melakukan routing, mereka harus mengunci likuiditas di banyak channel sekaligus. Ini adalah modal yang menganggur.
Masalah inbound liquidity
Kalau Alice membuka channel ke Bob dengan 0.1 BTC, seluruh kapasitas ada di sisi Alice. Bob tidak bisa mengirim ke Alice sampai Alice mengirim sesuatu ke Bob terlebih dahulu. Untuk menerima pembayaran, pengguna butuh inbound liquidity: channel yang punya kapasitas di sisi penerima. Mendapatkan inbound liquidity tidak selalu mudah dan sering membutuhkan biaya.
Keharusan online
Untuk menerima pembayaran di Lightning klasik, node penerima harus online. Kalau ponsel mati saat seseorang mencoba membayar, pembayaran gagal. Ini berbeda dengan Bitcoin on-chain di mana penerima tidak perlu online. BOLT-12 offers mulai mengatasi ini, tapi belum sepenuhnya tersebar luas.
Watchtower: delegasi pengawasan
Untuk mendeteksi kecurangan, pengguna harus memantau blockchain secara berkala. Kalau node offline terlalu lama, pihak curang bisa menyiarkan state lama tanpa terdeteksi. Solusinya adalah watchtower: layanan pihak ketiga yang memantau blockchain atas nama pengguna. Tapi ini memperkenalkan elemen kepercayaan baru.
Routing tidak selalu berhasil
Menemukan rute yang punya cukup likuiditas di setiap hop adalah masalah yang sulit. Pembayaran besar sering gagal karena tidak ada rute dengan kapasitas yang cukup. Lightning bekerja sangat baik untuk pembayaran kecil dan rutin, tapi kurang cocok untuk transfer nilai besar.
Trade-off yang jujur
Lightning bukan pengganti Bitcoin on-chain. Ia adalah layer di atasnya untuk pembayaran yang sering, kecil, dan cepat. Untuk pembayaran besar, final, dan yang membutuhkan keamanan maksimal, on-chain tetap lebih tepat. Keduanya melayani kebutuhan yang berbeda.
Setiap teknologi punya trade-off. Yang penting adalah memahami trade-off tersebut dan memilih alat yang tepat untuk kebutuhan yang tepat. Lightning bukan Bitcoin yang lebih baik. Lightning adalah Bitcoin yang diperluas untuk kasus penggunaan yang berbeda.
Ketika orang membicarakan "Bitcoin", mereka sering hanya memikirkan harga atau wallet. Tapi di balik semua itu ada ribuan komputer di seluruh dunia yang terus berjalan, memverifikasi setiap transaksi dan menyimpan salinan lengkap blockchain. Komputer-komputer inilah yang disebut node.
Node adalah penjaga aturan
Node Bitcoin bukan sekadar database. Ia adalah penjaga aturan konsensus. Setiap node secara mandiri memverifikasi setiap transaksi dan setiap block menggunakan aturan yang sama. Tidak ada yang bisa memaksanya menerima block yang tidak valid, bahkan kalau block itu datang dari miner terbesar sekalipun. Inilah inti desentralisasi Bitcoin: tidak ada otoritas pusat yang memutuskan apa yang valid. Setiap node memutuskan sendiri, berdasarkan aturan yang sama.
Jenis-jenis node
Full node menyimpan seluruh blockchain dari genesis block sampai hari ini, lebih dari 700 GB per pertengahan 2026 dan terus bertambah puluhan GB setiap tahun. Ia memverifikasi setiap transaksi dan block secara independen. Inilah node yang memberikan keamanan paling tinggi. Pruned node adalah full node yang telah menghapus data lama setelah diverifikasi. Ia tetap memverifikasi semua aturan, tapi hanya menyimpan beberapa GB block terbaru. SPV node hanya mengunduh block header, tidak memverifikasi transaksi secara penuh. Mining node adalah full node yang juga aktif menambang block baru.
Kenapa menjalankan node sendiri?
Menjalankan full node sendiri berarti tidak perlu mempercayai siapapun. Tidak ada SPV yang bisa menipu dengan transaksi palsu kalau kamu punya node sendiri. Tidak ada exchange atau wallet provider yang bisa menyembunyikan informasi. Ini bukan sekadar soal keamanan individu. Semakin banyak orang menjalankan full node, semakin sulit bagi siapapun untuk mengubah aturan Bitcoin tanpa persetujuan mayoritas. Node adalah suara dalam demokrasi Bitcoin.
Menjalankan full node tidak membutuhkan hardware khusus. Sebuah Raspberry Pi dengan hard drive eksternal sudah cukup. Biayanya kurang dari sejuta rupiah, dan kontribusinya terhadap desentralisasi Bitcoin nyata.
Bitcoin tidak punya server pusat. Tidak ada kantor pusat, tidak ada data center yang bisa dimatikan, tidak ada satu titik yang kalau diserang akan menghancurkan semuanya. Yang ada adalah jaringan peer-to-peer: ribuan node yang terhubung langsung satu sama lain.
Apa itu jaringan P2P?
Dalam jaringan tradisional seperti bank atau media sosial, ada server pusat yang melayani semua klien. Kalau server mati, semua klien tidak bisa terhubung. Kalau pemilik server memutuskan untuk memblokir seseorang, tidak ada yang bisa dilakukan. Jaringan P2P berbeda. Setiap peserta adalah sejajar, tidak ada yang lebih "pusat" dari yang lain. Informasi menyebar dari node ke node seperti gosip. Tidak ada satu titik kegagalan.
Bagaimana node terhubung?
Saat node Bitcoin pertama kali dijalankan, ia perlu menemukan peer untuk terhubung. Ada beberapa cara: DNS seed (server yang menyediakan daftar node aktif), hardcoded seed nodes (daftar IP yang tertanam di software), dan peer exchange (bertanya ke node yang sudah terhubung untuk dikenalkan ke peer lain). Setelah terhubung, node mempertahankan sekitar 8 koneksi outbound reguler ditambah 2 koneksi khusus block, dan sisanya diisi koneksi inbound. Bitcoin Core membatasi total koneksi di angka 125, jadi ruang untuk inbound sekitar 115.
Bagaimana informasi menyebar?
Saat Alice mengirim transaksi, walletnya menyiarkan transaksi tersebut ke node yang terhubung. Node menerima transaksi, memverifikasi validitasnya, dan meneruskan ke semua peer-nya. Peer tersebut melakukan hal yang sama. Dalam hitungan detik, transaksi sudah menyebar ke ribuan node di seluruh dunia. Proses ini disebut gossiping. Setiap node hanya meneruskan transaksi yang valid.
Kenapa P2P membuat Bitcoin kuat?
Untuk menyensor Bitcoin, seorang penyerang harus memblokir koneksi ke setiap node di dunia. Selama ada satu node yang bisa diakses, Bitcoin bisa digunakan. Bitcoin sudah diblokir di berbagai negara, tapi pengguna di sana terus bisa mengakses jaringan melalui VPN, Tor, atau sambungan satelit seperti Blockstream Satellite.
Desentralisasi bukan fitur yang bisa ditambahkan belakangan. Ia adalah arsitektur fundamental Bitcoin sejak hari pertama. Jaringan P2P bukan hanya cara Bitcoin beroperasi, ia adalah alasan Bitcoin tidak bisa dihentikan.
Kamu menekan tombol kirim di wallet. Apa yang terjadi selanjutnya?
Dari wallet ke jaringan
Wallet membuat transaksi yang sudah ditandatangani dan menyiarkannya ke satu atau beberapa node yang terhubung. Node pertama yang menerima transaksi ini disebut node asal dari sudut pandang pengguna, meskipun jaringan tidak benar-benar mencatatnya demikian.
Verifikasi sebelum diteruskan
Node yang menerima transaksi tidak langsung meneruskannya. Ia melakukan serangkaian verifikasi terlebih dahulu: apakah format transaksi valid, apakah tanda tangan kriptografis benar, apakah UTXO yang digunakan benar-benar ada dan belum dipakai, apakah fee-nya masuk akal. Kalau semua lolos, transaksi masuk ke mempool node tersebut dan diteruskan ke semua peer-nya. Kalau gagal verifikasi, transaksi dibuang dan tidak diteruskan. Ini adalah mekanisme pertahanan alami: spam dan transaksi tidak valid mati di node pertama yang menerimanya.
Node policy vs konsensus rules
Ada perbedaan penting yang sering disalahpahami: konsensus rules dan node policy adalah dua hal yang berbeda. Konsensus rules adalah aturan yang menentukan apakah sebuah transaksi atau block valid secara protokol. Semua node harus sepakat soal ini, kalau tidak sepakat mereka akan fork. Node policy adalah keputusan individual node tentang transaksi apa yang mau diterima ke mempool dan diteruskan ke peer, terlepas dari apakah transaksi itu valid secara konsensus atau tidak.
Contoh konkret: datacarrier dan datacarriersize adalah dua pengaturan node policy yang tersedia di software node seperti Bitcoin Core dan Bitcoin Knots. datacarrier mengontrol apakah node mau meneruskan transaksi yang menggunakan OP_RETURN untuk menyematkan data arbitrer. datacarriersize menentukan batas maksimal ukuran data tersebut dalam bytes. Angka batas ini bukan aturan protokol — nilai default-nya berbeda antar implementasi dan berubah antar versi. Konvensi yang bertahan bertahun-tahun adalah 83 bytes (80 bytes data), dan sejak 2025 angka ini menjadi pusat perdebatan besar: satu kubu ingin melonggarkan batas relay, kubu lain ingin mempertahankan filter. Setiap operator node bebas menyetel nilainya sendiri. Node yang mematikan datacarrier tidak akan memasukkan transaksi OP_RETURN ke mempoolnya dan tidak meneruskannya ke peer lain. Tapi kalau miner tetap memasukkan transaksi itu ke block, node tersebut tetap menerima blocknya karena transaksi OP_RETURN valid secara konsensus. Policy berhenti di mempool, bukan di validasi block.
Ini juga yang mendasari perdebatan tentang Ocean Pool yang kita bahas di Bab 11: pool tersebut menerapkan filtering transaksi berdasarkan policy mereka sendiri, bukan karena transaksi yang difilter itu tidak valid. Satu node atau pool bisa memilih policy yang berbeda dari mayoritas tanpa melanggar konsensus, tapi konsekuensinya adalah transaksi yang mereka tolak tetap akan masuk ke blockchain melalui miner atau node lain yang tidak menerapkan filtering yang sama.
Flooding dan deduplication
Propagasi transaksi menggunakan mekanisme flooding: setiap node yang menerima transaksi valid meneruskannya ke semua peer. Tapi ini menimbulkan masalah karena sebuah node bisa menerima transaksi yang sama dari banyak peer secara bersamaan. Solusinya adalah deduplication. Setiap node menyimpan daftar transaksi yang sudah pernah dilihat. Kalau transaksi yang sama datang lagi, ia langsung dibuang tanpa diproses ulang.
Berapa lama sampai ke seluruh jaringan?
Dalam kondisi normal, sebuah transaksi menyebar ke sebagian besar node di seluruh dunia dalam waktu kurang dari 5 detik. Untuk mencapai 90% node biasanya butuh sekitar 10-15 detik. Ini jauh sebelum transaksi dikonfirmasi di blockchain yang butuh rata-rata 10 menit.
Privasi dalam propagasi
Ada masalah privasi yang menarik: node pertama yang menyiarkan transaksi kemungkinan besar adalah pengirim asli atau terhubung langsung dengannya. Pengamat yang memantau banyak node bisa mencoba mengidentifikasi asal transaksi. Solusi yang paling banyak dibahas untuk ini adalah Dandelion++: transaksi pertama kali diteruskan secara diam-diam melalui satu jalur (stem phase) sebelum akhirnya disebarkan ke seluruh jaringan (fluff phase). Ini membuat asal transaksi jauh lebih sulit dilacak. Perlu dicatat, Dandelion++ belum masuk ke Bitcoin Core, dan alasannya kita bahas di 18.6.
Propagasi transaksi adalah salah satu proses paling elegan di Bitcoin. Ribuan node yang tidak saling kenal, tidak ada koordinasi terpusat, tapi dalam hitungan detik informasi sudah tersebar ke seluruh penjuru dunia. Semua karena setiap node mengikuti aturan yang sama.
Propagasi transaksi dan propagasi block punya tujuan yang sama: menyebarkan informasi ke seluruh jaringan secepat mungkin. Tapi block jauh lebih besar dari transaksi, dan ada taruhan yang jauh lebih tinggi: miner yang menemukan block baru ingin seluruh jaringan mengakuinya secepat mungkin sebelum miner lain menemukan block berikutnya.
Dari miner ke jaringan
Saat miner menemukan nonce yang valid, ia langsung menyiarkan block baru ke semua peer-nya. Setiap node yang menerima block melakukan verifikasi penuh: apakah proof of work valid, apakah semua transaksi di dalamnya valid, apakah block header terhubung ke block sebelumnya dengan benar. Kalau semua lolos, block diterima, ditambahkan ke chain lokal, dan diteruskan ke semua peer.
Masalah: block terlalu besar
Block Bitcoin bisa berukuran hingga 4 MB dengan SegWit weight. Menyebarkan 4 MB ke ribuan node membutuhkan bandwidth yang signifikan. Di era awal Bitcoin ini tidak masalah karena block jarang penuh. Tapi saat jaringan ramai, delay propagasi bisa menyebabkan masalah serius.
Compact Block dan Header-First
Solusi utama adalah Compact Block (BIP 152): daripada mengirim seluruh block, node mengirim block header plus daftar ID transaksi yang sudah disingkat. Penerima kemungkinan besar sudah punya hampir semua transaksi tersebut di mempool-nya. Ia hanya perlu meminta transaksi yang belum dimilikinya. Ini mengurangi data yang dikirim secara drastis, dari megabytes menjadi kilobytes. Header-First propagation adalah teknik lain: node menyiarkan header block terlebih dahulu sebelum seluruh block siap, memungkinkan validasi proof of work dimulai lebih awal.
Orphan block dan kenapa kecepatan penting
Ada fenomena yang disebut orphan block: dua miner menemukan block valid di waktu yang hampir bersamaan. Jaringan sementara terpecah menjadi dua versi chain. Akhirnya chain yang lebih panjang menang, dan block di chain yang lebih pendek menjadi orphan, valid tapi tidak diakui. Semakin lambat propagasi, semakin besar kemungkinan orphan block terjadi. Compact Block sudah mengurangi orphan rate secara signifikan.
Kecepatan propagasi block adalah salah satu metrik kesehatan jaringan Bitcoin yang paling penting. Berkat Compact Block, block baru bisa menjangkau sebagian besar jaringan dalam hitungan detik saja. Di era sebelum Compact Block, proses yang sama bisa memakan waktu berkali-kali lipat lebih lama karena seluruh isi block harus dikirim ulang ke setiap peer.
Di 8.2 kita sebut sekilas tiga cara node menemukan peer. Section ini membedah ketiganya satu per satu, karena justru di sinilah letak salah satu jawaban kenapa Bitcoin sulit diblokir.
Node Bitcoin baru yang pertama kali dijalankan menghadapi satu masalah mendasar: bagaimana caranya menemukan node lain untuk terhubung? Ia tidak tahu alamat siapapun. Jaringan P2P tidak punya direktori terpusat. Tapi dalam hitungan menit, node baru itu sudah terhubung ke puluhan peer di seluruh dunia.
DNS Seed
Cara pertama dan paling umum adalah melalui DNS seed. Software node Bitcoin, seperti Bitcoin Core, Bitcoin Knots, atau implementasi lainnya, umumnya sudah menanam beberapa nama domain khusus di dalam kodenya. Saat node pertama kali dijalankan, ia melakukan DNS query ke domain-domain ini dan mendapat daftar IP address dari node-node yang sedang aktif. DNS seed dikelola oleh orang-orang terpercaya di komunitas Bitcoin. Ini bukan titik kepercayaan yang berbahaya karena node hanya menggunakannya untuk menemukan peer awal dan setelah itu semua verifikasi dilakukan secara mandiri.
Peer Exchange
Setelah terhubung ke beberapa node pertama, node baru bisa meminta daftar peer yang dikenal melalui pesan getaddr. Node yang menerima permintaan ini membalas dengan pesan addr yang berisi daftar alamat IP node lain yang diketahuinya. Dari sini jaringan koneksi berkembang secara organik tanpa koordinasi terpusat.
Hardcoded Seeds
Kalau DNS seed tidak bisa diakses, ada fallback: daftar IP address yang ditanam langsung di dalam kode software. Ini adalah node-node yang diketahui stabil dan sudah lama berjalan. Daftar ini diperbarui setiap beberapa rilis oleh masing-masing tim pengembang.
Mempertahankan koneksi
Node Bitcoin umumnya mempertahankan sekitar 8 koneksi outbound yang dipilihnya sendiri dan menerima koneksi inbound dari peer lain. Koneksi dijaga dengan pesan ping dan pong secara berkala. Node yang tidak merespons akan diputus dan digantikan. Node juga menyimpan database peer address secara lokal sehingga saat dimatikan dan dinyalakan kembali, ia bisa langsung terhubung ke peer yang sudah dikenal tanpa harus memulai peer discovery dari awal.
Mengapa ini penting untuk desentralisasi?
Sistem peer discovery Bitcoin dirancang untuk tidak bergantung pada satu titik. DNS seed bisa gagal atau diblokir, tapi masih ada hardcoded seeds. Hardcoded seeds bisa kadaluwarsa, tapi masih ada database peer dari sesi sebelumnya. Dan kalau semua itu gagal, pengguna bisa memasukkan alamat peer secara manual.
Salah satu cara paling efektif untuk mendukung jaringan Bitcoin adalah menjalankan node dengan koneksi inbound yang terbuka. Node seperti ini membantu node baru menemukan peer dan memperkuat ketahanan jaringan secara keseluruhan.
Jaringan Bitcoin yang sehat bukan hanya soal jumlah node. Ini soal kualitas koneksi, keberagaman lokasi, keberagaman software, dan yang sering dilupakan: keberagaman manusia di balik node-node itu.
Kesehatan teknis jaringan
Ada beberapa indikator kesehatan teknis yang bisa dipantau. Jumlah full node yang reachable adalah indikator paling dasar. Semakin banyak, semakin kuat. Distribusi geografis node juga penting: jaringan yang semua node-nya terkonsentrasi di satu negara jauh lebih rentan terhadap regulasi atau pemadaman internet dibanding jaringan yang tersebar merata di seluruh dunia. Keberagaman software juga krusial. Kalau hampir semua node menjalankan satu implementasi yang sama, sebuah bug kritis di implementasi itu bisa mempengaruhi jaringan secara luas.
Apa yang bisa dilakukan sebagai node runner
Pertama, biarkan koneksi inbound terbuka. Node yang menerima koneksi inbound membantu node baru menemukan peer dan memperkuat jaringan. Kedua, jaga uptime. Node yang sering offline tidak banyak berkontribusi. Sebuah perangkat kecil yang berjalan 24 jam jauh lebih berharga dari komputer yang hanya menyala sesekali. Ketiga, perbarui software secara berkala, bukan karena mengikuti satu tim pengembang, tapi karena patch keamanan penting untuk melindungi diri sendiri dan jaringan.
Kesehatan sosial jaringan
Ini bagian yang sering diabaikan tapi sama pentingnya. Node runner adalah orang-orang yang paling berkomitmen terhadap Bitcoin. Mereka meluangkan waktu, uang, dan energi untuk menjalankan infrastruktur yang membuat Bitcoin berfungsi. Dan justru karena komitmen yang besar itulah, perdebatan di antara mereka bisa menjadi sangat panas.
Perdebatan tentang ukuran block, mempool policy, soft fork, pilihan software, cara mengoperasikan node: semua ini adalah perdebatan yang sah dan penting. Tidak setuju adalah hal yang sehat. Ketidaksetujuan adalah tanda bahwa banyak orang berpikir secara mandiri, bukan sekadar mengikuti satu pemimpin.
Tapi ada perbedaan antara tidak setuju dan tidak menghormati. Seseorang bisa memiliki pendapat yang berbeda tentang mempool policy sambil tetap menghargai bahwa orang lain telah meluangkan waktu dan energi untuk menjalankan node mereka sendiri. Seseorang bisa mengkritik keputusan teknis tanpa menyerang karakter orangnya.
Ekosistem bukan monolith
Bitcoin adalah protokol terbuka. Tidak ada satu entitas yang bisa mengklaim otoritas penuh atasnya. Tidak ada satu tim pengembang, tidak ada satu implementasi software, tidak ada satu forum diskusi yang memegang kebenaran tunggal. Ini bukan kelemahan. Ini adalah salah satu kekuatan terbesar Bitcoin. Selama orang-orang dengan pandangan berbeda masih bisa menemukan ground yang sama dalam menjalankan jaringan, Bitcoin akan terus bertahan.
Menjalankan node adalah tindakan nyata, bukan sekadar opini di internet. Apapun perdebatan yang sedang terjadi di luar sana, node yang tetap menyala adalah kontribusi yang selalu bermakna. Dan memperlakukan sesama node runner dengan hormat, walau berbeda pendapat, adalah bagian dari menjaga jaringan tetap sehat.
Kita sudah berkenalan dengan mempool di 3.5 sebagai satu tahap dalam perjalanan transaksi. Sekarang kita berhenti lebih lama di sana, karena mempool bukan sekadar ruang tunggu: di sinilah harga sebuah transaksi terbentuk.
Setiap transaksi Bitcoin yang sudah dikirim tapi belum dikonfirmasi hidup di sebuah ruang tunggu. Ruang tunggu ini disebut mempool, kependekan dari memory pool. Setiap node punya mempool-nya sendiri, dan tidak ada "mempool global" yang tunggal.
Ruang tunggu yang tidak terpusat
Karena setiap node mengelola mempool-nya sendiri, dua node yang berbeda bisa punya isi mempool yang sedikit berbeda. Node A mungkin sudah menerima transaksi yang belum sampai ke Node B. Node C mungkin sudah menghapus transaksi yang masih ada di Node D karena keterbatasan memori. Ini normal dan disengaja. Mempool bukan database global yang tersinkronisasi, ia adalah kumpulan transaksi yang menunggu konfirmasi di setiap node secara independen.
Apa yang masuk mempool?
Tidak semua transaksi otomatis diterima ke mempool. Setiap node punya aturan sendiri yang disebut mempool policy. Aturan umum yang berlaku di sebagian besar node: transaksi harus valid secara kriptografis, UTXO yang digunakan harus ada dan belum dipakai, fee harus memenuhi minimum threshold, dan ukuran transaksi harus dalam batas yang wajar. Kalau transaksi tidak memenuhi syarat, ia ditolak dan tidak masuk mempool node tersebut.
Berapa lama transaksi bisa di mempool?
Transaksi yang tidak dikonfirmasi dalam waktu tertentu akan dihapus dari mempool. Sebagian besar node menghapus transaksi yang sudah lebih dari dua minggu. Kalau transaksi dihapus dari mempool sebelum dikonfirmasi, dana tidak hilang. UTXO yang digunakan kembali ke keadaan semula dan transaksi bisa disiarkan ulang.
Mempool dan fee market
Mempool adalah tempat di mana fee market terbentuk secara alami. Ruang dalam setiap block terbatas. Miner memilih transaksi mana yang akan dimasukkan ke block, dan mereka punya insentif ekonomi untuk memilih transaksi dengan fee tertinggi. Saat mempool ramai, pengguna yang ingin cepat dikonfirmasi harus bersaing dengan fee yang lebih tinggi.
Mempool adalah salah satu komponen Bitcoin yang paling sering disalahpahami. Banyak yang panik saat melihat transaksi mereka stuck di mempool. Padahal selama transaksi valid dan fee-nya wajar, ia akan dikonfirmasi, entah sekarang atau nanti saat jaringan lebih sepi.
Di mempool, semua transaksi bersaing untuk masuk ke block berikutnya. Tapi bukan transaksi dengan fee total terbesar yang diprioritaskan. Yang diprioritaskan adalah transaksi dengan fee rate tertinggi.
Apa itu fee rate?
Fee rate adalah fee dibagi ukuran transaksi. Satuannya adalah satoshi per virtual byte, ditulis sat/vB. Sebuah transaksi dengan fee 1.000 satoshi dan ukuran 200 vbyte punya fee rate 5 sat/vB. Transaksi lain dengan fee 500 satoshi tapi ukuran 50 vbyte punya fee rate 10 sat/vB dan akan diprioritaskan lebih tinggi, meskipun fee totalnya lebih kecil. Ini logis dari sudut pandang miner: block punya kapasitas terbatas dalam satuan weight/vbyte, bukan jumlah transaksi. Miner ingin memaksimalkan pendapatan per unit ruang yang tersedia.
Virtual byte vs byte
Sejak SegWit diperkenalkan, ukuran transaksi diukur dalam virtual byte (vbyte) bukan byte biasa. Data witness (tanda tangan) mendapat diskon 75%: setiap 4 byte witness dihitung sebagai 1 vbyte. Ini insentif bagi pengguna untuk menggunakan address SegWit karena transaksi mereka lebih ringan dan fee rate-nya lebih kompetitif untuk fee yang sama.
Bagaimana miner memilih transaksi?
Miner mengurutkan semua transaksi di mempool berdasarkan fee rate, dari tertinggi ke terendah, lalu mengisi block dari atas sampai kapasitas habis. Dalam praktiknya lebih kompleks karena ada dependensi antar transaksi: transaksi B yang menggunakan output transaksi A harus masuk setelah A. Tapi prinsip dasarnya tetap: fee rate tertinggi berarti prioritas tertinggi.
Berapa fee rate yang tepat?
Tidak ada angka yang pasti. Fee rate yang tepat tergantung seberapa ramai mempool saat itu dan seberapa cepat transaksi perlu dikonfirmasi. Saat mempool sepi, bahkan 1 sat/vB bisa dikonfirmasi dalam block berikutnya. Saat mempool sangat ramai, fee rate bisa mencapai ratusan sat/vB. Tools seperti mempool.space membantu melihat kondisi mempool secara real-time.
Memahami fee rate adalah keterampilan dasar yang perlu dimiliki setiap pengguna Bitcoin. Terlalu rendah dan transaksi bisa stuck berminggu-minggu. Terlalu tinggi dan kamu membayar lebih dari yang perlu.
Transaksi sudah dikirim tapi fee-nya terlalu rendah dan stuck di mempool. Apa yang bisa dilakukan? Ada dua mekanisme yang memungkinkan pengguna untuk mempercepat transaksi yang sudah terlanjur dikirim: RBF dan CPFP.
RBF: Replace-By-Fee
RBF memungkinkan pengirim untuk mengganti transaksi yang belum dikonfirmasi dengan versi baru yang punya fee lebih tinggi. Transaksi baru menggunakan UTXO yang sama tapi membayar fee yang lebih besar, sehingga miner lebih tertarik untuk memasukkannya ke block. Agar bisa di-replace, transaksi asli harus menandai dirinya sebagai replaceable dengan mengatur nilai sequence number ke angka tertentu. Ini disebut opt-in RBF. Node yang menerima transaksi pengganti akan membuang transaksi lama dan menggantikan dengan yang baru, selama transaksi baru memenuhi syarat: fee lebih tinggi dan fee rate lebih tinggi dari transaksi aslinya.
Full RBF
Ada juga full RBF, di mana node menerima penggantian transaksi meskipun transaksi aslinya tidak menandai dirinya sebagai replaceable. Ini kontroversial karena menyentuh asumsi bahwa transaksi unconfirmed bisa dianggap aman untuk pembayaran kecil.
CPFP: Child Pays for Parent
CPFP adalah mekanisme yang berbeda. Kalau transaksi asli (parent) stuck karena fee rendah, penerima bisa membuat transaksi baru (child) yang menggunakan output dari transaksi parent, dengan fee yang sangat tinggi. Miner yang ingin mengambil fee dari transaksi child harus memasukkan transaksi parent terlebih dahulu karena child bergantung pada parent. Secara efektif, fee tinggi dari child mensubsidi konfirmasi parent yang fee-nya rendah. Miner menghitung fee rate gabungan dari paket parent+child dan membandingkannya dengan transaksi lain di mempool.
Kapan pakai RBF vs CPFP?
RBF digunakan oleh pengirim yang ingin mengganti transaksinya sendiri. CPFP bisa digunakan oleh penerima, yang tidak bisa mengubah transaksi yang sudah dikirim kepadanya tapi bisa membuat transaksi baru yang menarik parent masuk ke block.
RBF dan CPFP adalah bukti bahwa Bitcoin bisa sangat fleksibel dalam hal manajemen fee. Dua mekanisme yang berbeda untuk menyelesaikan masalah yang sama, dengan trade-off dan asumsi yang berbeda. Memahami keduanya membuat pengguna jauh lebih percaya diri dalam mengelola transaksinya.
Sisi lain dari fleksibilitas itu
Fleksibilitas selalu punya sisi lain. Aturan yang sama yang memungkinkan kamu mempercepat transaksimu sendiri bisa diputarbalikkan untuk menahan transaksi orang lain. Namanya transaction pinning.
Kuncinya ada pada satu kenyataan yang sudah kita bahas di 9.1: mempool bukan bagian dari konsensus. Ia sekadar kebijakan masing-masing node tentang apa yang mau disimpan dan diteruskan. Kebijakan itu punya batas-batas praktis, misalnya seberapa banyak transaksi turunan yang boleh menggantung dari satu transaksi yang belum terkonfirmasi. Batas itu ada untuk melindungi node dari kebanjiran. Tapi batas yang sama bisa dipakai untuk menjebak.
Bentuknya kira-kira begini. Penyerang membuat transaksi turunan yang sangat besar dan berfee sangat rendah, menempel pada transaksi yang ingin ia hambat. Gabungan itu terlalu tidak menarik untuk ditambang, tapi sudah terlanjur memenuhi kuota kebijakan mempool. Akibatnya, korban tidak bisa lagi mengganti atau mempercepat transaksinya, karena penggantinya ditolak oleh kebijakan yang sudah kepenuhan. Transaksinya tidak dibatalkan, ia hanya dipaku di tempat, macet tanpa bisa didorong.
Untuk pembayaran biasa, ini menjengkelkan. Untuk Lightning, ini berbahaya. Ingat dari 7.2 bahwa hukuman terhadap kecurangan hanya bekerja kalau transaksi hukumannya bisa masuk ke blockchain sebelum timelock habis. Kalau penyerang bisa memaku transaksi itu di mempool sampai tenggatnya lewat, mekanisme hukuman yang tampak kokoh di simulasi tadi jadi tidak berdaya. Bukan kriptografinya yang dipatahkan, melainkan jalannya menuju blockchain yang dihalangi.
Ini contoh bagus tentang lapisan keamanan yang berbeda. Bab 4 membahas keamanan yang bersandar pada matematika, dan matematika tidak bisa ditawar. Tapi di lapisan mempool, yang berlaku bukan matematika melainkan kebijakan, dan kebijakan selalu bisa dieksploitasi oleh orang yang membacanya lebih teliti daripada yang membuatnya.
Karena itu perbaikannya juga ada di lapisan kebijakan, bukan di konsensus. Salah satunya package relay, yang membuat node menilai satu transaksi bersama turunannya sebagai satu paket, bukan satu per satu, sehingga transaksi berfee rendah yang ditemani anak berfee tinggi tidak lagi tertolak di gerbang. Ada juga pembatasan bentuk transaksi khusus untuk protokol seperti Lightning, agar ruang bagi penyerang untuk menempelkan turunan raksasa jadi jauh lebih sempit.
Perlu dicatat bahwa perbaikan semacam ini tidak butuh soft fork, karena tidak ada aturan konsensus yang berubah. Cukup node-node memperbarui kebijakannya. Itu membuatnya lebih mudah diterapkan, tapi sekaligus berarti perlindungannya bergantung pada berapa banyak node yang benar-benar memperbarui diri.
Ada saat-saat tertentu di mana mempool Bitcoin menjadi sangat ramai. Ribuan transaksi menumpuk, fee rate melonjak, dan pengguna yang membayar fee rendah harus menunggu berjam-jam atau bahkan berhari-hari. Memahami kapan dan kenapa ini terjadi membuat kamu bisa mengantisipasi dan mengambil keputusan yang lebih baik.
Apa yang menyebabkan mempool ramai?
Mempool ramai terjadi ketika laju transaksi masuk melebihi kapasitas block yang bisa dikonfirmasi. Setiap block punya kapasitas sekitar 4 juta weight unit. Weight unit adalah satuan resmi kapasitas block, dan hubungannya dengan vbyte yang kita pakai di 9.2 sederhana: 1 vbyte sama dengan 4 weight unit. Jadi 4 juta weight unit setara 1 juta vbyte. Karena data witness dihitung seperempat, satu block bisa memuat lebih banyak byte mentah daripada angka itu, biasanya sekitar 1,5 sampai 2,5 MB dalam praktik. Dengan block time rata-rata 10 menit, jaringan umumnya memproses sekitar 3 sampai 7 transaksi per detik, tergantung jenis transaksi yang sedang dominan. Beberapa kejadian yang secara historis menyebabkan lonjakan mempool: peluncuran Ordinals dan Inscriptions di 2023, bull market yang mendorong aktivitas trading tinggi, acara halving yang memicu spekulasi masif, dan serangan spam yang sengaja membanjiri jaringan dengan transaksi berbiaya rendah.
Apa yang terjadi dengan transaksi fee rendah?
Saat mempool ramai, miner dengan mudah bisa mengisi seluruh block hanya dengan transaksi fee tinggi. Transaksi fee rendah terdorong ke bagian bawah antrian dan mungkin tidak dikonfirmasi selama berhari-hari. Beberapa node bahkan akan drop transaksi fee rendah dari mempool mereka untuk menghemat memori, meskipun transaksinya valid.
Bagaimana membaca kondisi mempool?
Ada beberapa metrik yang bisa dipantau. Ukuran mempool dalam MB atau jumlah transaksi menunjukkan seberapa ramai antrian saat ini. Fee rate untuk konfirmasi dalam 1 block, 3 block, dan 6 block menunjukkan berapa yang perlu dibayar untuk kecepatan yang berbeda. Tools seperti mempool.space menampilkan visualisasi ini secara real-time dan sangat membantu.
Strategi menghadapi mempool ramai
Kalau tidak urgent, tunggu sampai mempool sepi. Biasanya akhir pekan atau tengah malam waktu Asia lebih sepi dari jam sibuk. Kalau sudah terlanjur kirim dengan fee rendah, gunakan RBF atau CPFP. Kalau mau kirim baru, pantau kondisi mempool dulu dan gunakan fee estimator yang akurat.
Mempool yang ramai bukan tanda bahwa Bitcoin rusak. Ini justru tanda bahwa Bitcoin berfungsi persis seperti yang dirancang: pasar bebas yang menentukan harga ruang block berdasarkan permintaan. Yang perlu dilakukan adalah memahami cara kerjanya dan menggunakannya dengan bijak.
Menentukan fee yang tepat untuk transaksi Bitcoin bukan ilmu pasti. Terlalu rendah dan transaksi bisa stuck. Terlalu tinggi dan kamu membuang uang. Fee estimation adalah proses memperkirakan fee rate minimum yang diperlukan agar transaksi dikonfirmasi dalam target waktu tertentu.
Bagaimana fee estimator bekerja?
Fee estimator yang baik menganalisis kondisi mempool saat ini dan data historis konfirmasi untuk memprediksi berapa fee rate yang dibutuhkan. Ada dua pendekatan utama. Pendekatan pertama adalah mempool-based: melihat distribusi fee rate di mempool saat ini dan memperkirakan berapa block yang dibutuhkan untuk mengosongkan antrian sampai ke level fee tertentu. Pendekatan kedua adalah history-based: menganalisis data konfirmasi historis untuk membangun model prediksi berdasarkan kondisi mempool yang serupa.
Target konfirmasi
Pengguna biasanya bisa memilih target konfirmasi: next block (paling cepat, paling mahal), 3 block (sekitar 30 menit), 6 block (sekitar 1 jam), atau bahkan 1-2 hari untuk yang tidak urgent. Fee estimator memberikan fee rate yang disarankan untuk masing-masing target.
Keterbatasan fee estimator
Fee estimator punya beberapa kelemahan penting. Pertama, mempool bisa berubah sangat cepat sehingga estimasi yang akurat 5 menit lalu bisa sudah tidak relevan. Kedua, estimator tidak bisa memprediksi block yang kebetulan kosong karena mining luck. Ketiga, beberapa wallet menggunakan fee estimator yang outdated atau terlalu konservatif, sehingga selalu merekomendasikan fee yang terlalu tinggi.
Fee sniping
Ada juga fenomena menarik yang disebut fee sniping: situasi di mana miner mungkin lebih tertarik untuk menambang ulang block sebelumnya yang punya fee tinggi daripada menambang block baru. Ini diatasi dengan time-lock pada transaksi untuk memastikan transaksi hanya valid di block ketinggian tertentu atau lebih tinggi.
Fee estimation yang baik adalah kombinasi antara data real-time dan pemahaman tentang cara kerja mempool. Tools seperti mempool.space memberikan data yang dibutuhkan, tapi tetap butuh judgment manusia untuk membaca situasi dengan benar, terutama saat kondisi mempool sedang berubah cepat.
Bitcoin dirancang agar block reward terus berkurang setiap halving. Pada akhirnya, sekitar tahun 2140, semua 21 juta bitcoin sudah ditambang dan block reward menjadi nol. Satu-satunya kompensasi untuk miner adalah fee transaksi. Inilah salah satu pertanyaan paling fundamental tentang keberlanjutan Bitcoin jangka panjang.
Apakah fee cukup untuk menggantikan block reward?
Ini adalah pertanyaan terbuka yang belum ada jawaban pasti. Kubu optimis berpendapat bahwa seiring adopsi Bitcoin meluas, volume transaksi akan terus meningkat. Lebih banyak transaksi berarti lebih banyak kompetisi untuk ruang block, yang berarti fee rate lebih tinggi. Lightning Network dan layer lain tidak menghilangkan fee on-chain: setiap pembukaan dan penutupan channel tetap butuh transaksi on-chain. Kubu skeptis berpendapat bahwa tekanan untuk efisiensi selalu ada. Batching transaksi, SegWit, Taproot, dan teknologi lain terus mengurangi ukuran transaksi. Kalau fee terlalu rendah, miner akan keluar dari bisnis, hash rate turun, dan keamanan jaringan terancam.
Fee market dan keamanan
Ada hubungan langsung antara fee market dan keamanan jaringan yang sering disalahpahami. Banyak orang berpikir: kalau miner keluar, difficulty adjustment akan menyesuaikan, jadi jaringan tetap aman. Ini benar sebagian, tapi melewatkan poin yang lebih penting.
Difficulty adjustment memang memastikan jaringan tetap berfungsi. Kalau hash rate turun 50%, difficulty turun 50%, dan block time kembali ke 10 menit. Transaksi tetap dikonfirmasi, jaringan tidak berhenti. Yang difficulty adjustment tidak lakukan adalah membuat serangan lebih mahal. Justru sebaliknya: kalau hash rate turun karena miner tidak profitable, biaya untuk melancarkan serangan 51% ikut turun secara proporsional.
Analoginya sederhana: bayangkan sistem keamanan sebuah gedung. Kalau separuh satpam dipecat karena anggaran habis, gedung tetap buka dan orang tetap bisa masuk. Tapi gedung itu jauh lebih mudah dirampok. Difficulty adjustment adalah mekanisme yang memastikan gedung tetap buka, bukan mekanisme yang mempertahankan jumlah satpam. Inilah mengapa fee market yang sehat bukan sekadar soal kenyamanan pengguna. Ini adalah fondasi dari keamanan jaringan jangka panjang.
Tidak semua fee sama awetnya
Tidak semua demand untuk ruang block itu setara nilainya dalam jangka panjang. Demand yang paling sehat datang dari adopsi Bitcoin yang organik dan meluas: semakin banyak orang bertransaksi, semakin banyak Lightning channel dibuka dan ditutup, semakin banyak institusi melakukan settlement on-chain. Fee tinggi dari sumber ini adalah tanda ekosistem yang tumbuh sehat, dan ini persis skenario yang diinginkan: jutaan pengguna biasa yang kebutuhan transaksinya menciptakan kompetisi alami untuk ruang block.
Sumber lain bersifat musiman. Gelombang Ordinals dan Inscriptions di 2023 yang kita sebut di 9.4 adalah contohnya: fee melonjak tinggi selama beberapa bulan, lalu surut. Untuk anggaran keamanan yang harus bertahan puluhan tahun, lonjakan seperti ini sulit dijadikan sandaran, karena tidak ada yang bisa memastikan gelombang berikutnya akan datang.
Di sinilah muncul salah satu perdebatan paling panas di Bitcoin belakangan ini, dan kamu berhak tahu kedua sisinya. Satu pihak berpendapat bahwa transaksi adalah transaksi: protokol Bitcoin tidak pernah membedakan tujuan, siapapun yang membayar fee berhak atas ruang block, dan miner tetap dibayar entah datanya berupa pembayaran atau gambar. Pihak lain berpendapat bahwa ruang block terbatas, dan ketika ia terisi oleh hal yang tidak butuh sifat-sifat khusus Bitcoin, orang yang butuh mengirim uang jadi terdorong keluar oleh fee yang melonjak.
Buku ini tidak akan memutuskan untukmu. Yang bisa dipegang sebagai alat analisis: yang menentukan keamanan jangka panjang bukan seberapa tinggi fee hari ini, melainkan seberapa bisa diandalkan fee itu datang lagi tahun depan dan sepuluh tahun lagi. Setiap kali kamu membaca berita tentang lonjakan fee, pertanyaan yang berguna adalah apakah ini gelombang atau permukaan air yang naik.
Block space sebagai komoditas
Ruang block Bitcoin adalah komoditas langka. Ada permintaan dari berbagai sumber yang sah: transaksi keuangan, Lightning channel management, protokol layer dua, dan aplikasi yang memberikan nilai nyata. Selama permintaan yang bermakna melebihi kapasitas, fee market akan tetap aktif secara organik.
Keberlanjutan fee market Bitcoin adalah salah satu eksperimen ekonomi terbesar yang pernah ada. Yang bisa dilakukan adalah memahami insentif yang terlibat, membedakan demand yang sehat dari yang tidak, dan mengamati bagaimana pasar merespons seiring waktu.
Bitcoin tidak menyimpan saldo. Ini salah satu hal yang paling sering disalahpahami oleh orang yang baru mengenal Bitcoin. Wallet kamu tidak punya "saldo 0.5 BTC" yang tersimpan di suatu tempat. Yang ada adalah kumpulan output transaksi yang belum dihabiskan, yang jika dijumlahkan, memberikan angka yang kita sebut saldo.
Rekap UTXO
Setiap transaksi Bitcoin mengonsumsi UTXO yang ada sebagai input dan menciptakan UTXO baru sebagai output. UTXO yang sudah dipakai tidak bisa dipakai lagi. UTXO yang baru dibuat menunggu untuk dipakai di transaksi berikutnya. UTXO set adalah kumpulan semua UTXO yang saat ini ada di seluruh jaringan Bitcoin, yaitu semua output yang sudah dibuat tapi belum dihabiskan. Ini adalah "state" Bitcoin saat ini.
Mengapa UTXO set penting?
UTXO set adalah sumber kebenaran tunggal tentang kepemilikan bitcoin. Setiap full node menyimpan salinan lengkap UTXO set dan memperbarui setiap kali ada block baru. Saat kamu mengirim transaksi, node memverifikasi bahwa UTXO yang kamu klaim sebagai input benar-benar ada di UTXO set dan belum dihabiskan. Ini adalah mekanisme yang mencegah double spend: kalau kamu mencoba menggunakan UTXO yang sama dua kali, node akan mendeteksi bahwa UTXO itu sudah tidak ada di UTXO set setelah transaksi pertama dikonfirmasi.
Ukuran UTXO set
UTXO set jauh lebih kecil dari blockchain penuh. Blockchain menyimpan seluruh sejarah semua transaksi sejak genesis block, yang per pertengahan 2026 sudah lebih dari 700 GB. UTXO set hanya menyimpan output yang belum dihabiskan, yang ukurannya sekitar 11 GB. Ini yang memungkinkan full node bisa memverifikasi transaksi baru dengan sangat cepat tanpa perlu membaca seluruh blockchain.
UTXO set dan memori
Full node menyimpan UTXO set di memori atau database yang dioptimalkan untuk akses cepat. Setiap kali block baru masuk, node menghapus UTXO yang dihabiskan dan menambahkan UTXO baru. Operasi ini harus sangat efisien karena terjadi setiap 10 menit.
UTXO set adalah salah satu desain paling elegan di Bitcoin. Dengan hanya menyimpan "apa yang ada sekarang" bukan "semua yang pernah terjadi", Bitcoin memungkinkan verifikasi transaksi yang cepat dan efisien tanpa harus membaca seluruh sejarah blockchain.
Setiap kali block baru ditambahkan ke blockchain, UTXO set harus diperbarui. Ini adalah operasi yang terjadi ribuan kali sehari di setiap full node di seluruh jaringan, dan harus berjalan dengan sangat efisien.
Dua operasi dasar
Ada dua operasi yang terjadi saat UTXO set diperbarui: penghapusan dan penambahan. Setiap transaksi dalam block mengonsumsi beberapa UTXO sebagai input, dan UTXO-UTXO ini dihapus dari set. Setiap transaksi juga menciptakan UTXO baru sebagai output, dan UTXO-UTXO ini ditambahkan ke set. Setelah semua transaksi dalam block diproses, UTXO set mencerminkan state Bitcoin yang baru.
Urutan pemrosesan
Urutan pemrosesan dalam sebuah block penting. Transaksi pertama dalam setiap block selalu coinbase transaction: transaksi khusus yang tidak punya input dan hanya punya output. Ini adalah cara miner mendapatkan block reward plus semua fee transaksi dalam block tersebut. UTXO dari coinbase transaction ditambahkan ke UTXO set, tapi ada aturan khusus: UTXO coinbase tidak bisa dihabiskan selama 100 block ke depan. Ini disebut coinbase maturity. Transaksi-transaksi berikutnya diproses secara berurutan. Kalau transaksi B menggunakan output transaksi A dalam block yang sama, A harus muncul lebih dulu. Ini disebut topological ordering.
Rollback saat reorganisasi
Kadang terjadi reorganisasi chain: node menemukan chain yang lebih panjang yang berbeda dari chain yang sedang diikutinya. Saat ini terjadi, node harus melakukan rollback UTXO set ke state sebelumnya, lalu menerapkan block-block dari chain baru. Ini adalah operasi yang kompleks dan membutuhkan node untuk menyimpan informasi tentang perubahan UTXO set di setiap block agar bisa di-undo.
Efisiensi database
UTXO set disimpan dalam database key-value yang dioptimalkan untuk lookup cepat. Kuncinya adalah pasangan (txid, output index) yang secara unik mengidentifikasi setiap UTXO. Nilainya adalah data UTXO: jumlah satoshi, script yang harus dipenuhi untuk membelanjakannya, dan block height saat UTXO dibuat. Lookup ini harus selesai dalam milidetik karena node harus memverifikasi setiap input dari setiap transaksi yang masuk.
Proses pembaruan UTXO set adalah jantung dari operasi full node. Setiap node di seluruh dunia melakukan operasi yang sama persis saat memproses block yang sama, dan hasilnya selalu identik. Dari state yang sama, input yang sama selalu menghasilkan state yang sama.
Salah satu fungsi paling kritis dari UTXO set adalah memungkinkan verifikasi transaksi yang cepat dan andal. Saat sebuah transaksi baru tiba di node, node tidak perlu membaca seluruh blockchain untuk memverifikasinya. Ia hanya perlu memeriksa UTXO set.
Apa yang diverifikasi?
Saat node menerima transaksi baru, ada beberapa hal yang diperiksa secara berurutan. Pertama, apakah setiap UTXO yang diklaim sebagai input benar-benar ada di UTXO set? Kalau tidak ada, transaksi ditolak karena mencoba membelanjakan sesuatu yang tidak ada. Kedua, apakah total nilai input lebih besar atau sama dengan total nilai output? Selisihnya adalah fee untuk miner. Ketiga, apakah script locking di setiap UTXO terpenuhi oleh script unlocking yang disediakan pengirim? Ini adalah verifikasi kriptografis bahwa pengirim memang berhak membelanjakan UTXO tersebut.
Kecepatan verifikasi
Karena UTXO set disimpan dalam database yang dioptimalkan untuk lookup cepat, verifikasi ini bisa selesai dalam hitungan milidetik bahkan untuk transaksi dengan banyak input. Node tidak perlu menelusuri seluruh sejarah blockchain, cukup query UTXO set dengan txid dan output index sebagai kunci.
Double spend detection
Double spend adalah upaya menggunakan UTXO yang sama lebih dari sekali. UTXO set membuat ini mustahil untuk transaksi yang sudah dikonfirmasi: begitu UTXO dikonsumsi dan dihapus dari set, ia tidak bisa digunakan lagi. Untuk transaksi unconfirmed di mempool, node memantau apakah ada dua transaksi yang mengklaim UTXO yang sama dan menolak yang datang belakangan.
Coinbase maturity
Ada satu pengecualian khusus dalam verifikasi: coinbase UTXO. UTXO yang berasal dari coinbase transaction tidak bisa dibelanjakan selama 100 block setelah block di mana coinbase itu ada. Ini disebut coinbase maturity. Tujuannya adalah memberi buffer waktu kalau terjadi reorganisasi chain yang menghapus block tersebut. Sebelum 100 block, coinbase UTXO memang ada di UTXO set tapi node menolak transaksi yang mencoba menggunakannya.
Desain UTXO set yang memungkinkan verifikasi cepat adalah salah satu alasan Bitcoin bisa beroperasi sebagai sistem desentralisasi tanpa server pusat. Setiap node bisa memverifikasi setiap transaksi secara mandiri, hanya dengan data lokal yang jauh lebih kecil dari blockchain penuh.
UTXO set bukan angka yang statis. Ia terus berubah seiring aktivitas jaringan. Memahami bagaimana ukuran UTXO set tumbuh dan bagaimana hal itu mempengaruhi node adalah bagian penting dari memahami ekonomi dan teknis Bitcoin jangka panjang.
Berapa besar UTXO set saat ini?
Per pertengahan 2026, UTXO set Bitcoin berisi lebih dari 170 juta UTXO dengan ukuran total sekitar 11 GB. Ini jauh lebih kecil dari blockchain penuh yang sudah lebih dari 700 GB. Tapi tidak berarti UTXO set tidak bisa menjadi masalah di masa depan.
Apa yang membuat UTXO set bertumbuh?
UTXO set bertumbuh saat lebih banyak UTXO dibuat daripada yang dikonsumsi. Ini terjadi dalam beberapa situasi: transaksi yang menghasilkan banyak output kecil tanpa batching yang baik, dust output yang tidak ekonomis untuk dihabiskan karena fee-nya lebih besar dari nilainya sendiri, dan lost coins yaitu UTXO yang private key-nya sudah hilang dan tidak akan pernah dikonsumsi tapi tetap ada di UTXO set selamanya.
UTXO bloat dan dust
Dust adalah UTXO dengan nilai satoshi yang sangat kecil, sering di bawah 546 satoshi untuk transaksi P2PKH. Output ini muncul di UTXO set tapi mungkin tidak pernah bisa dibelanjakan secara ekonomis. Setiap node harus menyimpan entry ini di database mereka. Seiring waktu, dust yang terakumulasi berkontribusi pada pertumbuhan UTXO set yang tidak produktif.
Mengapa ukuran UTXO set penting?
UTXO set harus bisa diakses dengan cepat, idealnya seluruhnya di RAM atau SSD yang cepat. Kalau UTXO set tumbuh terlalu besar, node dengan hardware terbatas akan kesulitan. Ini adalah salah satu alasan kenapa ada tekanan untuk menjaga UTXO set tetap ramping: semakin kecil UTXO set, semakin mudah menjalankan full node, dan semakin kuat desentralisasi jaringan.
UTXO consolidation
Saat fee mempool sedang rendah, pengguna bisa melakukan UTXO consolidation: mengirim banyak UTXO kecil ke dirinya sendiri dalam satu transaksi untuk menggabungkannya menjadi satu UTXO yang lebih besar. Ini mengurangi jumlah UTXO di set dan mempersiapkan diri untuk fee yang lebih efisien di masa depan saat mempool ramai.
UTXO set yang ramping adalah kepentingan bersama seluruh jaringan. Setiap UTXO yang tidak perlu dibuat adalah beban kecil yang harus ditanggung setiap full node di dunia. Praktik seperti batching transaksi dan UTXO consolidation bukan hanya efisiensi personal, tapi kontribusi nyata terhadap kesehatan jaringan.
UTXO set bukan hanya soal teknis dan efisiensi. Ada dimensi privasi yang penting untuk dipahami. Karena UTXO set adalah data publik yang bisa dianalisis oleh siapapun, cara kamu mengelola UTXO-mu bisa mengungkapkan lebih banyak informasi tentang keuanganmu daripada yang kamu sadari.
UTXO sebagai jejak
Setiap UTXO punya sejarah yang bisa dilacak. Dari mana asalnya, transaksi apa yang menciptakannya, dan siapa yang mungkin terlibat. Analisis blockchain bisa menghubungkan UTXO-UTXO yang berbeda ke pemilik yang sama dengan beberapa heuristik. Heuristik paling umum adalah common input ownership: kalau dua UTXO digunakan sebagai input dalam transaksi yang sama, analis blockchain berasumsi keduanya dimiliki oleh orang yang sama. Ini masuk akal karena untuk menggunakan UTXO, kamu harus membuktikan kepemilikan dengan menandatangani.
Change output dan privasi
Saat kamu mengirim Bitcoin dan ada kembalian, kembalian itu menciptakan UTXO baru di address-mu. Address mana yang merupakan kembalian dan mana yang merupakan pembayaran seringkali bisa ditebak oleh analis: biasanya kembalian adalah output dengan nilai yang tidak bulat, sementara pembayaran adalah angka yang lebih bulat.
Address reuse
Salah satu kesalahan privasi paling umum adalah menggunakan address yang sama berulang kali. Kalau kamu menerima Bitcoin di address yang sama dua kali, analis bisa menghubungkan kedua penerimaan itu dan mulai membangun gambaran tentang berapa total bitcoin yang kamu miliki. Wallet modern menggunakan HD wallet yang menghasilkan address baru untuk setiap transaksi, tapi tidak semua pengguna mengerti kenapa ini penting.
UTXO consolidation dan privasi
UTXO consolidation yang kita bahas di 10.4 sangat berguna secara teknis, tapi punya trade-off privasi. Saat kamu menggabungkan banyak UTXO dalam satu transaksi, kamu mengonfirmasi kepada analis bahwa semua UTXO tersebut milik orang yang sama. Kalau UTXO-UTXO itu berasal dari sumber yang berbeda, konsolidasi bisa mengungkapkan pola yang tidak ingin kamu ungkapkan.
CoinJoin sebagai solusi
CoinJoin adalah teknik di mana beberapa pengguna menggabungkan transaksi mereka menjadi satu transaksi bersama. Hasilnya adalah transaksi dengan banyak input dari banyak pengguna berbeda dan banyak output dengan nilai yang sama. Analis tidak bisa lagi menggunakan heuristik common input ownership karena input memang berasal dari banyak orang. Ini akan dibahas lebih dalam di Bab 12.
Privasi di Bitcoin bukan tentang menyembunyikan sesuatu yang ilegal. Ini tentang hak dasar untuk mengelola informasi keuanganmu sendiri. Sama seperti kamu tidak ingin semua orang tahu berapa saldo rekening bankmu, kamu juga berhak memilih siapa yang tahu berapa bitcoin yang kamu miliki dan dari mana asalnya.
UTXO set adalah komponen yang akan terus berevolusi seiring Bitcoin berkembang. Ada beberapa tantangan dan solusi yang sedang didiskusikan atau dikembangkan terkait bagaimana UTXO set dikelola di masa depan.
Pertumbuhan jangka panjang
Bayangkan sebuah buku catatan yang harus disalin ulang oleh setiap orang yang ingin memverifikasi transaksi Bitcoin. Semakin tebal buku itu, semakin lama proses penyalinannya dan semakin besar ruang yang dibutuhkan. Itulah analogi UTXO set. Kalau Bitcoin terus diadopsi secara masif, jumlah UTXO akan terus bertumbuh. UTXO set bisa mencapai puluhan gigabyte dalam beberapa dekade. Ini masih jauh lebih kecil dari blockchain penuh, tapi cukup untuk menjadi hambatan bagi node dengan hardware terbatas, terutama di negara berkembang di mana hardware mahal dan koneksi internet lambat.
Stateless validation dan UTXO commitments
Saat ini, untuk memverifikasi sebuah transaksi, node harus punya salinan lengkap UTXO set di komputernya sendiri. Ini seperti kasir yang harus hafal seluruh daftar barang di gudang sebelum bisa melayani pembeli. Ada ide yang sedang didiskusikan bernama stateless validation: daripada node yang menyimpan UTXO set, pengirim transaksilah yang membuktikan bahwa UTXO mereka memang ada dan valid. Bukti ini disebut UTXO commitment, semacam sertifikat kriptografis yang bisa diverifikasi tanpa perlu mengecek database lokal. Analoginya: daripada kasir hafal semua stok, pembeli membawa nota resmi dari gudang yang membuktikan barang itu ada. Kasir cukup verifikasi notanya. Ini masih dalam tahap penelitian dan membutuhkan perubahan signifikan pada protokol Bitcoin.
Assumevalid dan assumeutxo
Bitcoin sudah punya beberapa cara untuk mempercepat node baru bergabung ke jaringan tanpa harus memverifikasi ulang seluruh sejarah dari awal. Assumevalid adalah optimasi pertama: node baru bisa melewati verifikasi tanda tangan kriptografis untuk block-block yang sudah sangat lama. Alasannya masuk akal secara ekonomis: kalau jutaan node sudah sepakat bahwa block-block lama itu valid, hampir tidak mungkin semuanya salah. Assumeutxo adalah optimasi yang lebih baru dan lebih canggih: node baru bisa langsung menggunakan snapshot UTXO set yang sudah diverifikasi sebelumnya, dan mulai beroperasi normal dalam hitungan menit. Sementara itu, di latar belakang, node perlahan-lahan memverifikasi seluruh sejarah blockchain dari awal untuk memastikan snapshot itu memang benar.
Archival node vs pruned node
Tidak semua node menyimpan seluruh sejarah Bitcoin. Archival node menyimpan segalanya dari genesis block hingga hari ini dan inilah yang benar-benar menopang jaringan: tanpa cukup archival node, node baru tidak bisa bergabung karena tidak ada yang menyediakan data historis. Pruned node hanya menyimpan UTXO set dan beberapa ratus block terbaru. Ia bisa memverifikasi transaksi untuk dirinya sendiri, tapi tidak bisa membantu node lain yang baru sync. Pruned node berguna untuk keperluan verifikasi pribadi, bukan pengganti archival node.
UTXO set sebagai ukuran kesehatan
Ukuran dan komposisi UTXO set adalah salah satu indikator kesehatan jaringan yang bisa dipantau. UTXO set yang tumbuh terlalu cepat bisa mengindikasikan spam atau aktivitas yang tidak efisien. UTXO set yang stabil atau bahkan menyusut menunjukkan pengguna yang efisien dalam mengelola output mereka. Dust limit, batas minimum nilai UTXO yang diterima oleh node sebagai bagian dari mempool policy, adalah salah satu mekanisme untuk mencegah UTXO set dibanjiri output yang tidak berguna.
UTXO set adalah salah satu batasan sumber daya paling nyata dalam Bitcoin. Tidak seperti blockchain yang hanya perlu disimpan, UTXO set harus bisa diakses dan diquery dengan cepat. Ini menciptakan tekanan alami untuk tetap efisien, tekanan yang pada akhirnya menguntungkan seluruh pengguna jaringan.
| Tipe | Storage | Verifikasi mandiri | Menopang jaringan |
|---|---|---|---|
| 🗄️ Archival | 600+ GB | Penuh | Ya |
| ✂️ Pruned | 10-15 GB | Untuk diri sendiri | Tidak |
| ⚡ AssumeUTXO | 10-15 GB+ | Bertahap | Tergantung konfigurasi |
Di Bab 5 kita sudah memahami mengapa mining ada: Proof of Work adalah mekanisme konsensus yang memungkinkan Bitcoin mencapai kesepakatan tanpa otoritas pusat. Setiap block yang valid merepresentasikan kerja nyata yang sudah dilakukan, dan kerja nyata itu membutuhkan energi nyata.
Di bab ini kita tidak akan mengulang mekanisme itu. Yang akan kita bahas adalah bagaimana mining beroperasi sebagai industri nyata: hardware seperti apa yang digunakan, bagaimana miner berkolaborasi dalam pool, bagaimana ekonominya bekerja, dan apa implikasinya terhadap energi dan desentralisasi.
Mining di tahun 2009 vs sekarang
Ketika Satoshi Nakamoto menambang block pertama pada Januari 2009, ia menggunakan CPU laptop biasa. Tidak ada persaingan, tidak ada hardware khusus, tidak ada perusahaan mining. Satu orang, satu komputer, dan sebuah protokol yang baru lahir.
Hari ini, mining Bitcoin adalah industri global senilai miliaran dolar. Perusahaan-perusahaan mining publik tercatat di bursa saham. Fasilitas mining berukuran gudang besar beroperasi di negara-negara dengan listrik murah. Hardware yang digunakan adalah ASIC (Application-Specific Integrated Circuit), chip yang dirancang dari nol khusus untuk satu tujuan: menghitung SHA-256 hash secepat mungkin. Chip ini tidak bisa digunakan untuk hal lain.
Mengapa industrialisasi ini terjadi?
Jawabannya sederhana: insentif ekonomi. Selama block reward bernilai cukup besar, ada motivasi kuat untuk berinvestasi dalam hardware yang lebih efisien. Miner yang lebih efisien mendapat porsi reward yang lebih besar dengan biaya lebih rendah. Kompetisi ini mendorong inovasi hardware yang luar biasa cepat.
Tapi industrialisasi ini juga membawa konsekuensi yang perlu dipikirkan. Mining yang dulu bisa dilakukan siapapun di rumah kini membutuhkan modal besar dan akses ke listrik murah dalam skala industri. Ini menciptakan tekanan sentralisasi yang bertentangan dengan semangat awal Bitcoin sebagai sistem yang bisa dipartisipasi semua orang.
Mining Bitcoin bukan sekadar "komputer yang memecahkan teka-teki." Ini adalah industri dengan supply chain global, pasar hardware yang kompleks, dan dinamika ekonomi yang unik. Memahami industri ini membantu kita memahami ketahanan dan kerentanan jaringan Bitcoin di dunia nyata.
Sejarah hardware mining Bitcoin adalah salah satu kisah evolusi teknologi yang paling dramatis dalam sejarah komputasi. Dalam waktu kurang dari 15 tahun, efisiensi mining meningkat triliunan kali lipat.
Era CPU (2009-2010)
Di awal Bitcoin, semua orang mining dengan CPU laptop atau desktop biasa. Satoshi Nakamoto sendiri mining dengan CPU. Hash rate seluruh jaringan waktu itu sangat rendah sehingga siapapun bisa mining block dengan komputer biasa. Tidak ada persaingan berarti dan satu block bisa ditemukan dalam hitungan menit dengan laptop standar.
Era GPU (2010-2013)
Seseorang menyadari bahwa GPU (Graphics Processing Unit), chip yang biasanya digunakan untuk rendering grafis game, jauh lebih efisien untuk menghitung SHA-256 dibanding CPU. GPU bisa melakukan ribuan operasi paralel sekaligus. Hash rate melonjak drastis dan CPU mining praktis tidak lagi menguntungkan.
Era FPGA (2011-2013)
FPGA (Field-Programmable Gate Array) adalah chip yang bisa diprogram ulang untuk tugas tertentu. Lebih efisien dari GPU untuk SHA-256, tapi masih bisa diprogram ulang untuk keperluan lain. Era ini singkat karena segera digantikan oleh ASIC.
Era ASIC (2013-sekarang)
ASIC (Application-Specific Integrated Circuit) adalah chip yang dirancang dari nol hanya untuk satu tujuan: menghitung SHA-256 hash secepat dan seefisien mungkin. Tidak bisa digunakan untuk hal lain sama sekali. ASIC modern seperti Antminer S21 bisa mencapai lebih dari 200 TH/s (terahash per detik) dengan konsumsi energi sekitar 3.500 watt. Ini berarti ratusan triliun percobaan hash setiap detik.
Dampak ASIC pada desentralisasi
ASIC menciptakan paradoks: di satu sisi, ASIC membuat jaringan jauh lebih aman karena hash rate yang sangat tinggi membuat serangan 51% sangat mahal. Di sisi lain, ASIC membuat mining semakin terpusat pada pemain yang punya modal besar untuk membeli hardware dan membayar listrik dalam skala industri. Mining yang dulu bisa dilakukan siapapun di rumah kini didominasi oleh perusahaan mining besar dengan fasilitas khusus.
Evolusi hardware mining mencerminkan hukum ekonomi yang sederhana: selama ada insentif finansial yang cukup besar, inovasi akan terus mendorong batas efisiensi. Yang menarik adalah bagaimana hal ini secara tidak sengaja mengubah siapa yang bisa berpartisipasi dalam proses mining Bitcoin.
Ketika mining menjadi sangat kompetitif, miner individu menghadapi masalah yang mirip dengan penjudi: mereka bisa saja tidak pernah menemukan block meskipun sudah bekerja keras berbulan-bulan. Probabilitas menemukan block bagi satu miner kecil sangat rendah, dan pendapatan mereka menjadi sangat tidak pasti. Mining pool hadir sebagai solusi.
Apa itu mining pool?
Mining pool adalah kelompok miner yang menggabungkan hash rate mereka dan berbagi reward secara proporsional. Daripada masing-masing berjuang sendiri untuk menemukan block, mereka bekerja bersama. Ketika pool menemukan block, reward dibagi ke semua anggota berdasarkan kontribusi hash rate masing-masing. Analoginya seperti tiket lotere: daripada satu orang membeli satu tiket dengan peluang menang sangat kecil, seratus orang patungan membeli seratus tiket dan berbagi hasilnya. Peluang menang jauh lebih tinggi, dan meski hadiahnya dibagi, pendapatan menjadi jauh lebih konsisten.
Bagaimana pool bekerja?
Pool memberikan pekerjaan kepada miner anggotanya berupa tugas yang lebih mudah dari target jaringan sesungguhnya. Tugas-tugas ini disebut shares. Miner mengirimkan shares yang berhasil mereka temukan ke pool sebagai bukti bahwa mereka benar-benar bekerja. Sesekali, sebuah share yang ditemukan miner ternyata juga memenuhi target jaringan yang sesungguhnya, artinya block baru ditemukan dan pool mendapat reward.
Metode pembayaran
Ada beberapa cara pool membagi reward. PPS (Pay Per Share): miner dibayar untuk setiap share yang valid, terlepas dari apakah pool menemukan block atau tidak, dan pool menanggung risiko variance. PPLNS (Pay Per Last N Shares): pembayaran berdasarkan shares yang dikontribusikan dalam periode terakhir sebelum block ditemukan, lebih volatile tapi menguntungkan saat pool beruntung. FPPS (Full Pay Per Share): seperti PPS tapi juga memperhitungkan fee transaksi dalam pembagian.
Dampak pool terhadap desentralisasi
Mining pool menciptakan kekhawatiran sentralisasi: beberapa pool besar menguasai porsi signifikan dari total hash rate jaringan. Tapi perlu dicatat bahwa miner individu dalam pool tetap bebas pindah pool kapan saja. Kalau sebuah pool bertindak curang, miner akan meninggalkannya dan pindah ke pool lain atau mining sendiri. Stratum V2 adalah protokol terbaru yang memberi miner lebih banyak kontrol, termasuk kemampuan memilih sendiri transaksi yang dimasukkan ke block.
Mining pool adalah inovasi yang membuat mining lebih mudah diakses oleh miner kecil, tapi sekaligus menciptakan tekanan sentralisasi. Ini adalah trade-off yang terus diperdebatkan dalam komunitas Bitcoin. Stratum V2 adalah salah satu upaya untuk menjaga desentralisasi sambil tetap memungkinkan kolaborasi efisien.
Mining Bitcoin adalah bisnis. Seperti bisnis lainnya, keberhasilannya ditentukan oleh satu persamaan sederhana: pendapatan harus lebih besar dari biaya. Tapi ekonomi mining jauh lebih kompleks dari bisnis biasa karena beberapa variabel kuncinya terus berubah secara dinamis.
Sumber pendapatan miner
Miner mendapat dua sumber pendapatan. Pertama, block reward: saat ini 3.125 BTC per block, dan akan terus berkurang setiap halving. Kedua, fee transaksi: semua fee dari transaksi yang dimasukkan ke block. Saat mempool ramai, fee bisa menjadi porsi signifikan dari total pendapatan. Pendapatan total miner dihitung dalam USD atau mata uang lokal, sehingga harga BTC sangat menentukan profitabilitas.
Biaya operasional
Biaya terbesar dalam mining adalah listrik. ASIC modern membutuhkan ribuan watt untuk beroperasi, dan harus berjalan 24 jam sehari 7 hari seminggu. Biaya listrik per kilowatt-hour (kWh) adalah faktor yang paling membedakan miner yang profitable dari yang tidak. Miner dengan akses ke listrik murah (0.03-0.05 USD/kWh) bisa tetap profitable bahkan saat harga BTC sedang rendah. Miner dengan listrik mahal (0.10-0.15 USD/kWh) bisa rugi bahkan saat harga BTC tinggi. Biaya lain termasuk hardware ASIC yang perlu diganti setiap beberapa tahun, infrastruktur cooling, sewa fasilitas, dan tenaga kerja.
Hash rate dan difficulty
Semakin banyak miner bergabung ke jaringan dengan hardware baru, hash rate total naik dan difficulty menyesuaikan agar block time tetap 10 menit. Ini berarti setiap miner mendapat porsi reward yang lebih kecil. Ekonomi mining adalah zero-sum game dalam jangka pendek: kalau miner lain menjadi lebih efisien, miner yang kurang efisien semakin tertekan.
Hashprice dan break-even price
Hashprice adalah metrik yang menghitung berapa USD yang dihasilkan per terahash per detik per hari. Ini memungkinkan miner membandingkan profitabilitas terlepas dari ukuran operasinya. Break-even price adalah harga BTC minimum agar operasi mining tidak rugi, tergantung biaya listrik dan efisiensi hardware yang digunakan.
Halving dan dampaknya
Setiap halving, block reward dipotong setengah. Kalau harga BTC tidak naik cukup untuk mengimbangi, miner yang tidak efisien akan mematikan hardware mereka. Hash rate bisa turun sementara, difficulty menyesuaikan turun, dan miner yang tersisa menjadi lebih profitable. Halving adalah salah satu momen paling menegangkan dalam siklus ekonomi mining Bitcoin.
Ekonomi mining adalah sistem yang sangat dinamis dan self-correcting. Profitabilitas yang tinggi menarik lebih banyak miner, yang menaikkan difficulty, yang mengurangi profitabilitas. Profitabilitas yang rendah mendorong miner keluar, yang menurunkan difficulty, yang meningkatkan profitabilitas bagi yang tersisa. Ini adalah keseimbangan yang terus bergerak.
Tidak ada topik dalam ekosistem Bitcoin yang lebih sering diperdebatkan dari konsumsi energi mining. Kritik datang dari berbagai arah, dan pertahanannya juga beragam. Yang penting adalah memahami fakta-faktanya sebelum mengambil kesimpulan.
Berapa banyak energi yang digunakan Bitcoin?
Konsumsi energi jaringan Bitcoin tidak bisa diukur langsung, karena tidak ada meteran yang terpasang di jaringan. Yang ada cuma perkiraan, dan dua perkiraan paling sering dikutip berbeda cukup jauh. Per pertengahan 2026, Cambridge Centre for Alternative Finance memperkirakan sekitar 138 TWh per tahun, sedangkan Digiconomist sekitar 204 TWh. Selisihnya 66 TWh, dan itu bukan kecerobohan.
Kenapa dua angka yang sama-sama kredibel bisa berbeda sejauh itu
Karena keduanya menjawab pertanyaan yang sedikit berbeda. Cambridge menyusun dari bawah: mensurvei perusahaan mining, mendata hardware yang benar-benar dipakai, lalu menghitung kebutuhan listriknya. Digiconomist menyusun dari sisi ekonomi: mengandaikan miner membelanjakan porsi tetap dari pendapatannya untuk listrik, lalu menghitung mundur. Akibatnya angka Digiconomist ikut naik saat harga naik, sedangkan angka Cambridge lebih terikat pada perangkat keras yang nyata. Tidak ada yang salah di antara keduanya. Yang salah adalah mengutip satu angka tanpa menyebut model mana yang dipakai.
Untuk konteks, angka itu kira-kira setara konsumsi listrik negara berukuran sedang seperti Polandia atau Thailand, dan berada di kisaran setengah persen dari seluruh listrik dunia. Sebagai pembanding lain, pusat data global menghabiskan sekitar 485 TWh pada 2025 dan tumbuh sekitar 15 persen per tahun, sementara angka Bitcoin relatif mendatar.
Yang tidak akan berubah, apa pun angkanya nanti
Angka di atas pasti menua, dan bagian mana pun dari buku ini yang menyebut TWh sebaiknya kamu perlakukan sebagai potret bertanggal. Tapi tiga hal berikut tidak ikut menua. Pertama, konsumsi energi Bitcoin mengikuti pendapatan miner, bukan jumlah transaksi. Menambah atau mengurangi transaksi dalam satu block tidak mengubah energinya sedikit pun, karena yang dibayar adalah menemukan block, bukan mengisinya. Itu sebabnya angka "energi per transaksi" yang sering dikutip media menyesatkan: penyebutnya bisa berubah tanpa pembilangnya bergerak.
Kedua, karena mengikuti pendapatan, ia ikut naik turun bersama harga. Ini bukan teori: pada Desember 2025 perkiraan tahunan sempat mendekati 190 TWh di puncak pasar, lalu turun kembali ke kisaran 130-an setelah harga melemah pada 2026 dan miner yang kurang efisien berhenti beroperasi. Ketiga, efisiensi hardware terus membaik, dari sekitar 98 J/TH pada 2016 menjadi sekitar 13,5 J/TH pada 2026. Artinya energi per hash turun terus, tapi jumlah hash naik terus, dan yang menentukan hasil akhirnya adalah harga.
Kalau kamu ingin angka terkini, yang perlu dicari bukan berita, melainkan salah satu dari dua indeks itu langsung, dan yang perlu kamu catat adalah tanggal serta model mana yang kamu kutip.
Energi dan keamanan
Energi yang digunakan dalam mining bukan sia-sia dari perspektif Bitcoin. Ia adalah biaya yang secara langsung mengamankan jaringan. Semakin banyak energi yang digunakan untuk mining, semakin mahal biaya untuk menyerang jaringan. Ini adalah mekanisme keamanan yang disengaja: work dalam proof of work harus nyata dan mahal.
Sumber energi mining
Komposisi sumber energi mining sudah bergeser secara signifikan. Karena miner mencari listrik termurah, mereka sering menuju ke sumber energi yang murah karena berlebihan atau terisolasi: energi hidro yang berlebih, gas buang dari sumur minyak (flared gas), energi geotermal, dan sumber terbarukan lainnya. Estimasi terkini menunjukkan sekitar 50-60% energi mining berasal dari sumber terbarukan atau rendah karbon, meskipun angka ini diperdebatkan karena metodologi yang berbeda.
Perbandingan dengan sistem lain
Sering diabaikan dalam perdebatan adalah konsumsi energi sistem keuangan tradisional: bank, ATM, kantor, data center, pencetakan uang fisik, dan pengiriman uang tunai. Perbandingan ini sulit dilakukan secara apel-ke-apel karena ruang lingkup yang berbeda, tapi penting untuk menjaga perspektif yang seimbang.
Mining sebagai pembeli energi fleksibel
Ada argumen yang menarik bahwa mining bisa berperan positif dalam grid energi. Miner bisa bertindak sebagai pembeli energi yang sangat fleksibel: mereka bisa dinyalakan saat ada surplus energi dan dimatikan saat permintaan tinggi. Ini membantu stabilisasi grid dan bisa membuat proyek energi terbarukan lebih ekonomis dengan menjadi pembeli energi yang selalu ada bahkan di luar jam puncak.
Perdebatan energi Bitcoin tidak punya jawaban sederhana. Seberapa mahal sebuah sistem keamanan moneter yang desentralisasi layak untuk dibayar? Ini adalah pertanyaan nilai, bukan hanya teknis. Yang bisa dilakukan adalah memastikan perdebatan ini didasarkan pada fakta yang akurat, bukan angka yang diambil tanpa konteks.
Mining Bitcoin berada di persimpangan antara dua kekuatan yang saling bertentangan: tekanan menuju sentralisasi yang didorong oleh ekonomi skala, dan tekanan menuju desentralisasi yang didorong oleh semangat protokol Bitcoin itu sendiri. Ke mana arah industri ini ke depannya?
Konsentrasi hash rate saat ini
Hari ini, sebagian besar hash rate jaringan Bitcoin terkonsentrasi di beberapa pool besar. Ini bukan berarti jaringan dikontrol oleh segelintir pihak, karena miner individu dalam pool bebas pindah kapan saja. Tapi konsentrasi ini tetap menciptakan risiko teoritis dan pertanyaan tentang ketahanan jangka panjang. Secara geografis, China pernah mendominasi dengan lebih dari 60% hash rate, tapi larangan mining pada 2021 mendorong redistribusi besar-besaran. Kini hash rate tersebar ke Amerika Serikat, Kazakhstan, Rusia, Kanada, dan banyak negara lain. Distribusi geografis yang lebih luas ini secara umum positif untuk ketahanan jaringan.
Siapa yang memilih transaksi?
Dalam setup pool tradisional, operator pool yang memutuskan transaksi mana yang masuk ke block, bukan miner individu yang menjalankan hardware. Selama ini hal ini jarang menjadi masalah karena pool umumnya memilih transaksi berdasarkan fee tertinggi tanpa memfilter konten.
Tapi Ocean Pool mengubah dinamika ini. Ocean adalah pool yang secara eksplisit menerapkan transaction filtering: mereka menolak transaksi tertentu yang mereka anggap tidak sesuai dengan penggunaan Bitcoin yang sah, termasuk beberapa jenis Ordinals dan transaksi yang menggunakan OP_RETURN secara berlebihan. Ini bukan kecurangan dalam artian teknis. Secara protokol, miner memang punya hak memilih transaksi mana yang dimasukkan ke block.
Tapi ini membuka perdebatan yang lebih dalam: kalau pool besar mulai menyensor transaksi tertentu berdasarkan konten bukan hanya validitas teknis, apakah sifat censorship-resistance Bitcoin terancam? Di satu sisi, ada yang berargumen miner berhak memilih berdasarkan preferensi mereka. Di sisi lain, ada yang khawatir ini menciptakan preseden berbahaya: kalau satu pool boleh menyensor berdasarkan konten, apa yang mencegah pool lain menyensor berdasarkan kriteria lain yang lebih politis?
Stratum V2 dan desentralisasi pemilihan transaksi
Stratum V2 hadir sebagai jawaban struktural terhadap pertanyaan ini. Sebagai upgrade protokol komunikasi antara pool dan miner, Stratum V2 memberi miner individu kemampuan untuk memilih sendiri transaksi yang ingin mereka masukkan ke block. Ini adalah perubahan fundamental: bahkan kalau hash rate terkonsentrasi di pool besar, kekuatan untuk memilih transaksi terdistribusi kembali ke miner individu. Kalau Stratum V2 diadopsi luas, skenario seperti Ocean Pool yang memfilter transaksi atas nama seluruh miner dalam pool menjadi lebih sulit terjadi tanpa persetujuan eksplisit miner.
Mining rumahan dan small-scale mining
Ada gerakan yang tumbuh untuk membawa mining kembali ke skala kecil. Perangkat seperti Bitaxe adalah ASIC open-source berukuran kecil yang bisa dijalankan di rumah dengan daya beberapa watt. Hash rate-nya sangat kecil dibanding ASIC industri, tapi kontribusinya ke desentralisasi jaringan lebih besar dari angkanya. Argumennya: jaringan yang punya jutaan miner kecil yang tersebar geografis lebih tahan terhadap serangan dan regulasi daripada jaringan yang bergantung pada beberapa ratus fasilitas industri besar.
Fee transaksi sebagai insentif jangka panjang
Block reward akan terus berkurang setiap halving. Pada akhirnya, tidak akan ada lagi block reward. Insentif miner akan sepenuhnya bergantung pada fee transaksi. Kalau Bitcoin berhasil menjadi sistem yang digunakan miliaran orang, volume dan fee aggregate mungkin lebih dari cukup. Tapi kalau tidak, hash rate bisa turun dan keamanan jaringan melemah. Ini adalah salah satu pertanyaan paling fundamental tentang keberlanjutan jangka panjang Bitcoin, dan tidak ada yang tahu jawabannya dengan pasti.
Masa depan mining Bitcoin bergantung pada keseimbangan antara insentif ekonomi, inovasi teknologi, dan keputusan komunitas. Pertanyaan tentang siapa yang berhak memilih transaksi, seberapa terdesentralisasi hash rate harus, dan apakah fee cukup menggantikan block reward adalah pertanyaan yang akan terus diperdebatkan. Yang menarik adalah semua ini terjadi tanpa ada pihak tunggal yang bisa memutuskan jawabannya.
Bitcoin sering disebut sebagai mata uang anonim. Ini adalah kesalahpahaman yang cukup serius. Bitcoin bukan anonim, ia pseudonim. Setiap transaksi tercatat permanen di blockchain yang bisa dibaca siapapun. Yang tersembunyi hanyalah identitas di balik address, bukan transaksinya itu sendiri.
Transparansi sebagai fitur, bukan bug
Transparansi penuh blockchain adalah pilihan desain yang disengaja. Tanpa transparansi ini, node tidak bisa memverifikasi bahwa tidak ada bitcoin yang dibuat dari nol atau dibelanjakan dua kali. Transparansi adalah harga yang dibayar untuk desentralisasi dan verifikasi tanpa kepercayaan. Tapi transparansi ini punya konsekuensi privasi yang serius. Kalau seseorang mengetahui satu address milikmu, mereka bisa melihat semua transaksi yang masuk dan keluar dari address itu. Dan dengan analisis heuristik seperti yang kita bahas di Bab 10, mereka bisa mulai menghubungkan address-address lain yang kemungkinan milikmu juga.
Heuristik analisis blockchain
Ada beberapa heuristik yang digunakan analis blockchain untuk menghubungkan address dan mengidentifikasi pemilik. Common input ownership: kalau dua UTXO digunakan bersama sebagai input, kemungkinan besar keduanya milik orang yang sama. Change output detection: kembalian transaksi biasanya bisa diidentifikasi dari nilai yang tidak bulat atau dari tipe script yang sama dengan pengirim. Address reuse: kalau address yang sama muncul lebih dari sekali, semua transaksinya terhubung.
Kenapa ini penting
Privasi finansial bukan tentang menyembunyikan sesuatu yang ilegal. Ini tentang hak dasar: kamu tidak ingin employer-mu tahu berapa gajimu dari pekerjaan sampingan, kamu tidak ingin competitor-mu tahu dengan siapa kamu bertransaksi, kamu tidak ingin penyerang tahu berapa banyak bitcoin yang kamu miliki. Di negara dengan pemerintahan yang tidak stabil, privasi finansial bisa menjadi masalah keselamatan nyata.
Blockchain Bitcoin adalah buku besar publik permanen. Setiap kesalahan privasi yang kamu buat hari ini bisa dianalisis ulang bertahun-tahun kemudian dengan tools yang lebih canggih. Privasi yang baik harus dibangun dari awal, bukan ditambal setelahnya.
Yang bocor bukan cuma siapa, tapi juga pakai apa
Heuristik yang kita bahas tadi berusaha menjawab pertanyaan "UTXO ini milik siapa". Ada lapisan lain yang lebih halus dan jarang disadari: transaksimu juga membocorkan wallet apa yang kamu pakai. Namanya wallet fingerprinting.
Penyebabnya sederhana. Protokol Bitcoin memberi banyak kebebasan tentang bagaimana sebuah transaksi disusun, dan setiap wallet mengambil keputusan yang sedikit berbeda. Keputusan itu konsisten, dan konsistensi itulah yang menjadi sidik jari.
Beberapa yang paling mudah dibaca: urutan output, apakah kembalian selalu ditaruh di posisi pertama atau diacak. Nomor versi transaksi, ada yang memakai 1, ada yang 2. Nilai nSequence yang kita bahas di 15.3, apakah wallet menandai transaksinya replaceable atau tidak. Cara membulatkan fee, apakah selalu angka bulat atau hasil perhitungan presisi. Dan yang paling terang, jenis alamat: wallet yang membelanjakan dari bc1q lalu mengirim kembalian ke bc1q juga menyempit pilihannya sendiri.
Satu ciri saja tidak berarti banyak. Tapi digabungkan, kombinasinya sering cukup untuk menebak wallet apa yang dipakai, dan kadang versinya. Bagi pengamat, itu petunjuk berharga. Kalau ia tahu kamu memakai wallet tertentu, ia tahu pola kembalianmu, tahu apakah kamu mungkin memakai fitur privasi tertentu, dan bisa menyaring transaksi lain di blockchain yang punya sidik jari sama.
Ada akibat yang lebih tidak enak lagi. Sidik jari itu bisa dipakai untuk memecahkan CoinJoin yang kita bahas di 12.2. Kalau dari sepuluh peserta sebuah CoinJoin hanya satu yang memakai wallet dengan ciri tertentu, anonimitas yang seharusnya didapat dari berbaur bersama sembilan orang lain ikut menipis.
Yang bisa kamu lakukan terbatas, dan jujur saja tidak banyak. Memakai wallet yang populer membuatmu berbaur dengan lebih banyak orang. Memakai jenis alamat yang sama dengan mayoritas jaringan juga membantu. Tapi pada dasarnya ini bukan sesuatu yang bisa diperbaiki pengguna sendiri: yang perlu berubah adalah wallet-nya, dan sebagian pengembang memang sedang menyeragamkan perilaku mereka agar sidik jarinya melebur.
CoinJoin adalah teknik privasi paling fundamental di Bitcoin. Ide dasarnya sederhana tapi powerful: beberapa pengguna menggabungkan transaksi mereka menjadi satu transaksi bersama dengan banyak input dari banyak pengguna dan banyak output dengan nilai yang sama.
Bagaimana CoinJoin bekerja
Bayangkan Alice ingin mengirim 0.1 BTC dan Bob juga ingin mengirim 0.1 BTC. Daripada membuat dua transaksi terpisah, mereka bergabung dalam satu transaksi: dua input dari Alice dan Bob, dua output 0.1 BTC ke penerima masing-masing. Analis blockchain tidak bisa lagi menggunakan heuristik common input ownership karena input memang dari dua orang berbeda. Dan karena outputnya sama nilainya, tidak bisa ditentukan mana output Alice dan mana output Bob.
Tanpa kepercayaan
Yang membuat CoinJoin elegan adalah tidak ada yang perlu dipercaya. Setiap peserta menandatangani transaksi hanya setelah memverifikasi bahwa output mereka ada di transaksi tersebut. Kalau ada yang mencoba memanipulasi output, tanda tangan tidak valid dan transaksi batal. Tidak ada pihak yang bisa mencuri dana peserta lain.
Implementasi CoinJoin
Ada beberapa implementasi CoinJoin yang berbeda. Wasabi Wallet menggunakan WabiSabi, protokol CoinJoin yang memungkinkan output dengan nilai yang berbeda-beda, bukan hanya satu denominasi. JoinMarket adalah marketplace di mana market maker menyediakan likuiditas untuk CoinJoin dengan imbalan fee kecil. Whirlpool dari Samourai Wallet menggunakan denominasi tetap dan memungkinkan pengguna untuk melakukan multiple mixing rounds.
Keterbatasan CoinJoin
CoinJoin bukan solusi sempurna. Pertama, butuh koordinasi antara beberapa pengguna yang mau join di waktu yang sama. Kedua, kalau pengguna kemudian menggabungkan output CoinJoin dengan UTXO lain yang tidak di-CoinJoin, privasi yang sudah dibangun bisa bocor. Ketiga, beberapa exchange dan layanan mulai menolak bitcoin yang berasal dari CoinJoin, menciptakan masalah fungibilitas yang serius.
Catatan tentang Samourai Wallet
Pada April 2024, pendiri Samourai Wallet ditangkap oleh pihak berwenang AS dengan tuduhan money laundering dan pengoperasian layanan pengiriman uang tanpa izin. Ini adalah contoh nyata bagaimana tools privasi Bitcoin berada di wilayah yang masih diperdebatkan secara hukum. Whirlpool tidak lagi aktif sebagai layanan terpusat sejak itu, meskipun protokolnya masih bisa dijalankan secara mandiri.
CoinJoin adalah bukti bahwa privasi bisa dibangun di atas Bitcoin tanpa mengubah protokol dasarnya. Tapi kasus Samourai menunjukkan bahwa batasan antara tools privasi dan layanan keuangan yang perlu regulasi masih menjadi perdebatan aktif di berbagai yurisdiksi.
CoinJoin membutuhkan koordinasi antara beberapa pengguna yang tidak saling kenal. Payjoin mengambil pendekatan yang berbeda: privasi dibangun langsung ke dalam transaksi pembayaran biasa antara pengirim dan penerima.
Apa itu Payjoin?
Payjoin (juga disebut P2EP atau Pay-to-End-Point) adalah protokol di mana penerima pembayaran ikut berkontribusi input ke transaksi. Dalam transaksi biasa, hanya pengirim yang menyediakan input. Dalam Payjoin, penerima juga menambahkan satu atau lebih UTXO sebagai input tambahan. Hasilnya: transaksi terlihat seperti transaksi biasa dari luar, tapi heuristik common input ownership sekarang memberikan kesimpulan yang salah. Analis yang melihat transaksi ini akan berasumsi semua input milik satu orang, padahal sebenarnya input berasal dari dua pihak berbeda.
Kenapa ini lebih baik dari CoinJoin biasa?
CoinJoin mudah diidentifikasi oleh analis blockchain karena pola transaksinya khas: banyak input dari banyak address dan banyak output dengan nilai yang sama persis. Walau isi transaksinya tidak bisa dideobfuskasi, keberadaan CoinJoin sendiri bisa dideteksi dan ditandai. Beberapa exchange menolak bitcoin yang pernah melalui CoinJoin bahkan tanpa bisa membuktikan dana itu terkait aktivitas ilegal. Payjoin tidak memiliki pola yang bisa diidentifikasi. Dari luar, transaksi Payjoin terlihat persis seperti transaksi pembayaran biasa.
Bagaimana Payjoin bekerja secara teknis
Prosesnya dimulai dari pengirim yang ingin membayar. Pengirim mengontak penerima melalui endpoint khusus, biasanya URL yang disediakan wallet penerima. Penerima merespons dengan menambahkan UTXO miliknya ke transaksi yang sedang dikonstruksi. Pengirim kemudian memverifikasi dan menandatangani transaksi lengkap. Hasilnya adalah satu transaksi yang tampak normal tapi mengandung input dari kedua pihak.
Keterbatasan Payjoin
Payjoin membutuhkan penerima yang mendukung protokol ini. Kalau merchant atau wallet penerima tidak mendukung Payjoin, transaksi dilakukan seperti biasa tanpa manfaat privasi. Adopsi masih terbatas: BIP 78 mendefinisikan protokol standar Payjoin, dan beberapa wallet seperti BTCPay Server, Wasabi Wallet, dan JoinMarket sudah mendukungnya, tapi masih jauh dari universal.
Payjoin adalah teknik privasi yang elegan karena tidak meninggalkan jejak yang bisa diidentifikasi. Kalau adopsinya luas, ia bisa meningkatkan privasi seluruh pengguna Bitcoin bahkan yang tidak secara aktif menggunakannya, karena analis tidak bisa lagi mengasumsikan semua input dalam satu transaksi milik satu orang.
CoinJoin butuh koordinasi antar pengguna. Payjoin butuh penerima yang mendukung protokol. Silent Payments mengambil pendekatan yang lebih radikal: privasi yang tidak butuh koordinasi sama sekali dari pengirim atau penerima.
Apa itu Silent Payments?
Silent Payments (BIP 352) adalah protokol yang memungkinkan seseorang mempublikasikan satu alamat statis yang bisa digunakan oleh siapapun untuk mengirim pembayaran, tapi setiap pembayaran yang diterima akan masuk ke address on-chain yang berbeda-beda dan tidak bisa dihubungkan satu sama lain hanya dengan melihat blockchain. Analoginya: bayangkan kamu punya satu nomor rekening bank yang kamu bagikan ke semua orang, tapi setiap kali seseorang mentransfer ke nomor itu, uangnya masuk ke sub-rekening berbeda yang tidak terlihat satu sama lain dari luar.
Bagaimana cara kerjanya?
Pengirim menggunakan kunci publik penerima yang ada di alamat statis bersama dengan kunci privat pengirim untuk menghasilkan alamat pembayaran unik melalui operasi kriptografis yang disebut Elliptic Curve Diffie-Hellman. Alamat ini unik untuk setiap pengirim dan tidak bisa dikaitkan dengan alamat pembayaran dari pengirim lain, bahkan oleh orang yang tahu alamat statis penerima. Penerima kemudian men-scan blockchain menggunakan kunci privatnya untuk menemukan pembayaran yang ditujukan untuknya.
Kelebihan Silent Payments
Tidak perlu koordinasi: pengirim cukup tahu alamat statis penerima, tidak perlu komunikasi tambahan. Tidak ada address reuse: setiap pembayaran menghasilkan address on-chain yang unik, bahkan dari alamat statis yang sama. Tidak ada server pihak ketiga yang perlu dipercaya. Alamat statis bisa dipublikasikan secara terbuka seperti alamat email, tapi lebih aman dari segi privasi karena tidak mengekspos riwayat transaksi.
Keterbatasan
Scanning blockchain untuk menemukan pembayaran lebih berat secara komputasi. Light wallet yang mengandalkan server pihak ketiga akan kesulitan mengimplementasikan Silent Payments tanpa kehilangan privasi. Masih cukup baru: diimplementasikan di Cake Wallet dan beberapa wallet lain, tapi belum tersedia di mayoritas wallet populer.
Silent Payments adalah salah satu inovasi privasi paling menarik dalam ekosistem Bitcoin belakangan ini. Ia mengatasi salah satu masalah fundamental: bagaimana kamu bisa menerima pembayaran dari siapapun tanpa mengungkapkan riwayat transaksimu, dan tanpa harus berkoordinasi dengan pengirim terlebih dahulu.
Lightning Network bukan hanya solusi skalabilitas. Ia juga membawa karakteristik privasi yang sangat berbeda dari transaksi on-chain. Memahami perbedaan ini penting untuk membuat keputusan yang tepat tentang kapan menggunakan Lightning dan kapan menggunakan on-chain.
Privasi Lightning vs on-chain
Transaksi on-chain tercatat permanen di blockchain yang bisa dibaca siapapun. Transaksi Lightning tidak tercatat di blockchain sama sekali. Yang tercatat hanyalah pembukaan dan penutupan channel. Seluruh pembayaran yang terjadi di dalam channel tetap privat dari publik. Kalau Alice dan Bob punya channel Lightning dan melakukan ribuan transaksi, yang terlihat di blockchain hanyalah dua transaksi, bukan ribuan transaksi individual.
Onion routing di Lightning
Lightning menggunakan onion routing mirip dengan Tor: setiap node di jalur pembayaran hanya tahu dari mana pembayaran datang dan ke mana ia harus diteruskan, tapi tidak tahu keseluruhan jalur. Node pertama tahu pengirim tapi tidak tahu penerima akhir. Node terakhir tahu penerima tapi tidak tahu pengirim asal. Ini memberikan privasi yang lebih baik dari transaksi on-chain biasa, tapi bukan sempurna.
Tantangan privasi Lightning
Ada beberapa tantangan privasi yang spesifik untuk Lightning. Channel balance visibility: node yang terhubung ke kamu bisa melihat saldo channel yang kamu miliki bersama mereka. Invoice reuse: kalau kamu menggunakan invoice yang sama untuk menerima beberapa pembayaran, pembayar bisa saling mengetahui. Routing node surveillance: node besar yang merutekan banyak pembayaran bisa mengumpulkan data tentang pola pembayaran di jaringan.
BOLT 12 dan Offers
BOLT 12 adalah standar baru yang memperkenalkan konsep offers, pengganti invoice Lightning yang lebih privat. Offers memungkinkan penerima mempublikasikan satu kode yang bisa digunakan berkali-kali untuk menerima pembayaran, mirip seperti Silent Payments tapi di layer Lightning. Setiap pembayaran menghasilkan invoice unik secara kriptografis, mencegah korelasi antar pembayaran.
Lightning memberikan privasi yang lebih baik dari on-chain untuk sebagian besar transaksi sehari-hari, tapi bukan tanpa kelemahan. Pilihan terbaik bergantung pada konteks: untuk nilai besar yang butuh finalitas on-chain, gunakan on-chain. Untuk transaksi kecil yang sering, Lightning menawarkan privasi lebih baik sekaligus biaya lebih rendah.
Setelah membahas berbagai teknik privasi di bab ini, penting untuk memahami satu hal: privasi di Bitcoin bukan sesuatu yang bisa langsung diaktifkan atau dinonaktifkan. Ia adalah spektrum yang bergantung pada banyak keputusan kecil yang kamu buat setiap kali bertransaksi.
Tidak ada solusi sempurna
Setiap teknik yang kita bahas punya keterbatasan. CoinJoin bisa diidentifikasi polanya dan beberapa exchange menolaknya. Payjoin butuh penerima yang mendukung protokol. Silent Payments belum tersedia di semua wallet. Lightning punya keterbatasan sendiri untuk transaksi besar. Tidak ada satu teknik yang bisa menyelesaikan semua masalah privasi sekaligus.
Threat model: ancaman dari siapa?
Pertanyaan pertama yang harus dijawab sebelum memikirkan privasi adalah: kamu ingin melindungi diri dari siapa? Dari perusahaan analitik blockchain yang melacak pola transaksi? Dari exchange yang mungkin membekukan dana karena tainted coins? Dari orang-orang di sekitarmu yang tidak perlu tahu berapa banyak bitcoin yang kamu miliki? Jawaban yang berbeda membutuhkan strategi yang berbeda.
Praktik dasar yang bisa dilakukan semua orang
Ada beberapa langkah sederhana yang bisa dilakukan siapapun tanpa membutuhkan tools khusus. Gunakan HD wallet yang menghasilkan address baru secara otomatis untuk setiap transaksi. Hindari menggabungkan UTXO dari sumber berbeda dalam satu transaksi kalau tidak perlu. Gunakan Lightning untuk pembayaran kecil dan rutin. Berhati-hati dengan siapa kamu berbagi informasi tentang address atau transaksimu.
Privasi dan fungibilitas
Ada hubungan yang erat antara privasi dan fungibilitas Bitcoin. Fungibilitas berarti setiap satoshi bitcoin seharusnya diperlakukan sama, terlepas dari sejarahnya. Kalau beberapa bitcoin bisa di-taint karena pernah digunakan dalam aktivitas yang dicurigai dan exchange bisa menolak bitcoin tersebut, maka bitcoin tidak lagi sepenuhnya fungibel. Privasi yang baik membantu mempertahankan fungibilitas: kalau sejarah transaksi tidak bisa dilacak, tidak ada bitcoin yang bisa di-taint.
Masa depan privasi Bitcoin
Komunitas Bitcoin terus bekerja pada peningkatan privasi di level protokol. Silent Payments sudah mulai diadopsi. BOLT 12 sedang dalam proses implementasi. Ada diskusi tentang cross-input signature aggregation yang bisa membuat semua transaksi terlihat lebih seragam. Privasi Bitcoin di masa depan kemungkinan akan jauh lebih baik dari hari ini, tapi ini adalah proses yang lambat dan hati-hati karena setiap perubahan protokol membutuhkan konsensus komunitas yang luas.
Privasi bukan tentang menjadi kriminal. Ini tentang mempertahankan hak dasar untuk mengelola informasi finansialmu sendiri. Sama seperti kamu tidak mempublikasikan rekening bank ke semua orang, kamu juga tidak perlu mempublikasikan seluruh riwayat transaksi Bitcoinmu. Privasi yang baik adalah fondasi dari kebebasan finansial yang sejati.
Istilah soft fork dan hard fork sudah kita kenalkan sekilas di 5.1 waktu membahas konsensus. Di sini kita bongkar keduanya sampai tuntas, karena seluruh Bab 13 berdiri di atas perbedaan ini. Kalau bagian ini terasa familiar di awal, itu memang disengaja.
Bitcoin adalah protokol yang hidup. Ia perlu berevolusi untuk memperbaiki bug, menambah fitur, atau merespons ancaman baru. Tapi bagaimana caranya mengubah sebuah protokol yang tidak punya pemilik, tidak punya CEO, dan dijalankan oleh ribuan node independen di seluruh dunia? Di sinilah konsep fork menjadi penting.
Hard fork vs soft fork
Hard fork adalah perubahan protokol yang tidak kompatibel ke belakang. Node yang tidak upgrade tidak bisa lagi mengikuti chain yang baru. Kalau sebagian node upgrade dan sebagian tidak, jaringan akan terbagi menjadi dua chain yang terpisah permanen. Keduanya punya rantai terpanjangnya sendiri, tapi tidak berkompetisi satu sama lain karena block satu pihak tidak relevan bagi pihak lain. Hard fork membutuhkan koordinasi hampir universal dari seluruh ekosistem.
Soft fork adalah perubahan protokol yang kompatibel ke belakang. Node lama yang tidak upgrade masih bisa mengikuti chain baru, karena aturan baru hanya memperketat aturan yang sudah ada. Block yang valid menurut aturan baru juga valid menurut aturan lama. Ini berarti masih satu jaringan dengan dua kandidat chain, dan yang terpanjang menang. Karena mayoritas hash rate biasanya ada di node yang sudah upgrade, chain mereka yang selalu terpanjang.
Analogi sederhana
Bayangkan permainan kartu dengan aturan: "kartu bernilai lebih dari 5 menang." Hard fork adalah mengubah aturan menjadi "kartu bernilai lebih dari 3 menang", pemain lama yang tidak tahu aturan baru tidak bisa bermain di meja yang sama. Soft fork adalah mengubah aturan menjadi "kartu bernilai lebih dari 5 menang, dan harus berwarna merah", aturan jadi lebih ketat, tapi pemain lama masih bisa bermain di meja yang sama meski bermain suboptimal.
Mengapa Bitcoin lebih memilih soft fork
Soft fork lebih aman karena tidak memaksa semua pengguna untuk upgrade sekaligus. Node lama tetap bisa berpartisipasi dalam jaringan. Ini mengurangi risiko perpecahan komunitas dan memungkinkan perubahan dilakukan secara bertahap. Hard fork di Bitcoin dianggap sangat berisiko dan hampir tidak pernah dilakukan untuk fitur baru, hanya untuk perbaikan kritis yang benar-benar tidak bisa dilakukan dengan soft fork.
Pilihan antara soft fork dan hard fork bukan hanya teknis, tapi juga politis dan sosial. Soft fork memungkinkan perubahan tanpa memaksa konsensus universal, tapi juga berarti fitur baru harus dirancang dengan sangat hati-hati agar kompatibel ke belakang. Ini adalah salah satu alasan mengapa pengembangan Bitcoin terasa lambat dibanding proyek kripto lain.
Bitcoin tidak punya CEO, tidak punya kantor pusat, tidak punya dewan direksi. Tapi Bitcoin bukan tanpa proses. Ada mekanisme formal untuk mengusulkan, mendiskusikan, dan mengimplementasikan perubahan pada protokol. Mekanisme ini disebut BIP, singkatan dari Bitcoin Improvement Proposal.
Apa itu BIP?
BIP adalah dokumen tertulis yang mengusulkan perubahan atau penambahan pada protokol Bitcoin, proses pengembangannya, atau standar yang digunakan. BIP pertama kali diperkenalkan oleh Amir Taaki pada 2011, terinspirasi dari Python Enhancement Proposals (PEP) yang digunakan komunitas Python. Setiap BIP punya nomor unik: BIP 32 untuk HD wallet, BIP 141 untuk SegWit, BIP 340-342 untuk Taproot, BIP 352 untuk Silent Payments. Nomor ini menjadi cara komunitas mereferensikan proposal secara konsisten.
Siapa yang bisa mengajukan BIP?
Siapapun. BIP bukan dokumen eksklusif developer inti. Siapapun bisa menulis dan mengajukan BIP. Tapi kualitas argumen, kejelasan spesifikasi teknis, dan dukungan dari komunitas yang menentukan apakah BIP akan dipertimbangkan serius atau diabaikan.
Proses BIP
BIP yang diajukan pertama kali melewati review oleh BIP editor yang memastikan format dan kelengkapan dokumen. Editor tidak memutuskan apakah BIP bagus atau buruk secara teknikal. Setelah diterima sebagai draft, BIP mulai didiskusikan di berbagai forum: mailing list bitcoin-dev, GitHub, forum, dan konferensi. Diskusi ini bisa berlangsung berbulan-bulan bahkan bertahun-tahun. Tidak ada voting formal, tidak ada keputusan tunggal. Konsensus terbentuk secara organik dari diskusi yang panjang.
Jenis-jenis BIP
Ada tiga jenis BIP. Standards Track BIP adalah yang paling penting: mengusulkan perubahan pada protokol Bitcoin yang mempengaruhi kompatibilitas, dibagi lagi menjadi beberapa lapisan mulai dari consensus layer hingga applications layer. Informational BIP memberikan informasi atau panduan tanpa mengusulkan fitur baru. Process BIP mengusulkan perubahan pada proses pengembangan Bitcoin itu sendiri.
Mengapa proses ini lambat?
Karena Bitcoin tidak punya otoritas pusat yang bisa memutuskan. Setiap perubahan pada protokol yang digunakan oleh jutaan orang dan menyimpan nilai miliaran dolar harus dipertimbangkan dengan sangat hati-hati. Satu bug dalam kode konsensus bisa berakibat bencana. Kelambatan adalah fitur, bukan bug.
BIP adalah cara komunitas terdesentralisasi mengkoordinasikan perubahan tanpa otoritas pusat. Prosesnya lambat dan sering penuh perdebatan, tapi itulah yang membuat legitimasi hasilnya bergantung pada konsensus nyata, bukan keputusan satu pihak.
Soft fork sudah jelas lebih aman dari hard fork. Tapi bagaimana tepatnya sebuah soft fork "diaktifkan"? Ternyata ada beberapa mekanisme aktivasi yang berbeda, masing-masing dengan trade-off yang berbeda antara kecepatan, keamanan, dan siapa yang punya kekuatan untuk mengaktifkan perubahan.
MASF: Miner Activated Soft Fork
MASF adalah mekanisme aktivasi yang paling awal digunakan. Miner menandai block yang mereka buat dengan sinyal dukungan terhadap soft fork tertentu. Sinyal ini ditempatkan di field version pada block header. Kalau threshold tertentu, misalnya 95% dari 2016 block dalam satu difficulty period, tercapai maka soft fork otomatis diaktifkan. Keunggulan MASF adalah prosesnya terukur dan ada kepastian kapan aktivasi terjadi. Kelemahannya: miner punya veto de facto.
UASF: User Activated Soft Fork
UASF adalah respons terhadap kelemahan MASF. Node ekonomi, pengguna, exchange, dan bisnis yang menggunakan Bitcoin mengaktifkan aturan baru pada tanggal tertentu, terlepas dari apakah miner sudah mensinyalkan atau belum. Ini menciptakan tekanan balik terhadap miner: kalau miner tidak ikut aturan baru, block mereka akan ditolak oleh mayoritas ekonomi jaringan, dan reward mereka tidak akan bernilai. BIP 148 yang mengaktifkan SegWit pada 2017 adalah contoh UASF yang paling terkenal dan berhasil.
URSF: User Resisted Soft Fork
URSF adalah kebalikan UASF. Kalau UASF adalah pengguna yang memaksa aktivasi, URSF adalah pengguna yang memaksa penolakan. Node ekonomi berkoordinasi untuk menolak soft fork yang sudah diaktifkan oleh miner tapi tidak diinginkan oleh komunitas pengguna. URSF belum pernah digunakan secara penuh dalam sejarah Bitcoin, tapi keberadaannya sebagai opsi menunjukkan bahwa pengguna punya kekuatan untuk menolak perubahan yang dipaksakan miner.
Version Bits: Bagaimana Miner Mensinyalkan
Soft fork modern menggunakan mekanisme version bits yang didefinisikan di BIP 9. Block header punya field version 32 bit. Setiap bit bisa digunakan untuk mensinyalkan dukungan terhadap soft fork tertentu. Ini memungkinkan beberapa soft fork berjalan secara paralel tanpa konflik. Sinyal miner bersifat indikatif, bukan mengikat: miner bisa mensinyalkan tanpa benar-benar mengimplementasikan aturan baru.
Speedy Trial: Evolusi MASF
Speedy Trial adalah variasi MASF yang digunakan untuk mengaktifkan Taproot pada 2021. Ide utamanya: berikan window aktivasi yang lebih pendek sekitar 3 bulan dengan threshold 90%. Kalau threshold tercapai dalam window itu, soft fork diaktifkan. Kalau tidak, prosesnya bisa diulang dengan mekanisme berbeda. Speedy Trial berhasil: Taproot diaktifkan pada November 2021 setelah miner mencapai threshold dalam waktu yang relatif singkat, tanpa drama seperti SegWit.
Pilihan mekanisme aktivasi bukan hanya masalah teknis. Ia mencerminkan siapa yang dianggap paling berhak memutuskan perubahan dalam jaringan terdesentralisasi: miner yang menyediakan komputasi, atau pengguna yang memberikan nilai ekonomi. Sejarah Bitcoin menunjukkan bahwa keduanya saling membutuhkan, dan tidak ada satu pihak yang bisa memaksakan kehendak sepenuhnya.
Kalau ada satu momen dalam sejarah Bitcoin yang benar-benar menguji apakah jaringan terdesentralisasi bisa membuat keputusan sulit tanpa otoritas pusat, itu adalah perdebatan SegWit. Berlangsung dari 2015 hingga 2017, ini bukan hanya debat teknis, ini adalah perang politik yang melibatkan developer, miner, exchange, pengguna, dan bisnis Bitcoin di seluruh dunia.
Apa itu SegWit?
SegWit, kependekan dari Segregated Witness, adalah soft fork yang memisahkan data tanda tangan (witness data) dari data transaksi utama. Secara teknis, ini memindahkan witness data ke bagian terpisah dari block yang tidak dihitung dalam batasan ukuran block 1 MB. Hasilnya: transaksi dengan SegWit menjadi lebih kecil secara efektif, meningkatkan kapasitas jaringan tanpa mengubah batas 1 MB secara eksplisit. Selain kapasitas, SegWit juga memperbaiki transaction malleability, kelemahan yang menjadi salah satu hambatan utama implementasi Lightning Network.
Mengapa kontroversial?
Perdebatan dimulai bukan karena SegWit sendiri, tapi karena konteks yang lebih besar: scaling debate Bitcoin. Sebagian komunitas, terutama beberapa miner dan bisnis besar, menginginkan solusi yang lebih sederhana: langsung naikkan batas block dari 1 MB menjadi 2 MB atau lebih melalui hard fork. Mereka melihat SegWit sebagai solusi yang terlalu rumit dan tidak cukup. Di sisi lain, core developer dan sebagian besar pengguna menginginkan SegWit karena selain kapasitas, ia membawa perbaikan penting lainnya dan bisa dilakukan tanpa hard fork yang berisiko.
New York Agreement dan UASF
Pada Mei 2017, sekelompok besar bisnis dan miner Bitcoin menandatangani New York Agreement, berjanji untuk mengaktifkan SegWit sekaligus menaikkan batas block menjadi 2 MB melalui hard fork, yang dikenal sebagai SegWit2x. Tapi banyak developer Bitcoin Core dan pengguna menolak bagian hard fork ini. Ketika miner tampak tidak akan mengaktifkan SegWit tanpa jaminan hard fork, komunitas pengguna meluncurkan BIP 148: UASF. Node yang menjalankan BIP 148 akan menolak block miner yang tidak mendukung SegWit mulai 1 Agustus 2017.
Hasilnya
Tekanan berhasil. Miner mengaktifkan SegWit sebelum deadline 1 Agustus. SegWit resmi aktif pada 24 Agustus 2017 di block 481.824. Bagian hard fork dari New York Agreement, SegWit2x, akhirnya dibatalkan pada November 2017 karena tidak cukup dukungan. Sebagian komunitas yang menginginkan block besar memisahkan diri membuat Bitcoin Cash melalui hard fork pada 1 Agustus 2017.
SegWit mengajarkan beberapa pelajaran penting tentang governance Bitcoin: miner tidak punya veto absolut, pengguna dan node ekonomi punya kekuatan nyata melalui UASF, dan konsensus di Bitcoin tidak bisa dipaksakan oleh satu pihak manapun. Tapi prosesnya juga menunjukkan betapa sulitnya membuat keputusan kolektif tanpa otoritas pusat.
Setelah drama SegWit, komunitas Bitcoin belajar banyak tentang bagaimana tidak seharusnya sebuah upgrade besar dilakukan. Taproot adalah kesempatan untuk membuktikan bahwa Bitcoin bisa berubah dengan cara yang lebih dewasa dan terkoordinasi.
Apa itu Taproot?
Taproot adalah paket tiga BIP yang diaktifkan bersamaan pada November 2021: BIP 340 (Schnorr Signatures), BIP 341 (Taproot sendiri), dan BIP 342 (Tapscript). Ketiganya saling terkait dan dirancang untuk bekerja bersama. Schnorr Signatures menggantikan ECDSA sebagai skema tanda tangan Bitcoin. Schnorr lebih efisien secara matematis dan memungkinkan signature aggregation: beberapa tanda tangan dalam satu transaksi bisa digabungkan menjadi satu tanda tangan tunggal. Ini mengurangi ukuran transaksi dan meningkatkan privasi karena transaksi multi-signature terlihat seperti transaksi biasa dari luar.
Tapscript memperkenalkan cara baru untuk menulis smart contract di Bitcoin menggunakan struktur MAST (Merkelized Alternative Script Trees). Dengan MAST, hanya cabang script yang benar-benar dieksekusi yang perlu diungkapkan di blockchain. Kontrak kompleks dengan banyak kondisi terlihat seperti pembayaran biasa dari luar selama jalur yang dieksekusi adalah "happy path".
Mengapa lebih mulus dari SegWit?
Taproot diaktifkan menggunakan Speedy Trial dengan window aktivasi pendek dan threshold 90%. Tidak ada drama UASF, tidak ada ancaman, tidak ada perpecahan. Miner mencapai threshold dalam waktu hanya 6 minggu setelah window dibuka. Beberapa faktor berkontribusi: semua pihak sudah lelah dengan drama SegWit, tidak ada trade-off yang kontroversial seperti block size debate, manfaat teknis Taproot jelas, dan Speedy Trial memberikan mekanisme yang fair dengan batas waktu yang jelas.
Apa yang berubah setelah Taproot?
Taproot aktif pada block 709.632 di tanggal 14 November 2021. Adopsi awalnya lambat karena wallet dan layanan perlu diupdate untuk mendukung format address baru P2TR (Pay-to-Taproot). Taproot membuka jalan untuk Lightning Network yang lebih privat dengan PTLCs (Point Time Lock Contracts) menggantikan HTLCs, dan untuk ekosistem smart contract yang lebih kaya di Bitcoin.
Taproot adalah bukti bahwa Bitcoin bisa berubah tanpa konflik besar. Tapi ini bukan berarti governance Bitcoin sudah sempurna. Taproot berhasil karena manfaatnya tidak kontroversial dan tidak ada kepentingan ekonomi besar yang terancam. Upgrade berikutnya yang lebih kontroversial bisa saja membutuhkan proses yang sama sulitnya seperti SegWit.
Setelah mempelajari BIP, soft fork, UASF, SegWit, dan Taproot, pertanyaan yang wajar muncul: siapa sebenarnya yang punya kekuatan untuk mengubah Bitcoin? Jawabannya tidak sederhana, dan itulah yang membuatnya menarik.
Tidak ada yang memutuskan, semua orang mempengaruhi
Bitcoin tidak punya governance formal. Tidak ada voting, tidak ada dewan direksi, tidak ada mekanisme keputusan yang terdefinisi. Tapi perubahan tetap terjadi, melalui proses organik di mana berbagai pihak saling mempengaruhi dan pada akhirnya mencapai konsensus atau tidak.
Developer
Developer yang berkontribusi ke berbagai implementasi Bitcoin seperti Bitcoin Core, Bitcoin Knots, dan lainnya adalah orang-orang yang menulis dan mereview kode yang dijalankan node. Mereka punya pengaruh besar karena merekalah yang mengimplementasikan perubahan teknis. Tapi mereka tidak bisa memaksa siapapun menjalankan kode mereka, dan siapapun bebas fork implementasi tersebut.
Miner
Miner adalah pihak yang memproduksi block dan mengamankan jaringan. Dalam MASF, sinyal miner menentukan kapan soft fork diaktifkan. Tapi kasus UASF SegWit membuktikan bahwa miner bisa dipaksa oleh node ekonomi: block yang ditolak node ekonomi tidak menghasilkan pendapatan nyata.
Node
Node adalah aktor yang paling sering diabaikan tapi paling fundamental dalam governance Bitcoin. Ada dua jenis: node independen yang dijalankan oleh individu, komunitas, atau organisasi tanpa motif ekonomi langsung, dan node ekonomi yang dijalankan oleh exchange, wallet, dan bisnis. Yang penting: satu node rumahan punya bobot yang sama dengan satu exchange besar dalam hal validasi dan penegakan aturan konsensus. Merekalah penjaga aturan yang sesungguhnya.
Pengguna dan Pelaku Ekonomi
Pengguna biasa adalah yang paling sulit diukur pengaruhnya, tapi dalam jangka panjang mereka yang menentukan nilai Bitcoin. Pelaku ekonomi dan bisnis seperti exchange, merchant, payment processor, dan institusi punya kekuatan ekonomi yang signifikan: exchange bisa menentukan chain mana yang mendapat likuiditas, merchant yang menerima Bitcoin memberi nilai nyata pada jaringan. Tapi mereka juga punya keterbatasan, bergantung pada kepercayaan pengguna dan tidak bisa memaksa perubahan protokol secara langsung.
Mengapa tidak ada yang bisa memaksa?
Karena Bitcoin bersifat opt-in. Setiap node bebas memilih software apa yang dijalankan. Kalau suatu implementasi merilis versi baru yang tidak disukai komunitas, orang bisa terus menjalankan versi lama atau fork implementasinya. Proses governance yang tidak formal ini punya kelebihan: tidak ada single point of failure dan tidak ada yang bisa membajak Bitcoin untuk kepentingan sendiri. Kekurangannya: prosesnya sangat lambat dan perdebatan bisa berlangsung bertahun-tahun.
Governance Bitcoin bukan demokrasi, bukan otokrasi, dan bukan anarki. Ia adalah sistem di mana kekuatan tersebar di antara banyak pihak yang tidak saling mempercayai, tapi terpaksa berkoordinasi karena mereka semua bergantung pada jaringan yang sama. Ini mungkin adalah eksperimen governance yang paling menarik di era digital.
Pada 15 Agustus 2010, seseorang menemukan bug kritis di kode Bitcoin: integer overflow. Dengan mengeksploitasi bug ini, pelaku berhasil membuat transaksi yang seolah-olah menciptakan bitcoin jauh di luar aturan protokol. Transaksi ini sempat dikonfirmasi di block #74.638 sebelum di-rollback oleh komunitas dalam waktu sekitar 5 jam. Penting untuk dipahami: ini adalah bug di implementasi kode, bukan bug di protokol Bitcoin itu sendiri. Suplai 21 juta BTC tidak pernah benar-benar terancam.
Dua hal yang perlu dibedakan
Bitcoin punya dua batasan yang berbeda dan sering dikacaukan. Pertama, MAX_MONEY: ini adalah aturan konsensus protokol Bitcoin yang menetapkan tidak ada output transaksi yang boleh melebihi total suplai 21 juta BTC (2,1 kuadriliun satoshi). Kedua, MAX_INT64: ini adalah batas matematis tipe data integer 64-bit di komputer, yaitu 9,223,372,036,854,775,807. Angka ini tidak ada hubungannya dengan aturan Bitcoin, ia hanya batas teknis penyimpanan angka di memori komputer. Bug ini bukan tentang melanggar MAX_INT64, tapi tentang kode yang lupa memeriksa MAX_MONEY sebelum melakukan penjumlahan.
Bagaimana bug ini bekerja
Kode Bitcoin saat itu tidak memeriksa apakah nilai setiap output transaksi melebihi MAX_MONEY sebelum menjumlahkannya. Penyerang memanfaatkan ini dengan membuat dua output yang masing-masing jauh melebihi 21 juta BTC. Ketika keduanya dijumlahkan, total melampaui MAX_INT64 dan terjadi integer overflow: angka "membungkus" menjadi bilangan negatif besar. Kode validasi kemudian memeriksa apakah total output lebih kecil dari total input, dan karena total output sudah menjadi bilangan negatif, kondisi ini selalu terpenuhi. Transaksi lolos validasi padahal seharusnya tidak.
Respons komunitas
Satoshi Nakamoto sendiri yang merespons insiden ini. Dalam waktu sekitar 5 jam, Satoshi merilis patch yang menambahkan pemeriksaan: kalau nilai output kurang dari nol atau melebihi MAX_MONEY, transaksi langsung ditolak. Komunitas Bitcoin saat itu yang masih sangat kecil berhasil mengorganisir soft fork darurat: node-node upgrade dan mulai mengabaikan block #74.638. Chain yang bersih menjadi yang dominan. Bitcoin yang seolah-olah "tercipta" itu tidak pernah eksis secara nyata karena langsung di-rollback sebelum bisa digunakan siapapun.
Bug ini adalah contoh perbedaan penting antara bug protokol dan bug implementasi. Protokol Bitcoin mendefinisikan aturan dengan benar, tapi kode yang mengimplementasikan aturan tersebut punya celah. Ini salah satu alasan mengapa kode konsensus Bitcoin diaudit dengan sangat ketat: satu baris kode yang hilang bisa menciptakan celah yang berbahaya.
Delapan tahun kemudian, nyaris terulang
Mudah menganggap insiden 2010 sebagai penyakit masa muda: kode masih mentah, penggunanya sedikit, wajar ada lubang. Tapi pada September 2018 Bitcoin nyaris kehilangan batas 21 juta untuk kedua kalinya, dan kali ini di era yang sudah matang, dengan kode yang ditinjau jauh lebih ketat.
Bug itu tercatat sebagai CVE-2018-17144. Asalnya bukan dari fitur baru, melainkan dari sebuah optimasi. Pada Bitcoin Core 0.14.0 yang rilis Maret 2017, ada pemeriksaan input ganda yang dihapus karena dianggap sudah dilakukan di tempat lain, jadi mengulangnya cuma memperlambat. Anggapan itu keliru. Akibatnya node bersedia memproses sebagian block yang membelanjakan satu input yang sama lebih dari sekali.
Di versi 0.14.x, akibatnya "hanya" node mati mendadak, karena ada pemeriksaan pengaman yang sengaja menghentikan program saat menemui keadaan mustahil. Tapi pemeriksaan itu ditulis ulang di versi 0.15.0, dan sejak saat itu node tidak lagi berhenti. Ia melanjutkan. Artinya seorang miner bisa membelanjakan satu output dua kali dalam satu block, lalu mengklaim nilainya dua kali juga. Diulang berkali-kali, itu adalah pencetakan Bitcoin dari udara.
Bug itu diam selama sekitar satu setengah tahun. Yang akhirnya menemukannya bukan tim inti, melainkan seorang pengembang beralias awemany dari kubu Bitcoin Cash, saat ia membaca kode yang diwarisi proyeknya dari Bitcoin Core. Ia melaporkannya secara tertutup pada 17 September 2018, bukan hanya ke Bitcoin Core tapi juga ke proyek lain yang memakai kode yang sama.
Yang ia laporkan cuma bug crash. Justru pengembang Bitcoin Core yang kemudian menyadari bahwa akar yang sama membawa akibat jauh lebih parah: inflasi. Di titik itu mereka menghadapi pilihan yang tidak nyaman. Mengumumkan penuh berarti memberi tahu semua orang cara mencetak Bitcoin sebelum sebagian besar node sempat memperbarui diri. Diam saja berarti membiarkan lubang menganga.
Jalan yang diambil adalah pengungkapan bertahap: umumkan dan tambal bug crash yang lebih ringan secara terbuka supaya orang punya alasan mendesak untuk segera memperbarui, sambil diam-diam menghubungi miner dan bisnis besar soal yang sebenarnya. Perbaikannya rilis pada 18 September dalam versi 0.16.3, kurang dari sehari setelah laporan masuk. Dampak penuhnya baru diumumkan 20 September, setelah sebagian besar jaringan aman.
Bug ini tidak pernah dieksploitasi. Tapi pelajarannya lebih tajam daripada insiden 2010, dan ada tiga. Pertama, perubahan paling berbahaya sering bukan penambahan fitur, melainkan penghapusan sesuatu yang dikira tidak perlu. Kedua, yang menemukannya justru orang dari proyek saingan yang membaca kode warisan, jadi keterbukaan kode bukan sekadar cita-cita melainkan mekanisme pertahanan yang nyata bekerja. Ketiga, keamanan Bitcoin tidak berhenti pada matematika yang kita bahas di Bab 4. Ia juga bergantung pada manusia yang membaca kode dengan teliti, dan pada penilaian sulit soal kapan sebuah bahaya sebaiknya diumumkan.
Reorg, kependekan dari chain reorganization, terjadi ketika node menemukan bahwa ada chain alternatif yang lebih panjang dari chain yang sedang mereka ikuti. Node kemudian beralih ke chain yang lebih panjang, membuang block-block yang tidak lagi menjadi bagian dari chain terpanjang. Block yang dibuang ini disebut orphan block.
Reorg kecil adalah normal
Reorg 1-2 block adalah kejadian rutin yang terjadi hampir setiap hari di Bitcoin. Ini bisa terjadi ketika dua miner menemukan block valid hampir bersamaan: jaringan sementara terbagi karena sebagian node menerima block dari miner A lebih dulu, sementara sebagian lainnya menerima dari miner B lebih dulu. Begitu salah satu miner menemukan block berikutnya, chainnya menjadi lebih panjang dan seluruh jaringan konvergen ke chain tersebut. Miner yang kalah kehilangan reward block tapi jaringan tetap aman.
Reorg besar adalah berbahaya
Reorg yang dalam, 6 block atau lebih, membutuhkan hash rate yang sangat besar dan bisa dimanfaatkan untuk double spend. Penyerang dengan cukup hash rate bisa menambang chain alternatif secara diam-diam, melakukan transaksi besar di chain utama (misalnya menjual bitcoin ke exchange), lalu merilis chain alternatif yang lebih panjang yang tidak mengandung transaksi tersebut. Merchant atau exchange yang sudah menganggap transaksi final bisa menjadi korban.
Sejarah reorg di Bitcoin
Reorg terdalam yang pernah tercatat di Bitcoin mainnet bukan hasil serangan, melainkan buntut dari bug software. Rollback bug overflow 2010 yang kita bahas di 14.1 membutuhkan pembalikan puluhan block, dan chain split Maret 2013 yang akan kita bahas di 14.3 berlangsung sepanjang 24 block. Di luar dua insiden itu, reorg di Bitcoin hampir selalu hanya 1 sampai 2 block. Reorg dalam yang disengaja pernah terjadi pada jaringan lain seperti Ethereum Classic (reorg 100+ block pada 2019) dan Bitcoin Gold, tapi keduanya memiliki hash rate yang jauh lebih kecil dari Bitcoin sehingga biaya serangan jauh lebih rendah.
Standar "6 konfirmasi" yang sering disebut dalam Bitcoin bukan angka sembarangan. Ini adalah estimasi bahwa setelah 6 block, biaya untuk melakukan reorg yang cukup dalam untuk membatalkan transaksi tersebut menjadi sangat tidak ekonomis bagi penyerang manapun. Untuk transaksi kecil sehari-hari, 1-3 konfirmasi sudah cukup aman.
Pada 11 Maret 2013, terjadi chain split yang tidak disengaja antara node yang menjalankan Bitcoin 0.7 dan Bitcoin 0.8. Ini bukan serangan, bukan eksploitasi bug yang disengaja, tapi sebuah konsekuensi tak terduga dari perbedaan implementasi database antara dua versi software yang keduanya mengklaim mengikuti aturan yang sama.
Akar masalah: BerkeleyDB vs LevelDB
Bitcoin 0.8 mengganti database penyimpanan dari BerkeleyDB ke LevelDB sebagai optimasi performa. Yang tidak disadari: BerkeleyDB memiliki batasan 10.000 kunci yang bisa dikunci secara bersamaan. Ini bukan bagian dari aturan konsensus Bitcoin, hanya detail implementasi. LevelDB tidak punya batasan yang sama. Block #225.430 yang ditambang pada malam 11 Maret mempengaruhi status lebih dari 5.000 transaksi sekaligus, membutuhkan lebih dari 10.000 kunci BerkeleyDB secara bersamaan. Node 0.7 tidak bisa memproses block ini dan menolaknya. Node 0.8 menerimanya tanpa masalah.
Enam jam dengan dua Bitcoin
Selama sekitar 6 jam, ada dua versi Bitcoin yang berjalan secara paralel. Chain 0.8 punya sekitar 60% hash rate sehingga tumbuh lebih cepat. Split berlangsung selama 24 block sebelum diselesaikan. Split ini tidak langsung terdeteksi: baru sekitar satu jam kemudian, pada 23:10 GMT, seorang pengguna bernama thermoman melaporkan anomali di IRC bitcoin-dev. Satu menit kemudian, Mark Karpelès dari Mt. Gox langsung menghentikan pemrosesan block sebagai langkah pencegahan.
Solusi yang tidak biasa
Komunitas harus memilih: upgrade semua ke 0.8, atau kembali ke 0.7? Keputusannya adalah kembali ke 0.7, bukan karena 0.7 lebih benar secara teknis, tapi karena lebih mudah mengkoordinasi segelintir mining pool besar untuk downgrade daripada memaksa seluruh ekosistem untuk upgrade sekaligus. BTCGuild dan Slush Pool downgrade meskipun harus merelakan reward yang sudah mereka hasilkan di chain 0.8. Pada block #225.454, chain 0.7 berhasil melampaui chain 0.8 dan jaringan bersatu kembali.
Double spend yang tercatat
Selama periode split, tercatat satu double spend. Tapi berdasarkan BIP 50, post-mortem resmi yang ditulis Gavin Andresen, ini dilakukan oleh seseorang yang sedang bereksperimen untuk menguji apakah itu mungkin, bukan dengan niat mencuri.
Insiden ini mengajarkan pelajaran penting: dua implementasi yang mengklaim mengikuti aturan yang sama bisa tetap menghasilkan perilaku berbeda karena detail implementasi yang tersembunyi. Ini salah satu alasan mengapa Bitcoin sangat berhati-hati dalam mengubah kode konsensus, dan mengapa ada effort besar untuk memastikan semua implementasi berperilaku identik pada semua edge case.
Selfish mining adalah strategi di mana miner dengan hash rate signifikan menyembunyikan block yang berhasil mereka temukan dan tidak langsung menyiarkannya ke jaringan. Dengan menahan block ini, mereka mendapat keunggulan: mereka bisa mulai mining di atas block tersembunyi sementara jaringan masih mining di block sebelumnya.
Bagaimana selfish mining bekerja
Kalau miner curang berhasil menemukan block berikutnya sebelum jaringan tahu tentang block tersembunyi mereka, mereka bisa merilis dua block sekaligus dan membuat block jujur lainnya menjadi orphan. Miner jujur yang sudah bekerja keras menemukan block kehilangan rewardnya, sementara miner curang mendapat reward dua block sekaligus.
Analisis formal dan ambang batas
Serangan ini pertama kali dianalisis secara formal oleh Ittay Eyal dan Emin Gun Sirer dalam paper mereka pada 2013. Mereka menunjukkan bahwa dengan hash rate sekitar 33%, selfish mining bisa menguntungkan secara ekonomi. Dengan hash rate lebih besar, keuntungan teoritis semakin besar.
Risiko teknis yang nyata
Meski terlihat menguntungkan di atas kertas, selfish mining punya risiko teknis yang serius. Pertama, kerahasiaan block sulit dipertahankan di jaringan P2P: begitu block ditemukan, sinyal propagasi di jaringan bisa bocor sebelum miner curang siap merilis chain tersembunyinya. Kedua, kalau miner jujur menemukan block sebelum miner curang merilis chainnya, seluruh pekerjaan tersembunyi menjadi sia-sia dan miner curang kehilangan semua reward yang sudah diinvestasikan. Ketiga, semakin lama menyembunyikan block, semakin besar risiko chain tersembunyi tidak pernah bisa menyalip chain publik. Keempat, pola orphan yang tidak normal bisa terdeteksi oleh komunitas dan menyebabkan boikot terhadap pool yang mencurigakan.
Mengapa belum pernah terjadi di Bitcoin
Dalam praktiknya, selfish mining belum pernah terbukti terjadi dalam skala signifikan. Ada beberapa alasan: sulit mempertahankan kerahasiaan dalam jaringan peer-to-peer, risiko kehilangan reward jauh lebih nyata dari keuntungan teoritis, landscape mining pool yang terdistribusi membuat sangat sulit satu entitas mencapai 33% hash rate tanpa diketahui, dan incentif ekonomi untuk mining jujur tetap lebih kuat dalam jangka panjang.
Selfish mining adalah pengingat bahwa insentif ekonomi Bitcoin dirancang untuk membuat ketidakjujuran lebih mahal dari kejujuran. Tapi ini bukan jaminan absolut: kalau landscape mining berubah drastis dan satu entitas mendominasi hash rate, dinamika insentif ini bisa berubah.
Eclipse attack adalah serangan di mana penyerang mengontrol semua koneksi peer dari sebuah node target, sehingga node tersebut hanya berkomunikasi dengan node-node yang dikendalikan penyerang. Penting untuk dipahami sejak awal: ini adalah serangan terhadap satu node spesifik, bukan terhadap jaringan Bitcoin secara keseluruhan. Jaringan Bitcoin tetap berjalan normal.
Analogi sederhana
Bayangkan kamu tinggal di kota besar tapi semua sumber informasimu, tetangga, teman, radio, dan TV, diganti oleh agen penyerang yang menyampaikan berita palsu. Kamu masih di kota yang sama, tapi tidak tahu apa yang sebenarnya terjadi. Kota itu sendiri tetap berjalan normal tanpa kamu. Itulah eclipse attack: node yang diserang hidup di realita palsu yang dikontrol penyerang, sementara ribuan node lain di jaringan tetap beroperasi dengan benar.
Bagaimana eclipse attack bekerja
Setiap node Bitcoin mempertahankan sejumlah koneksi ke peer lain. Kalau penyerang bisa mengisi semua slot koneksi ini dengan node yang mereka kendalikan, node target tidak bisa lagi berkomunikasi dengan jaringan nyata. Penyerang melakukan ini dengan cara membanjiri jaringan dengan alamat IP yang mereka kendalikan, menunggu node target me-restart dan memilih peer baru, atau mengeksploitasi kelemahan dalam mekanisme pemilihan peer.
Dampak yang mungkin terjadi
Node yang di-eclipse bisa ditipu untuk menerima transaksi palsu (double spend terhadap merchant), membuang hash rate ke chain palsu (untuk miner), atau mengekspos informasi transaksi ke penyerang sebelum disiarkan ke jaringan nyata. Tapi sekali lagi, semua dampak ini hanya terjadi pada node yang berhasil diisolasi, bukan pada jaringan secara keseluruhan.
Mitigasi di Bitcoin Core
Bitcoin Core sudah mengimplementasikan beberapa mitigasi. Anchor connections mempertahankan 2 koneksi outbound ke node terpercaya bahkan saat restart. Batasan koneksi dari satu subnet IP yang sama mempersulit penyerang mendominasi semua slot. Dukungan Tor dan multiple network interfaces mempersulit identifikasi dan isolasi node target.
Eclipse attack bukan bukti bahwa Bitcoin mudah diserang atau desentralisasinya lemah. Ini adalah serangan yang membutuhkan upaya besar untuk menarget satu node spesifik, dan Bitcoin Core terus meningkatkan ketahanan koneksi peer untuk mempersulit serangan ini. Jaringan secara keseluruhan justru sangat sulit diserang justru karena terdistribusi di ribuan node yang tidak saling bergantung.
Setelah mempelajari bug overflow, chain split, reorg, selfish mining, dan eclipse attack, pertanyaan yang wajar muncul: kalau semua ancaman ini ada, mengapa Bitcoin masih berdiri sampai hari ini?
Insentif ekonomi yang selaras
Menyerang Bitcoin dengan sukses membutuhkan biaya yang jauh melebihi keuntungan yang bisa didapat. Selfish mining lebih mahal dari mining jujur dalam jangka panjang. Eclipse attack butuh sumber daya besar untuk target yang sangat spesifik. 51% attack butuh biaya listrik dan hardware yang astronomis. Miner yang jujur mendapat reward lebih besar dan lebih konsisten dari yang curang karena sistem memang dirancang demikian.
Redundansi jaringan yang ekstrem
Tidak ada single point of failure di Bitcoin. Kalau satu node diserang, ribuan node lain tetap berjalan. Kalau satu implementasi punya bug, implementasi lain bisa jadi rujukan. Kalau satu pool mining dikompromikan, hash rate yang tersisa tetap mengamankan jaringan. Tidak ada server pusat, tidak ada CEO yang bisa ditekan, tidak ada tombol mati.
Komunitas yang waspada dan responsif
Bug 2010 ditemukan, dilaporkan, dan diperbaiki dalam 5 jam. Chain split 2013 dideteksi dalam satu jam dan diselesaikan dengan koordinasi luar biasa antara developer, pool mining, dan exchange. Developer, miner, node operator, dan pengguna semua punya insentif untuk menjaga jaringan tetap sehat karena nilai Bitcoin bergantung pada kepercayaan terhadap jaringan.
Open source dan transparansi total
Kode Bitcoin bisa diperiksa siapapun, kapanpun. Tidak ada celah yang bisa disembunyikan lama karena ribuan mata terus memperhatikan. Setiap perubahan diaudit secara ketat sebelum diimplementasikan. Kelemahan yang ditemukan diperbaiki secara terbuka dan hasilnya menjadi pelajaran bagi seluruh ekosistem.
Bitcoin bukan sistem yang sempurna. Ia adalah sistem yang sudah battle-tested sejak 2009, diserang dari berbagai arah, dan tetap berdiri. Setiap kelemahan yang ditemukan menjadi pelajaran. Setiap serangan yang gagal membuktikan ketahanan arsitekturnya. Dan setiap insiden yang berhasil diselesaikan membuktikan bahwa komunitas yang terdistribusi bisa berkoordinasi tanpa otoritas pusat.
Kalau kamu pernah bertanya-tanya bagaimana Bitcoin "tahu" kapan sebuah transaksi boleh atau tidak boleh diproses, jawabannya ada di cara Bitcoin mendefinisikan waktu. Dan cara ini sangat berbeda dari jam yang kamu pakai sehari-hari.
Masalahnya: siapa yang kamu percaya untuk tahu waktu?
Di dunia nyata, kamu percaya jam di HP kamu, atau server waktu yang disinkronisasi secara global. Tapi Bitcoin adalah sistem tanpa otoritas pusat. Tidak ada server waktu yang bisa dipercaya semua orang. Kalau kamu membiarkan satu pihak menentukan "waktu sekarang", kamu baru saja menciptakan titik kegagalan terpusat yang bisa diserang atau dimanipulasi.
Solusi Bitcoin: jangan bergantung pada jam dinding sama sekali. Gunakan dua cara mengukur waktu yang bisa diverifikasi oleh semua node secara independen.
Cara pertama: Block Height
Block height adalah nomor urut block dalam blockchain. Block pertama adalah block #0, block berikutnya #1, dan seterusnya. Setiap block baru yang ditemukan menambah satu angka. Analoginya seperti halaman buku: kalau kamu ingin merujuk ke "bab 5", kamu tidak perlu tahu kapan buku itu ditulis, cukup tahu "halaman 120". Block height bekerja sama: "setelah block 800.000" adalah titik waktu yang spesifik dan bisa diverifikasi siapapun yang punya salinan blockchain.
Kelebihannya: sangat sederhana dan tidak bisa dimanipulasi. Kekurangannya: tidak berhubungan langsung dengan waktu nyata karena block tidak selalu datang tepat 10 menit (bisa 2 menit, bisa 25 menit).
Cara kedua: Median Time Past (MTP)
Setiap block Bitcoin mengandung timestamp, yaitu angka yang menunjukkan kapan block itu ditambang. Tapi miner bisa sedikit berbohong tentang timestamp ini dalam batas yang diizinkan protokol. Kalau Bitcoin langsung mempercayai timestamp satu block, miner bisa memanipulasi "waktu" untuk keuntungan mereka.
Solusinya: ambil 11 block terakhir, ambil nilai tengah (median) dari timestamp mereka. Inilah Median Time Past (MTP). Analoginya seperti mengukur suhu rata-rata satu minggu terakhir daripada mempercayai termometer hari ini yang mungkin rusak. Satu bacaan yang salah tidak merusak gambaran keseluruhan. Dengan menggunakan median 11 block, satu miner yang berbohong tentang timestampnya tidak bisa menggeser MTP secara signifikan.
Mengapa ini penting?
Dari dua cara mengukur waktu ini, Bitcoin bisa membangun kontrak berbasis waktu yang berlaku otomatis tanpa perlu hakim, notaris, atau pihak ketiga. Kamu bisa berkata ke jaringan Bitcoin: "uang ini tidak boleh disentuh sampai block 900.000" atau "transaksi ini hanya valid setelah 6 bulan dari sekarang" dan seluruh jaringan akan menegakkannya secara otomatis.
Bitcoin mendefinisikan waktu secara konsensus, bukan berdasarkan jam server. Ini bukan keterbatasan, melainkan pilihan desain yang membuat sistem tetap terdesentralisasi. Hasilnya adalah mekanisme waktu yang bisa dipercaya oleh semua pihak tanpa harus mempercayai siapapun secara khusus.
Bayangkan kamu menulis cek tapi kamu tulis tanggal bulan depan di pojok kanan atas. Bank tidak akan memproses cek itu sampai tanggal tersebut tiba. nLockTime bekerja persis seperti itu, tapi bukan bank yang menegakkan aturannya, melainkan seluruh jaringan Bitcoin secara otomatis, tanpa bisa diintervensi siapapun. Bahkan si pengirim sendiri tidak bisa membatalkan atau mempercepatnya setelah transaksi dibuat.
Selama ribuan tahun, manusia butuh pihak ketiga untuk mengatur waktu dalam kontrak: notaris, bank, pengacara, atau hakim. Mereka yang memastikan "cek ini baru bisa dicairkan bulan depan" atau "dana escrow ini dikembalikan kalau tidak ada yang klaim dalam 6 bulan." nLockTime menghilangkan kebutuhan itu. Kepercayaan kepada manusia diganti oleh matematika.
Apa itu nLockTime?
nLockTime adalah field 4-byte yang ada di setiap transaksi Bitcoin sejak hari pertama. Nilainya menentukan kapan transaksi itu boleh dimasukkan ke dalam block. Kalau miner mencoba memasukkan transaksi dengan nLockTime yang belum tercapai, seluruh node di jaringan akan menolak block tersebut secara otomatis.
Dua mode: block atau waktu
Ini adalah keputusan desain awal Satoshi yang masih bertahan sampai sekarang. Cara Bitcoin membedakan apakah kamu bicara tentang "block ke berapa" atau "jam berapa" adalah dengan melihat angkanya saja. Kalau nilai nLockTime di bawah 500.000.000, ia diinterpretasikan sebagai block height. Nilai 800.000 artinya "transaksi ini tidak valid sebelum block #800.000." Kalau nilainya di atas atau sama dengan 500.000.000, ia diinterpretasikan sebagai Unix timestamp yaitu jumlah detik sejak 1 Januari 1970. Angka 500.000.000 dalam Unix time adalah sekitar tahun 1985, jauh sebelum Bitcoin ada, jadi aman dipakai sebagai batas pemisah.
Satu syarat penting yang sering dilupakan
nLockTime hanya efektif kalau setidaknya satu input transaksi punya nSequence yang bukan 0xFFFFFFFF (nilai maksimum). Ini adalah detail teknis yang sering mengejutkan developer baru. Kalau semua input punya nSequence 0xFFFFFFFF, node akan mengabaikan nLockTime sepenuhnya dan transaksi bisa dimasukkan kapanpun. Di simulasi di bawah, kamu bisa mencoba mematikan nSequence dan lihat apa yang terjadi.
Mengapa ini powerful?
Scheduled payment: kamu bisa membuat transaksi yang hanya bisa dikonfirmasi mulai bulan depan. Tidak ada risiko kontraktor tidak mau kerja setelah dibayar, tidak ada risiko kamu tidak mau bayar setelah kerja selesai. Escrow dengan batas waktu: selama ini escrow butuh pihak ketiga yang kamu percaya. Dengan nLockTime, kepercayaan itu diganti oleh matematika. Dana tidak bisa kemana-mana sampai kondisi waktu terpenuhi. Dead man's switch: warisan digital yang tidak bisa diblokir oleh siapapun, tidak oleh bank, tidak oleh pemerintah, tidak bahkan oleh orang yang membuat kontraknya.
nLockTime adalah fitur paling sederhana dari arsenal timelock Bitcoin. Ia sudah ada sejak hari pertama dan sudah terbukti bekerja. Tapi kekuatannya terbatas karena ia hanya bekerja di level transaksi. Untuk kondisi yang lebih kompleks seperti "Alice bisa klaim kapanpun ATAU Bob bisa klaim setelah 6 bulan", kita butuh CLTV yang akan dibahas di 15.4.
Ada satu field di setiap input transaksi Bitcoin yang punya sejarah paling berliku dari semua field di protokol. Namanya nSequence. Ia dirancang untuk satu tujuan, gagal mencapainya, lalu didaur ulang menjadi sesuatu yang jauh lebih berguna.
Ide awal yang tidak berhasil
Satoshi merancang nSequence sebagai mekanisme untuk memperbarui transaksi yang belum dikonfirmasi. Idenya: kalau dua pihak sedang bernegosiasi, mereka bisa terus mengupdate transaksi dengan menaikkan nilai nSequence. Miner seharusnya hanya memasukkan versi dengan nSequence tertinggi. Masalahnya: tidak ada insentif bagi miner untuk mengikuti aturan ini. Miner bisa saja langsung memasukkan versi pertama transaksi kalau fee-nya cukup menarik. Tanpa mekanisme enforcement, ide ini tidak bisa bekerja. nSequence lalu menjadi field yang hampir tidak berguna selama bertahun-tahun.
Beda dengan nLockTime
Sebelum membahas lebih jauh, penting untuk memahami perbedaan mendasar antara nLockTime dan nSequence. Bayangkan kamu punya dua jenis "cek tertanggal." Cek pertama tertulis: "berlaku mulai 1 Januari 2026", ini nLockTime, waktu absolut yang tidak bergantung pada kapan ceknya dipegang. Cek kedua tertulis: "berlaku 30 hari setelah diserahkan ke bank", ini nSequence, waktu relatif yang baru mulai berjalan setelah transaksi dikonfirmasi. Perbedaan ini terdengar kecil, tapi sangat krusial untuk membangun kontrak yang lebih fleksibel.
BIP 68: nSequence mendapat makna baru
Pada 2016, BIP 68 — diaktifkan bersamaan dengan BIP 112 dan BIP 113 dalam soft fork CSV — memberikan nSequence makna baru yaitu relative timelock. Alih-alih membuat field baru yang akan membutuhkan hard fork, komunitas Bitcoin mendaur ulang field lama yang hampir tidak terpakai.
Tiga "tombol" dalam nSequence
nSequence adalah angka 32-bit, tapi cara membacanya seperti perangkat dengan tiga tombol. Tombol pertama adalah on/off: satu bit yang menentukan apakah nSequence punya makna timelock sama sekali. Kalau tombol ini off, sisanya diabaikan. Tombol kedua adalah pilihan satuan: apakah jeda waktu diukur dalam block (sekitar 10 menit per block) atau dalam satuan waktu (512 detik per unit). Tombol ketiga adalah nilainya: angka 16-bit yang menentukan berapa lama jedanya, maksimum 65.535 unit.
Analoginya seperti mengatur alarm HP: pilih on/off, pilih AM/PM, isi jamnya. Tidak perlu memahami binary untuk menggunakan konsepnya.
Mengapa relative timelock powerful?
nLockTime tidak bisa bergantung pada kapan sebuah UTXO dikonfirmasi, ia hanya tahu waktu absolut. nSequence bisa. Ini sangat penting untuk Lightning Network: ketika channel ditutup secara paksa, ada periode tunggu berbasis nSequence yang mulai berjalan dari saat commitment transaction dikonfirmasi, bukan dari waktu absolut yang tidak bisa diprediksi. Periode ini memberikan waktu bagi pihak lain untuk mendeteksi kecurangan dan mengajukan penalty transaction.
nSequence adalah contoh indah dari mendaur ulang apa yang sudah ada. Daripada menambahkan field baru ke format transaksi (yang akan butuh hard fork), BIP 68 mendaur ulang field lama yang hampir tidak terpakai dan memberikannya fungsi baru yang sangat berguna. Ini adalah cara Bitcoin berevolusi: dengan hati-hati, backward-compatible, dan tanpa membuang warisan yang sudah ada.
Sampai sekarang kita sudah melihat dua mekanisme timelock: nLockTime yang bekerja di level transaksi, dan nSequence yang bekerja di level input. Keduanya adalah pembatas di luar script. Tapi bagaimana kalau kita ingin waktu menjadi bagian dari kondisi script itu sendiri? Bagaimana kalau kita ingin berkata: "Alice bisa mengambil dana ini kapanpun, ATAU Bob bisa mengambilnya setelah 6 bulan"? Untuk itu kita butuh OP_CHECKLOCKTIMEVERIFY.
Analogi: petugas keamanan vs brankas
nLockTime seperti petugas keamanan di pintu masuk gedung: ia memeriksa apakah kamu boleh masuk berdasarkan jam. Tapi begitu kamu masuk, siapapun bisa mengambil barang di dalam. CLTV seperti brankas di dalam gedung yang punya kunci kombinasi waktu tersendiri. Tidak peduli kapan kamu masuk gedungnya, brankas itu tidak akan terbuka sebelum waktunya. Dan yang lebih powerful: brankas itu bisa punya aturan berbeda untuk orang berbeda.
Bagaimana CLTV bekerja
OP_CHECKLOCKTIMEVERIFY adalah opcode yang ditambahkan ke Script Bitcoin melalui BIP 65 pada 2015. Ketika dieksekusi, ia membandingkan nilai yang ada di stack dengan nilai nLockTime dari transaksi yang sedang diverifikasi. Kalau nilai stack lebih besar dari nLockTime transaksi, script gagal. Artinya: siapapun yang ingin membelanjakan UTXO dengan CLTV harus membuat transaksi yang berkomitmen "saya tidak akan membelanjakan ini sebelum waktu X."
Mengapa ini powerful untuk kehidupan nyata?
Bayangkan skenario ini: kamu mengirim dana untuk anakmu yang masih kuliah, tapi tidak ingin ia bisa mengaksesnya sampai lulus 4 tahun lagi. Dengan CLTV kamu bisa membuat script: "anakku bisa mengambil ini setelah block X (sekitar 4 tahun), ATAU aku bisa mengambilnya kembali kapanpun dengan kunci emergency." Tidak ada bank, tidak ada pengacara, tidak ada wali amanat. Matematika yang menegakkannya.
Atau bayangkan pembayaran milestone untuk kontraktor: "kontraktor bisa mengklaim pembayaran setelah tanggal pengiriman yang disepakati, tapi kalau kontraktor tidak hadir dalam 6 bulan, klien bisa refund." Escrow otomatis tanpa escrow agent.
HTLC: CLTV yang menggerakkan Lightning Network
Hash Time Lock Contract (HTLC) adalah kombinasi CLTV dengan hash preimage. Penerima bisa klaim dana dengan mengungkap sebuah rahasia yang sudah di-hash sebelumnya. Kalau rahasia tidak diungkap sebelum timeout, pengirim bisa refund. Mekanisme sederhana ini, tanpa pihak ketiga, adalah fondasi dari setiap pembayaran yang melintas di Lightning Network.
CLTV adalah lompatan besar dari "kapan transaksi bisa dibuat" ke "kapan UTXO bisa dibelanjakan." Perbedaan ini membuka ruang untuk kontrak yang jauh lebih ekspresif. Dengan CLTV, waktu bukan lagi pembatas eksternal, melainkan menjadi bagian dari logika kontrak itu sendiri.
Kalau CLTV adalah "tidak sebelum tanggal X", maka CSV adalah "tidak sebelum X hari setelah ini dikonfirmasi." Perbedaan yang terdengar kecil ini ternyata sangat krusial untuk membangun sistem pembayaran yang aman tanpa kepercayaan.
Analogi dua jenis kontrak
Bayangkan dua jenis kontrak sewa apartemen. Kontrak pertama: "kamu boleh pindah keluar mulai 1 Januari 2026." Ini seperti CLTV, yaitu tanggal absolut yang tidak bergantung pada kapan kontrak ditandatangani. Kontrak kedua: "kamu boleh pindah keluar 30 hari setelah memberikan notice." Ini seperti CSV, yaitu periode relatif yang baru mulai berjalan setelah aksi tertentu terjadi. Perbedaan ini terdengar kecil, tapi sangat penting untuk kontrak yang tidak bisa memprediksi kapan aksinya akan terjadi.
OP_CHECKSEQUENCEVERIFY
BIP 112 menambahkan opcode CSV ke Script Bitcoin, diaktifkan bersamaan dengan BIP 68 pada 2016. CSV bekerja mirip CLTV tapi menggunakan nSequence: ia memverifikasi bahwa nSequence dari input yang membelanjakan UTXO ini sudah mencapai nilai minimum yang ditentukan. Dengan kata lain, CSV memaksa pihak yang ingin mengklaim UTXO untuk menunggu minimal X block atau X waktu sejak UTXO itu dikonfirmasi.
Mengapa CSV adalah jantung Lightning Network
Lightning Network memungkinkan dua pihak untuk melakukan banyak transaksi off-chain dengan hanya dua transaksi on-chain: pembukaan dan penutupan channel. Keamanan sistem ini bergantung pada kemampuan untuk menghukum pihak yang mencoba curang dengan commitment transaction lama.
Begini cara kerjanya: ketika Alice dan Bob membuka payment channel, mereka membuat commitment transaction yang merepresentasikan state terbaru. Setiap kali state diperbarui, commitment lama harus direvoke dengan memberikan revocation key. Kalau Bob mencoba menutup channel dengan commitment lama yang lebih menguntungkan baginya, Alice punya waktu untuk mendeteksi kecurangan dan mengajukan penalty transaction yang mengambil seluruh dana channel.
Waktu yang Alice punya untuk mendeteksi kecurangan inilah yang diatur oleh CSV. Biasanya 144 block (sekitar 1 hari). Selama periode ini, dana Bob terkunci di output yang bisa diambil oleh Alice kalau Bob terbukti curang. Tanpa CSV, Bob bisa langsung klaim sebelum Alice sempat bereaksi.
CSV di luar Lightning
Di luar Lightning, CSV berguna untuk vault dengan periode cooldown sebelum dana bisa dipindahkan, escrow yang otomatis refund setelah periode tunggu relatif, dan sistem multisig dengan backup key yang baru aktif setelah periode tidak aktif tertentu.
CSV memberikan mekanisme keadilan yang memungkinkan dua pihak yang tidak saling percaya untuk bertransaksi berulang kali tanpa perlu mempercayai satu sama lain. Cukup mempercayai matematika dan protokol Bitcoin. Tanpa CSV, Lightning Network dalam bentuknya saat ini tidak mungkin ada.
Setelah memahami nLockTime, nSequence, CLTV, dan CSV, saatnya melihat bagaimana semua mekanisme ini bisa dikombinasikan untuk membangun use case nyata yang powerful. Timelock bukan fitur eksotis untuk developer kriptografi, melainkan fondasi dari banyak hal yang membuat Bitcoin lebih dari sekadar sistem pembayaran sederhana.
Dead man's switch: warisan digital yang tidak bisa diblokir
Bayangkan kamu ingin memastikan bahwa kalau kamu tidak aktif selama 1 tahun, bitcoinmu bisa diakses oleh orang yang kamu percaya. Di sistem perbankan tradisional, ini butuh surat wasiat, notaris, proses hukum, dan potensi konflik keluarga. Di Bitcoin, ini bisa diimplementasikan dengan script: "key utama bisa memindahkan dana kapanpun, ATAU key cadangan bisa mengklaim setelah 52.560 block sejak UTXO terakhir disentuh." Pemilik cukup secara berkala memindahkan dana untuk mereset clock. Kalau tidak aktif selama 1 tahun, key cadangan yang dipegang ahli waris bisa mengklaim dana secara otomatis.
Vault: lapisan keamanan tambahan
Vault adalah pola di mana dana tidak bisa langsung dipindahkan begitu saja. Ada periode cooldown yang memberikan waktu untuk membatalkan kalau private key dikompromikan. Pola sederhananya: untuk membelanjakan dana dari vault, kamu harus dulu membuat "unvault transaction" yang terkunci CSV selama 144 block. Selama 144 block itu, kamu masih bisa membatalkan dengan emergency key dan mengirim dana kembali ke cold storage. Kalau hacker mencuri private key, kamu punya waktu sekitar 1 hari untuk menyadari dan membatalkan.
Escrow dan pembayaran milestone
Dengan kombinasi nLockTime, multisig, dan CLTV, kamu bisa membangun sistem escrow yang benar-benar trustless. Tidak perlu mempercayai arbiter, platform, atau siapapun. Pembayaran milestone memungkinkan kontraktor mendapat pembayaran otomatis setelah tanggal yang disepakati tanpa perlu menunggu "persetujuan" klien yang bisa saja diingkari.
Batasan yang perlu dipahami
Script Bitcoin tidak bisa melihat kondisi di luar chain. Ia tidak tahu apakah barang sudah dikirim atau pekerjaan sudah selesai. Timelock hanya bisa mengatur waktu, bukan kondisi dunia nyata. Untuk menghubungkan kondisi off-chain ke on-chain, dibutuhkan oracle atau kepercayaan minimal pada pihak ketiga. Selain itu, script yang kompleks cenderung lebih besar dan membutuhkan fee lebih tinggi, meski Taproot sudah membantu menyembunyikan kompleksitas ini.
Timelock adalah bukti bahwa Bitcoin bukan sekadar sistem "kirim dan terima." Ia adalah bahasa pemrograman untuk mengekspresikan kondisi kepemilikan yang kompleks, tanpa membutuhkan pengacara, bank, atau pihak ketiga yang harus dipercaya. Setiap use case yang dibangun di atas timelock adalah satu langkah lebih jauh menuju sistem keuangan yang benar-benar tanpa kepercayaan.
Bayangkan kamu baru pindah ke kota baru dan harus membaca semua koran dari 15 tahun terakhir sebelum bisa mengikuti berita hari ini. Itulah yang dilakukan node Bitcoin baru: ia harus memvalidasi setiap block sejak genesis block sebelum bisa dianggap synced dan dipercaya.
Proses ini disebut Initial Block Download (IBD). Untuk node baru saat ini, ini berarti memvalidasi ratusan ribu block yang berisi ratusan juta transaksi. Tergantung hardware, proses ini bisa memakan waktu beberapa jam hingga beberapa hari.
Headers-first: strategi yang cerdas
Software Bitcoin client (seperti Bitcoin Core atau Bitcoin Knots) tidak langsung mendownload semua block dari awal. Ia pertama-tama mendownload semua header block, yaitu 80 byte per block, dari peer. Untuk seluruh blockchain, ini hanya sekitar 70MB. Dari header, node bisa memverifikasi chain of proof-of-work tanpa perlu data transaksi sama sekali.
Setelah tahu mana chain terpanjang yang valid, barulah node mendownload block-block secara paralel dari banyak peer sekaligus. Ini jauh lebih efisien dari pendekatan lama yang hanya mendownload satu block dari satu peer secara sequential.
Apa yang diverifikasi selama IBD?
Untuk setiap block, node memverifikasi: proof-of-work valid, timestamp dalam range yang diizinkan, ukuran block tidak melebihi batas, semua transaksi valid secara kriptografi, tidak ada double spend, dan total coinbase output tidak melebihi reward yang diizinkan. Ini bukan proses yang ringan dan itulah mengapa IBD membutuhkan waktu dan CPU yang signifikan.
assumevalid: shortcut yang aman
Banyak implementasi Bitcoin client menyertakan hash dari block tertentu yang sudah diverifikasi oleh komunitas luas sebagai "titik aman yang diasumsikan valid." Untuk block sebelum titik ini, node tetap mendownload dan mengeksekusi semua transaksi untuk membangun UTXO set, tapi tidak lagi memverifikasi signature kriptografi yang merupakan bagian paling CPU-intensive. Ini mempersingkat IBD secara signifikan tanpa mengorbankan keamanan UTXO set.
Penting: assumevalid bukan kepercayaan buta. Node masih memverifikasi seluruh struktur block dan UTXO set. Yang di-skip hanya verifikasi signature untuk block lama yang sudah terbukti valid oleh jutaan node lain.
Selama IBD berlangsung, node tidak boleh digunakan untuk memverifikasi pembayaran. Ia belum punya gambaran penuh tentang blockchain dan bisa ditipu untuk menerima transaksi yang sudah double-spend di block yang belum ia validasi. Cek field "initialblockdownload" via RPC untuk memastikan node sudah siap.
Setiap kali block baru tiba dari jaringan, node tidak langsung menerimanya begitu saja. Ia menjalankan serangkaian pemeriksaan yang panjang dan ketat sebelum memutuskan apakah block itu valid atau tidak. Proses inilah yang membuat Bitcoin trustless: kamu tidak perlu mempercayai siapapun karena node kamu sendiri yang memverifikasi segalanya.
Dua lapisan verifikasi
Verifikasi block terjadi dalam dua lapisan. Pertama adalah verifikasi header: node memeriksa proof-of-work, timestamp, dan struktur dasar block tanpa perlu melihat transaksi di dalamnya. Ini cepat dan ringan. Kedua adalah verifikasi penuh: node memeriksa setiap transaksi satu per satu, memastikan tidak ada double spend, semua signature valid, dan semua aturan konsensus terpenuhi.
Apa saja yang diperiksa?
Proof-of-work: hash dari header block harus di bawah target difficulty saat ini. Ini tidak bisa dipalsukan tanpa mengeluarkan energi nyata. Timestamp: tidak lebih dari 2 jam di masa depan dari waktu node, dan harus lebih besar dari Median Time Past (MTP). Ukuran block: total weight tidak melebihi 4 juta weight units. Coinbase transaction: reward yang diklaim miner tidak melebihi block subsidy ditambah total fee transaksi. Setiap transaksi: semua input merujuk ke UTXO yang ada dan belum dibelanjakan, semua signature valid secara kriptografi, tidak ada transaksi yang membelanjakan lebih dari yang diterima.
Script validation: lapisan paling kompleks
Untuk setiap input transaksi, node harus menjalankan script Bitcoin dan memverifikasi bahwa kondisi locking script terpenuhi oleh unlocking script yang diberikan. Ini melibatkan eksekusi stack-based virtual machine untuk setiap input di setiap transaksi di setiap block. Inilah bagian yang paling CPU-intensive dari seluruh proses verifikasi.
Verifikasi paralel
Software Bitcoin client modern memverifikasi signature secara paralel menggunakan semua core CPU yang tersedia. Ini adalah salah satu alasan mengapa hardware yang lebih baik mempercepat IBD secara signifikan. Semakin banyak core, semakin cepat proses validasi signature yang jumlahnya bisa puluhan ribu per block.
Setiap node yang menjalankan verifikasi ini adalah satu suara independen yang menegakkan aturan konsensus Bitcoin. Tidak ada satu entitas pun yang bisa memaksa node-node ini untuk menerima block yang melanggar aturan, sekalipun block itu punya proof-of-work yang valid.
Kalau kamu menghapus semua block dari hard drive node kamu tapi menyimpan satu folder kecil bernama chainstate, maka node kamu masih bisa memverifikasi apakah transaksi baru valid atau tidak. Folder itulah yang menyimpan seluruh "keadaan terkini" Bitcoin, yaitu semua UTXO yang ada saat ini, siapa yang memilikinya, dan berapa nilainya.
Apa itu chainstate?
Chainstate adalah database yang menyimpan UTXO set: kumpulan semua output transaksi yang belum pernah dibelanjakan. Setiap kali block baru divalidasi, node memperbarui chainstate, yaitu output baru ditambahkan, output yang dibelanjakan dihapus. Ini adalah snapshot dari kepemilikan Bitcoin saat ini.
LevelDB: Lemari Arsip yang Sangat Terorganisir
Di disk, chainstate disimpan menggunakan LevelDB, yaitu database key-value yang dibuat oleh Google dan sangat efisien untuk akses cepat. Bayangkan kamu punya 184 juta lembar dokumen, di mana setiap lembar adalah satu UTXO. Kalau dokumen-dokumen itu ditumpuk sembarangan, mencari satu dokumen bisa butuh waktu lama. LevelDB mengorganisir dokumen-dokumen itu secara terurut berdasarkan kuncinya, sehingga pencarian bisa dilakukan dalam hitungan milidetik meski ada ratusan juta entri. Itulah mengapa node bisa memverifikasi transaksi baru dengan sangat cepat tanpa menelusuri seluruh blockchain.
Kuncinya adalah outpoint (txid + index output), nilainya adalah informasi tentang UTXO tersebut: nilai dalam satoshi, script locking, apakah coinbase, dan di block mana ia dikonfirmasi.
Mengapa ukuran UTXO set penting?
Saat ini UTXO set berisi sekitar 184 juta entri dan berukuran sekitar 11 GB di disk setelah kompresi LevelDB. Semakin besar UTXO set, semakin besar RAM yang dibutuhkan node untuk operasi yang efisien. Ini adalah salah satu alasan mengapa komunitas Bitcoin sangat memperhatikan "UTXO bloat" yaitu praktik membuat banyak output kecil yang tidak efisien.
dbcache: Ukuran Meja Kerja di RAM
Salah satu parameter konfigurasi paling penting di bitcoin.conf adalah dbcache, yaitu ukuran cache untuk chainstate database dalam MB. Bayangkan LevelDB sebagai lemari arsip fisik di gudang (hard disk). Setiap kali node butuh mengecek UTXO, ia harus berjalan ke gudang, buka laci, ambil dokumen, baca, lalu kembalikan. dbcache adalah meja kerja di depan gudang, semakin besar mejanya, semakin banyak dokumen yang bisa langsung diakses tanpa bolak-balik ke disk. Default-nya hanya 450 MB, tapi dengan RAM yang cukup, menaikkannya ke 4-8 GB bisa mempercepat IBD secara dramatis.
Undo data: cara node bisa mundur
Selain chainstate, node juga menyimpan undo data untuk setiap block yaitu data yang diperlukan untuk membalik efek block tersebut kalau terjadi reorg. Undo data berisi semua UTXO yang dibelanjakan dalam block itu, sehingga kalau block tersebut harus di-disconnect, node bisa mengembalikan UTXO-UTXO tersebut ke chainstate.
Total semua UTXO di chainstate harus sama persis dengan total supply Bitcoin yang beredar. Ini bisa diverifikasi siapapun kapanpun dengan menjalankan gettxoutsetinfo. Tidak ada bank sentral, tidak ada audit eksternal yang dibutuhkan, matematika yang membuktikannya.
Ada miskonsepsi umum tentang menjalankan Bitcoin node: bahwa kamu butuh ratusan gigabyte storage untuk melakukannya. Ini tidak sepenuhnya benar. Bitcoin punya fitur bernama pruning yang memungkinkan node membuang block lama dari disk setelah memvalidasinya, sambil tetap bisa memverifikasi transaksi baru sepenuhnya.
Apa itu pruned node?
Node yang berjalan dalam mode pruning tetap mendownload dan memvalidasi setiap block sejak genesis block selama IBD, tidak ada jalan pintas. Tapi setelah block divalidasi dan UTXO set diperbarui, block tersebut bisa dihapus dari disk. Yang tersisa hanyalah chainstate (UTXO set) dan beberapa block terbaru sebagai buffer. Hasilnya: node yang butuh minimal sekitar 550 MB storage alih-alih 700+ GB untuk full archival node.
Yang hilang saat pruning
Pruned node tidak bisa melayani block lama kepada peer lain yang sedang IBD. Ini berarti pruned node tidak berkontribusi penuh sebagai relay untuk jaringan. Selain itu, ada beberapa command RPC yang tidak bisa dijalankan di pruned node karena data yang dibutuhkan sudah tidak ada di disk. Ini yang paling sering membingungkan pengguna baru.
Tapi yang terpenting tetap ada
Pruned node adalah node yang fully validating, bukan light client dan bukan SPV node. Kemampuan memverifikasi transaksi baru, memvalidasi block baru, menolak transaksi dan block yang tidak valid, dan menjaga UTXO set yang akurat semuanya tetap ada. Keamanan verifikasi tidak berkurang sama sekali.
Konfigurasi pruning
Di bitcoin.conf, pruning dikonfigurasi dengan parameter prune dalam satuan MB, dengan minimum 550 MB. Nilai 0 berarti pruning dimatikan. Ada dua mode: otomatis di mana node mengelola sendiri berdasarkan target size, dan manual di mana pruning dilakukan via RPC ke block height tertentu.
Pruned node sangat cocok untuk pengguna yang ingin memverifikasi transaksi sendiri tanpa bergantung pada pihak ketiga, tapi punya keterbatasan storage. Kalau storage cukup, menjalankan full archival node lebih baik untuk kesehatan jaringan karena bisa membantu node baru yang sedang IBD.
assumevalid sudah kita singgung di 16.1 sebagai salah satu alasan IBD bisa dipersingkat. Section ini menjelaskan cara kerjanya secara utuh, bersama saudaranya assumeUTXO, dan menjawab keberatan yang paling sering muncul: apakah ini artinya kita balik mempercayai developer?
IBD bisa memakan waktu berjam-jam atau bahkan berhari-hari. Dua fitur Bitcoin, yaitu assumevalid dan assumeUTXO, dirancang untuk mempercepat proses ini secara signifikan. Tapi keduanya sering disalahpahami: bukan kepercayaan buta kepada developer, melainkan pilihan desain yang sangat hati-hati dengan mekanisme verifikasi yang tetap kuat.
assumevalid: Skip Verifikasi Signature untuk Block Lama
Selama IBD, bagian yang paling memakan CPU adalah verifikasi signature kriptografi untuk setiap input transaksi. Untuk blockchain sepanjang ratusan ribu block dengan ratusan juta transaksi, ini pekerjaan yang sangat berat dan bisa memakan waktu puluhan jam.
assumevalid adalah hash dari block tertentu yang di-hardcode ke dalam software Bitcoin client. Untuk semua block sebelum hash ini, node tetap mendownload semua data, memvalidasi struktur block, dan membangun UTXO set secara penuh, tapi tidak memverifikasi signature kriptografi. Logikanya: kalau jutaan node lain sudah memvalidasi signature ini dan blockchain tetap berjalan normal, signature pasti valid.
Penting: kamu bisa menimpa ini kapanpun. Dengan menjalankan flag -assumevalid=0, node akan memverifikasi setiap signature dari block 0 tanpa pengecualian. Ini butuh waktu jauh lebih lama tapi memberikan verifikasi paling menyeluruh.
assumeUTXO: Mulai dari Snapshot UTXO Set
assumeUTXO adalah fitur yang lebih baru dan lebih radikal. Alih-alih membangun UTXO set dari genesis block, node bisa memuat snapshot UTXO set yang sudah jadi dari file eksternal. Node langsung bisa digunakan untuk memverifikasi transaksi baru sambil memverifikasi blockchain historis di background.
Analoginya: bayangkan kamu baru bergabung di sebuah perusahaan. Daripada membaca semua email dari 15 tahun lalu sebelum bisa mulai kerja, kamu membaca ringkasan situasi terkini dulu (snapshot UTXO), langsung mulai kerja, sambil perlahan membaca arsip historis di waktu luang.
Apakah ini aman?
Untuk assumevalid: kalau developer jahat memasukkan hash block yang salah, node akan membangun UTXO set yang berselisih dengan jaringan dan langsung ketahuan. Ribuan developer dan pengguna yang mengaudit source code menjadi lapisan verifikasi sosial yang kuat.
Untuk assumeUTXO: hash snapshot di-hardcode dan bisa diaudit siapapun. Kalau snapshot berisi UTXO yang salah, verifikasi historis di background akhirnya akan menemukan inkonsistensi. Desainnya memastikan bahwa bahkan kalau snapshot salah, node akan self-correct.
assumevalid dan assumeUTXO bukan jalan pintas yang mengorbankan keamanan, melainkan keduanya adalah optimisasi yang dirancang dengan sangat hati-hati. Keamanan Bitcoin tidak bergantung pada satu node yang memverifikasi segalanya, melainkan pada ribuan node independen yang semuanya menjalankan aturan konsensus yang sama.
Setelah memahami IBD, chainstate, verifikasi block, pruning, dan assumevalid, saatnya menjawab pertanyaan paling fundamental: mengapa kamu harus repot-repot menjalankan node sendiri?
"Jangan percaya, verifikasi": Bukan Slogan Kosong
Kalau kamu tidak menjalankan node sendiri, kamu harus mempercayai seseorang. Mungkin exchange tempat kamu membeli bitcoin. Mungkin block explorer yang kamu pakai untuk melihat transaksi. Mungkin wallet yang terhubung ke node orang lain. Setiap kali kamu mempercayai pihak ketiga untuk memverifikasi transaksi Bitcoin, kamu menciptakan titik kegagalan yang bisa dimanipulasi, bisa di-hack, atau bisa berbohong.
Node sendiri menghilangkan semua ketergantungan itu. Kamu verifikasi sendiri bahwa transaksi yang kamu terima benar-benar ada di blockchain, bahwa tidak ada inflasi tersembunyi, bahwa aturan konsensus yang kamu setujui benar-benar ditegakkan.
Apa yang node kamu verifikasi setiap hari?
Setiap block baru: proof-of-work valid, tidak ada transaksi yang membelanjakan UTXO yang tidak ada, tidak ada miner yang mengklaim reward lebih dari yang seharusnya, semua aturan konsensus terpenuhi. Setiap transaksi yang kamu terima: benar-benar ada di blockchain, sudah dikonfirmasi sebanyak yang kamu lihat, tidak ada manipulasi data dari pihak ketiga.
Node adalah suara kamu di jaringan
Kalau suatu hari ada proposal untuk mengubah aturan konsensus Bitcoin, misalnya menaikkan batas supply atau mengubah algoritma mining, node kamu adalah yang menentukan apakah kamu mengikuti perubahan itu atau tidak. Node yang tidak di-upgrade akan otomatis menolak block yang melanggar aturan lama. Ini adalah mekanisme yang membuat perubahan konsensus di Bitcoin sangat sulit dilakukan tanpa persetujuan luas dari para pengguna.
Kontribusi ke jaringan
Setiap node yang berjalan memperkuat jaringan Bitcoin. Node archival membantu node baru yang sedang IBD. Node yang menerima koneksi inbound membantu peer baru menemukan jaringan. Semakin banyak node independen yang berjalan, semakin sulit bagi siapapun untuk menyensor transaksi atau memanipulasi data.
Menjalankan node sendiri adalah bentuk partisipasi paling fundamental dalam Bitcoin. Bukan karena memberi keuntungan finansial langsung, tapi karena itulah cara kamu benar-benar memiliki dan memverifikasi bitcoin yang kamu pegang, tanpa mempercayai siapapun.
Bayangkan kamu ingin memverifikasi bahwa sebuah cek benar-benar dikeluarkan oleh bank yang sah. Ada dua cara: pertama, kamu bergabung menjadi karyawan bank dan mengakses seluruh sistem database untuk memverifikasi sendiri. Kedua, kamu minta bank menunjukkan bukti transaksi yang disertai stempel resmi yang bisa kamu verifikasi keasliannya tanpa harus masuk ke sistem.
Full node adalah cara pertama, yaitu verifikasi penuh tapi butuh komitmen besar. SPV adalah cara kedua, yaitu verifikasi yang lebih ringan tapi tetap bisa diandalkan untuk kebanyakan use case.
Konteks sejarah: Satoshi sudah memikirkan ini
Di bagian 8 whitepaper Bitcoin (2008), Satoshi menulis tentang Simplified Payment Verification. Ia menyadari bahwa tidak semua orang akan atau bisa menjalankan full node. Untuk pengguna sehari-hari yang hanya ingin menerima dan mengirim pembayaran, ada cara yang lebih ringan: cukup verifikasi bahwa transaksi kamu ada di dalam block yang valid, tanpa perlu memvalidasi seluruh blockchain.
Kuncinya ada di header block. Header block Bitcoin hanya 80 byte per block, tapi mengandung merkle root yaitu sebuah hash yang merepresentasikan seluruh transaksi dalam block tersebut. Dengan menggunakan hanya header block (sekitar 70 MB untuk seluruh blockchain) plus merkle proof untuk transaksi tertentu, kamu bisa membuktikan bahwa transaksi tersebut ada di dalam block yang valid.
Apa yang bisa diverifikasi SPV?
SPV client bisa memverifikasi bahwa transaksi ada di dalam block tertentu via merkle proof, block tersebut punya proof-of-work yang valid via header, dan block tersebut adalah bagian dari chain terpanjang via header chain. Yang tidak bisa diverifikasi oleh SPV tanpa kepercayaan tambahan: apakah aturan konsensus lainnya terpenuhi, apakah transaksi tersebut double-spend sebelum masuk block, dan apakah total supply Bitcoin valid.
Asumsi kepercayaan yang dibutuhkan SPV
SPV bukan trustless seperti full node. Ia bergantung pada asumsi bahwa mayoritas hashrate jujur. Kalau mayoritas miner bersekongkol, mereka bisa membuat block palsu yang menipu SPV client. Tapi asumsi ini sama dengan asumsi keamanan Bitcoin secara keseluruhan, yaitu selama majority honest, SPV aman untuk pembayaran sehari-hari.
Untuk siapa SPV cocok?
Untuk pembayaran sehari-hari dengan jumlah moderat, SPV memberikan keseimbangan yang baik antara keamanan dan kemudahan. Untuk pembayaran dengan nilai sangat besar atau untuk keperluan yang membutuhkan verifikasi penuh, full node tetap menjadi pilihan terbaik.
SPV bukan kompromi yang buruk, melainkan ia adalah trade-off yang disengaja dan sudah dipikirkan Satoshi sejak awal. Dalam sistem yang mayoritas jujur, SPV memberikan verifikasi yang cukup kuat untuk kebanyakan use case. Kuncinya adalah memahami batasannya dan memilih tingkat verifikasi yang sesuai dengan kebutuhan dan nilai yang dipertaruhkan.
Bayangkan kamu tinggal di kota dengan 10.000 penduduk dan perlu membuktikan bahwa namamu ada di buku kependudukan resmi. Ada dua cara: pertama, tunjukkan seluruh buku (650 halaman) kepada orang yang ingin memverifikasi. Kedua, tunjukkan satu jalur kecil dari namamu hingga ke cap resmi di halaman pertama, hanya 13 langkah untuk 10.000 penduduk, bukan 10.000 halaman.
Itulah merkle proof. Bukan bukti dengan menunjukkan seluruh data, melainkan bukti dengan menunjukkan jalur yang bisa diverifikasi secara kriptografi.
Sudut pandang yang berbeda dari Bab 3
Di Bab 4 kita melihat merkle tree sebagai struktur kriptografi, yaitu bagaimana hash-hash transaksi dikombinasikan menjadi satu merkle root. Di sini kita melihatnya dari sudut pandang SPV client: bagaimana HP kamu membuktikan bahwa transaksi kamu ada di block yang tidak pernah kamu download sepenuhnya.
Struktur merkle proof
Misalkan sebuah block punya 8 transaksi. Untuk membuktikan bahwa Tx3 ada di block ini, kamu tidak perlu semua 8 transaksi. Kamu hanya butuh: hash dari Tx4 (pasangan Tx3 di level pertama), hash dari H(Tx1+Tx2) (pasangan di level kedua), dan hash dari H(Tx5+Tx6+Tx7+Tx8) (pasangan di level ketiga). Tiga hash ini, dikombinasikan dengan Tx3, cukup untuk merekonstruksi merkle root. Kalau hasilnya cocok dengan merkle root di header block yang sudah diverifikasi proof-of-work-nya, transaksi tersebut terbukti ada di block itu.
Efisiensi yang luar biasa
Untuk block dengan n transaksi, merkle proof hanya membutuhkan log₂(n) hash. Block Bitcoin modern bisa berisi lebih dari 3.000 transaksi. Merkle proof-nya hanya butuh sekitar 12 hash yaitu masing-masing 32 byte, totalnya sekitar 384 byte. Bandingkan dengan mengdownload seluruh block yang bisa mencapai 1-2 MB. Kalau transaksi dalam block berlipat ganda dari 3.000 menjadi 6.000, proof hanya butuh satu hash tambahan.
Cara SPV client menggunakan merkle proof
Ketika SPV wallet kamu menerima pembayaran, ini yang terjadi di belakang layar: node yang terhubung mengirimkan transaksi beserta merkle proof-nya. SPV client mengambil hash transaksi, mengikuti jalur merkle proof, dan merekonstruksi merkle root. Kemudian membandingkan dengan merkle root yang ada di header block yang sudah diverifikasi proof-of-work-nya. Kalau cocok, transaksi terbukti ada di block tersebut.
Keterbatasan merkle proof
Merkle proof membuktikan bahwa transaksi ADA di block, tapi tidak membuktikan bahwa transaksi tersebut VALID. Input transaksi bisa saja sudah dibelanjakan sebelumnya dan block yang mengandung transaksi tersebut tetap valid dari sudut pandang proof-of-work. Untuk mendeteksi double spend, dibutuhkan akses ke UTXO set yang hanya dimiliki oleh full node.
Merkle proof adalah salah satu konstruksi kriptografi paling elegan di Bitcoin. Dengan hanya beberapa lusin byte, siapapun bisa membuktikan bahwa sebuah transaksi ada di dalam block yang mengandung jutaan byte data. Ini adalah konsekuensi matematika dari sifat hash function yang deterministic dan collision-resistant.
SPV client perlu memberitahu full node: "kirimkan saya transaksi yang relevan dengan address saya." Tapi kalau SPV langsung berkata "saya punya address bc1q...xyz, kirimkan transaksi ke address itu," privasi langsung bocor karena full node tahu persis address mana yang kamu miliki.
Bloom filter adalah solusi pertama Bitcoin untuk masalah ini. Diperkenalkan di BIP 37 pada 2012, ia memungkinkan SPV client memberitahu node tentang transaksi yang relevan tanpa mengungkap address secara langsung.
Apa itu bloom filter?
Bloom filter adalah struktur data probabilistik yang menjawab satu pertanyaan: "apakah elemen X ada dalam set ini?" Jawaban "tidak" selalu tepat, kalau bloom filter bilang tidak ada, memang tidak ada. Tapi jawaban "ya" bisa salah (false positive), bloom filter bisa bilang "ya" untuk elemen yang sebenarnya tidak ada di set. Ini disengaja: false positive menciptakan ambiguitas yang melindungi privasi.
Cara kerja bloom filter
Bloom filter adalah array bit, dimulai dengan semua bit nol. Untuk menambahkan elemen, kamu hash elemen tersebut dengan beberapa hash function berbeda, lalu set bit-bit yang dihasilkan menjadi 1. Untuk query "apakah X ada?", hash X dengan hash function yang sama. Kalau semua bit yang dihasilkan sudah 1, X mungkin ada. Kalau ada satu bit yang masih 0, X pasti tidak ada. SPV client membuat bloom filter berisi address-address miliknya dan mengirimkannya ke node. Node menyaring transaksi dan hanya mengirimkan yang cocok.
Masalah privasi yang membuat BIP 37 deprecated
Terlepas dari desain yang cerdas, bloom filter punya masalah serius. Ukuran dan komposisi filter bisa mengungkap informasi tentang berapa banyak address yang dimiliki klien. Node yang jahat bisa menguji jutaan address Bitcoin ke filter dan melakukan analisis statistik untuk mengidentifikasi address yang sebenarnya dimiliki. Implementasi awal BIP 37 bahkan punya kelemahan yang memungkinkan full node menentukan address klien dengan akurasi yang mengejutkan.
Selain masalah privasi, BIP 37 juga membebani full node secara tidak proporsional, karena node harus memfilter setiap transaksi untuk setiap klien SPV yang terhubung, yang bisa menjadi serangan DoS.
Status saat ini
BIP 37 sekarang dianggap deprecated. Banyak node menonaktifkan dukungan BIP 37 secara default. Solusi yang lebih baik, yaitu compact block filters (BIP 157/158), sudah tersedia dan akan dibahas di 17.4.
Bloom filter adalah contoh menarik dari solusi yang elegan secara matematis tapi tidak cukup baik dalam praktik keamanan. Privasi adalah properti yang sangat sulit dipertahankan, bahkan sistem yang dirancang untuk melindungi privasi bisa bocor informasi melalui cara-cara yang tidak terduga.
BIP 37 membiarkan node memfilter untuk klien, sehingga node tahu apa yang dicari klien. BIP 157/158 membalik logika ini: klien yang mendownload filter dan memfilter sendiri. Pergeseran sederhana ini menciptakan perbedaan privasi yang sangat besar.
Logika yang terbalik
Dengan BIP 37: SPV client berkata ke node "saya punya address ini, tolong filter untuk saya." Node tahu address yang dicari. Dengan BIP 157/158: node membuat filter kompak untuk setiap block yang merangkum semua data dalam block tersebut. SPV client mendownload filter ini dan mengecek sendiri apakah ada data yang relevan. Kalau ada, baru klien mendownload block lengkapnya. Node tidak pernah tahu apa yang dicari klien.
Apa itu compact block filter?
BIP 158 mendefinisikan format filter kompak menggunakan struktur data bernama Golomb-Coded Set (GCS). GCS adalah probabilistic data structure yang lebih efisien dari bloom filter dengan false positive rate yang lebih terprediksi. Untuk setiap block, node membuat filter yang mengandung semua scriptPubKey dari output transaksi dalam block tersebut. Filter ini berukuran sekitar 10-20 KB untuk block dengan ribuan transaksi.
BIP 157: Protokol Distribusi Filter
BIP 157 mendefinisikan bagaimana filter ini didistribusikan di jaringan P2P. Ada dua jenis pesan baru: getcfheaders untuk minta header dari filter, dan getcfilters untuk minta filter untuk range block tertentu. Klien bisa mendownload filter headers secara ringan terlebih dahulu, lalu mendownload filter lengkap hanya untuk block yang dibutuhkan.
Trade-off yang perlu dipahami
SPV client dengan BIP 157/158 harus mendownload filter untuk setiap block, total bisa beberapa ratus MB hingga beberapa GB untuk seluruh chain. Ini lebih besar dari BIP 37 yang hanya mendownload transaksi relevan. Sebagai gantinya, privasi yang didapat jauh lebih baik. Ini adalah trade-off yang disengaja: tukar bandwidth untuk privasi.
Status implementasi
BIP 157/158 sudah diimplementasikan di software Bitcoin client utama. Neutrino adalah implementasi light client Go yang menggunakan BIP 157/158 dan dipakai oleh Lightning Network mobile wallet seperti Phoenix dan Breez.
BIP 157/158 menunjukkan bagaimana desain protokol yang lebih baik bisa membalik asumsi kepercayaan. Dengan memindahkan pekerjaan filtering dari node ke klien, privasi meningkat drastis tanpa mengorbankan keamanan. Kalau kamu tidak perlu memberitahu siapapun apa yang kamu cari, jangan lakukan itu.
SPV tidak memverifikasi semua aturan konsensus. Tapi seberapa besar risiko nyatanya? Ini pertanyaan yang sering salah dijawab di dua arah: ada yang bilang SPV sama amannya dengan full node, ada yang bilang SPV tidak bisa dipercaya sama sekali. Keduanya salah.
Apa yang bisa dilakukan attacker terhadap SPV client?
Skenario serangan paling realistis adalah eclipse attack, yaitu attacker mengisolasi SPV client dari jaringan jujur dan hanya menghubungkannya ke node-node milik attacker. Dari posisi ini, attacker bisa menyembunyikan transaksi yang masuk atau memperlihatkan chain yang berbeda. Untuk double spend, attacker butuh eclipse attack DAN hashrate yang signifikan untuk menghasilkan chain alternatif, sangat mahal dan jarang terjadi.
Apa yang TIDAK bisa dilakukan attacker?
Tanpa mengontrol mayoritas hashrate jaringan, attacker tidak bisa membuat transaksi yang membelanjakan bitcoin yang tidak dimilikinya karena butuh private key, membuat bitcoin dari tidak ada karena melanggar konsensus yang bisa dideteksi full node manapun, atau meyakinkan SPV client menerima block tanpa proof-of-work yang valid karena SPV tetap memverifikasi PoW header.
Konfirmasi sebagai mitigation
Semakin banyak konfirmasi yang kamu tunggu, semakin mahal bagi attacker untuk melakukan serangan. Untuk transaksi sehari-hari dengan nilai kecil, 1-3 konfirmasi sudah sangat cukup. Untuk nilai besar, 6+ konfirmasi memberikan keamanan yang jauh lebih kuat bahkan untuk SPV.
Kesimpulan praktis
Untuk 99% penggunaan Bitcoin sehari-hari oleh individu yaitu beli kopi, terima gaji, kirim ke teman, SPV memberikan keamanan yang lebih dari cukup. Full node tetap ideal untuk menerima pembayaran bernilai besar, menjalankan bisnis yang menerima Bitcoin, dan siapapun yang ingin verifikasi mandiri penuh tanpa asumsi kepercayaan apapun.
Keamanan Bitcoin bukan biner antara "aman" dan "tidak aman", melainkan ia adalah spektrum trade-off antara kemudahan, resource, dan level verifikasi. SPV adalah titik yang valid di spektrum itu, bukan kompromi yang memalukan. Yang penting adalah memahami di mana titik itu berada dan memilih dengan sadar.
Semua yang kita pelajari di Bab 17 tentang SPV, merkle proof, bloom filter, dan compact block filters bukan konsep teoretis, melainkan semuanya diimplementasikan di wallet Bitcoin yang dipakai jutaan orang setiap hari. Tapi implementasi di dunia nyata sering kali lebih kompleks dan beragam dari model SPV murni yang Satoshi gambarkan di whitepaper.
Electrum: SPV Hybrid dengan Server
Electrum adalah salah satu wallet Bitcoin paling populer sejak 2011. Electrum tidak mengimplementasikan SPV murni, melainkan ia terhubung ke jaringan server Electrum yang sudah memproses blockchain dan menyimpan UTXO set. Klien Electrum bisa query server untuk balance, transaksi historis, dan UTXO dengan sangat cepat. Kalau kamu menjalankan Electrum server sendiri di atas full node, kamu mendapat kecepatan query Electrum dengan privasi setara full node.
Neutrino: BIP 157/158 yang Sebenarnya
Neutrino adalah implementasi light client Bitcoin dalam Go yang dikembangkan Lightning Labs. Ia mengimplementasikan BIP 157/158 (compact block filters) secara penuh. Neutrino dipakai sebagai backend untuk beberapa Lightning Network wallet mobile seperti Phoenix Wallet dan Breez. Untuk membayar Lightning invoice, wallet tersebut menggunakan Neutrino untuk memverifikasi state channel di Bitcoin blockchain tanpa mendownload seluruh blockchain.
Wallet Mobile "SPV" Biasa: Mayoritas Pakai Server
Banyak wallet mobile yang mengklaim "SPV" sebenarnya terhubung ke server backend yang dikontrol developer wallet tersebut. Mereka tidak mendownload header chain atau melakukan verifikasi PoW sama sekali, melainkan hanya query API server developer untuk mendapat balance dan transaksi. Ini bukan SPV, ini adalah custodial-lite: kamu pegang private key tapi verifikasi dilakukan oleh orang lain.
Memilih yang tepat
Tidak ada satu jawaban benar untuk semua orang. Untuk 99% pengguna sehari-hari dengan jumlah kecil, wallet mobile biasa sudah cukup aman. Untuk pengguna yang peduli privasi dan verifikasi, Electrum dengan server sendiri atau Neutrino adalah pilihan yang jauh lebih baik. Untuk nilai besar atau keperluan bisnis, full node tetap pilihan terbaik.
Yang terpenting adalah memahami model kepercayaan dari wallet yang kamu gunakan. "Self-custody" tidak selalu berarti "trustless", karena banyak wallet self-custody yang diam-diam membutuhkan kepercayaan kepada server operator atau developer. Pilih dengan sadar sesuai dengan nilai yang kamu simpan dan tingkat kepercayaan yang kamu butuhkan.
Bab 8 sudah menjelaskan jaringan P2P Bitcoin dari sisi apa yang terjadi. Bab 18 membahas sisi bagaimana: byte apa persisnya yang berpindah antar node. Kalau Bab 8 adalah peta kota, Bab 18 adalah rambu dan aturan lalu lintasnya.
Bayangkan dua orang bicara lewat walkie-talkie dengan protokol militer. Setiap transmisi harus dimulai dengan kode identifikasi stasiun, diikuti kode perintah, lalu isi pesan, lalu kode verifikasi. Tidak bisa asal bicara; kalau formatnya salah, transmisi diabaikan. Bitcoin wire protocol bekerja persis seperti itu, hanya saja bukan suara manusia yang dikirim, melainkan byte-byte biner yang mengikuti aturan yang sangat ketat.
Kalau kamu membuka Wireshark dan melihat traffic antara dua node Bitcoin, kamu tidak akan melihat HTTP, tidak ada JSON, tidak ada REST API. Yang kamu lihat adalah stream byte mentah, yaitu format biner yang dirancang untuk efisiensi maksimal, bukan keterbacaan manusia.
Jaringan tanpa server pusat
Bitcoin berjalan di atas jaringan peer-to-peer murni yang tidak terstruktur. Tidak ada server pusat, tidak ada koordinator, tidak ada single point of failure. Setiap node adalah klien sekaligus server, ia menerima data dari peer lain sekaligus melayani data ke peer lain. Ini berbeda dari cara kerja internet biasa di mana kamu adalah klien dan Google, YouTube, atau bank kamu adalah server.
Setiap node mempertahankan dua jenis koneksi. Outbound connections (8 koneksi reguler + 2 block-only) adalah koneksi yang kamu inisiasi sendiri, kamu yang memilih peer-nya. Inbound connections (sekitar 115, karena Bitcoin Core membatasi total koneksi di 125 dan 10 di antaranya sudah dipakai outbound) adalah koneksi yang diinisiasi peer lain yang datang kepadamu, kalau port 8333 terbuka. Outbound connections lebih dipercaya karena kamu yang memilih dengan siapa berbicara, bukan pasif menerima siapapun yang datang mengetuk pintu.
Bagaimana node menemukan teman bicara?
Saat pertama kali dijalankan, node Bitcoin belum kenal siapapun. Ia menggunakan DNS seeds, seperti buku telepon khusus, untuk mendapatkan daftar IP node-node aktif. Ada beberapa DNS seed yang dikelola kontributor terpercaya. Setelah terhubung ke beberapa peer, node bertukar daftar kenalan via pesan addr, seperti teman yang saling merekomendasikan kenalan baru. Daftar ini disimpan di peers.dat untuk digunakan saat restart.
Anatomi satu pesan Bitcoin
Setiap pesan P2P Bitcoin, apapun isinya, selalu punya struktur header yang sama persis. Ini seperti amplop standar yang selalu punya kolom "pengirim", "penerima", dan "isi" di tempat yang sama, sehingga siapapun yang menerima amplop langsung tahu cara membacanya.
Magic bytes (4 byte) adalah kode pengenal jaringan. Seperti kode area di nomor telepon: 0xF9BEB4D9 artinya "ini pesan Bitcoin mainnet." Kalau byte pertama yang diterima node berbeda dari yang diharapkan, koneksi langsung ditutup tanpa membaca sisanya.
Command (12 byte) adalah nama perintah dalam teks ASCII. "version", "inv", "tx", "block", selalu dipadding dengan null bytes sampai 12 karakter. Seperti subjek email yang selalu punya panjang persis sama.
Length (4 byte) memberitahu penerima berapa byte payload yang akan datang. Ini penting agar penerima tahu kapan satu pesan selesai dan pesan berikutnya dimulai di stream byte yang terus mengalir.
Checksum (4 byte) adalah 4 byte pertama dari SHA256(SHA256(payload)). Kalau payload rusak di tengah perjalanan, checksum tidak akan cocok dan pesan diabaikan. Seperti nomor seri di uang kertas yang bisa mendeteksi pemalsuan.
Services Flags: Kartu Nama Kapabilitas Node
Di dalam pesan version, setiap node mengiklankan apa yang bisa ia lakukan via services flags. Ini seperti profil LinkedIn yang menampilkan skill: NODE_NETWORK berarti "saya punya full blockchain dan bisa melayani block historis", NODE_COMPACT_FILTERS berarti "saya mendukung BIP 157/158 untuk SPV client modern", NODE_WITNESS berarti "saya mendukung SegWit." Peer membaca flags ini untuk memutuskan apa yang bisa diminta dari node tersebut.
Format wire Bitcoin yang biner dan minimal ini adalah keputusan desain yang disengaja. Tidak ada overhead dari format teks seperti HTTP atau JSON, setiap byte punya makna spesifik. Ini memungkinkan node memproses ribuan pesan per detik dengan overhead CPU yang sangat kecil. Kesederhanaan di level protokol adalah yang memungkinkan kompleksitas di level jaringan.
Bayangkan dua diplomat dari negara berbeda yang bertemu untuk pertama kalinya. Ada protokol yang harus diikuti sebelum bisa membahas urusan penting: perkenalan formal, verifikasi identitas, konfirmasi bahwa keduanya berbicara bahasa yang sama, baru kemudian masuk ke substansi. Bitcoin node bekerja persis seperti itu.
Handshake: tiga langkah sebelum bisa bicara
Ketika dua node pertama kali terhubung, mereka tidak langsung bertukar transaksi atau block. Ada ritual tiga langkah yang harus diselesaikan dulu. Node yang menginisiasi koneksi mengirim pesan version berisi versi software, services flags, timestamp, user agent, dan block height tertinggi yang diketahui. Node penerima membalas dengan version miliknya sendiri. Kemudian keduanya mengirim verack sebagai konfirmasi. Setelah kedua verack diterima, handshake selesai dan sesi komunikasi resmi dimulai.
Nonce di pesan version punya fungsi khusus: mendeteksi self-connection. Kalau node menerima version dengan nonce yang sama dengan yang ia kirim, berarti ia tidak sengaja terhubung ke dirinya sendiri melalui relay atau konfigurasi jaringan yang aneh. Koneksi langsung ditutup.
Lifecycle transaksi: dari wallet ke jaringan
Ketika kamu mengirim transaksi Bitcoin dari wallet, tiga pesan P2P bekerja secara berurutan. Pertama, node mengumumkan txid via inv tanpa mengirim data penuh, seperti poster "ada produk baru" tanpa memaksa semua orang mengambilnya. Peer yang belum punya transaksi tersebut membalas dengan getdata. Baru kemudian transaksi penuh dikirim via tx. Peer yang sudah punya transaksi dari node lain tidak perlu merespons sama sekali, sehingga tidak ada pengiriman data yang redundan.
Propagasi berlangsung seperti riak di air: satu transaksi bisa mencapai seluruh jaringan dalam hitungan detik via proses flooding ini.
Propagasi block: tiga generasi mekanisme
Saat miner menemukan block baru, propagasi harus secepat mungkin. Setiap detik keterlambatan meningkatkan risiko block lain ditemukan sebelum block ini menyebar, menyebabkan stale block yang membuang reward miner.
Cara lama menggunakan inv/getdata/block klasik, block penuh 1-2 MB harus dikirim ke setiap peer yang meminta. Cara yang lebih baik adalah headers-first: kirim header 80 byte dulu agar peer bisa memvalidasi proof-of-work sebelum memutuskan apakah perlu block penuh. Cara terbaik adalah compact blocks (BIP 152) yang dibahas di 18.4: kirim sketsa block yang bisa direkonstruksi dari mempool, sehingga hanya sebagian kecil data yang perlu ditransfer.
Pesan-pesan pendukung lainnya
getheaders meminta header block dari peer untuk membangun gambaran chain secara cepat tanpa mendownload block penuh. addr dan addrv2 berbagi daftar alamat IP peer yang dikenal, melanjutkan proses peer discovery yang dimulai dari DNS seeds. feefilter memungkinkan node memberitahu peer minimum fee yang ia terima di mempool sehingga transaksi dengan fee terlalu rendah tidak dikirimkan sama sekali.
Desain inv/getdata yang memisahkan pengumuman dari pengiriman data adalah keputusan efisiensi yang sangat penting. Tanpanya, setiap transaksi baru akan langsung dikirim penuh ke semua peer secara redundan. Dengan inv/getdata, setiap data hanya dikirim ke peer yang benar-benar butuh, menghemat bandwidth jaringan secara signifikan.
version — perkenalan: versi, services, heightverack — konfirmasi handshake selesaiinv — umumkan txid yang dimilikigetdata — minta data spesifik dari peertx — kirim transaksi penuhmempool — minta daftar tx di mempool peerblock — kirim block penuh (~1-2 MB)headers — kirim header saja (80 byte/block)getheaders — minta headers dari peergetblocks — minta inv dari block yang belum dimilikicmpctblock — compact block (BIP 152)getblocktxn — minta tx yang hilang dari compact blockping / pong — keepalive koneksiaddr / addrv2 — berbagi daftar peergetaddr — minta daftar peer dari node lainfeefilter — set minimum fee yang diterimasendcmpct — negosiasi compact block modewtxidrelay — aktifkan relay via witness txidDi Bab 16 kita membahas IBD dari sudut pandang node: apa yang diverifikasi dan berapa lama. Di sini kita lihat dari sudut pandang yang berbeda: pesan-pesan P2P apa yang sebenarnya dikirim selama proses sync, dan mengapa ada dua strategi sync yang sangat berbeda efisiensinya.
Strategi 1: Blocks-first sync, cara yang sudah ditinggalkan
Cara paling naif adalah meminta block satu per satu dari satu peer. Node mengirim getblocks dengan block locator, peer membalas dengan inv berisi hingga 500 hash block berikutnya, lalu node meminta setiap block via getdata dan menunggu divalidasi sebelum meminta berikutnya. Masalahnya: seluruh sync bergantung pada satu peer. Kalau peer lambat, semuanya lambat. Node juga tidak bisa tahu apakah ia sedang di chain yang benar sampai sudah terlanjur download banyak block.
Strategi 2: Headers-first sync, cara modern sejak 2015
Headers-first memecahkan masalah ini dengan memisahkan dua fase. Fase pertama: download semua header via getheaders. Peer membalas dengan hingga 2.000 header setiap respons (setiap header 80 byte plus 1 byte varint, total sekitar 162 KB per respons). Dalam beberapa menit, node sudah punya semua header dari genesis hingga tip, sekitar 70 MB total. Dari header chain ini, node bisa menghitung accumulated proof-of-work dari setiap chain yang ditawarkan berbagai peer dan tahu mana yang valid, bahkan sebelum mendownload satu block penuh pun.
Fase kedua: download block secara paralel dari banyak peer berbeda. Karena urutan sudah diketahui dari header chain, node bisa minta block dari peer manapun tanpa risiko ditipu urutan yang salah.
Block locator algorithm
Block locator adalah daftar hash yang cerdas dan hemat. Node tidak mengirimkan hash semua block yang dimilikinya, melainkan memilih secara exponentially sparse: 10 block terbaru satu per satu, lalu setiap 2 block, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, dan seterusnya hingga genesis block. Ini memungkinkan peer menemukan titik divergensi chain dengan efisien meski ada reorg yang sangat panjang, hanya dengan sekitar 40 hash, bahkan untuk chain sepanjang ratusan ribu block.
Minimum chain work threshold
Untuk keamanan tambahan, node modern punya minimum chain work threshold: jumlah accumulated proof-of-work minimum yang harus dimiliki sebuah chain sebelum dianggap layak diikuti. Ini mencegah node tertipu untuk mengikuti chain palsu yang sangat pendek dengan PoW yang sangat sedikit, bahkan sebelum header chain selesai diverifikasi sepenuhnya.
Pergeseran dari blocks-first ke headers-first adalah salah satu peningkatan terbesar dalam sejarah Bitcoin Core (versi 0.10.0, 2015). Dengan memisahkan verifikasi chain dari download data, IBD menjadi jauh lebih cepat, lebih aman, dan lebih tahan terhadap peer yang berperilaku buruk.
getheaders — dikirim dengan block locator, minta headers dari titik divergensi hingga tip (max 2.000 per respons, ~162 KB).headers — balasan peer dengan hingga 2.000 header.getblocks — versi lama: minta inv block (max 500 per respons).Bayangkan seseorang mengirimkanmu salinan koran 200 halaman, padahal kamu sudah punya 198 halamannya. Buang-buang waktu dan kertas, bukan? Itulah yang terjadi dengan propagasi block sebelum compact blocks: setiap node harus mendownload block penuh (~1-2 MB) meski sudah mengetahui hampir semua transaksi di dalamnya dari mempoolnya sendiri.
Masalah yang dipecahkan
Node yang terhubung baik ke jaringan biasanya sudah punya 95-99% transaksi yang ada di dalam block sebelum block ditemukan. Ini karena transaksi disebarkan ke seluruh jaringan saat pertama kali dikirim, jauh sebelum masuk ke dalam block. Compact blocks (BIP 152, 2016) memanfaatkan fakta ini: daripada kirim seluruh block, kirim daftar ID pendek transaksi saja dan biarkan penerima merekonstruksi sisanya dari mempool lokalnya.
Format pesan cmpctblock
Pesan cmpctblock berisi tiga komponen utama. Header block (80 byte) yang sama seperti biasa, berisi proof-of-work, merkle root, dan timestamp. Shortids berukuran 6 byte untuk setiap transaksi dalam block (jauh lebih kecil dari txid 32 byte), dibuat dengan SipHash-2-4 menggunakan nonce unik per block sehingga hanya valid untuk block ini saja. Prefill transactions yaitu beberapa transaksi yang dikirim langsung tanpa shortid, terutama coinbase transaction yang dipastikan tidak ada di mempool manapun.
Penerima mencocokkan setiap shortid dengan transaksi di mempoolnya. Transaksi yang ditemukan langsung dipakai untuk rekonstruksi block. Kalau ada shortid yang tidak cocok, penerima mengirim getblocktxn berisi daftar index transaksi yang dibutuhkan, dan pengirim membalas dengan blocktxn berisi hanya transaksi tersebut.
High-bandwidth vs low-bandwidth mode
Dua mode ini dinegosiasikan via pesan sendcmpct saat handshake. High-bandwidth mode (sendcmpct(1)): node langsung mengirimkan cmpctblock tanpa diminta begitu block baru ditemukan, cocok untuk maksimum 3 peer dengan koneksi terpercaya dan latensi rendah. Low-bandwidth mode (sendcmpct(0)): node mengumumkan via inv atau headers dulu, dan hanya mengirim cmpctblock kalau peer memintanya via getdata.
Dampak nyata
Compact blocks mengurangi data yang ditransfer dari ~1.500 KB menjadi ~20-60 KB dalam kondisi normal. Ini setara dengan pengurangan 95-98% bandwidth untuk propagasi block. Latensi propagasi block turun drastis karena lebih sedikit data yang harus ditransfer dan diverifikasi.
Compact blocks adalah contoh elegan dari prinsip "jangan kirim data yang sudah dimiliki penerima." Dengan memanfaatkan fakta bahwa mempool node-node yang terhubung baik hampir selalu sinkron, BIP 152 mengubah propagasi block dari operasi yang membutuhkan bandwidth besar menjadi operasi yang hampir real-time.
cmpctblockgetblocktxnblocktxninv / headersgetdata (MSG_CMPCT_BLOCK)cmpctblockgetblocktxnblocktxnBayangkan kamu tinggal di kampung dengan 1.000 warga. Ada berita baru: "Pak RT menikah lagi." Cara lama: setiap orang yang tahu langsung memberitahu semua tetangganya. Berita yang sama bisa didengar seseorang dari 10 orang berbeda sebelum sempat meneruskannya. Buang-buang waktu ngobrol. Erlay adalah cara yang lebih cerdas: tukar daftar berita secara periodik, dan hanya ceritakan yang benar-benar baru.
Masalah flooding yang ada sekarang
Saat ini propagasi transaksi menggunakan mekanisme flooding via inv/getdata/tx. Setiap transaksi baru di-announce ke semua peer via inv. Hasilnya: setiap transaksi di-announce rata-rata 8-16 kali ke setiap node, hampir semua redundan. Di jaringan dengan 10.000+ node dan ratusan ribu transaksi per hari, overhead bandwidth dari redundansi ini sangat signifikan dan membatasi berapa banyak koneksi yang bisa dipelihara node tanpa bandwidth yang besar.
Set reconciliation: ide inti Erlay
Erlay (BIP 330) memperkenalkan teknik bernama set reconciliation. Untuk sebagian kecil peer terpilih, node tetap menggunakan flooding seperti biasa (fanout) untuk memastikan propagasi cepat. Untuk peer lainnya, node secara periodik bertukar sketch yang sangat compact dari set transaksinya menggunakan struktur data bernama minisketch. Dari dua sketch yang dipertukarkan, keduanya bisa mengetahui transaksi mana yang hanya dimiliki salah satu pihak, tanpa perlu kirim daftar penuh.
Minisketch: matematika yang cerdas
Minisketch adalah implementasi PinSketch, sebuah teknik set reconciliation berbasis kode BCH. Ia memungkinkan dua pihak mengetahui perbedaan set mereka hanya dengan mentransfer data sebesar perbedaannya, bukan sebesar set totalnya. Kalau node A dan node B masing-masing punya 10.000 transaksi dan hanya berbeda 50 transaksi, sketch yang dikirim hanya sebesar ~50 elemen, bukan 10.000. Ini seperti "sidik jari" koleksi yang kecil tapi cukup untuk mengungkap perbedaan secara matematis.
Dampak jangka panjang
Erlay mengurangi bandwidth propagasi transaksi sekitar 40%. Yang lebih penting: karena setiap koneksi peer butuh lebih sedikit bandwidth, node bisa memelihara lebih banyak koneksi peer tanpa overhead yang proporsional. Lebih banyak koneksi berarti jaringan lebih terdesentralisasi dan lebih tahan terhadap eclipse attack. Latensi propagasi transaksi hampir tidak berubah karena fanout ke beberapa peer tetap dilakukan.
Erlay adalah contoh bagaimana teori matematika (kode koreksi galat dan set reconciliation) bisa diterapkan untuk memecahkan masalah praktis di jaringan P2P. Hasilnya bukan hanya penghematan bandwidth, tapi peningkatan desentralisasi jaringan yang merupakan salah satu properti paling berharga dari Bitcoin.
Dandelion sempat kita sebut di 8.3 sebagai solusi yang paling banyak dibahas untuk masalah privasi propagasi. Di sini kita lihat cara kerjanya, dan juga kenapa sampai sekarang ia belum masuk ke Bitcoin Core.
Bayangkan kamu berdiri di tengah kerumunan dan berteriak "Saya punya surat ini!" Semua orang langsung tahu kamu pengirimnya. Itulah yang terjadi dengan propagasi transaksi Bitcoin saat ini: node yang pertama menyebarkan transaksi ke jaringan hampir pasti adalah node pengirimnya.
Bagaimana propagasi transaksi mengekspos IP pengirim
Saat kamu membuat transaksi, node kamu adalah yang pertama menyebarkannya via flooding. Attacker yang menjalankan banyak node bisa mengamati dari node mana transaksi pertama terlihat. Node yang pertama menyiarkan transaksi ke banyak peer berbeda kemungkinan besar adalah sumber aslinya. Ini bukan serangan teoritis, dan perusahaan analitik blockchain sudah lama menggunakan teknik ini untuk menghubungkan transaksi Bitcoin dengan IP address pengirimnya.
Dandelion: stem phase dan fluff phase
Dandelion (BIP 156) memecahkan masalah ini dengan cara yang elegan. Namanya diambil dari bunga dandelion: batang tipis di awal, lalu meledak menyebar ke segala arah. Dalam stem phase, transaksi baru tidak langsung di-flood ke semua peer. Sebaliknya, ia diteruskan ke satu peer secara acak, lalu peer itu ke satu peer lagi, selama beberapa hop. Selama stem phase, transaksi tidak masuk ke mempool normal, melainkan hanya diteruskan secara senyap. Dalam fluff phase, setelah beberapa hop, salah satu node secara acak memutuskan untuk mulai menyebarkan transaksi secara normal via flooding. Node yang memulai fluff bukan pengirim asli, sehingga attacker tidak bisa menentukan sumber sebenarnya.
Dandelion++: Penyempurnaan dari Versi Asli
BIP 156 asli punya kelemahan: kalau attacker ada di stem path, ia bisa melacak jalurnya. Dandelion++ memperbaiki ini dengan memilih stem peer yang berbeda untuk setiap transaksi dari subset peer yang stabil dan acak, sehingga attacker tidak bisa memprediksi atau mempengaruhi stem path.
Status implementasi
Dandelion++ belum di-merge ke Bitcoin Core karena kompleksitas implementasi dan kekhawatiran tentang potensi serangan DoS baru yang bisa dieksploitasi via stem phase. Sebagai gantinya, Bitcoin Core menggunakan teknik yang lebih sederhana: transaksi dikirim dengan delay acak untuk mempersulit timing analysis, meski tidak seefektif Dandelion.
Privasi di Bitcoin bukan hanya tentang menyembunyikan jumlah transaksi atau identitas on-chain, melainkan juga tentang menyembunyikan dari mana transaksi berasal di level jaringan P2P. Dandelion adalah salah satu upaya paling cerdas untuk memecahkan masalah ini tanpa mengorbankan kecepatan propagasi transaksi.
Sebelum bicara tentang mining economics, perlu dipahami dulu dari mana uang miner sebenarnya berasal. Jawabannya sederhana tapi sering disalahpahami: miner mendapat dua sumber pendapatan yang sangat berbeda karakternya.
Block reward: bitcoin yang dicetak oleh protokol
Block reward adalah bitcoin baru yang diciptakan dalam setiap block sesuai jadwal yang sudah ditentukan sejak genesis block. Ini bukan uang yang diambil dari siapapun, melainkan benar-benar baru dicetak oleh protokol. Saat ini block reward adalah 3,125 BTC per block. Jumlah ini berkurang setengah setiap 210.000 block (sekitar 4 tahun) dalam proses yang disebut halving.
Transaction fees: pasar terbuka yang fluktuatif
Sumber pendapatan kedua adalah transaction fees dari semua transaksi yang dimasukkan ke dalam block. Fee adalah selisih antara total input dan total output sebuah transaksi, dan yang "hilang" dari UTXO set ini otomatis menjadi milik miner yang memasukkan transaksi tersebut ke block. Tidak seperti block reward yang tetap dan terprediksi, fee sangat fluktuatif. Pengirim transaksi bersaing untuk masuk ke block berikutnya dengan menawarkan fee yang cukup tinggi untuk menarik minat miner.
Coinbase transaction: satu-satunya cara bitcoin baru diciptakan
Block reward diklaim miner melalui coinbase transaction, yaitu transaksi pertama dalam setiap block yang tidak punya input dari UTXO manapun. Ini adalah satu-satunya transaksi yang bisa menciptakan bitcoin baru, dan valid sesuai aturan konsensus. Output coinbase tidak bisa dibelanjakan selama 100 block berikutnya, dikenal sebagai coinbase maturity rule, untuk melindungi ekosistem dari kondisi di mana block di-orphan setelah miner sudah membelanjakan reward.
Proporsi yang berubah seiring waktu
Saat ini block reward mendominasi pendapatan miner, sekitar 95-99% dari total revenue. Ini akan berubah seiring halving-halving berikutnya. Pada akhirnya, sesuai jadwal yang sudah ditentukan sejak genesis block, block reward akan mencapai nol sekitar tahun 2140 dan miner hanya bergantung sepenuhnya pada fee. Pertanyaan apakah fee saja cukup untuk mengamankan jaringan adalah salah satu pertanyaan terbuka paling penting dalam ekonomi Bitcoin.
Mengapa ini penting untuk keamanan jaringan
Revenue miner adalah yang membayar hashrate. Hashrate yang tinggi berarti serangan 51% menjadi sangat mahal. Kalau revenue miner turun karena harga Bitcoin turun atau block reward berkurang tanpa kenaikan fee yang cukup, hashrate bisa turun dan jaringan menjadi lebih rentan. Memahami dari mana uang miner berasal adalah dasar untuk memahami keamanan ekonomi Bitcoin.
Dua sumber revenue miner ini bukan kebetulan, melainkan desain yang disengaja. Block reward memastikan miner punya insentif kuat di awal saat transaksi masih sedikit. Fee memastikan insentif tetap ada setelah block reward habis. Yang menjadi pertanyaan besar adalah apakah transisi dari block reward ke fee sebagai sumber utama bisa berjalan mulus tanpa mengorbankan keamanan jaringan.
Difficulty adjustment sudah kita bahas mekanismenya di 5.4. Di sana pertanyaannya teknis: bagaimana cara kerjanya. Di sini pertanyaannya ekonomi: apa akibatnya bagi uang miner, dan kenapa mekanisme ini yang membuat mining tidak pernah benar-benar mati.
Salah satu mekanisme paling elegan dalam Bitcoin adalah difficulty adjustment: sistem yang secara otomatis menyesuaikan seberapa sulit menemukan block baru, sehingga rata-rata satu block ditemukan setiap 10 menit, tidak peduli berapa banyak atau sedikit miner yang aktif.
Mengapa 10 menit?
Sepuluh menit adalah trade-off yang disengaja. Terlalu cepat berarti block baru ditemukan sebelum block sebelumnya sempat menyebar ke seluruh jaringan, meningkatkan risiko fork yang tidak disengaja dan memberikan keuntungan kepada miner dengan koneksi paling cepat. Terlalu lambat berarti konfirmasi transaksi pertama butuh terlalu lama. Sepuluh menit memberi waktu cukup untuk propagasi block ke seluruh jaringan sambil tetap memberikan konfirmasi yang cukup cepat.
Mekanisme difficulty adjustment
Setiap 2.016 block (sekitar 2 minggu kalau rata-rata tetap 10 menit), seluruh jaringan secara otomatis menghitung ulang difficulty target. Caranya: hitung berapa lama 2.016 block terakhir diselesaikan, bandingkan dengan target 20.160 menit (2 minggu ideal), lalu sesuaikan secara proporsional.
Kalau 2.016 block terakhir diselesaikan dalam 7 hari karena hashrate naik, difficulty dinaikkan agar block kembali butuh rata-rata 10 menit. Kalau diselesaikan dalam 28 hari karena hashrate turun, difficulty diturunkan. Ada batasan penting: difficulty tidak bisa naik atau turun lebih dari 4 kali dalam satu penyesuaian, untuk mencegah perubahan ekstrem yang bisa destabilisasi jaringan.
Difficulty target sebagai angka
Difficulty target adalah angka 256-bit yang harus lebih besar dari hash block yang valid. Semakin kecil angka target, semakin sulit menemukan hash yang valid karena miner harus mencoba lebih banyak kombinasi sebelum menemukan hash yang cukup kecil. Tidak ada server pusat yang menghitung difficulty, karena setiap node menghitung sendiri dari data blockchain yang sama dan karena prosesnya deterministik, semua node mendapat angka yang identik.
Implikasi ekonomis
Difficulty adjustment membuat Bitcoin self-regulating dari sisi produksi. Kalau harga Bitcoin naik dan lebih banyak miner masuk, difficulty naik dan biaya per block ikut naik sampai profitabilitas kembali ke ekuilibrium. Kalau harga turun dan miner keluar, difficulty turun sehingga mining kembali ekonomis bagi miner yang tersisa. Ini juga yang membuat jadwal emisi Bitcoin bisa diprediksi: meski hashrate berubah drastis, halving tetap terjadi setiap ~210.000 block karena difficulty adjustment mempertahankan 10 menit per block.
Difficulty adjustment adalah salah satu inovasi terpenting Satoshi yang sering tidak mendapat perhatian cukup. Tanpanya, Bitcoin tidak bisa berfungsi sebagai sistem yang bisa diprediksi: jadwal emisi bisa kacau, propagasi block bisa tidak konsisten, dan seluruh mekanisme konsensus bisa rusak. Kesederhanaan formulanya menyembunyikan betapa fundamentalnya peran yang dimainkan.
Halving adalah salah satu mekanisme paling fundamental dalam Bitcoin: setiap 210.000 block, block reward berkurang tepat setengah. Ini bukan keputusan yang diambil siapapun, melainkan terjadi secara otomatis sesuai aturan yang sudah tertanam dalam protokol sejak genesis block.
Jadwal halving yang sudah pasti
Halving pertama di block #210.000 (November 2012): block reward turun dari 50 BTC ke 25 BTC. Halving kedua di block #420.000 (Juli 2016): turun ke 12,5 BTC. Halving ketiga di block #630.000 (Mei 2020): turun ke 6,25 BTC. Halving keempat di block #840.000 (April 2024): turun ke 3,125 BTC. Total bitcoin yang bisa ada adalah 21 juta, hasil dari penjumlahan deret geometri: 210.000 block × 50 BTC × (1 + 0,5 + 0,25 + ...) = 21 juta BTC.
Security budget: konsep kunci
Security budget adalah total revenue miner dalam satu periode waktu tertentu. Ini adalah ukuran ekonomis dari seberapa mahal serangan terhadap jaringan: semakin tinggi security budget, semakin banyak hashrate yang bisa dibeli miner, dan semakin mahal bagi penyerang untuk mengumpulkan hashrate yang cukup untuk serangan 51%. Security budget terdiri dari block reward dalam BTC dikalikan harga BTC saat itu, ditambah total fee yang dikumpulkan. Saat ini block reward mendominasi sekitar 95-99% dari total security budget.
Pertanyaan terbuka: apakah fee saja cukup?
Saat block reward mendekati nol di abad berikutnya, miner bergantung sepenuhnya pada fee. Apakah fee akan cukup untuk mempertahankan hashrate yang tinggi adalah salah satu pertanyaan paling penting dan genuinely belum terjawab dalam ekonomi Bitcoin. Ada yang berpendapat bahwa seiring adopsi meningkat, volume transaksi dan total fee per block akan meningkat secara alami. Ada pula yang berpendapat bahwa fee per transaksi mungkin tidak cukup tinggi untuk menggantikan block reward, terutama kalau solusi layer-2 mengambil banyak transaksi dari layer-1. Tidak ada yang bisa menjawab ini dengan pasti hari ini karena bergantung pada banyak variabel yang tidak bisa diprediksi.
Yang bisa diketahui sekarang
Proporsi fee dari total security budget perlahan naik setiap halving, bukan karena fee melonjak drastis, tapi karena block reward yang terus berkurang. Apakah tren ini akan berlanjut dengan kecepatan yang cukup adalah pertanyaan yang hanya bisa dijawab oleh waktu dan data masa depan.
Block reward akan mendekati nol sekitar tahun 2140, lebih dari 100 tahun dari sekarang. Banyak aspek ekosistem Bitcoin di 2140 tidak bisa diprediksi dari 2025. Yang pasti: mekanisme halving adalah aturan konsensus yang tidak bisa diubah tanpa persetujuan seluruh jaringan, dan pertanyaan tentang security budget jangka panjang akan terus relevan seiring setiap halving berikutnya.
Solo mining Bitcoin hari ini secara statistik hampir mustahil untuk miner kecil. Dengan hashrate jaringan yang mencapai ratusan exahash per detik, seorang miner dengan satu ASIC modern yang menghasilkan 100 terahash per detik memiliki probabilitas menemukan block sekali setiap ratusan tahun. Mining pool memecahkan masalah ini dengan menggabungkan hashrate banyak miner dan membagi reward secara proporsional.
Bagaimana mining pool bekerja
Pool operator menjalankan full node dan menyiapkan block template. Miner yang bergabung menerima pekerjaan dari pool: mereka diminta mencari hash yang memenuhi target yang jauh lebih mudah dari target jaringan sebenarnya. Hash yang memenuhi target yang lebih mudah ini disebut share sebagai bukti bahwa miner benar-benar bekerja. Ketika salah satu miner menemukan hash yang memenuhi target jaringan yang sebenarnya, pool mendapat block reward dan mendistribusikannya ke semua anggota berdasarkan jumlah share yang masing-masing berkontribusikan.
Skema pembayaran: PPS, PPLNS, dan FPPS
PPS (Pay Per Share) membayar miner untuk setiap share yang valid, terlepas dari apakah pool benar-benar menemukan block atau tidak. Pool menanggung semua risiko variance. Lebih stabil untuk miner tapi pool biasanya mengambil fee lebih tinggi. PPLNS (Pay Per Last N Shares) membayar miner berdasarkan share yang dikontribusikan dalam window tertentu sebelum block ditemukan. Miner ikut menanggung variance, fee pool lebih rendah, dan lebih menguntungkan untuk miner yang konsisten. FPPS (Full Pay Per Share) seperti PPS tapi termasuk estimasi fee transaksi, bukan hanya block reward.
Pool fee dan implikasinya
Pool mengambil persentase kecil dari total reward sebagai biaya operasional, biasanya 1-3%. Total pendapatan jangka panjang antara solo mining dan pool mining secara teori sama jika hashrate sama, tapi pool memberikan pendapatan yang jauh lebih konsisten dan bisa diprediksi karena variance yang jauh lebih rendah.
Implikasi terhadap desentralisasi
Mining pool meningkatkan efisiensi dan stabilitas pendapatan miner kecil, tapi pool operator yang mengelola block template punya pengaruh atas transaksi mana yang dimasukkan ke block. Miner yang bergabung ke pool mendelegasikan keputusan ini ke operator pool. Konsentrasi hashrate di pool-pool besar adalah sesuatu yang diperhatikan komunitas dari perspektif desentralisasi jaringan.
Pool tidak meningkatkan total pendapatan miner secara agregat, total reward dari jaringan tetap sama. Yang dilakukan pool adalah mendistribusikan ulang reward dari pola yang tidak teratur (solo) menjadi aliran yang konsisten dan terprediksi. Ini adalah trade-off antara variance dan sentralisasi sedikit di level block template.
Asumsi dasar Bitcoin adalah bahwa miner yang rasional akan selalu mengikuti protokol karena itulah yang paling menguntungkan. Tapi apakah ini selalu benar? Selfish mining adalah strategi yang menunjukkan bahwa dalam kondisi tertentu, miner bisa mendapat keuntungan lebih besar dengan menyimpang dari protokol honest mining.
Honest mining vs selfish mining
Honest mining adalah strategi default: saat miner menemukan block baru, ia langsung menyebarkannya ke seluruh jaringan. Semua miner mulai bekerja di atas block terbaru secara bersamaan dan probabilitas mendapat reward proporsional dengan hashrate masing-masing. Selfish mining, pertama kali dianalisis secara formal oleh Eyal dan Sirer pada 2013, adalah strategi di mana miner dengan hashrate signifikan menyembunyikan block yang baru ditemukan alih-alih langsung menyebarkannya. Miner terus bekerja secara diam-diam di atas block tersembunyi ini sambil jaringan lain masih bekerja di block lama.
Mengapa selfish mining bisa menguntungkan
Kalau miner selfish bisa menemukan block kedua sebelum jaringan menemukan satu block, ia punya keunggulan dua block. Ketika chain yang lebih panjang akhirnya dipublikasikan, semua pekerjaan jaringan lain menjadi orphan dan miner selfish mendapat lebih dari porsinya secara proporsional. Analisis Eyal dan Sirer menunjukkan bahwa selfish mining bisa menguntungkan jika miner memiliki lebih dari sekitar 33% hashrate jaringan, tergantung konektivitas jaringan.
Mitigasi: propagasi cepat menggeser threshold
Semakin cepat block menyebar ke seluruh jaringan, semakin kecil window bagi miner selfish untuk memanfaatkan keunggulan. Compact blocks dan teknologi propagasi cepat seperti FIBRE secara langsung meningkatkan threshold hashrate yang diperlukan agar selfish mining menguntungkan. Selain itu, pola block yang tidak wajar bisa dideteksi oleh node dan peneliti yang memonitor jaringan, dan pool besar yang ketahuan melakukan selfish mining bisa kehilangan kepercayaan miner yang bergabung.
Fee sniping: bentuk lain dari miner behavior
Fee sniping adalah skenario lain: miner dengan hashrate besar bisa mencoba me-reorganisasi block terakhir untuk mengambil fee transaksi yang sangat tinggi di block tersebut. Ini lebih relevan di masa depan ketika fee menjadi komponen dominan revenue miner. Bitcoin Core sudah mengimplementasikan default locktime untuk mengurangi insentif fee sniping dengan membuat transaksi tidak valid di block sebelum tinggi tertentu.
Selfish mining bukan hanya teori akademis, melainkan pengingat bahwa desain insentif Bitcoin harus terus dianalisis seiring berubahnya kondisi jaringan. Semakin besar proporsi fee dari total revenue, semakin penting untuk memahami bagaimana insentif miner bisa bergeser. Yang menjaga Bitcoin tetap sehat bukan hanya kriptografi, tapi desain ekonomi yang membuat perilaku jujur menjadi strategi yang paling rasional.
Mining Bitcoin di dunia nyata adalah industri yang sangat berbeda dari gambaran sederhana "komputer yang menebak angka." Ia melibatkan hardware khusus yang dirancang untuk satu tujuan, keputusan energi yang sangat ekonomis, distribusi geografis yang mengikuti harga listrik, dan protokol komunikasi yang menentukan siapa yang punya kontrol atas konten block.
ASIC: hardware yang lahir dari satu tujuan
ASIC (Application-Specific Integrated Circuit) adalah chip yang dirancang khusus untuk menjalankan satu operasi: SHA256 double hash secepat mungkin dengan energi sesedikit mungkin. Metrik kunci efisiensi ASIC adalah joule per terahash (J/TH): berapa energi yang dibutuhkan untuk menghasilkan satu terahash. Generasi pertama ASIC Bitcoin sekitar 2013 butuh lebih dari 1.000 J/TH. Hardware modern terbaik saat ini sudah di kisaran 15-20 J/TH, penurunan efisiensi lebih dari 50 kali lipat dalam satu dekade. Miner dengan hardware lama secara ekonomis terpaksa keluar saat harga Bitcoin turun atau difficulty naik, karena biaya listrik melebihi pendapatan.
Energi dan distribusi geografis
Mining Bitcoin adalah kompetisi efisiensi energi. Miner yang bertahan adalah yang bisa mendapat listrik paling murah: pembangkit hydro yang kelebihan kapasitas, energi panas bumi, flare gas dari ladang minyak, atau energi surya di daerah terpencil. Distribusi hashrate global berubah signifikan seiring regulasi. Setelah China melarang mining pada 2021, hashrate yang tadinya dominan di China bermigrasi ke Amerika Serikat, Kazakhstan, Rusia, dan tempat lain dalam hitungan bulan. Ini menunjukkan bahwa mining sangat mobile secara geografis dan jaringan Bitcoin tahan terhadap regulasi lokal karena hashrate bisa berpindah ke yurisdiksi lain.
Stratum protocol: siapa yang mengontrol block template
Stratum adalah protokol komunikasi antara pool server dan mining hardware. Di Stratum v1 yang masih dominan dipakai saat ini, pool operator yang menyusun block template dan menentukan transaksi apa yang dimasukkan. Miner hanya menerima pekerjaan berupa header yang harus di-hash tanpa kontrol atas isi block. Stratum v2 memperkenalkan job negotiation: miner individual bisa memilih transaksi sendiri dan hanya meminta pool untuk memvalidasi pekerjaan mereka. Ini secara signifikan meningkatkan desentralisasi karena kontrol block template tidak lagi terpusat di pool operator.
Ketiga aspek ini saling terkait: efisiensi hardware menentukan di mana miner bisa beroperasi secara ekonomis, distribusi geografis menentukan ketahanan jaringan terhadap regulasi, dan protokol komunikasi menentukan seberapa terdesentralisasi keputusan tentang isi block. Memahami ketiganya bersama-sama memberikan gambaran yang jauh lebih lengkap tentang bagaimana mining Bitcoin benar-benar bekerja di dunia nyata.
Fungsi hash
Fungsi hash mengambil input berukuran apapun dan menghasilkan output berukuran tetap yang tidak bisa diprediksi dan tidak bisa dibalik. Bitcoin memakai SHA256 secara ekstensif: untuk mining (double SHA256 dari block header), untuk address (SHA256 lalu RIPEMD160), dan untuk Merkle tree (double SHA256 dari setiap pasang hash). Sifat terpenting hash untuk Bitcoin adalah collision resistance (tidak ada dua input berbeda yang menghasilkan hash sama dalam waktu yang wajar) dan avalanche effect (satu bit input yang berubah menghasilkan hash yang sama sekali berbeda).
Kriptografi kurva eliptik
Bitcoin memakai kurva secp256k1. Private key adalah angka acak 256-bit. Public key adalah titik di kurva yang dihasilkan dari perkalian private key dengan generator point G. Operasi ini satu arah: dari private key ke public key mudah, sebaliknya tidak mungkin secara komputasi. Address Bitcoin adalah hash dari public key, bukan public key itu sendiri, menambah lapisan perlindungan ekstra.
ECDSA dan Schnorr
ECDSA adalah skema tanda tangan yang dipakai Bitcoin sejak awal. Ia membuktikan bahwa pengirim memiliki private key yang sesuai dengan public key di UTXO yang dibelanjakan, tanpa mengungkapkan private key itu sendiri. Schnorr signature, diaktifkan bersama Taproot di 2021, lebih efisien dan elegan: tanda tangan linear sehingga bisa diagregasi. MuSig memungkinkan n-of-n multisig yang terlihat identik dengan tanda tangan tunggal di chain, meningkatkan privasi dan efisiensi sekaligus.
Dari key ke address
Private key menghasilkan public key via ECC. Public key di-hash menghasilkan address. Setiap generasi address menggunakan format berbeda: P2PKH (legacy, dimulai dengan 1), P2SH (dimulai dengan 3), P2WPKH (bech32, dimulai dengan bc1q), P2TR (bech32m, dimulai dengan bc1p). Format bukan hanya estetika, melainkan ia menentukan Script yang mengunci UTXO dan bagaimana UTXO tersebut bisa dibelanjakan.
HD wallet dan seed phrase
BIP32 mendefinisikan hierarki deterministik: satu seed menghasilkan seluruh pohon key secara deterministik. BIP39 mendefinisikan representasi seed sebagai 12 atau 24 kata. BIP44 mendefinisikan path derivasi standar. Hasilnya: satu seed phrase bisa memulihkan seluruh wallet di wallet software manapun yang mengikuti standar ini.
Angka-angka kunci: private key 256-bit dengan sekitar 10^77 kemungkinan. SHA256 menghasilkan output 32 bytes, RIPEMD160 menghasilkan 20 bytes untuk address legacy. Schnorr signature hanya 64 bytes vs ECDSA yang 71-72 bytes. Seed phrase BIP39: 12 kata setara 128-bit entropy, 24 kata setara 256-bit entropy.
UTXO dan transaksi
UTXO (Unspent Transaction Output) adalah unit dasar kepemilikan Bitcoin. Setiap transaksi mengkonsumsi UTXO lama sebagai input dan menciptakan UTXO baru sebagai output. Tidak ada saldo yang tersimpan di satu tempat, melainkan saldo adalah jumlah semua UTXO yang bisa dibuka dengan key yang kamu miliki. Setiap UTXO dikunci oleh scriptPubKey dan dibuka oleh scriptSig atau witness dari transaksi yang membelanjakannya.
Fee dan timelock
Fee tidak ditulis eksplisit: ia adalah selisih antara total input dan total output. Miner yang memasukkan transaksi ke block mengklaim selisih ini. Fee rate diukur dalam satoshi per virtual byte karena transaksi berbeda ukurannya. Timelocks memungkinkan transaksi yang hanya bisa dieksekusi di masa depan. nLocktime bekerja di level transaksi (waktu absolut), nSequence bekerja di level input (waktu relatif). OP_CLTV dan OP_CSV memindahkan kondisi ini ke dalam Script itu sendiri sehingga berlaku untuk siapapun yang mencoba membelanjakan.
Bitcoin Script
Script adalah bahasa stack-based yang menentukan kondisi pengeluaran UTXO. P2PKH meminta tanda tangan dan public key. P2SH menyembunyikan script sesungguhnya di balik hash. P2WPKH memindahkan data tanda tangan ke witness field. P2TR memungkinkan key path spending yang terlihat seperti tanda tangan biasa, atau script path spending yang mengungkap salah satu dari banyak kondisi tersembunyi via MAST. Tapscript berjalan di dalam path Taproot dengan OP_CHECKSIGADD untuk multisig yang lebih efisien dan OP_SUCCESS untuk upgrade di masa depan. Miniscript adalah bahasa terstruktur di atas Script yang memungkinkan analisis otomatis dan komposisi script yang aman.
PSBT
PSBT (BIP 174) memisahkan peran penyusun transaksi dan penandatangan, memungkinkan workflow multisig dan hardware wallet yang lebih aman. Wallet software menyusun transaksi dan mengekspornya sebagai file PSBT. Hardware wallet membaca, memverifikasi, menandatangani, dan mengembalikannya. Setelah semua tanda tangan terkumpul, PSBT difinalisasi dan di-broadcast.
Angka-angka kunci: 1 sat/vByte adalah fee minimum relay default. SegWit memberi diskon: witness data dihitung 1/4 weight. P2PKH sekitar 148 vByte per input, P2WPKH sekitar 68 vByte, P2TR key path sekitar 57,5 vByte (paling efisien). Batas data OP_RETURN adalah relay policy per node, bukan aturan konsensus (konvensi lama: 80 bytes).
Proof of Work
Miner berulang kali mengubah nonce di block header sampai hash block memenuhi target difficulty. Karena hash tidak bisa diprediksi, tidak ada jalan pintas. Seluruh jaringan bisa memverifikasi bahwa pekerjaan ini dilakukan hanya dengan satu operasi hash, sementara miner harus mencoba miliaran kemungkinan untuk menemukannya.
Difficulty adjustment
Setiap 2.016 block, jaringan menghitung berapa lama block terakhir diselesaikan, membandingkan dengan target 20.160 menit, lalu menyesuaikan secara proporsional. Batas perubahan 4× per epoch mencegah destabilisasi dari lonjakan hashrate yang ekstrem. Setiap node menghitung adjustment secara independen dan deterministik, tidak ada koordinasi.
Halving dan security budget
Halving terjadi setiap 210.000 block, block reward berkurang tepat setengah. Jadwal ini menghasilkan total suplai maksimum 21 juta BTC sebagai deret geometri. Block reward saat ini 3,125 BTC setelah halving keempat April 2024. Security budget adalah total revenue miner yang menentukan seberapa mahal serangan. Pertanyaan terbuka: apakah fee saja cukup saat block reward mendekati nol sekitar tahun 2140.
Mining pool dan selfish mining
Pool menggabungkan hashrate banyak miner untuk mengurangi variance pendapatan. PPS membayar per share valid terlepas dari apakah pool menemukan block. PPLNS membayar berdasarkan share dalam window terakhir, miner ikut menanggung variance. FPPS seperti PPS tapi termasuk estimasi fee transaksi. Selfish mining adalah strategi menyembunyikan block yang ditemukan untuk mendapat keunggulan chain, menguntungkan di atas threshold sekitar 33% hashrate, dibatasi oleh propagasi cepat, deteksi, dan risiko reputasi.
Angka-angka kunci: target block time 10 menit. Epoch difficulty setiap 2.016 block, sekitar 2 minggu. Batas adjustment maksimum 4× per epoch. Total suplai 21.000.000 BTC. Halving setiap 210.000 block, sekitar 4 tahun. Threshold selfish mining sekitar 33% hashrate jaringan.
P2P dan penemuan peer
Jaringan Bitcoin adalah P2P tanpa server pusat. Setiap node terhubung ke sejumlah peer dan meneruskan transaksi dan block ke peer lain. Penemuan peer dimulai dari DNS seeds hardcoded, kemudian berkembang melalui pesan addr dan addrv2. Koneksi default: 8 outbound, hingga 125 total. Handshake antara dua node dimulai dengan pesan version dan verack.
Propagasi yang efisien
Compact blocks (BIP 152) mengurangi bandwidth propagasi block dengan hanya mengirim shortID transaksi, sehingga node yang sudah punya transaksi di mempool tidak perlu download ulang. Erlay (BIP 330) menggunakan set reconciliation untuk propagasi transaksi yang lebih efisien, mengurangi bandwidth hingga 40%. Dandelion (BIP 156) meningkatkan privasi propagasi dengan fase stem (satu jalur) sebelum fase fluff (broadcast normal).
Full node dan sync
Full node mendownload dan memverifikasi seluruh blockchain dari genesis. IBD menggunakan headers-first: download semua header dulu, validasi chain of work, baru download block. assumevalid melewati verifikasi script untuk block lama yang sudah diketahui valid. assumeUTXO memungkinkan node sync dari snapshot UTXO set yang sudah diverifikasi, tanpa mengorbankan security model jangka panjang.
SPV dan light client
SPV hanya menyimpan block header dan memverifikasi transaksi via Merkle proof. Bloom filter (BIP 37) adalah cara lama yang bocorkan privasi ke server. Compact block filter (BIP 157/158) adalah solusi modern: filter per block yang didownload dan diperiksa secara lokal tanpa memberitahu server transaksi mana yang dicari.
Angka-angka kunci: block header 80 bytes. Seluruh header chain saat ini sekitar 70 MB. Koneksi outbound umumnya 8 full-relay; implementasi modern menambah koneksi khusus block-relay. Compact block filter BIP 158 berukuran belasan KB untuk block penuh modern — tetap jauh lebih ringan daripada mengunduh block utuh. Erlay menghemat bandwidth sekitar 40% vs flooding biasa. Coinbase maturity 100 block sebelum bisa dibelanjakan.
Lightning Network
Lightning Network adalah jaringan payment channel di atas Bitcoin. Dua pihak mengunci dana di multisig on-chain (funding transaction), lalu bertukar commitment transaction off-chain yang memperbarui saldo tanpa broadcast ke jaringan. Channel bisa ditutup kooperatif (langsung final) atau unilateral (butuh menunggu CSV timelock untuk memberi waktu pihak lain merespons jika ada kecurangan).
HTLC dan routing
HTLC (Hash Time Locked Contract) memungkinkan pembayaran multi-hop: setiap hop hanya meneruskan pembayaran kalau bisa mengungkap preimage dari hash tertentu, kalau tidak diklaim dalam waktu tertentu dana kembali. Routing di Lightning adalah source routing dengan onion encryption: pengirim menentukan seluruh jalur, setiap hop hanya tahu pendahulu dan penerusnya.
Privacy on-chain
Privacy di Bitcoin sulit karena blockchain publik dan transparan. CoinJoin menggabungkan input dari banyak pengguna dalam satu transaksi besar dengan output berukuran sama, memutus link antara input dan output tanpa kepercayaan. Payjoin menyertakan input dari penerima sehingga analisis chain tidak bisa dengan mudah mengidentifikasi siapa pengirim dan berapa yang dikirim. Silent Payments (BIP 352) memungkinkan alamat statis yang menghasilkan address unik setiap pembayaran tanpa koordinasi, menghilangkan address reuse.
Angka-angka kunci: Lightning channel adalah 2-of-2 multisig on-chain. HTLC timeout biasanya 40-144 block per hop. Onion routing maksimal 20 hop. CoinJoin output semua berukuran sama untuk anonimity set yang efektif. Silent Payments: satu address statis menghasilkan infinite address unik per pembayar.
BIP dan proses perubahan
BIP (Bitcoin Improvement Proposal) adalah dokumen formal yang mendeskripsikan proposal perubahan. Siapapun bisa mengajukan BIP, tapi tidak ada yang bisa memaksanya diimplementasikan. Perubahan yang tidak mendapat dukungan luas dari pengguna, developer, miner, dan bisnis tidak akan berhasil diaktifkan. Ini adalah fitur, bukan bug.
Soft fork dan hard fork
Soft fork adalah perubahan yang memperketat aturan konsensus, di mana node lama tetap menerima block baru sebagai valid. Hard fork memperlunak aturan, sehingga node lama akan menolak block baru dan jaringan terbelah. Bitcoin hanya pernah berhasil melakukan soft fork sejak 2013. SegWit diaktifkan 2017 setelah proses panjang via UASF. Taproot diaktifkan 2021 dengan Speedy Trial, lebih mulus karena ada konsensus luas dari awal.
Pertanyaan terbuka
Apakah fee saja cukup untuk security budget jangka panjang saat block reward mendekati nol? Tidak ada yang bisa menjawab ini dengan pasti, bergantung pada adopsi, harga, volume transaksi, dan struktur ekosistem di masa depan. Proposal aktif yang sedang didiskusikan: OP_CTV untuk covenant sederhana, OP_VAULT untuk self-custody yang lebih aman, ANYPREVOUT untuk eltoo sebagai alternatif Lightning yang lebih sederhana. Semua ini belum diaktifkan.
Apa yang tidak berubah
Di tengah semua perdebatan tentang masa depan, beberapa hal sudah settled: total suplai 21 juta BTC tidak bisa diubah tanpa hard fork yang tidak akan dapat dukungan. Proof of Work adalah mekanisme konsensus yang dipertahankan. Desentralisasi jaringan adalah nilai yang dijaga bersama. Perubahan harus kompatibel ke belakang atau tidak akan terjadi.
Angka-angka kunci: BIP pertama adalah BIP 1 oleh Amir Taaki (2011). SegWit aktif di block #481.824 (Agustus 2017). Taproot aktif di block #709.632 (November 2021). Block reward mencapai nol sekitar tahun 2140 sebagai konsekuensi matematis dari halving schedule yang sudah ditentukan sejak genesis block.
Kebanyakan alat SHA-256 cuma menerima teks lalu memuntahkan hash. Itu tidak mengajarkan apa pun. Di sini kita buka panci masaknya: bagaimana pesanmu dibungkus, dipecah jadi 64 kata, lalu diaduk 64 kali sampai tidak ada jejak asalnya yang tersisa.
SHA-256 hanya bisa mengolah potongan tepat 512 bit. Pesan yang panjangnya bukan kelipatan itu harus dibungkus lebih dulu, dan cara membungkusnya bukan sekadar diisi nol.
Tiga bagian, dan urutannya wajib. Pertama pesan aslinya. Lalu satu bit 1 sebagai penanda batas, yang dalam byte tampil sebagai 80. Lalu nol sebanyak yang dibutuhkan. Lalu delapan byte terakhir berisi panjang pesan asli dalam bit. Delapan byte terakhir itulah yang membuat dua pesan berbeda panjang tidak akan pernah menghasilkan blok yang sama, bahkan kalau isinya mirip.
Satu blok 512 bit dibaca sebagai 16 kata berukuran 32 bit. Tapi ronde pengadukannya ada 64, jadi 16 kata itu harus diperbanyak jadi 64 dulu.
Kata ke-16 dan seterusnya tidak diambil dari pesan. Ia dihitung dari empat kata sebelumnya, dengan dua di antaranya diputar dan digeser dulu. Efeknya berlapis: kata ke-63 sudah mengandung jejak dari hampir semua kata sebelumnya. Ini alasan pertama kenapa mengubah satu bit di pesan bisa merembet ke mana-mana.
Ini bagian yang biasanya bikin orang menyerah. Delapan register bernama a sampai h, diaduk 64 kali. Terlihat rumit sampai kamu memperhatikan satu hal.
Perhatikan kolomnya saat kamu melangkah. Enam dari delapan register cuma bergeser turun: b jadi c, c jadi d, dan seterusnya. Mereka tidak dihitung apa-apa, cuma mengantre. Yang benar-benar dihitung hanya a dan e. Jadi SHA-256 bukan 64 operasi rumit, melainkan satu operasi sederhana yang diulang 64 kali di atas antrean yang terus bergerak.
Sekarang bagian yang paling sering diklaim tapi jarang ditunjukkan. Dua pesan yang cuma beda satu bit, dijalankan berdampingan, lalu kita hitung berapa bit yang berbeda di tiap ronde.
Di ronde nol angkanya nol, dan itu bukan salah hitung: pengadukan belum dimulai, jadi kedelapan register kedua pesan masih persis sama. Yang berbeda baru satu bit di pesannya. Sekarang majukan rondenya. Dalam tiga ronde saja perbedaannya sudah melewati seperempat, dan sekitar ronde dua belas ia mencapai separuh lalu bertahan di sana sampai akhir. Separuh justru angka yang kita mau, karena artinya keluarannya tidak bisa dibedakan dari acak. Satu bit tadi tidak menular pelan-pelan, ia meledak.
SHA-256 memakai delapan nilai awal dan 64 konstanta. Angka-angka itu bukan dipilih seseorang. Kedelapan nilai awal adalah bagian pecahan dari akar kuadrat delapan bilangan prima pertama, dan 64 konstantanya dari akar pangkat tiga 64 prima pertama. Ini disebut nothing up my sleeve: siapa pun bisa menghitung ulang sendiri dan memastikan tidak ada pintu belakang yang disembunyikan di dalam angkanya.
Rumusnya cuma satu baris: P = k × G. Tapi di dalamnya ada aritmetika jam, kurva yang jumlah titiknya terbatas, dan penjumlahan yang bukan penjumlahan biasa. Kita bongkar berurutan, dan setiap angka di sini bisa kamu periksa sendiri pakai kalkulator.
Semua aritmetika di kurva Bitcoin dibungkus modulo sebuah bilangan prima. Kalau istilah itu asing, seluruh sisanya akan terasa seperti sihir. Jadi kita mulai dari sini.
Mod itu sisa bagi, tidak lebih. Bayangkan jam yang cuma punya 17 angka, 0 sampai 16. Hitung sampai 17, kamu kembali ke 0. Hitung sampai 36, kamu berputar dua kali penuh lalu berhenti di 2. Itulah arti 36 mod 17 = 2. Seluruh kurva Bitcoin berdiri di atas gagasan sesederhana ini, bedanya jamnya punya sekitar 10⁷⁷ angka.
Kurvanya punya satu persamaan: y² = x³ + 7. Sebuah titik ada di kurva kalau kedua sisi persamaan itu bernilai sama setelah dibungkus mod 17. Jangan percaya saya, hitung sendiri.
Geser ke titik yang bukan anggota dan lihat kedua sisinya berbeda. Inilah satu-satunya syarat keanggotaan. Tidak ada daftar rahasia dan tidak ada otoritas yang menentukan: sebuah titik ada di kurva kalau dan hanya kalau persamaannya terpenuhi. Dari 289 kemungkinan pasangan koordinat, hanya 17 yang lolos.
Sekarang inti rumusnya. P = k × G bukan perkalian biasa. Artinya menambahkan titik G ke dirinya sendiri sebanyak k kali. Naik setapak demi setapak, dan rumus penjumlahannya ikut ditampilkan dengan angka yang sedang berjalan.
Perhatikan bahwa penjumlahan titik punya rumus sendiri, dan rumusnya berbeda tergantung apakah kedua titiknya sama atau tidak. Yang dihitung lebih dulu selalu kemiringan garis λ. Setelah λ didapat, koordinat hasilnya mengikuti dua baris terakhir. Ini rumus yang sama persis dipakai secp256k1, cuma angkanya di sini kecil. Perhatikan juga hasilnya selalu jatuh kembali di kurva, tidak pernah keluar.
Naik setapak demi setapak baik-baik saja untuk k = 17. Untuk k sebesar milik Bitcoin, tangga itu butuh lebih banyak langkah daripada jumlah atom di alam semesta. Jadi dipakai jalan pintas.
Triknya membaca k dalam biner. Tiap bit berarti satu penggandaan, dan bit yang bernilai 1 berarti satu penjumlahan tambahan. Hasilnya sama persis dengan menaiki tangga, tapi jumlah langkahnya bukan k melainkan sekitar dua kali jumlah bitnya. Untuk k sebesar 256 bit, itu sekitar 384 langkah, selesai dalam sepersekian detik.
Semua bahannya sudah ada. Sekarang rangkaiannya bisa dibaca sebagai satu kalimat.
Rantainya begini. k adalah private key-mu, satu angka yang cuma kamu tahu. P adalah public key, hasil menaiki tangga sebanyak k langkah, dan boleh dilihat siapa saja. Menghitung maju dari k ke P mudah, dan kamu baru saja melakukannya. Menghitung mundur dari P ke k menuntut mencoba satu per satu. Di kurva mainan ini cukup 17 percobaan, dan itu sebabnya kurva ini tidak mengamankan apa pun. Di secp256k1 angkanya 78 digit. Dari ketimpangan itulah lahir kemampuan membuktikan kamu tahu k tanpa pernah menyebutkannya, dan itu yang dibedah di C3.
Semua yang barusan kamu lakukan berlaku persis sama di sini. Yang berubah hanya ukuran angkanya, dan itu satu-satunya alasan kenapa yang tadi gampang kamu balik menjadi mustahil dibalik.
Di 4.3 kamu sudah menandatangani dan memverifikasi. Tapi apa sebenarnya isi tanda tangan itu? Dua angka, r dan s. Di sini kita hitung keduanya dengan tangan di kurva mainan yang sama seperti C2, lalu kita pakai untuk membongkar private key dari pemiliknya. Kurvanya sedikit lebih besar dari C2 (modulo 43, bukan 17) karena ECDSA menuntut jumlah titiknya bilangan prima.
Tanda tangan ECDSA bukan benda misterius. Ia sepasang bilangan. Yang pertama, r, berasal dari sebuah titik acak di kurva. Yang kedua, s, mengikat titik acak itu dengan pesanmu dan private key-mu.
Perhatikan bahwa k tidak pernah ikut dikirim. Ia dipakai lalu dibuang. Public key juga tidak masuk ke dalam tanda tangan. Yang berpindah cuma dua angka, dan dari dua angka itu siapa pun bisa memeriksa tanpa pernah tahu private key-nya.
Verifikasi tidak membalik perhitungan tadi. Ia menempuh jalur berbeda yang, kalau semua angkanya benar, berakhir di titik yang sama.
Yang dibandingkan adalah koordinat x dari titik hasil dengan r yang dikirim. Kalau sama, tanda tangannya sah. Tidak ada tahap yang membutuhkan private key, dan tidak ada tahap yang membocorkannya. Inilah ketimpangan yang jadi dasar seluruh kepemilikan Bitcoin: membuat menuntut rahasia, memeriksa tidak.
Sekarang bagian yang di 4.3 cuma bisa diperingatkan. Kita tandatangani dua pesan berbeda dengan k yang sama, lalu hitung private key-nya dari kedua tanda tangan itu. Bukan menebak, menghitung.
Perhatikan alurnya. Karena k sama, r-nya juga sama, dan itulah penanda yang bisa dilihat siapa pun di blockchain. Dari situ k terpulihkan lewat selisihnya, dan begitu k diketahui, private key tinggal satu langkah aljabar. Tidak ada penebakan sama sekali. Inilah alasan wallet modern tidak lagi mengacak k, melainkan menurunkannya secara deterministik dari private key dan pesan, seperti disebut di 4.3.
Schnorr memakai bahan yang sama tapi menyusunnya berbeda. Perbedaannya kelihatan sepele di rumus, tapi akibatnya besar.
R = k×G
r = x(R)
s = (z + r·d) / k
R = k×G
e = hash(R, Q, z)
s = k + e·d
Di ECDSA, s memuat pembagian oleh k. Pembagian itulah yang membuat rumusnya tidak linear, dan ketidaklinearan itu yang menghalangi penggabungan tanda tangan. Schnorr menggantinya dengan penjumlahan biasa. Karena semuanya linear, dua tanda tangan Schnorr bisa dijumlahkan menjadi satu yang tetap sah. Itulah dasar key aggregation yang kamu lihat di 4.4, dan alasannya ada di satu operasi ini.
Dompet modern tidak menyimpan ribuan private key. Ia menyimpan satu benih, lalu menurunkan sisanya sesuai kebutuhan. Di sini seluruh rantainya dihitung sungguhan, dan diperiksa terhadap vektor uji resmi BIP32. Di ujungnya ada peragaan kenapa tanda kutip kecil pada jalur turunan itu bukan hiasan.
Benih dari BIP39 dimasukkan ke HMAC-SHA512, dan hasilnya yang 64 byte dibelah tepat di tengah.
Perhatikan pembelahannya. Separuh kiri jadi private key induk, separuh kanan jadi chain code. Chain code bukan kunci dan tidak bisa membelanjakan apa pun, tapi ia wajib ada untuk menurunkan anak. Itu sebabnya membocorkan chain code bersama satu public key sudah cukup berbahaya, seperti yang akan kita lihat di bagian empat.
Anak diturunkan dengan memasukkan chain code, kunci induk, dan nomor urut ke HMAC-SHA512 lagi. Geser nomornya dan perhatikan yang berubah.
Kuncinya di baris terakhir: kunci anak sama dengan IL ditambah kunci induk, dijumlahkan modulo n. Penjumlahan itu yang membuat seluruh sistem bekerja, dan sekaligus yang jadi celahnya. Perhatikan juga bahwa tiap anak punya chain code sendiri, jadi turunan bisa berlanjut ke cucu, cicit, dan seterusnya tanpa batas.
Ada dua cara menurunkan anak, dan bedanya cuma pada apa yang dimasukkan ke HMAC. Perhatikan baris masukan pada kedua kolom.
Yang biasa memasukkan public key induk, sedangkan yang hardened memasukkan private key induk. Akibatnya besar. Karena yang hardened butuh private key, ia tidak bisa diturunkan dari xpub. Itu terdengar seperti kekurangan, tapi justru itulah gunanya, dan bagian berikutnya menunjukkan alasannya.
Sekarang peragaannya. Bayangkan seseorang punya xpub kamu, misalnya karena kamu berikan ke akuntan agar bisa memantau saldo. Lalu satu private key anak non-hardened bocor. Tekan tombolnya.
Perhatikan apa yang barusan terjadi. Karena kunci anak sama dengan IL ditambah kunci induk, dan IL bisa dihitung siapa saja yang punya xpub, maka kunci induk tinggal dikurangkan: induk = anak dikurangi IL. Satu kunci anak yang bocor merobohkan seluruh dompet, termasuk semua cabang lain yang tidak pernah bocor. Untuk turunan hardened serangan ini mustahil, karena IL-nya butuh private key induk yang justru sedang dicari. Inilah alasan jalur seperti m/84h/0h/0h memakai tanda kutip di tiga tingkat pertama.
Sekarang jalur seperti m/84h/0h/0h/0/0 bisa dibaca. m adalah kunci induk dari benih. 84h menandai standar address yang dipakai, dalam hal ini bc1q seperti di 6.4. 0h berikutnya menandai Bitcoin, bukan koin lain. 0h ketiga adalah nomor akun. Tiga tingkat pertama semuanya hardened, dan sekarang kamu tahu kenapa. Dua angka terakhir tanpa tanda kutip: 0 berarti cabang penerimaan, dan angka terakhir nomor urut address. Keduanya sengaja tidak hardened supaya sebuah xpub bisa dipakai memantau saldo tanpa bisa membelanjakan, seperti dibahas di 2.3.
Seed phrase terlihat seperti daftar kata bahasa Inggris yang dipilih sembarangan. Sebenarnya tidak ada satu pun kata yang dipilih. Semuanya hasil pembacaan ulang deretan bit, sebelas bit per kata, dan salah satu kelompok bit itu bukan keacakan melainkan checksum. Semua yang di halaman ini dihitung sungguhan.
Yang dihasilkan wallet pertama kali bukan kata, melainkan sederet bit acak. Untuk seed phrase 12 kata, panjangnya 128 bit.
Perhatikan bahwa 128 bit ini bukan hasil perhitungan apa pun. Ia murni keacakan, persis yang kita bahas di 2.4. Semua yang terjadi setelah ini cuma mengubah cara membacanya, bukan menambah rahasia baru.
Sebelum dipotong jadi kata, deretan bit itu ditambahi checksum. Sumbernya fungsi hash yang sudah kamu bedah di C1.
Aturannya sederhana: panjang checksum sama dengan panjang entropi dibagi 32. Untuk 128 bit entropi berarti 4 bit checksum, untuk 256 bit berarti 8 bit. Bit itu diambil dari paling depan hasil SHA-256, sisanya dibuang. Setelah ditempel, totalnya jadi 132 bit, dan angka itu penting: 132 habis dibagi 11.
Sekarang 132 bit itu dipotong jadi dua belas kelompok, masing-masing sebelas bit. Tiap kelompok dibaca sebagai angka, dan angka itu nomor urut di daftar kata resmi.
| Nomor | Sebelas bit | # | Kata |
|---|
Kenapa sebelas bit? Karena dua pangkat sebelas sama dengan 2048, dan daftar kata BIP39 berisi tepat 2048 kata. Bukan kebetulan, itu dirancang begitu. Perhatikan juga kelompok terakhir: sebagian bitnya berasal dari entropi, sebagian dari checksum. Jadi kata terakhir tidak sepenuhnya acak, dan itulah yang membuat salah ketik bisa tertangkap.
Karena kata terakhir memuat checksum, mengubah kata mana pun biasanya membuat seluruh rangkaian jadi tidak sah. Coba sendiri.
Peluang sebuah perubahan acak kebetulan tetap sah cuma sekitar satu berbanding enam belas untuk seed 12 kata, karena checksum-nya empat bit. Kecil, tapi bukan nol, jadi checksum BIP39 adalah jaring pengaman terhadap salah ketik, bukan jaminan mutlak. Untuk seed 24 kata checksumnya delapan bit, jadi peluangnya turun ke satu berbanding 256. Dan ada satu detail kecil yang berguna: empat huruf pertama tiap kata di daftar itu unik, jadi kamu sebenarnya cukup mengetik empat huruf pertama.
Seed phrase sering disebut sebagai "terjemahan" dari private key. Itu terbalik. Yang lahir duluan adalah entropi, lalu darinya diturunkan seed phrase maupun private key, seperti sudah diluruskan di 2.4. Dan kata-katanya bukan penyandian rahasia: siapa pun yang tahu dua belas kata itu bisa menghitung ulang seluruh dompetmu, karena daftar katanya publik dan aturannya publik. Kata-kata itu bukan kunci terkunci, ia cuma cara menuliskan bit supaya manusia bisa menyalinnya tanpa salah.
Bab 6.6 menjelaskan Taproot punya dua jalur pembelanjaan, tapi tidak pernah menunjukkan bagaimana keduanya bisa hidup di satu titik yang sama. Jawabannya satu operasi penjumlahan, dan satu kesamaan aljabar yang bikin semuanya jalan. Kurvanya sama dengan C2, jadi tiap angka bisa kamu periksa.
Semuanya berangkat dari sepasang kunci biasa, persis seperti di C2. Belum ada Taproot di sini.
Titik P ini disebut internal key. Kalau berhenti di sini, ia cuma public key biasa. Yang membuatnya Taproot adalah langkah berikutnya.
Sekarang aturan pembelanjaan cadangan, dalam bentuk merkle root dari pohon script, ditempelkan ke kunci itu. Bukan disimpan di sebelahnya, tapi dilebur ke dalamnya.
Perhatikan urutannya. Angka t dihitung dari hash atas P dan merkle root, jadi ia terikat pada keduanya sekaligus: ganti script-nya, t berubah; ganti kuncinya, t juga berubah. Lalu Q = P + t×G, dan Q inilah yang muncul di blockchain sebagai address bc1p. Perhatikan juga bahwa merkle root tidak terlihat di Q. Yang tercatat cuma satu titik, dan dari titik itu tidak ada yang bisa menebak ada aturan apa di belakangnya, atau bahkan apakah ada aturan sama sekali.
Ada satu sifat yang gampang terlewat tapi menanggung seluruh rancangan Taproot. Kita hitung dua jalur berbeda dan bandingkan hasilnya.
Kedua jalur selalu berakhir di titik yang sama, dan itu bukan kebetulan. Karena P sama dengan d×G, maka P + t×G sama dengan (d+t)×G. Artinya pemilik kunci tidak perlu perlakuan istimewa apa pun: ia cukup menandatangani memakai d + t sebagai private key barunya, dan tanda tangannya akan sah terhadap Q. Tidak ada script yang dijalankan, tidak ada pohon yang dibuka, tidak ada bukti yang dilampirkan. Inilah key path spend.
Sekarang perbandingan yang di 6.6 dijelaskan lewat kata, tapi di sini ditunjukkan lewat isi transaksinya.
Tanda tangan saja
Terlihat seperti pembayaran biasa
Script + bukti merkle + tanda tangan
Aturan yang dipakai jadi terlihat publik
Perbedaan ukurannya bukan sekadar hemat ongkos. Karena key path spend cuma berisi satu tanda tangan, ia terlihat persis sama dengan pembayaran biasa dari address Taproot mana pun. Pengamat tidak bisa tahu apakah di belakang kunci itu ada pohon script berisi multisig, timelock, atau tidak ada apa-apa sama sekali. Aturan yang rumit tetap ada dan tetap bisa dipakai, tapi selama semua pihak sepakat, ia tidak pernah menyentuh blockchain. Inilah alasan Taproot disebut menguntungkan privasi, bukan cuma ukuran.
Semua di halaman ini memakai modulo 17 dengan ordo 18 supaya angkanya bisa kamu ikuti. Ada dua hal yang berbeda di secp256k1 sungguhan. Pertama, t dihitung dengan tagged hash, yaitu SHA-256 yang diawali penanda "TapTweak" dua kali, supaya hash untuk keperluan berbeda tidak pernah bisa tertukar. Kedua, ordonya bilangan prima raksasa, sehingga kasus d+t bernilai nol yang kadang muncul di sini praktis mustahil terjadi. Selebihnya, rumus dan alurnya identik.
Buku ini sudah punya dua peraga Merkle, di 4.5 dan 17.2. Yang belum pernah disebut di mana pun: apa yang terjadi kalau jumlah simpul di sebuah tingkat ternyata ganjil. Jawabannya satu aturan sederhana, dan aturan itu pernah melahirkan celah nyata yang hampir menghentikan jaringan.
Pohon Merkle memasangkan simpul dua-dua. Tapi jumlah transaksi dalam satu block tidak selalu genap. Geser jumlahnya dan perhatikan tingkat yang ganjil.
Aturannya: kalau sebuah tingkat berisi jumlah ganjil, simpul terakhir digandakan lalu dipasangkan dengan dirinya sendiri. Bukan diisi nol, bukan dibiarkan naik sendiri. Digandakan. Itu keputusan rancangan yang terlihat wajar dan tidak berbahaya, dan selama tiga tahun memang begitu.
Perhatikan baik-baik. Kalau simpul terakhir digandakan, maka sebuah daftar berisi tiga item akan diperlakukan persis sama dengan daftar berisi empat item yang dua terakhirnya kembar.
Dua daftar transaksi yang berbeda menghasilkan merkle root yang identik. Ini bukan tabrakan hash, karena SHA-256 tidak dipatahkan sama sekali. Yang cacat adalah aturan penyusunan pohonnya. Tercatat sebagai CVE-2012-2459, dan akibatnya berbahaya: penyerang bisa mengambil block yang sah, menggandakan transaksi terakhirnya, lalu menyiarkan versi palsu itu. Node yang menerimanya akan menolaknya karena transaksi kembar jelas tidak sah, tapi karena merkle root-nya cocok dengan yang asli, node itu menandai block aslinya sebagai tidak sah secara permanen dan menolak menerima versi yang benar. Jaringan bisa terbelah tanpa satu pun hash dipecahkan.
Block dengan transaksi kembar diterima, lalu ditolak karena isinya tidak sah
Block dengan transaksi kembar ditolak lebih dulu, sebelum root dihitung
Tambalannya tidak mengubah cara pohon disusun, karena itu akan jadi hard fork yang membatalkan seluruh block lama. Yang dilakukan lebih sederhana: node sekarang menolak block yang punya transaksi kembar persis, sebelum merkle root-nya sempat dihitung. Cacatnya masih ada di dalam rancangan pohonnya, tapi jalan menuju cacat itu ditutup. Ini pola yang sama seperti CVE-2018-17144 di 14.1: kalau aturan konsensus tidak bisa diubah, yang diubah adalah apa yang diterima sebelum aturan itu dijalankan. Dan seperti insiden itu juga, pelajarannya bukan soal kriptografinya, melainkan soal asumsi yang tidak pernah dituliskan. Tidak ada yang pernah menuliskan bahwa dua daftar berbeda harus menghasilkan root berbeda. Itu dianggap sudah pasti.
Tiga kelompok sebelumnya menjawab bagaimana Bitcoin bekerja. Yang ini menjawab pertanyaan lain: apa artinya buat orang yang memegangnya. Semua di halaman ini hitungan murni, tidak ada data harga yang diambil dari mana pun, dan tidak ada ramalan.
Satu bitcoin dipecah jadi 100 juta satoshi. Angka itu terasa besar sampai kamu bandingkan dengan jumlah manusia.
Perhatikan angka terakhir. Kalau seluruh 21 juta bitcoin dibagi rata ke setiap orang di bumi, masing-masing dapat sekitar 262 ribu satoshi, atau 0,0026 BTC. Itu batas atasnya, dan itu pun mengandaikan tidak ada satu pun yang hilang. Padahal jutaan sudah hilang selamanya, seperti dibahas di 11.2. Berpikir dalam satoshi mengubah pertanyaan dari "berapa bitcoin yang bisa saya punya" menjadi "berapa bagian dari yang pernah ada".
Setiap sekitar empat tahun, jumlah bitcoin baru per block dipotong setengah. Yang jarang dihitung orang adalah akibatnya pada laju harian.
| Era halving | Reward per block | Bitcoin baru per hari | Perkiraan tahun | Total beredar | Sisa belum ditambang |
|---|
Angka harian itu yang jarang disebut. Setiap halving, jumlah bitcoin baru yang masuk ke dunia tiap hari dipotong separuh, dan itu terjadi dalam satu block, bukan bertahap. Perhatikan juga kolom terakhir: makin lama, makin kecil bagian yang tersisa untuk ditambang. Seluruh jadwal ini sudah ditetapkan sejak 2009 dan tidak bergantung pada apa pun, termasuk harga.
DCA artinya membeli jumlah rupiah yang sama secara rutin, apa pun harganya. Yang menarik bukan hasilnya, melainkan cara kerjanya, dan itu bisa dihitung tanpa tahu harga masa depan.
| Periode | Harga | Satoshi didapat |
|---|
Inilah seluruh mekanismenya: karena jumlah rupiah tetap, harga yang lebih rendah otomatis membeli lebih banyak satoshi. Jadi rata-rata harga belimu selalu lebih rendah atau sama dengan rata-rata harga periodenya, tidak pernah lebih tinggi. Itu sifat matematis, bukan ramalan. Yang tidak dijanjikan siapa pun: apakah harganya naik. DCA mengurangi risiko salah waktu, ia tidak menghapus risiko harga.
Bagian 3 menunjukkan angkanya. Bagian ini menunjukkan kenapa itu bukan kebetulan, dan kenapa ia berlaku pada pola harga apa pun.
Rata-rata harga belimu adalah total uang dibagi total satoshi, dan itu yang disebut rata-rata harmonik. Rata-rata pasar adalah rata-rata biasa dari harga tiap periode. Dalam matematika, rata-rata harmonik tidak pernah lebih besar dari rata-rata biasa, dan keduanya hanya sama persis kalau seluruh harganya identik. Itulah sebabnya kolom selisih di atas tidak pernah negatif, pola harga apa pun yang kamu pilih. Coba pola datar dan lihat selisihnya jadi nol.
Bab 6 mengajarkan lima jenis address dan cara kerjanya. Yang belum pernah dijawab: mana yang benar-benar dipakai dunia. Jawabannya ternyata bergantung pada bagaimana kamu menghitung, dan dua cara menghitung memberi kesimpulan yang bertolak belakang.
Cara paling umum menghitung sebaran adalah menghitung ada berapa UTXO dari tiap jenis. Hasilnya begini.
Kejutan pertama: Taproot yang paling banyak, padahal ia paling baru dan aktif sejak 2021 saja. P2PKH yang sudah ada sejak genesis block berada di urutan kedua. Dan P2PK, format paling awal yang dipakai Satoshi sendiri, praktis lenyap dengan 0,03 persen. Tapi tahan dulu sebelum menyimpulkan apa pun, karena cara menghitung ini menyembunyikan sesuatu.
Sekarang hitung dengan cara lain: berapa banyak bitcoin yang sebenarnya tersimpan di tiap jenis. Dua angka di bawah ini cukup untuk meruntuhkan kesimpulan tadi.
| Jenis | Bagian jumlah | Bagian nilai | Nilai per UTXO, relatif |
|---|---|---|---|
| P2TR | 34,2% | 0,75% | 1× |
| P2PK | 0,03% | 8,7% | ≈ 13.200× |
Perhatikan dua baris itu baik-baik. Taproot memegang sepertiga UTXO tapi kurang dari satu persen nilainya. Dan P2PK memegang tiga per sepuluh ribu UTXO tapi hampir sepersepuluh seluruh nilai. Bagi saja: satu UTXO P2PK rata-rata memuat sekitar 13 ribu kali lebih banyak bitcoin daripada satu UTXO Taproot. Kedua keanehan itu punya sebabnya masing-masing, dan keduanya menarik.
Jawabannya bukan soal adopsi wallet, melainkan soal apa yang disimpan di sana.
Hampir 30 persen dari seluruh UTXO Bitcoin berkaitan dengan inscription, dan mayoritasnya memakai Taproot. Tapi seluruh 51 juta UTXO itu isinya cuma sekitar 415 BTC, dengan rata-rata 811 satoshi per UTXO. Itu debu. Jadi angka 34 persen tadi bukan tanda Taproot menang sebagai format pembayaran, melainkan tanda ia dipakai untuk hal lain. Perdebatan soal apakah itu pemakaian yang sah kita bahas dua sisinya di 9.6. Yang tidak diperdebatkan: UTXO set jadi jauh lebih besar karenanya, dan setiap node harus menyimpannya, seperti dibahas di 10.1.
Yang ini ceritanya justru terbalik: sedikit sekali jumlahnya, tapi memuat nilai yang sangat besar.
P2PK adalah format paling awal, dipakai untuk reward mining di tahun-tahun pertama, termasuk milik Satoshi sendiri. Hampir semuanya tidak pernah dibelanjakan sejak dibuat, dan sebagian besar diduga hilang selamanya seperti dibahas di 11.2. Tapi ada satu hal lagi yang membuatnya penting, dan itu terhubung ke 4.6: P2PK menaruh public key mentah langsung di output, tanpa disembunyikan di balik hash. Artinya seluruh nilai itu sudah terpapar sejak hari pertama, dan tidak ada yang bisa memindahkannya kalau kuncinya memang sudah hilang.
| Jenis | Bagian jumlah | Ada sejak |
|---|---|---|
| P2TR | 34.2% | Ada sejak 2021 |
| P2PKH | 28.8% | Ada sejak 2009 |
| P2WPKH | 26.5% | Ada sejak 2017 |
| P2SH + P2WSH + dll | 10.5% | Ada sejak 2012 |
| P2PK | 0.03% | Ada sejak 2009 |
Satu pertanyaan yang wajar: kalau format baru lebih murah dan lebih privat, kenapa P2PKH dari 2009 masih memegang hampir sepertiga UTXO? Tiga sebab. Pertama, UTXO lama tidak berpindah sendiri: ia baru berubah jenis kalau pemiliknya membelanjakannya, dan banyak yang memang tidak pernah bergerak. Kedua, sebagian layanan lama belum memperbarui diri. Ketiga, mengirim ke format baru menuntut pihak lawan juga mendukungnya, dan itu perubahan yang butuh dua sisi. Jadi grafik di atas bukan foto pilihan orang hari ini, melainkan endapan dari lima belas tahun keputusan yang saling menumpuk.
Transaksi Bitcoin yang beredar di jaringan bukan objek, bukan JSON, dan bukan tabel. Ia deretan byte dengan urutan yang sudah dipatok. Di sini kita bedah satu transaksi utuh, lalu memakainya untuk menjawab pertanyaan yang selama ini cuma disinggung: kenapa SegWit menghentikan malleability.
Klik tiap potongan berwarna untuk melihat isinya. Urutan field-nya tetap, dan tidak ada penanda nama di mana pun: parser tahu apa yang sedang dibaca semata karena tahu urutannya.
Perhatikan dua hal yang paling sering membingungkan. Pertama, txid input ditulis terbalik. Byte pertama di layar adalah byte terakhir dari txid yang biasa kamu lihat di block explorer. Kedua, marker 00 dan flag 01 di posisi ketiga. Di transaksi lama, posisi itu berisi jumlah input, dan jumlah input tidak mungkin nol. Justru kemustahilan itulah yang dipakai SegWit sebagai penanda: parser lama membacanya sebagai transaksi tanpa input dan berhenti, parser baru mengenalinya sebagai bendera.
Angka di dalam transaksi tidak berukuran tetap. Angka kecil dipadatkan jadi satu byte, angka besar diberi awalan penanda. Ini yang membuat orang salah hitung waktu membaca hex mentah.
| Angka | Hasil encoding | Ukuran |
|---|
Aturannya cuma empat baris, tapi wajib dihafal parser: di bawah 253 cukup satu byte apa adanya. Mulai 253, byte pertama jadi penanda panjang, bukan nilai. Jadi fd berarti "dua byte berikutnya adalah angkanya", bukan angka 253. Salah membaca satu varint saja dan seluruh sisa transaksi ikut salah baca, karena posisinya bergeser.
Satu transaksi SegWit punya dua identitas. Keduanya hasil hash ganda SHA-256, tapi atas potongan byte yang berbeda.
Inilah pemisahannya. txid dihitung dari serialisasi tanpa marker, flag, dan witness. wtxid dihitung dari serialisasi lengkap. Artinya seluruh tanda tangan berada di luar jangkauan txid. Tekan tombol di bawah dan lihat sendiri akibatnya.
Bab 6.4 dan 13.4 menyebut malleability sebagai masalah yang diselesaikan SegWit, tapi tidak pernah menunjukkannya. Sekarang kita ubah satu bit tanda tangan di kedua format dan bandingkan.
Hasilnya berbicara sendiri. Di format lama, tanda tangan berada di dalam scriptSig, dan scriptSig ikut dihitung ke dalam txid. Jadi siapa pun yang meneruskan transaksimu bisa mengubah encoding tanda tangan tanpa membatalkan keabsahannya, dan txid-nya berubah. Transaksi yang menunggu txid itu jadi menggantung. Di SegWit, tanda tangan pindah ke witness yang di luar txid, jadi txid tidak bergerak sedikit pun. Ini bukan tambalan, melainkan akibat langsung dari memindahkan satu potong data keluar dari jangkauan hash. Lightning di Bab 7 bersandar penuh pada txid yang tidak bisa digoyang seperti ini.
Address Bitcoin bukan sekadar hash yang dipoles. Ia dibungkus dengan checksum supaya salah ketik tertangkap sebelum dana dikirim. Dua format memakai dua cara yang sama sekali berbeda, dan perbedaannya bukan soal mana yang lebih ketat, melainkan soal apa yang bisa dibuktikan.
Format lama membangun checksum dari fungsi hash yang sudah kamu bedah di C1. Empat langkah, dan semuanya bisa kamu ikuti.
Perhatikan bahwa checksum-nya cuma empat byte pertama dari hash ganda. Sisanya dibuang. Empat byte berarti 32 bit, jadi peluang sebuah salah ketik kebetulan menghasilkan checksum yang sama kira-kira satu berbanding empat miliar. Kecil, tapi ini peluang, bukan jaminan. Perhatikan juga alfabetnya: base58 sengaja membuang angka 0, huruf O, huruf I, dan huruf l, karena keempatnya gampang tertukar saat dibaca manusia.
Format baru tidak memakai SHA-256. Ia memakai kode koreksi galat, keluarga matematika yang sama dengan yang dipakai CD dan QR code.
Enam karakter terakhir itu checksum-nya, dan ia lahir dari perhitungan polinomial, bukan dari hash. Itu sebabnya ia bisa membuktikan sesuatu yang tidak bisa dibuktikan hash: selama galatnya tidak lebih dari empat karakter, ia dijamin tertangkap. Bukan hampir pasti, tapi pasti. Perhatikan juga huruf bc di depan: itu penanda jaringan, dan ia ikut dihitung ke dalam checksum, sehingga address mainnet tidak akan pernah lolos sebagai address testnet.
Ubah satu karakter di salah satu address dan lihat apakah tertangkap. Coba beberapa kali di posisi berbeda.
Kamu akan menemukan bahwa keduanya menangkap galat satu karakter, dan itu memang benar. Saya menguji empat ribu perubahan acak pada masing-masing, dan tidak satu pun lolos. Jadi kalau ada yang bilang bech32 lebih tahan salah ketik, itu tidak tepat untuk kasus satu karakter. Bedanya ada di tempat lain: base58check hampir pasti menangkapnya karena peluang tabrakan sangat kecil, sedangkan bech32 dijamin secara matematis menangkapnya selama galatnya empat karakter atau kurang. Yang satu bersandar pada probabilitas, yang satu pada bukti.
Ada bagian dari cerita ini yang jarang diceritakan, dan ia cocok dengan semangat Bab 14.
| Format | Konstanta akhir | Dipakai untuk |
|---|---|---|
| bech32 | 1 | SegWit v0 (bc1q) |
| bech32m | 0x2bc830a3 | SegWit v1 ke atas (bc1p, Taproot) |
Bech32 dirilis pada 2017 dan dipakai luas. Pada 2020 ditemukan bahwa konstanta di akhir perhitungannya punya cacat: dalam keadaan tertentu, menambah atau menghapus karakter di ujung tidak selalu terdeteksi. Untuk address SegWit versi nol akibatnya tidak berbahaya karena panjangnya sudah dipatok. Tapi untuk versi berikutnya, termasuk Taproot, itu masalah. Jawabannya adalah bech32m, yang identik dalam segala hal kecuali satu konstanta di baris terakhir. Itulah sebabnya address bc1q dan bc1p terlihat mirip tapi divalidasi dengan konstanta berbeda, dan kenapa dompet yang belum memperbarui diri bisa menolak address Taproot yang sebenarnya sah.
Bab 5.4 membahas difficulty adjustment panjang lebar, tapi tidak pernah menunjukkan di mana target itu sebenarnya disimpan. Jawabannya empat byte di dalam block header, dan cara empat byte memuat angka 256 bit itu lebih sederhana sekaligus lebih menjebak daripada dugaan kebanyakan orang.
Byte pertama disebut exponent, tiga sisanya mantissa. Geser nilainya dan perhatikan target yang dihasilkan.
Inilah jebakan yang paling sering terjadi: exponent bukan pangkat dua. Ia adalah panjang target dalam byte. Jadi exponent 29 berarti targetnya sepanjang 29 byte, dan mantissa diletakkan di tiga byte paling depan dari 29 byte itu. Sisanya nol semua. Itu sebabnya target selalu punya bentuk yang sama: sedikit angka bermakna di depan, lalu deretan nol yang panjang.
Nilai nBits sungguhan dari beberapa masa. Perhatikan bagaimana exponent-nya menyusut seiring waktu.
| Masa | nBits | Exp | Difficulty |
|---|
Exponent yang menyusut dari 29 ke 23 berarti targetnya makin pendek, dan target yang makin pendek berarti makin sedikit hash yang memenuhinya. Itulah difficulty yang naik, dilihat dari sisi penyimpanannya. Dan perhatikan lompatan angkanya: dari difficulty 1 di genesis ke puluhan triliun, hanya dengan mengubah empat byte.
Pertanyaan yang wajar: kenapa tidak simpan saja 32 byte targetnya langsung? Karena block header dipatok tepat 80 byte, dan setiap byte di sana ikut di-hash jutaan kali per detik oleh seluruh miner di dunia. Menyimpan target penuh berarti header jadi 108 byte, naik 35 persen, untuk informasi yang hampir seluruhnya nol. Padatan ini juga punya harga: karena mantissa cuma tiga byte, tidak semua angka 256 bit bisa dinyatakan. Target yang sebenarnya selalu dibulatkan ke bentuk terdekat yang bisa diwakili. Ketelitian itu dikorbankan, dan tidak apa-apa, karena yang dibutuhkan cuma ambang batas, bukan angka persis.
Sekarang arah sebaliknya. Masukkan berapa banyak angka nol di depan yang kamu inginkan, dan lihat nBits yang mewakilinya.
Perhatikan bahwa menambah satu angka nol di depan membuat target mengecil enam belas kali lipat, karena satu digit heksadesimal bernilai empat bit. Jadi setiap nol tambahan yang kamu lihat di depan sebuah block hash mewakili enam belas kali lipat kerja tambahan. Ini penjelasan angka yang selama ini cuma dijelaskan lewat kata di 5.2 dan 5.4.
Bitcoin sudah ada lebih dari satu dekade. Tapi pertanyaan yang sama terus berulang: apa sebenarnya Bitcoin itu, dan bagaimana sistemnya bekerja?
Bitscriptum lahir dari sana. Dari rasa frustrasi melihat begitu banyak asumsi yang beredar, kesalahpahaman yang diwariskan dari satu orang ke orang lain, dan informasi yang lebih banyak menimbulkan kebingungan daripada kejernihan.
Saya tidak membangun ini untuk meyakinkan siapapun tentang apapun.
Yang ada di sini adalah cara sistem ini bekerja, secara teknis, secara jujur, dan sedapat mungkin tanpa agenda. Karena "percaya" adalah kata yang sudah terlalu banyak diucapkan. Kita mendengarnya dari mana-mana, tentang segalanya, sampai di satu titik kata itu kehilangan bobotnya sendiri. Kita mengalami krisis kepercayaan bukan karena kurang percaya, tapi justru karena terlalu sering diminta untuk percaya.
Saya lebih suka kamu membaca, kemudian memverifikasi sendiri. Jalankan kodenya. Cek referensinya. Jangan berhenti di satu sumber, termasuk platform ini.
Bitcoin dirancang untuk tidak butuh kepercayaan. Sudah selayaknya cara belajarnya pun begitu.
Membuat Bitscriptum adalah salah satu hal yang paling saya nikmati. Semoga ia berguna untuk kamu yang sedang mencari jawaban, bukan keyakinan yang dipinjam dari orang lain, tapi pemahaman yang kamu bangun sendiri.
Maxima Freiman. 2026
Sedikit catatan mengenai saya.
Saya mempelajari Bitcoin melalui kurikulum Bitcoin Protocol Development dari Chaincode Labs, dan menjadi kontributor serta anggota Bitcoin Indonesia.
Bitscriptum adalah hasil dari proses belajar itu. Dibuat karena pertanyaan-pertanyaan yang tidak mendapat jawaban yang cukup jujur di tempat lain.
Catatan data: angka-angka snapshot di buku ini — harga, hashrate, difficulty, block height, distribusi node software, dan ukuran dataset — diambil pada berbagai titik sepanjang 2024-2025 dan tidak diperbarui otomatis. Prinsip dan aturan protokol yang dijelaskan tidak bergantung pada angka-angka tersebut.