CSV adalah singkatan OP_CHECKSEQUENCEVERIFY dalam Bitcoin Script. Bersama BIP 68, instruksi ini memungkinkan penguncian relatif: suatu jalur pembelanjaan baru dapat digunakan ketika keluaran yang dikonfirmasi sudah cukup tua. Keluaran adalah jumlah yang diterima beserta syarat pembelanjaannya. Menunggu tidak menggantikan tanda tangan atau mengirim uang.
Anna dan Peter dapat membelanjakan koin yang mereka simpan bersama jika sepakat. Mereka juga menginginkan jalur pemulihan yang bisa dipakai Anna sendiri, tetapi hanya setelah menunggu sejak keluaran terkait dikonfirmasi. CSV membantu menegakkan syarat itu. Berbeda dengan CLTV yang menunjuk ketinggian atau waktu tetap, batasnya bukan satu titik yang ditentukan sebelumnya dalam seluruh riwayat. Batas itu bergantung pada koin tertentu. Membuat dompet, menyiapkan tanda tangan, atau membiarkan transaksi tanpa konfirmasi menunggu lama tidak menggantikan titik awal tersebut. Dompet adalah aplikasi atau perangkat untuk menerima dan mengirim bitcoin. [1] [2] [8]
Blok mengelompokkan transaksi dalam satu kumpulan yang ditambahkan ke riwayat bersama. Ketinggian blok menunjukkan posisinya dalam rantai. Bayangkan keluaran dikonfirmasi pada ketinggian 900000 dan jeda wajibnya 10 blok. Berdasarkan syarat penguncian ini, blok pembelanjaan paling awal adalah 900010. Selang hanya 9 blok belum cukup. Ini bukan janji jumlah menit yang tepat: blok tidak datang dengan jarak waktu teratur. Umur yang cukup juga bukan konfirmasi pembayaran. Transaksi harus sah dalam aspek lainnya, dan penambang harus benar-benar memasukkannya ke blok. [2] [4] [9]
Jeda juga dapat dikodekan dalam langkah 512 detik. Kode 2 berarti 1024 detik. Namun, yang dibandingkan bukan dua jam komputer. Titik awalnya adalah Median Time Past blok sebelum blok yang mengonfirmasi keluaran; titik lainnya adalah Median Time Past blok sebelum calon blok. Ini merupakan timestamp tengah dari hingga 11 blok terakhir setelah diurutkan. Selisih kedua median harus mencapai jeda yang disyaratkan. Ini bukan alarm presisi berdasarkan waktu setempat. [2] [4] [7]
Dompet dapat menggabungkan beberapa jumlah yang diterima sebelumnya untuk membayar. Setiap masukan transaksi merujuk keluaran yang diterima sebelumnya, yang umurnya dihitung sejak dikonfirmasi dalam rantai. Kolom nSequence berada pada masukan itu sendiri. Kolom itu memuat informasi untuk menunggu secara relatif. Tidak cukup bila hanya sebagian uang sudah cukup tua: semua syarat penguncian transaksi yang berlaku harus terpenuhi. Reorganisasi rantai juga dapat mengubah tempat konfirmasi. Karena itu, kelayakan membelanjakan sebelumnya bukan sifat koin yang tidak bisa berubah. Dalam reorganisasi, jaringan beralih ke cabang rantai lain yang sah dan mengganti sebagian riwayat blok sebelumnya. [2] [4] [9]
Full Node memverifikasi aturan secara mandiri melalui pemeriksaan yang berkaitan. CSV menurut BIP 112 membandingkan argumen skrip dengan nSequence dari masukan yang membelanjakan keluaran tersebut. Ia tidak menghitung umur sendiri; BIP 68 menangani itu saat validasi transaksi. Untuk argumen biasa tanpa penanda penonaktifan, versi transaksi harus minimal 2 dan bit 31 nSequence harus mati. Bit adalah sakelar kecil dalam kolom angka. Argumen negatif, versi lebih lama, atau nSequence yang tidak sesuai membuat pemeriksaan gagal. [1] [2] [3]
Bit 22 menentukan cara membaca jeda. Jika mati, satuannya blok; jika menyala, satuannya langkah 512 detik. Argumen skrip dan nSequence harus menggunakan jenis yang sama. Bayangkan membandingkan pengukuran: angka lebih besar tidak cukup jika satu sisi menghitung kilometer dan sisi lain jam. Di sini, ketidakcocokannya antara jumlah blok dan rentang waktu. [1] [2] [3]
Bagian 16 bit terendah memuat panjang jeda. Mask 0x0000ffff memilih bagian kolom angka itu. CSV membandingkannya bersama jenis jeda; nSequence yang besar tidak otomatis berarti menunggu lebih lama. Setelah bit yang relevan dipilih, persyaratan skrip tidak boleh melebihi nilai masukan. Ini batas teknis penting bagi perancang dompet. Pengguna biasa tidak sebaiknya mengaturnya secara manual tanpa memahami seluruh prosedur. [1] [2] [3]
Jeda nol tidak menambahkan waktu tunggu, tetapi pemeriksaan lain pada CSV biasa tetap berlaku. Kasus berbeda muncul bila argumen skrip yang nonnegatif itu sendiri menyalakan bit 31. CSV lalu bertindak sebagai NOP, instruksi tanpa pengaruh pada penguncian relatif. Argumen seperti itu tidak mewajibkan menunggu. Ini harus dibedakan dari penanda yang sama dalam nSequence masukan: dengan argumen biasa, penanda masukan tersebut harus mati. [1] [3]
Jika jalur pemulihan Anna memerlukan tanda tangannya, ia tetap harus memberikannya setelah jeda berakhir. Kunci privat adalah nilai angka rahasia yang digunakan untuk membuat tanda tangan tersebut. Kunci privat yang hilang tidak kembali, dan cabang lain masih dapat mengizinkan pembelanjaan lebih awal. Saat skrip dijalankan, CSV meninggalkan argumen pada stack, tempat kerja yang menumpuk data; OP_DROP sering mengikutinya untuk menghapus argumen. Menghapus data itu tidak memberi siapa pun hak mengambil uang. Tanda tangan dan syarat lain pada jalur terpilihlah yang menentukan hak tersebut. [1] [3] [5]
BIP 112 memperkenalkan CSV sebagai pengganti OP_NOP3 bersama BIP 68 dan BIP 113. Ini kemampuan aktif, bukan sekadar rencana. Penggunaannya mencakup kanal pembayaran Lightning Network, tempat jeda dapat memberi pihak lain waktu merespons, tetapi tidak mengatur respons itu sendiri. Setelah menunggu, transaksi masih perlu disiarkan dan dikonfirmasi. Biaya, data yang tersedia, dan kondisi rantai tetap penting. Bitcoin Core v29.0 serta spesifikasi yang disebutkan menjelaskan rincian validasi. [1] [2] [6]
Untuk gambaran yang lebih utuh, baca entri ini bersama CLTV, Opcode, Timelock, Bitcoin Script, Bitcoin, Full Node. Entri ini juga dirujuk dari Konfirmasi, Timelock, HTLC, Opcode.