Sözlük / Geliştirici başvuru kaynağı
Redeem script
Diğer adları: redeemScript.
- Redeem script nedir?
- Redeem script, bir pay-to-script-hash çıktısının arkasında gizlenen tam harcama sözleşmesidir; harcayan tarafından imza betiğinin sonunda sunulur ve eşleştiğini kontrol etmek için hashlenir.
Tanımlandığı belge: BIP-16.
BIP-16, gönderenin bütün bir sözleşme yerine 20 baytlık bir hash için ödeme yapmasına izin verdi ve redeem script, o hashin temsil ettiği sözleşmedir. Tek bir yığın öğesine sığmak zorundadır, bu yüzden 520 bayt kesin üst sınırdır. Bu baytları kaybederseniz özel anahtarlarınız değersiz kalır; bu da redeem script'i yazılımınızın değil, yedeğinizin bir parçası yapar.
Nasıl çalışır
Coinler yerinde dururken bir redeem script görünmez. Onları tutan çıktı yalnızca bir hash ile konsensüsün tanıdığı bir desen içerir; bu kural ağ genelinde 1 Nisan 2012 tarihinden itibaren, 173.805 numaralı blokta uygulanmaya başlandı. Size ödeme yapan hiç kimse koşullar hakkında bir şey öğrenmez, blok gezgini de öğrenmez.
Açığa çıkması harcama sırasında olur. İmza betiği, sözleşmenin ihtiyaç duyduğu argümanları yığına iter ve sonunda serileştirilmiş sözleşmenin kendisiyle biter. Doğrulama yapan bir düğüm bu son öğeyi alır, hashler, sonucu çıktıdaki hash ile karşılaştırır ve ancak bundan sonra öğeyi serileştirmeden çıkarıp kalan yığın üzerinde kod olarak çalıştırır. İki aşama da geçilmelidir ve onu taşıyan alan yalnızca itme işlemleri içerebildiğinden, betiğin kendisi kontrol edilmeden önce davranış sokamaz.
Var olan en yaygın redeem script hiç de sözleşme değildir. 2017 yılından itibaren, SegWit tasarrufunu isteyip eski yazılımlarla ödenebilir kalmak isteyen cüzdanlar bir witness programını bir script hash içine sardı; böylece redeem script 22 bayttır: bir sürüm baytı ve 20 baytlık bir anahtar hash'i, çalıştırılacak hiçbir şey yok. 3 ile başlayan milyonlarca borsa çekim adresi tam olarak bunu gizler, fazlasını değil.
Nerede görülür
Bitcoin Core, bir script adresi oluşturduğunuz her seferinde size bir tane verir ve decodescript komutu hex'i okunabilir assembly'ye geri çevirir. Bir descriptor içinde betik açıkça sh(wpkh(...)) veya sh(multi(...)) olarak yazılır; bunu kaydetmenin modern yolu budur, çünkü descriptor cüzdanları Ocak 2021'de Bitcoin Core 0.21.0 sürümüyle geldi ve çıplak adresleri içe aktarma alışkanlığını eskitti.
Kayıp senaryosu gerçektir ve belirlidir. Bir kurtarma ifadesi anahtarları yeniden üretir. Rastgele bir betiği yeniden üretmez ve diğer ortak imzacıların genel anahtarlarını size söyleyemez; bu yüzden her katılımcının yalnızca kendi kurtarma ifadesini sakladığı 2 / 3 bir düzen harcanamaz. Eksiksiz bir özel anahtar setine sahip olup bu anahtarların düzenlendiği betiğin hiçbir kaydı bulunmadığı için Bitcoin kaybeden insanlar oldu. Descriptor'ı her kurtarma ifadesi yedeğiyle birlikte saklayın ve adres sizin için önemli olacak bir şey tutmadan önce, küçük bir tutarla bir kez ondan geri yükleme yapın.
Bilinmesi gereken diğer şey boyut sınırıdır. On beş sıkıştırılmış genel anahtar, itme önekleri ve çevreleyen opcode'lar ile birlikte 513 bayt eder ve tam sığar; on altıncısı sığmaz. Bir script adresini on beş ortak imzacıyla sınırlayan, multisig hakkındaki herhangi bir kural değil bu tavandır.
Redeem script vs Witness script
Bir redeem script ile bir witness script iki farklı dönemde aynı kavramsal yeri tutar; fark, baytların nereden gittiği ve nasıl taahhüt edildiğidir. Redeem script 160 bitlik bir hash ile taahhüt edilir ve imza betiğinde bayt başına dört ağırlık birimiyle gider. Witness script tam 256 bitlik bir SHA-256 ile taahhüt edilir ve witness içinde bayt başına bir ağırlık birimiyle gider; aynı politikanın harcanmasının yaklaşık dörtte bir maliyette olmasının nedeni budur. İç içe bir düzen ikisini birden kullanır: redeem script 34 baytlık witness programıdır ve witness script gerçek sözleşmedir. Sarmalanmış bir SegWit multisig için yedek kaydediyorsanız, biri değil ikisi de yazılı olmalıdır.