Miniscript adalah representasi terstruktur dari sebagian Bitcoin Script, bahasa yang menetapkan syarat pembelanjaan koin. Tanda tangan, waktu tunggu, dan pengungkapan rahasia tertentu dapat digabungkan dalam bentuk yang bisa dianalisis serta dipenuhi oleh perangkat lunak. Miniscript bukan dompet tersendiri atau aturan Bitcoin yang baru; skrip hasilnya yang melindungi koin.
Anna ingin menggunakan koinnya seperti biasa dengan kuncinya sendiri. Tanda tangan digital membuktikan otorisasi pembayaran menggunakan kunci privat, sebuah nilai angka rahasia, tanpa mengungkap kunci itu. Dompet adalah aplikasi atau perangkat untuk menerima dan mengirim bitcoin. Anna juga ingin menyediakan jalur untuk Peter, yang boleh membelanjakannya dengan kuncinya setelah 144 blok sejak output tersebut dikonfirmasi. Maksud ini disebut spending policy, yaitu aturan pembelanjaan. Miniscript membantu mengubahnya menjadi bentuk tepat yang dapat ditangani dompet. Peter tetap membutuhkan kuncinya; menunggu tidak menggantikannya. Ini contoh sederhana jalur akses alternatif, bukan transfer otomatis atau pendeteksi bahwa Anna kehilangan kunci. [1] [2] [10]
Aturan yang diucapkan belum menjadi program yang diverifikasi jaringan. Kompiler dapat memilih Miniscript tertentu lalu mengubahnya menjadi Bitcoin Script. Output Descriptor kemudian menjelaskan skrip itu beserta kunci dan jalur derivasi bila ada; checksum juga dapat disertakan untuk mendeteksi kesalahan penyalinan. Saat koin dibelanjakan, jaringan memeriksa skrip sebenarnya dan data yang diberikan, bukan kalimat awalnya. Miniscript tidak menambah instruksi atau mengubah konsensus, aturan keabsahan yang disepakati bersama. Tidak setiap Bitcoin Script dapat diwakilinya. [1] [3] [6]
Blok mengelompokkan transaksi dalam satu kumpulan yang ditambahkan ke riwayat bersama. Dalam contoh Peter, 144 blok dihitung sejak konfirmasi output, yaitu sejumlah nilai tertentu dengan syarat pembelanjaan. Ini bukan tepat satu hari dan bukan waktu sejak dompet dibuat. Miniscript menuliskan waktu tunggu relatif sebagai older(n), menggunakan CSV dan kolom nSequence pada input yang membelanjakan output tersebut. BIP 68 mengatur makna kolom ini untuk pemeriksaan umur. Sebaliknya, after(n) menggunakan CLTV dan nLockTime absolut, berupa ketinggian atau batas waktu tetap. Dompet harus mengatur kolom transaksi dengan benar dan memenuhi syarat lainnya. Penguncian berdasarkan ketinggian dan waktu tidak boleh digabungkan secara tidak kompatibel; berakhirnya waktu tunggu tidak mengirim apa pun secara otomatis. [1] [7] [8] [9] [11]
Menunjukkan aturan saja tidak cukup. Dompet harus menyediakan data yang memenuhi salah satu jalur yang diizinkan, misalnya tanda tangan atau rahasia dengan hash sesuai persyaratan, yang disebut preimage. Hash adalah sidik jari digital data; di sini diperiksa apakah rahasia yang diberikan menghasilkan sidik jari yang diminta. Pemenuhan ini disebut satisfaction; data masukan yang dibutuhkan menjadi bagian dari witness transaksi. Saat menggabungkan cabang, terkadang suatu subsyarat harus dibuat tidak terpenuhi dengan cara yang tepat agar jalur lain dapat digunakan. Ini disebut dissatisfaction, bukan berarti seluruh pembayaran tidak sah. Perangkat lunak dapat menyusun jalur yang sesuai, tetapi tidak bisa menciptakan kunci privat yang tidak tersedia atau rahasia yang tidak diketahui. [1] [12]
PSBT adalah format untuk meneruskan transaksi yang sudah disiapkan beserta informasi tambahan antara dompet dan perangkat penandatangan. Dukungan PSBT saja belum cukup: program dan Hardware Wallet harus memahami descriptor serta syaratnya. Bitcoin Core menambahkan pengamatan Miniscript dalam P2WSH pada versi 24, penandatanganan pada versi 25, dan penggunaan dalam Taproot descriptors pada versi 26. Mengamati koin tidak sama dengan mampu membelanjakannya. Saat pengaturan, periksa kunci, tanda tangan yang diperlukan, waktu tunggu, dan semua jalur alternatif pada layar tepercaya, sesuai kemampuan nyata perangkat. [3] [4] [5]
Seed Phrase memulihkan kunci, tetapi untuk syarat khusus yang kompleks belum tentu menjelaskan bagaimana kunci itu digabungkan dengan kunci lain dan skrip. Cadangan ini berupa urutan kata yang dapat digunakan dompet untuk menurunkan kuncinya. Simpan descriptor yang persis beserta checksum, pemetaan kunci, jalur derivasi, serta perbedaan alamat penerimaan dan kembalian. Catat jaringan, rentang alamat, dan titik awal pemindaian riwayat secara terpisah. Descriptor publik bukan kunci privat, tetapi dapat mengungkap riwayat pembayaran. Sebelum memakai pengaturan ini, uji pemulihan dompet pengamat dan setiap jalur pembelanjaan yang direncanakan dalam lingkungan Regtest atau Signet. [5] [6]
pk(), older(), after(), dan sha256() mewakili tanda tangan, waktu tunggu, atau persyaratan rahasia. and_v(), or_d(), dan thresh() menggabungkan syarat. Pembungkus seperti v: menyesuaikan cara evaluasi sambil mempertahankan makna subekspresi. Tipe B, V, K, dan W mengatur bagaimana bagian-bagian meneruskan elemen pada stack, ruang kerja skrip; tidak semua pasangan cocok. Pemeriksaan tipe dapat menemukan susunan yang tidak kompatibel. Namun, pemeriksaan itu tidak menentukan siapa yang patut dipercaya Anna atau apakah jalur cadangannya masuk akal. [1] [2]
Strukturnya memungkinkan analisis ukuran skrip dan witness, jumlah operasi, pemeriksaan tanda tangan, serta elemen stack sebelum pembelanjaan. Ini membantu memperkirakan biaya berbagai jalur dan mendeteksi pelampauan batas. Konteksnya penting: P2WSH menempatkan syarat dalam SegWit, sedangkan Tapscript merujuk pada skrip yang digunakan dalam Taproot. Batas keduanya tidak sepenuhnya sama. Selain konsensus, aturan penerusan transaksi yang umum juga berlaku. Hasil analisis bukan jaminan bahwa setiap dompet mampu menjalankan prosedur tersebut. [1]
Kunci publik digunakan untuk memeriksa tanda tangan dan tidak perlu dirahasiakan. Analisis malleability meneliti apakah pihak luar dapat mengubah satu satisfaction yang sah menjadi satisfaction lain yang tetap sah. Jaminannya memiliki asumsi khusus: penyerang tidak memiliki kunci privat peserta, tidak mengetahui lebih banyak preimages daripada pengguna jujur, dan hanya melihat satu satisfaction. Analisis juga mengasumsikan tidak ada kunci publik berulang dan berlaku aturan penerimaan umum; penambang mungkin memiliki pilihan yang tidak tersedia bagi node penerus biasa. Ini bukan perlindungan dari setiap peserta jahat, kehilangan cadangan, atau rancangan penyimpanan yang buruk. Masalah itu perlu diperiksa tersendiri. [1]
Kompiler dapat menyatakan aturan yang sama dengan berbagai cara, menghasilkan ukuran skrip dan witness yang berbeda. Pilihannya mengikuti model biaya. Penanda seperti 9@ pada cabang bahasa kebijakan memberi petunjuk tentang peluang relatif penggunaannya, bukan jumlah tanda tangan atau izin jaringan. Kompilasi berbeda dapat menghasilkan skrip dan alamat yang berbeda. Karena itu, pemulihan tidak cukup dengan menjelaskan kembali aturan menggunakan kata-kata sendiri lalu mengompilasinya. Representasi persis yang disimpan, pemeriksaan alamat hasil derivasi, dan jalur penandatanganan yang teruji tetap penting. [2] [5]
Untuk gambaran yang lebih utuh, baca entri ini bersama Bitcoin Script, Output Descriptor, Multisig, Andrew Poelstra, Timelock, Bitcoin. Entri ini juga dirujuk dari Output Descriptor, Dead Man’s Switch, Andrew Poelstra, Simplicity.