İçeriğe geçin
buybitcoinsmart

Sözlük / Geliştirici başvuru kaynağı

OP_DUP

OP_DUP nedir?
OP_DUP, yığının en üstündeki öğeyi iki kez kullanılabilmesi için kopyalar; standart pay-to-public-key-hash betiğinin hem genel anahtarınızın hash'ini hesaplayıp hem de ona karşı doğrulama yapabilmesinin nedeni budur.

Bir bayt, 0x76 ve tek bir iş. Bitcoin Script'te değişken yoktur, yalnızca bir yığın vardır; bu yüzden bir komut tarafından tüketilen bir öğe, sıradaki komut çalışmadan önce yok olur ve onu yeniden kullanmanın tek yolu kopyalamaktır. 1 ile başlayan neredeyse her Bitcoin adresini koruyan 25 baytlık betikteki dört çalışan opcode'un ilkidir.

Nasıl çalışır

Kopyalama gerekir, çünkü doğrulama aynı genel anahtarı birbiriyle bağdaşmayan iki amaç için ister. Çıktı yalnızca bir hash'e bağlanmıştı, dolayısıyla doğru anahtar olduğunu kanıtlamak için anahtarın hash'lenip karşılaştırılması gerekir. İmza kontrolü ise anahtarın kendisini ister; oysa karşılaştırma onu tüketmiş olurdu.

Eski bir harcamayı adım adım izleyin. Harcayanın verisi, yığına üstünde bir genel anahtar bulunan bir imza olarak iner. OP_DUP anahtarın ikinci bir kopyasını oluşturur. OP_HASH160 kopyayı 20 baytlık özetiyle değiştirir. Çıktı, taahhüt ettiği 20 baytı yığına iter, OP_EQUALVERIFY ikisini de tüketir ve herhangi bir uyuşmazlıkta tüm betiği iptal eder; OP_CHECKSIG ise tam da ihtiyaç duyduğu şeyle, özgün anahtar ve imzayla baş başa kalır. Beş adım, dallanma yok, döngü yok ve her seferinde sabit bir maliyet.

Opcode, pahalı hiçbir şey yapmadan iki sınıra sayılır. Taproot öncesi bir betiğin içerebileceği 201 çalışan komuttan biridir ve oluşturduğu kopya, yığınlar genelinde 1.000 öğe sınırına sayılır. İkisi de tek anahtarlı bir harcama için önemli değildir; döngüsüz bir koşul zinciri içinde kopyalama yapan bir betikte ise ikisi de önemlidir.

Nerede görülür

1 ile başlayan bir adresten harcama yapan herhangi bir işleme bakın: çıktı betiği OP_DUP ile başlar. Blok gezginleri bunu assembly çıktısının ilk simgesi olarak gösterir.

Daha ilginç olanı, görünmeden çalıştığı yerdir. Yerel bir SegWit tek anahtarlı çıktı hiç mantık içermez, yalnızca bir sürüm baytı ve 20 baytlık bir hash içerir; ancak BIP-141, düğüme bu hash'ten klasik şablonu kurmasını ve onu yine de yürütmesini söyler. Böylece opcode ağdaki her P2WPKH harcamada hâlâ çalışır ve blokta hiçbir yerde görünmez. Davranışı elde edersiniz, baytın eskiden maliyeti olan dört ağırlık birimini ödemeden.

Betik hash'i çıktıları ve Taproot anahtar yolundan harcamalar onu tamamen atlar. Bir P2SH çıktısı bir hash'i doğrudan karşılaştırır ve Taproot anahtar harcaması, hiçbir betik devreye girmeden bir imzayı çıktı anahtarına karşı doğrular. Bu, SegWit ve Taproot'un gerçekte ne yaptığının olabilecek en küçük örneğidir: yeni yeteneklerden çok, aynı kontrollerin zincirin bunları elde etmek için daha az bayt taşımak zorunda kalacağı biçimde düzenlenmesi.

Sık sorulan sorular

Bir betik neden herhangi bir şeyi kopyalamak zorunda kalır?

Çünkü Bitcoin Script'in bir yığını vardır ve değişkeni yoktur. Her komut okuduğunu tüketir; bu yüzden önce hash'lenmesi, sonra imza kontrolü için kullanılması gereken bir genel anahtar, ilk adım onu yok etmeden önce kopyalanmalıdır.

İlgili terimler

Daha fazlası: Geliştirici başvuru kaynağı

Bu sayfayı İngilizce okuyun