Sözlük / Protokol ve güncellemeler
OP_CAT
- OP_CAT nedir?
- OP_CAT, betik yığınındaki en üstteki iki öğeyi tek bir öğede birleştirir; Satoshi'nin 2010 yılında devre dışı bıraktığı ve BIP-347'nin tapscript içinde yeniden etkinleştirmeyi önerdiği bir işlemdir.
Tanımlandığı belge: BIP-347.
Birleştirme kulağa önemsiz gelir ama öyle değildir. Onunla bir betik, bir işlemin imza hash'ini yığına itilen parçalardan, her biri en fazla 520 bayt olan parçalar hâlinde yeniden bir araya getirebilir ve sonra bu hash'i sıradan bir imza kontrolüyle doğrulayabilir. Tehlikeli olduğu için kapatılan bir işlem kodunun covenant listesinin en çok tartışılan maddesi hâline gelmesi böyle oldu.
Nasıl çalışır
Durum: Ağustos 2010'dan beri devre dışı; o tarihte betik motorunda savunma amaçlı bir temizlik sırasında bir dizi metin ve aritmetik işlem kodu kapatıldı. BIP-347 yalnızca tapscript içinde yeniden etkinleştirilmesini öneriyor. Mainnet'te etkin değil.
İşlemin kendisi tek satırdır: iki öğe yığından çıkarılır, baytları uç uca eklenerek yığına itilir. 2010 yılında tehlikeli olmasının nedeni, bir yığın öğesinin ne kadar büyüyebileceğine hiçbir şeyin sınır koymamasıydı. Bir öğeyi kendisiyle birleştirmek boyutunu ikiye katlar, bu yüzden kısa bir itme ve birleştirme döngüsü birkaç baytı gigabaytlara şişirip düğümün belleğini tüketebilirdi. Modern motorda her bir yığın öğesi için katı bir 520 baytlık sınır var, bu yüzden BIP-347 sonuç bu sınırı aşacaksa işlemi doğrudan başarısız kılar ve eski saldırı ortadan kalkar.
Yeniden etkinleştirmeyi alışılmadık ölçüde temiz kılan bir numaralandırma inceliği var. OP_CAT, 126 numaralı işlem kodudur. BIP-342 tapscript'i tanımlarken diğerlerinin yanı sıra 126'dan 129'a kadar olan işlem kodlarını OP_SUCCESS ilan etti: bunlardan biriyle karşılaşmak betiği anında başarılı kılar. Dolayısıyla eski düğümler 126 numaralı baytı içeren herhangi bir tapscript'i onu yürütmeden zaten kabul ediyor. Onu birleştirme yapacak şekilde yeniden tanımlamak yalnızca bu düğümlerin izin vereceği şeyi daraltır, bu da değişikliği zincir bölünmesi değil yumuşak çatal yapar.
Birleştirmenin önünü açtığı şeyler boyutuyla orantısızdır. Bayt dizileri oluşturabilen bir betik bir Merkle kanıtını doğrulayabilir, eliptik eğriler yerine hash'lerden kurulmuş bir Lamport veya Winternitz imzasını kontrol edebilir ve bir imzayı sabit bir nonce kullanmaya zorlayarak imza denkleminin kendisinin harcama işlemini betiğe açığa çıkarmasını sağlayabilir. OP_CAT işlem kodunu covenant'a özgü hiçbir işlem kodu olmadan genel bir covenant aracına dönüştüren hile işte bu son yöntemdir.
Nerede görülür
OP_CAT Bitcoin üzerinde hiç çalışmaz. Çalıştığı yerler, Bitcoin'in betik motorunu kopyalayıp sonra 2010 kararını tersine çeviren yan zincirler ve test ağlarıdır.
Elements, dolayısıyla Liquid, işlem kodunu etkin tutuyor; yayımlanan covenant gösterimlerinin çoğunun Bitcoin yerine Liquid için yazılmasının nedeni budur. BIP-347 kurallarını taşıyan özel signet'ler diğer ortamdır ve bunlar, geliştiricilerin kimseden konsensüsü değiştirmesini istemeden önce şeyi inşa edebilmesi için vardır.
Bitcoin satın alan veya elinde tutan biri için pratik içerik kısadır: OP_CAT etkinleşse de hiç etkinleşmese de cüzdanınız, adresleriniz veya yedekleriniz hakkında hiçbir şey değişmez. Adı bilmeye değer, çünkü Bitcoin'in ne kadar programlanabilir olması gerektiğine dair gerçek bir anlaşmazlığın merkezinde duruyor ve kuantum bilgisayarlı bir gelecek için hash tabanlı imzalar ekleme önerileri genellikle onun üzerinden geçiyor.