Sözlük / Geliştirici başvuru kaynağı
İmza betiği
Diğer adları: scriptSig, Kilidi açma betiği, Signature script.
- İmza betiği nedir?
- İmza betiği, bir girdinin harcadığı çıktının genel anahtar betiğini karşılamak için taşıdığı kilidi açma verisidir ve modern SegWit girdilerinde boştur.
Bir işlemdeki her girdi daha önceki bir çıktıya işaret eder ve onu harcamaya yetkili olduğunu kanıtlamak zorundadır. Bitcoin Core bu alana scriptSig adını verir; eski tip pay-to-public-key-hash girdisinde 71 veya 72 baytlık bir imza ile 33 baytlık bir genel anahtar, yani yaklaşık 107 bayt bulunur. SegWit'ten beri bu kanıt genellikle başka bir yerde durur ve bir bech32 para çekmenin size daha ucuza gelmesinin nedeni büyük ölçüde budur.
Nasıl çalışır
İmza betiği önce çalışır ve sonuçlarını, çıktının betiğinin tüketmesi için yığında bırakır. İkisi tek bir birleşik program olarak çalışmaz: yığın aralarında devredilerek sırayla yürütülürler; bu ayrım, özgün tasarımın kötüye kullanılabilir olduğu anlaşıldıktan sonra 2010 yılında getirilmiştir.
Aktarma politikası bu alanda veri itmelerinden başka bir şey bulunmamasını şart koşar. Koşul yok, aritmetik yok, iş yapan herhangi bir işlem kodu yok. Kısıtlama şu nedenle vardır: bu baytları harcayan kişi tamamen kontrol eder ve bir saldırganın girişte mantık çalıştırmasına izin vermek, ağın uzun zaman önce kapattığı sorunları yeniden açar. Pay-to-script-hash bu kuralı bir tercih olmaktan çıkarıp konsensüs gereği yapar, çünkü kullanım betiği son düz itme olarak gelmek zorundadır.
Boyutu tamamen neyin kilidini açtığına bağlıdır. Eski tip tek anahtarlı bir girdi bir imza ve bir anahtar taşır. İç içe bir SegWit girdisi tam olarak 23 bayt taşır, yani 22 baytlık tanık programının tek bir itmesini, ve geri kalan her şeyi tanık alanına iter. Yerel bir bech32 veya bech32m girdisi hiçbir şey taşımaz: serileştirilmiş alan tek bir sıfır uzunluklu bayttır.
İmza betiği hiçbir şeyin kanıtı olmayan bir girdi vardır. Bir coinbase işleminin tek girdisinin kilidini açacağı daha önceki bir çıktı yoktur, bu yüzden alan 2 ile 100 bayt arasında serbest alan olarak yeniden kullanılır ve BIP-34'ten beri blok yüksekliğiyle başlamak zorundadır. Madenciler 2009 yılından beri oraya mesajlar, oylar ve şakalar imzalamıştır.
Nerede görürsünüz
Herhangi bir işlemin kodunu çözün, her girdi bir assembly görünümü ve bir onaltılık görünümü olan bir scriptSig nesnesi gösterir. Yerel bir SegWit veya Taproot girdisinde ikisi de boş dizelerdir, verileri ise ayrı bir tanık alanı tutar; bu görsel asimetri, eski bir işlemin hangi adres biçimini kullandığını bir bakışta anlamanın en hızlı yoludur.
Bu aynı zamanda yaygın olarak yanlış okunan bir tarih kesitini açıklar. scriptSig işlem kimliği hesabına dahil olduğu için bir üçüncü taraf, bir imzayı geçersiz kılmadan yeniden kodlayabilir ve yayınlanmış bir işlemin kimliğini değiştirebilirdi. Mt. Gox Şubat 2014'te para çekmeyi durdurdu ve suçu tam olarak bu davranışa yükledi, ancak zincirin sonraki akademik analizi, değiştirilmiş işlemlerin hacminin kayıp coinleri açıklamak için çok küçük olduğunu buldu. SegWit, kilidi açma verisini kimlik hesabından tamamen çıkararak tartışmayı Ağustos 2017'de sona erdirdi.
İmza betiği vs tanık verisi
İmza betiği ile tanık verisi aynı türden kanıt taşır ve SegWit bu görevi birinden diğerine taşırken imzanın anlamını değiştirmedi. Sizin için önemli olan farklar fiyat ve kalıcılıktır. Tanık baytları her biri bir ağırlık birimi üzerinden faturalandırılırken imza betiği baytları dörde mal olur, bu yüzden aynı tek anahtarlı harcama, kanıt scriptSig içinde taşındığında yaklaşık 148 sanal bayt, tanık içinde taşındığında yaklaşık 68 sanal bayttır. Tanık verisi ayrıca işlem kimliğinin dışında kalır, yani bir harcamanın tanımlayıcısı yolda değiştirilemez. Eski tip bir girdi hâlâ eski alanı kullanır; 1 ile başlayan bir adreste duran coinlerin her taşındığında sessizce daha pahalıya gelmesinin nedeni budur.