Witness Data adalah informasi yang disertakan pada input transaksi untuk memeriksa syarat pembelanjaan SegWit. Input merujuk pada koin yang diterima sebelumnya dan kini dibelanjakan. Witness dapat berisi tanda tangan, kunci publik, atau skrip. Ini bagian dari transaksi, bukan tempat lain untuk menyimpan uang Anda.
Anna pernah menerima Bitcoin dan sekarang ingin membayar Peter. Pembayaran sebelumnya membuat output: catatan jumlah dan syarat untuk membelanjakannya kelak. Transaksi baru merujuk ke output itu melalui input. Namun, menyatakan bahwa koin itu milik Anna saja tidak cukup. Dalam pembayaran biasa, dompet membuat tanda tangan yang dapat diperiksa tanpa mengungkap kunci privat. Dompet adalah aplikasi atau perangkat untuk menerima dan mengirim bitcoin. Kunci privat adalah nilai angka rahasia yang digunakan untuk membuat tanda tangan tersebut. Dengan SegWit, data tersebut disediakan sebagai witness pada input. Adanya tanda tangan belum berarti tanda tangan itu benar. [1] [4] [5]
Bayangkan perbedaan antara syarat “tunjukkan dokumen yang sah” dan dokumen yang benar-benar ditunjukkan. Dalam Bitcoin, bukan manusia yang memutuskan; aturan memeriksa kecocokannya. Witness program merupakan bagian dari syarat yang tercatat pada output sebelumnya. Versinya menentukan cara pemeriksaan. Transaksi baru yang membelanjakannya menyediakan witness. Secara teknis, witness adalah daftar terurut berisi butir data untuk setiap input. Ini tidak otomatis menjadi program yang dapat dijalankan atau salinan semua koin yang belum dibelanjakan. [1] [7]
Witness dapat mengungkap tanda tangan, kunci publik, atau skrip yang dipakai, yaitu program yang menjelaskan syarat pembelanjaan. Kunci publik digunakan untuk memeriksa tanda tangan dan tidak perlu dirahasiakan. Ini bukan kotak terenkripsi. Kunci privat tetap Anda simpan: Anda memakainya untuk menandatangani, bukan mengirimkannya ke jaringan sebagai pengganti tanda tangan. Witness maupun tanda tangan yang dipublikasikan tidak menggantikan Seed Phrase, kata-kata untuk memulihkan dompet. Jika kunci dan cadangan sama-sama hilang, riwayat pembayaran publik saja tidak mengembalikan kemampuan menandatangani transfer baru. [1] [3] [4]
Penjelajah blok adalah aplikasi untuk mencari transaksi dan blok pada jaringan tertentu. Penjelajah blok dapat menampilkan wtxid di samping txid. Keduanya merupakan hash, sidik jari singkat yang dihitung dari bentuk data yang tepat dengan menerapkan SHA-256 dua kali. txid memakai bentuk tanpa witness; wtxid memakai bentuk lengkap bersamanya. Keduanya bukan alamat penerima atau dua pembayaran berbeda. Jika transaksi tidak memiliki witness, format lama digunakan dan kedua pengenal sama. Pada Bitcoin Core v29.0, decoderawtransaction menampilkan pengenal lengkap dalam hash, sedangkan data witness input ada di txinwitness. [1] [7] [8]
Transaksi lain dapat merujuk pada transaksi sebelumnya sebelum mendapat konfirmasi. Jika pengenal transaksi sebelumnya bisa diubah hanya dengan mengubah data tanda tangan, rujukan itu tidak lagi cocok. Mengubah witness saja tidak mengubah txid. Hal ini membantu protokol dengan transaksi yang saling bergantung, seperti Lightning Network. Namun, bukan berarti seluruh transaksi tidak dapat diubah. Kolom lain atau input lama tanpa SegWit tetap dapat memengaruhi txid, dan witness yang diubah tetap harus memenuhi aturan verifikasi yang berlaku. [1] [6]
Witness dikirim bersama bentuk lengkap transaksi dan menjadi bagian data blok ketika transaksi dimasukkan. Ini bukan penyimpanan gratis di luar rantai. Satu byte yang ditambahkan oleh serialisasi witness menyumbang bobot 1 WU, dibandingkan 4 WU untuk satu byte dasar; WU berarti unit bobot. Full Node memeriksa aturan secara mandiri dan memerlukan data terkait untuk memvalidasi pembelanjaan. Bobot yang lebih kecil tidak mengizinkan pemeriksaan wajib dilewati dan tidak berarti data tidak memakan ruang penyimpanan. [1] [7]
Dalam format lama, bukti untuk membelanjakan koin ditulis dalam scriptSig. SegWit native versi 0 mewajibkan kolom ini kosong karena bukti berada dalam witness. Ada pula bentuk yang dibungkus P2SH, cara lama membayar ke syarat yang ditentukan oleh hash skrip. Di sini scriptSig harus berisi tepat operasi memasukkan witness program terkait, bukan instruksi tambahan sembarangan. Bukti tetap berada dalam witness. Tujuan yang sama dapat memiliki bentuk berbeda; nama kolom saja tidak cukup untuk menafsirkannya. [1] [5]
P2WPKH menyediakan tanda tangan dan kunci publik. Node memeriksa apakah hash kunci cocok dengan syarat semula dan apakah tanda tangan sah. P2WSH mendukung syarat yang ditentukan oleh hash sebuah skrip lengkap. Butir witness terakhir adalah witnessScript, yang hashnya harus cocok dengan program pada output. Butir sebelumnya menyediakan data awal untuk menjalankan skrip, misalnya tanda tangan. BIP 143 menentukan cara menyusun pesan yang ditandatangani untuk versi ini, termasuk nilai output yang dibelanjakan. Keberhasilan membaca data saja belum membuktikan bahwa syaratnya terpenuhi. [1] [2] [5]
Taproot memakai witness native versi 1 dan membedakan pembelanjaan melalui jalur kunci atau jalur skrip. Sebelum memilih jalur, annex yang ada dipisahkan terlebih dahulu. Ini kolom tambahan khusus; datanya tetap dihitung dalam bobot dan dicakup tanda tangan. Jika tersisa satu butir, butir tersebut ditafsirkan sebagai tanda tangan jalur kunci. Jalur skrip mengungkap skrip yang digunakan dan control block: data yang membuktikan kaitannya dengan output sebelumnya, bukan blok blockchain baru. Butir sebelumnya, jika ada, memasok data kepada skrip. Aturan versi 0 tidak dapat langsung diterapkan pada kasus ini. [3] [5]
Komitmen kriptografis (commitment) adalah sidik jari yang mengikat data pada isinya yang spesifik. Ketika komitmen ini diwajibkan untuk data witness, BIP 141 mengikatnya ke bagian blok lainnya melalui Coinbase Transaction, transaksi pertama untuk imbalan penambang. Pohon hash wtxid menghasilkan akar yang merangkum data di dalamnya. Transaksi imbalan memakai wtxid nol dalam pohon ini. Akar digabung dengan nilai cadangan sepanjang 32 byte, lalu di-hash dua kali untuk menghasilkan komitmen yang dicatat pada output-nya. Jika tidak ada transaksi dengan witness, komitmen itu opsional. Ini mengikat bukti publik, bukan mencadangkan kunci atau menggantikan pemeriksaan itu sendiri. [1]
Untuk gambaran yang lebih utuh, baca entri ini bersama SegWit, Block Weight, Bitcoin Script, Taproot, Bitcoin, Seed Phrase. Entri ini juga dirujuk dari Block Weight, Miniscript, Compact Block Filters.