PSBT v2 adalah versi kedua yang ditetapkan dalam spesifikasi Partially Signed Bitcoin Transaction, atau transaksi Bitcoin yang ditandatangani sebagian. BIP 370 mendefinisikannya sebagai format kerja bersama bagi dompet dan perangkat penandatangan. Isinya juga bisa berupa rancangan tanpa tanda tangan sama sekali. Format ini membantu beberapa pihak menyusun transaksi, tetapi tidak menggantikan pemeriksaan mereka maupun aturan jaringan Bitcoin.
Anna dan Jan ingin membayar satu tagihan bersama. Masing-masing menyumbang sebagian dana dan menambahkan tanda tangan pada perangkatnya sendiri. Mereka perlu bertukar rancangan yang disepakati, bukan kunci privat. Kunci privat adalah angka rahasia yang digunakan dompet untuk membuat tanda tangan digital yang mengizinkan pembelanjaan dana. PSBT berfungsi sebagai amplop kerja berisi transaksi dan data pendukungnya. Input menunjuk jumlah dana sebelumnya yang akan dibelanjakan; output menentukan jumlah baru dan syarat untuk membelanjakannya kemudian. PSBT v0 yang asli menyimpan kerangka ini dalam transaksi global tanpa tanda tangan yang tetap. Pada v2, input dan output dapat ditambahkan bertahap sesuai aturan. Manfaatnya adalah penyusunan bersama, bukan izin untuk sembarang mengubah hal yang sudah ditandatangani orang lain. [1] [2]
Anna tidak harus membaca setiap kolom teknis. Namun, melalui perangkat penandatangan yang tepercaya, ia perlu memeriksa penerima sebenarnya, jumlah, biaya, dan kembalian yang mungkin masuk ke dompetnya sendiri. Bagian terakhir mudah terlewat: output milik orang lain tidak boleh disangka sebagai kembaliannya. Perangkat harus memverifikasi data UTXO, yaitu output yang belum dibelanjakan, serta kesesuaian syaratnya dengan transaksi yang ditandatangani. Jalur derivasi kunci menjelaskan langkah yang diikuti dompet untuk menghasilkan kunci tertentu dari kunci utamanya. Jalur yang tertulis dalam berkas itu sendiri tidak membuktikan kepemilikan. Perangkat juga harus memahami SIGHASH, pengaturan yang menentukan bagian transaksi yang dilindungi tanda tangan. Penandatanganan tidak mengharuskan kunci privat atau Seed Phrase, kata-kata cadangan dompet, ditambahkan ke berkas yang dipertukarkan. [2] [4]
Keterangan bahwa aplikasi atau perangkat mendukung PSBT belum membuktikan dukungan v2. Periksa seluruh alurnya: pembuatan, impor, penandatanganan, dan pengembalian hasil di antara program serta perangkat yang benar-benar digunakan. PSBT v0 dan v2 tidak dapat saling menggantikan begitu saja. Konversi ke v0 mengharuskan penyusunan transaksi tanpa tanda tangan dan penyesuaian kolom menurut aturan versi itu; mengganti angka saja tidak cukup. Taproot, cara yang lebih baru untuk menentukan syarat pembelanjaan output Bitcoin, juga berbeda dari v2. BIP 371 menetapkan data penandatanganannya untuk kedua versi PSBT. Uji kecil dari awal sampai akhir memeriksa kompatibilitas kombinasi perangkat tersebut, bukan kebenaran semua pembayaran di masa depan. [1] [3]
Versi format berkas dan versi transaksi Bitcoin memiliki arti berbeda. Pada v2, PSBT_GLOBAL_VERSION harus berisi 2, sedangkan kolom lama PSBT_GLOBAL_UNSIGNED_TX tidak boleh ada. Kolom wajib terpisah, PSBT_GLOBAL_TX_VERSION, menentukan versi transaksi itu sendiri. Jumlah input dan output juga wajib dicantumkan. Pemisahan ini menempatkan data bersama tiap unsur, sehingga program tidak perlu mencarinya lagi dalam satu kerangka transaksi bersama. Jika pembuat menyerahkan penyusunan selanjutnya kepada peserta lain, BIP 370 mewajibkan penanda perubahan yang sesuai dan versi transaksi setidaknya 2. Ini tetap format kerja, bukan aturan konsensus baru bagi jaringan. [1]
Setiap input memerlukan TXID, pengenal transaksi sebelumnya, dan indeks output tertentu yang dibelanjakan dari transaksi itu. TXID saja tidak cukup karena satu transaksi bisa memiliki beberapa output. Setiap output baru memuat jumlah dalam satoshi, satuan terkecil Bitcoin, dan scriptPubKey, skrip yang menentukan syarat pembelanjaannya. Penambahan unsur juga harus memperbarui jumlah global yang bersangkutan. Kolom opsional sequence menyimpan nilai kendali input lainnya; jika tidak ada, digunakan 0xffffffff. Data penyusunan ini menjelaskan cara merakit transaksi. Namun, data tersebut tidak menggantikan informasi nilai dan syarat pembelanjaan UTXO yang dibutuhkan perangkat untuk menilai tanda tangan dan biaya dengan aman. [1]
Anggap Jan perlu menambahkan satu input lagi. Program tidak boleh mengira hal itu diizinkan hanya karena ia memiliki berkasnya. Dalam PSBT_GLOBAL_TX_MODIFIABLE, bit 0 menunjukkan apakah input boleh diubah, sedangkan bit 1 menunjukkan apakah output boleh diubah. Bit 2 menandakan adanya tanda tangan SIGHASH_SINGLE, yang memasangkan input dengan output pada posisi yang bersesuaian. Pasangan itu harus tetap dipertahankan saat unsur tambahan disisipkan. Karena itu, penyusun memeriksa tanda tangan yang nyata beserta pembatasannya. Penanda menyampaikan informasi kepada program yang bekerja sama; penanda tidak bisa mengakali tanda tangan kriptografis atau membuat perubahan yang tidak sah menjadi sah. [1]
Sebagian input mensyaratkan transaksi menunggu ketinggian blok atau batas waktu tertentu sebelum bisa digunakan. Blok adalah kumpulan transaksi yang dicatat dalam riwayat bersama jaringan; ketinggiannya menunjukkan posisinya dalam rantai. Kolom bersama nLockTime harus memakai jenis persyaratan yang sesuai dengan semua input. Nilai tertinggi yang diwajibkan dari jenis itu dipilih; jika kedua jenis memungkinkan, ketinggian blok mendapat prioritas. Jadi, ketinggian dan waktu tidak boleh dibandingkan seperti dua angka biasa. Jika tidak ada input yang mensyaratkan apa pun, nilai pengganti global digunakan, atau 0 jika nilai itu juga tidak ada. Input dengan persyaratan yang tidak kompatibel tidak boleh ditambahkan. Jika sudah ada tanda tangan, input baru juga tidak boleh mengubah nLockTime yang telah dihitung. Kolom-kolom ini sendiri tidak menjamin seluruh aturan penguncian waktu terpenuhi. [1]
Setiap tanda tangan membatasi perubahan berikutnya. BIP 370 mewajibkan penonaktifan perubahan input tanpa SIGHASH_ANYONECANPAY dan perubahan output tanpa SIGHASH_NONE; untuk SIGHASH_SINGLE, pasangan yang harus dipertahankan dicatat. Nama-nama itu menggambarkan cakupan perlindungan tanda tangan, bukan pilihan untuk dicoba secara acak oleh pemula. Setelah semua input siap, finalisasi merangkai data tanda tangan yang diperlukan dan ekstraktor menyusun transaksi berformat jaringan dari kolom-kolomnya. Hanya setelah disiarkan, node dapat menilainya dan penambang dapat memasukkannya ke blok. Anna dan Jan pun membedakan rancangan, hasil bertanda tangan, dan pembayaran terkonfirmasi: pertukaran PSBT saja bukan tindakan penandatanganan maupun konfirmasi. [1] [2] [4]
Untuk gambaran yang lebih utuh, baca entri ini bersama PSBT, Hardware Wallet, Multisig, Taproot, Bitcoin, UTXO.