
Sejauh ini dalam seri ini kita sudah membahas apa itu multisig dan ambang mana yang dipilih. Kedua artikel menggambarkan perilaku sebuah dompet multisig — m dari n kunci tanda tangan, chain mengecek ambang, uang bergerak. Tak satu pun banyak bercerita tentang bagaimana dompet sebenarnya disusun di bawah. Itulah artikel ini.
Versi pendek: ketika SSP membuatkan dompet untukmu, ia tidak sekadar menghasilkan dua kunci acak dan selesai. Ia menghasilkannya dengan cara yang mengikuti standar terdokumentasi bernama BIP48, sehingga dompet hasilnya bisa interoperable, bisa dipulihkan di software selain SSP, dan bisa diprediksi saat diperiksa on-chain. Inilah artikel yang menjelaskan apa itu BIP48, kenapa ia ada, dan kenapa "dompet ini pakai BIP48" adalah salah satu kalimat paling membosankan dan paling penting di multisig.
TL;DR
- Jalur derivasi adalah jalan dari satu seed phrase ke kunci spesifik (dan alamat) di sebuah dompet. Jalur terstandarisasi seperti BIP44 / BIP48 membiarkan software dompet berbeda sampai pada kunci yang sama dari seed yang sama.
- BIP48 adalah spec khusus untuk dompet multisig. Ia bilang: inilah jalur derivasi kanonik untuk
mkunci yang menyusun dompet 2-of-3, 3-of-5, dst., melintasi tipe-tipe script output utama. - SSP memakai BIP48. Itu artinya dua seed yang dompet SSP-mu hasilkan bisa dipakai dari dompet kompatibel BIP48 lain mana pun (Sparrow, Electrum, descriptors Bitcoin Core) — bukan hanya dari SSP sendiri.
- BIP48 memperbaiki satu masalah yang punya spec multisig sebelumnya (BIP45): ia memisahkan dengan bersih kunci untuk tipe-tipe script yang berbeda (legacy, P2SH-wrapped SegWit, native SegWit, Taproot) supaya satu seed phrase bisa menyimpan semuanya tanpa tabrakan.
- Kamu tidak perlu berurusan dengan jalur derivasi secara manual untuk pakai SSP. Kamu harus tahu mereka ada supaya "pemulihan dompet" tidak terasa seperti sihir — dan supaya kamu paham seed-mu sebenarnya memetakan ke apa.
Tur 30 detik melalui jalur derivasi
Sebelum BIP48 punya arti apa pun, mesin di bawahnya sudah harus ada. Mesin itu adalah BIP32: dompet hierarchical deterministic (HD). Ide intinya adalah satu kunci master — diturunkan dari sebuah seed phrase — bisa menghasilkan pohon tak hingga kunci anak, secara deterministik. Lewati jalur tertentu di pohon itu dan kamu selalu sampai di kunci anak yang sama. Lewati jalur berbeda dan kamu sampai di yang berbeda.
Jalur terlihat seperti ini:
m / purpose' / coin_type' / account' / change / index
Misalnya, jalur BIP44 m / 44' / 0' / 0' / 0 / 0 mencapai alamat penerimaan pertama dari akun pertama Bitcoin di bawah aturan BIP44. Ganti coin_type jadi 60' dan kamu di ruang Ethereum; ganti purpose jadi 84' dan kamu di ruang BIP84 (native SegWit); dan seterusnya. Tanda kutip tunggal (') adalah derivasi hardened — anaknya tidak bisa dibalik kembali ke induknya. Setiap segmen setelah master adalah angka 32-bit, dipartisi menurut konvensi.
Inilah bagian yang biasanya dilewati: jalur itu metadata, bukan rahasia. Siapa pun yang tahu jalurmu dan kunci privatmu (atau extended key) bisa menurunkan alamat yang sama. Jalur memberitahu dompet ke mana melihat. Seed memberitahunya apa yang ada di sana.
Untuk penyegaran ramah tentang apa itu seed sendiri, post seed phrase best practices adalah prasyarat.
Apa yang BIP48 tentukan
BIP48 tinggal di m / 48' / coin_type' / account' / script_type' / change / index. Tambahan menarik adalah script_type' — segmen kedua dari belakang.
Segmen itu mengkodekan tipe output multisig mana yang dilayani jalur:
0'→ P2SH (multisig legacy)1'→ P2SH-wrapped SegWit (P2WSH-in-P2SH)2'→ native SegWit (P2WSH)3'→ multisig setara Taproot (per amandemen BIP48)
Ini penting karena dalam praktiknya himpunan cosigners m-of-n yang sama menghasilkan alamat on-chain yang berbeda tergantung script output mana yang dipakai. Tanpa BIP48, sebuah dompet mungkin diam-diam memakai satu tipe, software pemulihan mengasumsikan tipe lain, dan hasilnya dua dompet yang kelihatannya harusnya menurunkan koin yang sama — tapi tidak, karena mereka menghitung alamat yang berbeda.
BIP48 juga mengunci segmen purpose' di 48', jadi jalur multisig tidak bisa bertabrakan dengan jalur single-sig BIP44/BIP49/BIP84. Satu seed bisa menahan dompet single-sig di BIP84 dan dompet multisig 2-of-2 di BIP48, tanpa interferensi. Masing-masing tinggal di subpohonnya sendiri.
Selain jalur itu sendiri, BIP48 menentukan bagaimana kunci publik cosigners ("xpubs") harus diurutkan saat membangun output multisig. Aturan kanonik adalah pengurutan leksikografis kunci publik sebelum masuk ke redeem script. Itu menghilangkan ambiguitas — setiap dompet patuh BIP48 yang membangun dari xpubs yang sama menghitung alamat yang sama. Tanpa aturan itu, dua dompet bisa menggabungkan kunci yang sama dalam urutan berbeda dan berakhir di alamat berbeda dengan aturan redeem yang sama.
Kalau kamu mau membaca spec apa adanya, ia tinggal di repo Bitcoin BIPs (bips/bip-0048.mediawiki).
Bagaimana SSP memakai BIP48 dalam praktik
Saat kamu mengatur dompet SSP, dua seed phrase dihasilkan — satu di ekstensi browser, satu di aplikasi seluler SSP Key. Setiap seed phrase berkorespondensi dengan satu kunci privat master. Dari setiap master, SSP menurunkan jalur BIP48 untuk chain yang relevan (Bitcoin, Ethereum, Flux, dan sisanya dari set yang didukung SSP) di script_type' = 2' (native SegWit di Bitcoin; bentuk kanonik setara di chain lain di mana berlaku).
Xpubs dari kedua penandatangan kemudian dipertukarkan. Setiap sisi kini punya himpunan sama dua xpubs, diurutkan leksikografis per BIP48. Dari pasangan itu, setiap sisi secara independen menghitung alamat yang sama. Dua belahannya tidak pernah berbagi kunci privat — hanya kunci publik berpindah antar perangkat.
Saat kamu menerima uang, alamat yang ditunjukkan adalah alamat hasil derivasi BIP48 yang dihitung dari kedua xpubs. Saat kamu membelanjakan, setiap perangkat menandatangani transaksi yang sama di bawah kunci privatnya sendiri. Redeem script on-chain merujuk kedua kunci publik; jaringan mengecek kedua tanda tangan. Itu seluruh protokolnya.
Alasan ini penting di skenario pemulihan: kalau SSP, sebagai produk, lenyap besok, kamu masih akan memegang dua seed phrase patuh BIP48. Memuat keduanya di Sparrow (atau di dompet multisig lain mana pun yang mendukung jalur BIP48 yang SSP pakai) membangun ulang dompet yang sama, di alamat yang sama, dengan kemampuan belanja penuh. Dompet itu tidak tinggal di dalam SSP — ia tinggal on-chain, dan seed plus spec BIP48 cukup untuk meraihnya dari mana pun.
Properti itu adalah bagian besar dari kenapa potongan self-custody-without-cold-storage memperlakukan dompet SSP 2-of-2 sebagai dompet serius, bukan keingintahuan beraroma custodial. Ia bisa dipulihkan dari standar terbuka.
Kenapa BIP48 daripada BIP45 (dan bukan BIP44)
Spec multisig sebelumnya adalah BIP45. Itu upaya pertama yang jujur: m / 45' / cosigner_index' / change / index, dengan cosigner_index' mengkodekan cosigner mana kamu di dompet. Dipikir-pikir ulang, ia punya dua masalah.
Pertama, cosigner_index' mematri urutan ke dalam jalur itu sendiri. Itu berarti urutan saat penandatangan ditambahkan memengaruhi derivasi, yang membuat setup bersama menjadi rapuh — salah urutan dan kamu menurunkan alamat berbeda dari cosigner-mu. BIP48 menyelesaikannya dengan menghapus cosigner index dari jalur sama sekali dan membiarkan pengurutan leksikografis kunci publik mengurusnya.
Kedua, BIP45 tidak memisahkan berdasar tipe script. Jalur yang sama akan dipakai ulang apakah dompet pakai multisig P2SH legacy atau multisig SegWit-wrapped. Itu menciptakan masalah tabrakan-alamat-tapi-bukan-koin-yang-sama yang sama yang dijelaskan di atas.
BIP44, spec HD lebih umum, tidak pernah mengklaim mencakup multisig. Mencoba membebani BIP44 dengan jalur multisig menciptakan konflik tersendiri. BIP48 adalah perbaikan eksplisit: nomor purpose khusus, slot script-type eksplisit, dan pengurutan kunci deterministik. Hari ini sebagian besar dompet multisig modern berkumpul padanya; itu standar de facto.
Untuk sejarah lebih dalam tentang bagaimana ini terhubung ke bab selanjutnya multisig — agregasi Schnorr, di mana banyak tanda tangan mampat jadi satu — artikel berikutnya dalam seri ini, Schnorr signatures and multisig aggregation, mengambil benang ceritanya.
Apa artinya ini untuk interoperabilitas
Tes paling bersih untuk "apakah dompet multisig ini benar-benar self-custodial?" adalah: bisakah saya memulihkannya tanpa software dompet itu? Kalau jawabannya iya — pakai seed terdokumentasi, jalur derivasi terdokumentasi, dan alat standar — dompet itu benar-benar milikmu. Kalau jawabannya tidak, dompet itu punya unsur custodial tersembunyi.
Kepatuhan SSP terhadap BIP48 adalah hal yang memungkinkan kita menjawab iya. Seed phrase-nya BIP39 (mnemonik standar), derivasinya BIP48, konstruksi alamat kanonik BIP48. Dompet apapun yang bicara standar yang sama bisa membangun ulang dompetnya.
Itu sebabnya pengantar Meet SSP Wallet membingkai SSP sebagai "self-custody dengan multisig 2-of-2" alih-alih sebagai layanan terkelola. Standar di bawah itu adalah alasan bingkai itu jujur.
Apa artinya ini bagi kamu
Tiga kesimpulan:
- Kamu tidak perlu menghafal jalur untuk pakai SSP. Angka
m/48'/0'/0'/2'/0/0bukan sesuatu yang pengguna normal pernah perlu ketik. Tapi tahu bahwa ia ada adalah hal yang membuat "saya bisa memulihkan dompet ini tanpa SSP" jadi klaim nyata bukan marketing. - Dua seed-mu interoperable. Kalau suatu hari kamu perlu memulihkan ke dompet multisig pihak ketiga, BIP48 plus dua seed BIP39-mu plus
coin_typechain adalah resepnya. Checklist self-custody menamai ini sebagai langkah latihan bukan tanpa alasan. - Dompet multisig yang tidak pakai BIP48 (atau yang serupa) layak dipertanyakan. Kalau sebuah produk tidak bisa memberitahumu persis bagaimana alamat diturunkan dari kunci-kuncimu, itu bukan self-custody — itu custody dengan langkah ekstra. Kepatuhan standar adalah hal yang membuat klaim "kunci-kuncimu, koin-koinmu" bisa diverifikasi.


