Sözlük / İşlemler ve ücretler
SIGHASH_ALL
- SIGHASH_ALL nedir?
- SIGHASH_ALL, bir imzanın bir işlemin her girdisini ve her çıktısını kapsamasını sağlayan bayraktır; böylece ödeme imzalandıktan sonra ödemeye ilişkin hiçbir şey değiştirilemez.
Bu, cüzdanınızın kullandığı bayraktır ve bir donanım cüzdanının ekranında bir işlemi onaylamanın bir anlam taşımasının nedeni budur. Değeri 1 ve bunu bir blok gezgininde neredeyse her imzanın son baytı olarak görebilirsiniz. Taproot varsayılanın adını SIGHASH_DEFAULT olarak değiştirdi ve baytı hiç yazmamaya başladı, imza başına bir bayt tasarruf sağladı.
Nasıl çalışır
SIGHASH_ALL altında özet, işlem sürümünü, harcanan her outpointi, her sıra numarasını, her çıktı tutarını, her çıktı betiğini ve locktime değerini kapsar.
Tek bir çıktının tek bir satoshisini değiştirin, işlemdeki her imza geçersiz olur. Bir girdi ekleyin, bir çıktı silin, bunları yeniden sıralayın, locktime değerini biraz oynatın: sonuç aynıdır. İnsanların imzalanmış bir Bitcoin işleminin daha yayınlanmadan önce içerik bakımından kesin olduğunu söylerken kastettikleri budur. Herhangi birinin elinde kalan tek karar, onu gönderip göndermemektir.
Bir şey bilinçli olarak dışarıda bırakılır: diğer girdilerin kilidi açan betikleri. Özet bunları kapsasaydı, iki imzalayanın olduğu bir işlemde her imzanın diğerinden sonra yapılması gerekirdi, ki bu döngüsel ve imkansızdır. Bunların dışarıda bırakılması, bağımsız tarafların aynı işlemi istedikleri sırayla imzalamasına olanak tanıyan şeydir.
Kodlama, girdi türüne göre değişir. Eski (legacy) veya segwit sürümü 0 olan bir girdide, 01 baytı DER ile kodlanmış imzanın sonuna eklenir; alışılmış 71 veya 72 baytlık toplam da buradan gelir. Taproot anahtar yolu harcamasında BIP341, sıfır değerini SIGHASH_DEFAULT olarak tanımlar; bu, hiç bayt yazılmadan aynı kapsam anlamına gelir, dolayısıyla imza tam olarak 64 bayttır. Bir Taproot girdisinde 01 baytını açıkça yazmak hâlâ geçerlidir ve aynı özeti üretir, yalnızca boşuna fazladan bir bayta mal olur.
Nerede görülür
SIGHASH_ALL neredeyse her yerde kullanılır: Bitcoin Core, Electrum, Sparrow, her donanım cüzdanı ve her borsanın para çekme motoru varsayılan olarak bu şekilde imzalar ve hiçbiri bunu değiştirecek bir ayar sunmaz.
Pratik sonuç, bir ödeme takıldığında hissettiğiniz sonuçtur. Ücret, girdiler ile çıktılar arasında kalan miktar olduğundan ve çıktıların tümü imzalandığından, ücreti artırmak için bir çıktıdan birkaç bin satoshi kırpamazsınız. İşlemin baştan yeniden oluşturulup yeniden imzalanması gerekir, bunu da yalnızca anahtarları elinde tutan cüzdan yapabilir. Replace-by-fee özelliğinin bir borsanın veya blok gezgininin sizin adınıza gerçekleştirebileceği bir şey değil de gönderen cüzdanın bir özelliği olmasının ve gönderene ulaşılamadığında child-pays-for-parent özelliğinin bir kaçış yolu olarak var olmasının nedeni budur.
Ayrıca bir donanım cüzdanının ekranını bir öneri değil bir sözleşme haline getiren de budur. Cihaz hedefi, tutarı ve ücreti gösterir ve ardından ürettiği imza bu üçünü de kapsadığı için, sonraki hiçbir yazılım bu imzayı çöpe atmadan bunlardan hiçbirini değiştiremez. Ekranın söylediğini onaylayın, başka hiçbir şey olamaz.
SIGHASH_ALL vs SIGHASH_NONE
SIGHASH_ALL çıktı listesinin tamamını kapsar; SIGHASH_NONE bunun hiçbirini kapsamaz. İkisi arasındaki fark, bir ödeme ile bir coini belirtilmemiş bir yere taşıma izni arasındaki farktır. İki bayrağın değerleri yan yanadır, yalnızca bir fark eder, dolayısıyla bayrağı tamsayı parametresi olarak kabul eden bir imzalama kütüphanesi, bir müşterinin para çekme işlemini mempoolu izleyen herkesin yönlendirebileceği bir coine dönüştürmeye tek bir yazım hatası uzaklıktadır. Üretim imzalama kodu değeri girdi olarak almak yerine sabit kodlamalıdır.