İçeriğe geçin
buybitcoinsmart

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

Opcode

Diğer adları: Veri iten opcode, Veri itmeyen opcode.

Opcode nedir?
Opcode, Bitcoin Script'in tek bir baytıdır ve doğrulama yapan bir düğüme sırada ne yapacağını, yani veriyi yığına mı iteceğini yoksa yığında zaten bulunan veri üzerinde tek bir işlem mi gerçekleştireceğini söyler.

Bitcoin Script'in sabit bir sözlüğü vardır: 256 olası bayt değeri, bunlar da literal veri iten opcode'lar ile zaten itilmiş veri üzerinde işlem yapan opcode'lar arasında dağılır. Eski bir script en fazla 201 işlem yapan opcode çalıştırabilir ve 10.000 baytı aşamaz. Bitcoin satın alan biri için bu küçük sözlük, bir cüzdanın ücreti yayınlamadan önce bildirebilmesinin ve Bitcoin'in kontrolden çıkan sözleşme hatalarına yüzey sunmamasının nedenidir.

Nasıl çalışır

Doğrulama yapan bir düğüm bir script'i bayt bayt okur ve her baytı sabit bir tabloda arar. 0x01 ile 0x4b arasındaki değerler talimat değildir: her biri, sonraki N baytın literal veri olduğunu ve yığına ait olduğunu söyler; bu yüzden 33 baytlık sıkıştırılmış bir genel anahtar bir script'te 0x21 ve ardından anahtarın kendisi olarak görünür. Üç itme kodu daha, OP_PUSHDATA1, OP_PUSHDATA2 ve OP_PUSHDATA4, daha uzun öğeleri kapsar; 0x51 ile 0x60 arasındaki değerler ise yeter sayılarında görülen 1 ile 16 arasındaki küçük tam sayıları iter.

0x60'ın üzerindeki her şey veri taşımak yerine iş yapar ve Bitcoin'in saydığı bunlardır. Taproot öncesi bir script en fazla 201 tane içerebilir, 520 bayttan büyük hiçbir yığın öğesi tutamaz, yığınlarında 1.000 öğeden fazlasını tutamaz ve toplamda 10.000 baytı aşamaz. Dört rakamın hepsi Bitcoin Core içindeki script.h dosyasından çıkar ve dördü de bir düğüm işletmecisinin gevşetebileceği tercihler değil, uzlaşma kurallarıdır.

On beş opcode tabloda listelenir ama ölüdür. OP_CAT, OP_MUL, OP_LSHIFT ve on iki tanesi daha, bir çökme hatasının ardından 2010 yılında kapatıldı ve bunlardan birini yalnızca içeren bir script, hiç çalışmayan bir dal içinde olsa bile başarısız olur. Hiçbiri bir daha etkinleştirilmedi. Bu tek karar, Bitcoin'in script yapısının “programlanabilir” sözcüğünün insanlarda uyandırdığı beklentiden daha dar olmasının en büyük nedenidir.

Tapscript, Taproot harcamalarının muhasebesini yeniden yazdı. Kasım 2021'de 709.632 bloğundan itibaren yürürlükte olan BIP-342, hem 201 talimatlık üst sınırı hem de 10.000 baytlık boyut sınırını kaldırdı ve yerine bir imza bütçesi koydu: işlem, script'in kontrol ettiği her imza için 50 ağırlık birimi taşımalıdır. Ayrıca tanımsız bayt değerlerinden oluşan bir bloğu OP_SUCCESS kodlarına dönüştürdü, böylece bunlardan birini içeren bir script hiç çalıştırılmadan geçerli olur. Bu, gelecekteki yükseltmeler için bilerek bırakılmış alandır.

Bitcoin satın alırken bu neden önemli

Opcode'lar para çekme işleminizin nelere mal olacağını belirler. Eski bir çıktı, 25 bayt içinde 20 baytlık bir hash çevresinde dört çalışan talimat yazar; yerel SegWit karşılığı bir sürüm baytı ve bir itmedir, 22 bayt; bir Taproot çıktısı ise 34 bayttır. SegWit kilidi açan tarafı ağırlığın dörtte biri karşılığında witness'a taşıdığı için, bir bech32 çıktısını harcamak aynı ödemenin eski sürümü için yaklaşık 148 bayta karşı yaklaşık 68 sanal bayt tutar. Para çekme sırasında, borsa sunduğu her yerde bech32 veya bech32m seçmek, bu sözlükteki en ucuz kararlara yakındır.

