Blockchain/Tahap IV · Kedalaman protokol/4.1 Script/Pelajaran 3
Multisignature
Kuorum, pepijat, dan kunci yang tidak pernah wujud
BahanPeneroka blok yang boleh menyahkod skrip (contohnya, mempool.space atau blockchain.com)Kod sumber Bitcoin Core, khususnya logik pentafsir skrip bagi OP_CHECKMULTISIGDokumen spesifikasi BIP147 dan BIP327
Ingin tahu
- Mengapakah skrip yang memerlukan dua tandatangan mengeluarkan tiga item daripada tindanan?
- Bagaimanakah rentetan bait kosong boleh menjadi peraturan konsensus dan bukannya sekadar konvensyen?
- Apa yang berubah apabila sepuluh kunci digabungkan menjadi satu tandatangan yang kelihatan tidak dapat dibezakan daripada tandatangan seorang penandatangan sahaja?
Teroka
- Skrip multisignature mewajibkan sekurang-kurangnya m tandatangan sah berbanding n kunci awam yang disenaraikan. Skrip penguncian menyenaraikan m, n kunci awam itu dan n; OP_CHECKMULTISIG mengeluarkan n, n kunci itu, m, dan kemudian m tandatangan, yang mesti sepadan dengan kunci mengikut urutan yang disenaraikan. Jika kurang daripada m tandatangan sah dibekalkan, perbelanjaan itu tidak sah.
- Ralat pengekodan dalam pelaksanaan asal menyebabkan OP_CHECKMULTISIG mengeluarkan satu item tindanan tambahan melebihi tandatangan yang diperlukan. Elemen 'dummy' ini diabaikan semasa pengesahan kriptografi tetapi mesti wujud; jika tiada, tindanan mengalami underflow dan transaksi gagal. Pihak yang membelanjakan pada awalnya menggunakan OP_0 sebagai pengisi ini, satu amalan yang berterusan selama bertahun-tahun kerana nod menerima sebarang nilai dalam slot tersebut.
- BIP147 (NULLDUMMY), yang diaktifkan bersama SegWit pada Ogos 2017, menukar vektor kebolehubahan (malleability) ini menjadi peraturan konsensus. Elemen dummy kini mesti tatasusun bait kosong. Sebarang nilai yang tidak kosong, walaupun satu bait sifar, akan menyebabkan skrip gagal. Ini menghapuskan keupayaan untuk mengubah ID transaksi dengan menukar kandungan dummy, sekali gus menstabilkan hash transaksi bagi semua pengesahan seterusnya.
- Peraturan kestandardan menentukan skrip multisig yang disalurkan (relay) oleh nod. Output bare multisignature dihadkan kepada tiga kunci di bawah dasar lalai Bitcoin Core. Apabila dibalut dalam P2SH, multisig boleh menggunakan sehingga 15 kunci (dihadkan oleh redeem script 520 bait); dalam P2WSH, sehingga 20. Perbezaan ini membolehkan susunan perbendaharaan korporat yang kompleks berfungsi tanpa membebankan lapisan transaksi asas.
- Dua alat yang lebih baharu menggantikan corak multisig legacy. MuSig2 (BIP327, 2023), protokol berasingan yang dibina di atas tandatangan Schnorr Taproot, mengagregat beberapa kunci awam menjadi satu kunci dan menghasilkan tandatangan Schnorr standard; on-chain, perbelanjaan itu tidak dapat dibezakan daripada perbelanjaan Taproot kunci tunggal yang biasa. Tapscript, sebahagian daripada Taproot itu sendiri, menambah OP_CHECKSIGADD, yang membolehkan pengesahan tandatangan secara berperingkat tanpa pepijat stack-pop atau had 20 kunci pada opcode legacy.
- Untuk meneliti mekanisme ini, buka peneroka blok dan cari transaksi bare multisig sebelum SegWit. Perhatikan scriptSig: ia bermula dengan OP_0 diikuti tandatangan. Bandingkan dengan perbelanjaan multisig P2WSH, di mana witness mengandungi satu item kosong, tandatangan dan witness script yang menyenaraikan kunci. Perhatikan perbezaan bilangan baitnya, yang mencerminkan kos meletakkan senarai kunci penuh di dalam output berbanding di dalam input.
Fakta utama
- OP_CHECKMULTISIG mengeluarkan satu item tindanan tambahan disebabkan pepijat off-by-one bersejarah.
- BIP147 (NULLDUMMY) mewajibkan elemen dummy ini menjadi tatasusun bait kosong di peringkat konsensus.
- Dasar lalai Bitcoin Core mengehadkan output bare multisig kepada tiga kunci awam; P2SH membenarkan sehingga 15 dan P2WSH sehingga 20.
- MuSig2 mengagregat beberapa kunci menjadi satu tandatangan, menjadikan perbelanjaan itu kelihatan seperti perbelanjaan Taproot kunci tunggal yang biasa.
- OP_CHECKSIGADD dalam tapscript menggantikan OP_CHECKMULTISIG, membolehkan semakan ambang tanpa pepijat item tambahan.
- Pengaktifan SegWit (Ogos 2017) merangkumi BIP147, yang menukar peraturan NULLDUMMY daripada dasar relay kepada konsensus.
Latihan sembilan, enam, tiga, satu
9KumpulSenaraikan 9 susunan multisig yang anda temui huraiannya (dalam dompet, bursa, Lightning, pelan pewarisan), dengan mencatatkan m-daripada-n dan jenis skrip yang digunakan.
6KelompokkanKumpulkan 9 itu kepada 6 mengikut bentuk on-chain: bare multisig, P2SH, SegWit yang dibalut P2SH, P2WSH, laluan skrip Taproot, atau laluan kunci Taproot dengan kunci teragregat.
3SaringKurangkan enam kumpulan tersebut kepada tiga pertukaran (trade-off) berkaitan privasi, kos bait, dan fleksibiliti pemulihan yang wujud dalam setiap gaya pelaksanaan multisig.
1KristalkanTulis satu ayat yang menerangkan mengapa rentetan bait kosong menjadi peraturan konsensus kekal dan bukannya parameter dasar yang boleh diubah.
Semakan fakta
Tarikh, angka dan dakwaan telah disemak berbanding dengan sumber yang diterbitkan yang disenaraikan di bawah.