Sözlük / Protokol ve güncellemeler
SegWit
Diğer adları: Segregated Witness, BIP141.
- SegWit nedir?
- SegWit, imza verilerini bir işlemin txid'nin bağlandığı bölümünün dışına taşıdı; böylece işlem değiştirilebilirliğini giderdi ve bir megabaytlık temel sınırı değiştirmeden blok kapasitesini artırdı.
Tanımlandığı belge: BIP-141.
Değişiklik kozmetik değil yapısaldı. İmzalar, eski düğümlerin hiç indirmediği bir tanık bölümüne taşındı; bu sayede bir kapasite artışı yumuşak çatal olarak yayına alınabildi ve tanık baytları dört yerine bir ağırlık birimi tuttu. Bu nedenle bc1q adresinden harcama yapmak, eski tip bir girdinin maliyetinin yaklaşık yarısı kadar tutar.
Nasıl çalışır
Segregated Witness bir işlemi iki parçaya ayırır ve bunların hash'ini ayrı ayrı alır.
Temel parça sürümü, girdileri, çıktıları ve kilitleme zamanını (locktime) tutar. Tanık parçası ise her girdi için onu yetkilendiren öğelerin yığınını, tipik olarak bir imza ve bir genel anahtarı tutar. İşlem tanımlayıcısı yalnızca temel parça üzerinden hesaplanır, dolayısıyla tanıktaki hiçbir şey onu değiştiremez. İkinci bir tanımlayıcı olan wtxid ikisini birden kapsar ve bir bloktaki tüm wtxid'lerin Merkle kökü coinbase işleminin içine işlenir, böylece tanık verileri de tahrif edilemez.
Kapasite, sınırın değişmesinden değil muhasebenin değişmesinden gelir. Tanığın dışındaki her bayt dört ağırlık birimi, içindeki her bayt bir birim tutar ve bir blok 4.000.000 ağırlık birimi barındırabilir. Bu nedenle tanık dışı veri, tam olarak eskisi gibi, yine 1.000.000 baytı aşamaz; imzalar ise artan bütçede yol alır. Eski yöntemle ölçüm yapan 2017 öncesi bir düğüm geçerli bir blok görür ve itiraz etmez; sert çatala gerek kalmamasının nedeni de tam olarak budur.
BIP-143, bir tanık girdisinin nasıl imzalandığını yeniden yazdı ve pratik kazanç kulağa geldiğinden büyüktür. Eski imza hash algoritması işlemin bazı kısımlarını her girdi için yeniden hash'liyordu, bu yüzden girdi sayısı yüksek bir işlemi imzalamak karesel olarak büyüyordu. Yeni algoritma önceden hesaplanmış hash'leri yeniden kullanır ve en önemlisi harcanan tutarı da kapsar. Bundan önce bir donanım cüzdanına bir girdinin ne kadar değerinde olduğu konusunda yalan söylenebilir ve cihaz dev bir ücreti yetkilendirmeye yönlendirilebilirdi.
SegWit ayrıca çıktı türlerini numaralandırdı. Tanık sürümü 0, P2WPKH ve P2WSH türlerini kapsar; tanık sürümü 1 boş bırakıldı ve daha sonra Taproot ile dolduruldu. Artık yeni çıktı türleri, her seferinde yeni bir adres biçimi tartışmasına gerek kalmadan eklenebilir.
Bitcoin satın alırken bu neden önemli
Kendi Bitcoin kullanımınızdaki üç şey doğrudan bu yükseltmeye dayanır.
Birincisi, Bitcoin taşımak için ödediğiniz tutardır. Yerel bir SegWit girdisi yaklaşık 68 vbayt, eski tip bir girdi ise yaklaşık 148 vbayt yer kaplar; bu yüzden 20 sat/vB ücret oranında üç girdi harcayan bir cüzdan tek bir işlemde birkaç bin satoshi tasarruf eder. Bu tasarruf Bitcoin aldığınızda değil harcadığınızda ortaya çıkar, dolayısıyla önemli olan borsanızın para çektiği adres türü değil, kendi cüzdanınızın kullandığı adres türüdür.
İkincisi, donanım cüzdanınızın size güvenle ne söyleyebildiğidir. BIP-143 girdi tutarını kapsadığı için Trezor veya Ledger ekranında gösterilen ücret, bağlı bilgisayarın ileri sürdüğü veriden değil cihazın doğrulayabildiği veriden türetilir. Bu, gerçek bir saldırıyı kapattı ve eski tip bir girdiyi imzalamanın hâlâ cihaza tutarı kendisinin kontrol edebilmesi için önceki işlemin tamamının verilmesini gerektirmesinin nedeni budur.
Üçüncüsü Lightning ve dolayısıyla onun üzerine kurulan her borsadır. Strike değeri varsayılan olarak Lightning üzerinden taşır ve Lightning kanalları SegWit çıktılarına fonlanır çünkü protokol kararlı bir txid olmadan çalışamaz. SegWit yoksa kanal yoktur, onların üzerinde anlık takas ürünü de yoktur.
Önce ölmesi gereken değiştirilebilirlik hatası
İşlem değiştirilebilirliği (malleability) uç bir durum gibi kulağa gelir, oysa Bitcoin üzerine bir şey inşa etmenin önündeki tek en büyük engeldi.
Bir ECDSA imzasının birden fazla geçerli kodlaması vardır. SegWit'ten önce mempool'u izleyen bir üçüncü taraf, onaylanmamış bir işlemi alabilir, bir imzayı geçersiz kılmadan yeniden kodlayabilir ve yeniden yayabilirdi. Bitcoinler yine aynı yere aynı tutarda giderdi. Yalnızca işlem tanımlayıcısı değişirdi ve özgün tanımlayıcıyı kaydetmiş her yazılım artık ödemenin kaybolduğuna inanırdı. Mt. Gox, Şubat 2014'te para çekme işlemlerini durdurmasının nedeni olarak değiştirilebilirliği kamuoyu önünde gösterdi; bu iddiaya o dönemde başka geliştiriciler karşı çıktı, ancak altta yatan kusur gerçekti.
Ödeme kanalları bunu can sıkıcı olmaktan çıkarıp ölümcül hale getirdi. Bir kanal, fonlama işlemi henüz yayınlanmadan önce, txid ile tanımlanan bir fonlama çıktısını harcayan imzalı bir iade işlemi tutarak çalışır. txid değişirse iade harcanamaz hale gelir ve taraflardan biri diğerinin parasını rehin tutabilir. Joseph Poon ve Thaddeus Dryja'nın 2015 tarihli Lightning Network makalesi, kendi metninde değiştirilebilirlik düzeltmesini bir ön koşul olarak adlandırdı.
SegWit, imzaları tanımlayıcının ön görüntüsünden çıkararak sorunu kökünden giderdi. Bir tanık çıktısını harcayan her girdinin txid'sini hiçbir üçüncü taraf değiştiremez ve kanal protokolleri nihayet tasarlandığı gibi inşa edilebildi.
SegWit vs tanık verisi
SegWit yükseltmedir; tanık verisi onun oluşturduğu yapıdır. Biri tarihi, 24 Ağustos 2017, ve şartnamesi, BIP-141, olan bir olaydır. Diğeri bugün ağdaki işlemlerin çoğunda var olan, imzaları ve betikleri taşıyan, kendi serileştirmesi ve kendi indirimli ağırlığı olan bir alandır. Bir işlemin “SegWit kullandığını” söylemek, yetkilendirmesi o alanda bulunan girdileri harcadığını söylemenin kısa yoludur.
SegWit vs Taproot
Dört yıl arayla iki yumuşak çatal, ikisi de tanıklarla ilgili. SegWit tanık yapısını oluşturdu ve adresleri bc1q ile başlayan tanık sürümü 0 çıktı türlerini tanımladı. Taproot 1 sürümünü doldurdu, Schnorr imzalarını ekledi ve bir tanığın içindeki betiklerin nasıl değerlendirildiğini değiştirerek adresleri bc1p ile başlayan bir biçim üretti. Taproot ancak bu kadar ucuza yayına alınabildi çünkü SegWit sürümleme şemasını çoktan kurmuştu; bu yüzden ikisini aşamalar halinde yürütülen tek bir tasarım olarak okumak en doğrusudur.