Opcode'lar ayrıca imzalama cihazınızın gerçekte neyi işleyebileceğini belirler. Yalnızca standart tek anahtarlı şablonları tanıyan bir donanım cüzdanı, zaman kilitli bir kasayı veya alışılmadık bir politikayı birlikte imzalayamaz; bu yüzden miras planlaması veya çoklu imza planlarınızın herhangi bir yerinde varsa, cihazı satın almadan önce, bitcoinler cihaza yerleştirildikten sonra değil, incelemelerde script desteğini kontrol edin.

Bu darlık bir eksiklik değil, bir güvenlik özelliğidir. Döngü yok, başka bir işlemi okumanın yolu yok ve harcamalar arasında kalıcı bir durum yok; dolayısıyla programlanabilir zincirlerden milyarlarca dolarlık kayba yol açan arıza biçiminin, yani bir sözleşmenin yazarının hiç düşünmediği girdilerle doğru davranmasının, oluşabileceği bir yer yoktur. Bitcoin kayıpları borsalardan, oltalamadan (phishing) ve kaybolan yedeklerden gelir, script motorunun yanlış ateşlemesinden değil.

Uygulamalı örnek: OP_NOP2'nin artık bir iş yapmaya başladığı gün

OP_NOP2, 0xb1 baytıydı ve hiçbir şey yapmıyordu; tabloda sonraki kullanım için bırakılmış numaralandırılmış on no-op'tan biriydi. BIP-65 ona bir iş verdi: işlemin locktime değerinin geçtiğini doğrulamak ve geçmediyse script'i başarısız kılmak. Zorunluluk 2015 yılının 14 Aralık günü 388.381 bloğunda başladı ve opcode o günden beri OP_CHECKLOCKTIMEVERIFY olarak anılıyor.

İşin püf noktası, eski yazılımın hâlâ hiçbir şey yapmayan bir bayt görmesiydi, bu yüzden yeni işlemleri yine geçerli sayıyordu. Zaman kilidini yalnızca yükseltilmiş düğümler uyguladı. Bir yumuşak çatalı yumuşak yapan bu asimetridir ve aynı yolla OP_NOP3, Temmuz 2016'da 419.328 bloğunda OP_CHECKSEQUENCEVERIFY oldu. Sekiz ayrılmış no-op yuvası kaldı; bu, Taproot öncesi kurallar altında Bitcoin'in kalan yükseltme alanının çoğu ve tasarım dikkatinin bu kadarının Tapscript'in oluşturduğu OP_SUCCESS değerlerine kaymasının büyük bir nedenidir.

Opcode vs Bitcoin Script

Bitcoin Script dildir ve bir opcode onun sözlüğündeki tek bir sözcüktür. Bu ayrım, Bitcoin'in ne yapabildiği veya yapamadığına dair iddiaları okurken önemlidir, çünkü son on yılın neredeyse tüm ciddi önerileri, etrafındaki dili değiştirmek değil, yeni tek bir opcode tanımlamak önerisiydi. OP_CHECKTEMPLATEVERIFY, OP_CAT ve OP_CHECKSIGADD'in her biri tek bir işi olan tek bir bayttır ve covenant'lar veya kasalar hakkındaki kamuya açık tartışmalar, belirli bir baytın bir şey ifade etmesine izin verilip verilmemesi tartışmalarıdır. Yeni bir opcode geldiğinde yığın, sınırlar ve döngülerin yokluğu tam olarak olduğu gibi kalır.

Karıştırılmaması gerekenler

Sık sorulan sorular

Bitcoin, Ethereum gibi akıllı sözleşmeler çalıştırabilir mi?

Hayır ve bu tasarım gereğidir. Bitcoin Script'te döngü yoktur, işlemler arasında kalıcı depolama yoktur ve aritmetik ile metin opcode'larının on beşi 2010 yılından beri devre dışıdır; bu nedenle bir script sabit bir harcama koşuluna yalnızca evet ya da hayır yanıtı verebilir.

Bitcoin satın almak veya elde tutmak için opcode'ları anlamam gerekir mi?

Hayır. Cüzdanlar script'leri sizin için oluşturur. Opcode'ları bilmek yalnızca para çekerken bir adres biçimi seçtiğinizde veya çoklu imza kurduğunuzda önem kazanır, çünkü iki karar da hangi opcode'ların çalıştığını ve harcamanın ücretler açısından neye mal olduğunu değiştirir.

Bitcoin zinciri bölmeden yeni bir opcode'u nasıl ekler?

Eski düğümlerin zaten yok saydığı bir baytı yeniden tanımlayarak. OP_NOP2 ve OP_NOP3 bu şekilde 2015 ve 2016 yıllarında iki zaman kilidi opcode'u haline geldi ve Tapscript aynı amaçla 2021 yılında yeni bir OP_SUCCESS değerleri bloğu ayırdı.

Sıradaki okuma

İlgili terimler

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

Bu sayfayı İngilizce okuyun