Sözlük / Geliştirici başvuru kaynağı
Witness script
- Witness script nedir?
- Witness script, bir P2WSH çıktısının gerçek harcama koşullarını taşır ve witness içinde yer alır; burada baytları olağan maliyetin dörtte biri ağırlığında sayılır.
Tanımlandığı belge: BIP-141.
SegWit, scriptlere işlemin içinde kendi bölümünü verdi ve bc1q ile başlayan bir kasa harcandığında witness bölümüne düşen şey witness scripttir. Witness içindeki her bayt, dört yerine bir ağırlık birimi sayılır; bu, Ağustos 2017'de 481.824 numaralı blokta gelen yüzde 75'lik bir indirimdir. Çoklu imzalı saklamanın pahalı olmaktan çıkmasının nedeni bu indirimdir.
Nasıl çalışır
Witness script, çıktının içinde duran sade bir SHA-256 hash ile taahhüt edilir ve biri harcayana kadar gizli kalır. Harcayan kişi witness yığınını koşulların gerektirdiği argümanlarla doldurur, ardından serileştirilmiş scripti son öğe olarak ekler. Bir düğüm bu öğenin hashini hesaplar, 32 baytın taahhütle eşleşip eşleşmediğini kontrol eder ve az önce doğruladığı scripti yürütür.
Konsensüs, eski usul harcamalarla aynı script sınırlarını uygular: 10.000 bayt script ve 201 çalışma talimatı. Yayma politikası ise çok daha aşağıda durur: 3.600 bayt ve yığında en fazla 100 öğe, bu yüzden daha büyük olan her şey olağan yayın yerine bir madenciyle doğrudan anlaşma gerektirir.
Davranışı değiştiren aritmetiktir. 2-of-2 bir script 71 bayttır: 33 baytlık genel anahtarların iki kez yığına itilmesi, iki sayım opcode'u ve doğrulama opcode'u. Bir witness içinde bu 71 bayt 71 ağırlık birimine mal olur, yani 18 sanal baytın altında. Aynı 71 bayt eski yöntemle, bir imza scripti içinde taşındığında 284 ağırlık birimine, yani 71 sanal bayta mal olur. Güvenlik açısından hiçbir şey değişmedi, yalnızca onu kullanmanın fiyatı değişti.
Nerede görürsünüz
Lightning, witness scriptler üzerinde çalışır. Her kanal bir 2-of-2 çıktısına fonlanır ve bir kanalın içindeki taahhüt işlemleri, BOLT 3 içinde belirtilen, iptal ve hash kilitli ödemeler için küçük bir script kütüphanesinden inşa edilir; bu da çoğunun zincire hiç ulaşmadan oluşturulup yok edildiği anlamına gelir.
İmza donanımı bunları adlandırılmış bir alan olarak görür. PSBT formatı hem girdilerde hem çıktılarda bir witness script alanı tanımlar, böylece bir koordinatör ortak imzacıya yerine getirilen koşulların tam olarak neler olduğunu verebilir ve cihaz kullanıcıya bir hash yerine neyi kabul ettiğini gösterebilir.
Bunları sarmalanmış olarak da görürsünüz. Para çekme ekranlarını hiç güncellememiş borsalarda yaygın olan iç içe bir P2SH-P2WSH adresi, tek işi witness programına işaret etmek olan 34 baytlık bir redeem script taşır; gerçek işi ise altındaki witness script yapar.
Yedekler yalnızca anahtarları değil, script baytlarını da gerektirir. Her kurtarma ifadesinin yanında çıktı tanımlayıcısını (descriptor) saklayın, çünkü kimsenin yazmadığı bir witness script, tamamen imzalanmış bir çoğunluğu kimsenin hareket ettiremeyeceği bitcoinlere dönüştürür.
Witness script vs tapscript
Witness script tamamen açığa çıkarılan tek bir scripttir; bir tapscript yaprağı ise yalnızca kullandığınız dalın yayımlandığı bir ağacın bir dalıdır. BIP-341 kapsamında bir çıktı, birçok yaprak üzerinde bir merkle köküne taahhüt eder, böylece beş ayrı kurtarma yolu olan bir kasa harcama anında bunlardan yalnızca birini gösterir ve diğer dördünü sonsuza kadar gizli tutar. Tapscript ayrıca 10.000 baytlık sınırı kaldırır, OP_CHECKMULTISIG'i devre dışı bırakır ve yerine toplu doğrulamaya uygun OP_CHECKSIGADD'i getirir ve sabit bir talimat sayısı yerine imza kontrolleri için bir ağırlık bütçesi uygular. Cüzdanınız bc1q yazıyorsa witness scriptleri kullanıyorsunuz demektir; bc1p ise bunun yerine Taproot tasarımı anlamına gelir.