Hard Forks & Soft Forks
Hello!
Ufak Detay serisinin bu yazısında blok zincirde değişiklik yapılması gerektiğinde nasıl bir süreç işliyor? Sorusuna yanıt ararken Ethereum’ un kurucusu Vitalik Buterin’ den konuyla ilgili yorumlarına değineceğim.
Blok zincirler araştırma ve geliştirme süreci devam ederken ölçeklenebilirlik (scalability), işlevsellik (functionality), esneklik (flexibility), saldırı vektörleri (attack vectors) gibi çeşitli nedenlerden dolayı güncellenmektedir. Bu güncelleme işlemine fork (çatallanma) denmiştir. Blok zinciri merkezi olmadığı için, forklama kararını veren merkezi bir otorite yoktur.
Fork işleminin iki farklı türü bulunmaktadır.
- Soft Fork
- Hard Fork
Soft Fork
Soft Fork, geriye dönük olarak uyumlu olan bir yazılım yükseltmesidir. Bu, eski sürümde kalan düğümlerinde (node) ağa katılmaya devam edebileceği anlamına gelir. Soft fork’larda kurallar üzerinde ciddi değişiklikler yapılmaya izin verilmediğinden, herkes işlemleri doğrulayabilecek ve ağ ile uyumluluğu sürdürebilecektir. Ama şu detayı da hatırlatalım. Eski sürümde kalan düğümlerin yeni özelliklerden yararlanamayacağı için işlevsellik, performans, gibi açılardan geri kalması muhtemeldir.
- Soft Fork, kullanıcılar için daha kullanışlıdır çünkü kullanıcıların blok zincirde kalmak için yükseltme yapmaları gerekmez.
- Soft Fork işleminin blok zincirin kopmasına yol açma olasılığı daha düşüktür.
Hard Fork
Hard Fork, blok zincir kurallarını değiştirmek için tasarlanmıştır. Bu nedenle, kuralın eski sürümlerini çalıştıran düğümler artık yeni zincire katılamazlar. Bu durum genellikle eski sürümdeki düğümler yeni sürüme geçen düğümler tarafından derlenen ve yeni kurallara uyan blokları doğrulayamadığı zaman gerçekleşir.
“Fork” terimi, tam düğüm operatörleri (full-node operator) blok zincirdeki kuralın eski sürümünü çalıştırmaya devam ettiği sürece var olacak iki paralel zincirden türemiştir. Genellikle, eski yazılımı çalıştıran düğümler, blok zinciri sürümlerinin eski olduğunu fark eder ve en son sürüme geçmek için yükseltme yaparlar.
- Hard Fork sürecinde yeni kuralların eski kurallara uyumlu olmasına gerek olmadığı için geliştiricilere yükseltme konusunda çok daha fazla esneklik sağlar.
Bir de topluluk arasında uyuşmazlığın olduğu Hard Fork’ lar bulunmaktadır. Genellike blok zincirler açık kaynak kodludur, yani herkes kodu incelemekte, katkıda bulunmakta ve kullanmakta özgürdür. Bu nedenle, topluluğun herhangi bir üyesi kodu değiştirebilir ve yeni bir blok zincir oluşturabilir veya eski blok zinciri koruyabilir.
Bilaterel Hard Fork’ ların klasik örneği, topluluğun Bitcoin’in nasıl ölçeklendirilmesi gerektiği konusunda anlaşamadığı Bitcoin Core ve Bitcoin Cash War’ dır. Detayını öğrenmek isterseniz aşağıdaki haberi inceleyebilirsiniz.
Şimdi Hard Fork ve Soft Fork’ u örnek üzerinden somutlaştıralım. Mevcut blok zincirde bir bloğun 10 MB’ a ulaştıktan sonra blok zincirine ekleneceğine dair kuralımız olsun. Güncellemeyle 5MB’ a ulaşan bloklarında blok zincire ekleneceğine dair kural güncellemesi yaptık. Böylelikle hem eski hem yeni sürümdeki düğümler blok zincirine blok ekleyebilirler. Eski düğümler blok zincirine 10 MB’ lık blok eklemeye çalıştıklarında hata alacakları için zamanla yeni sürüme yükseltme yapmaları gerekecek.
Peki blok zincire eklenmesi için gerekli olan blok boyutunu 15 MB’ a çıkaran bir güncelleme yapsak? Bu sefer eski sürümdeki düğümler yeni kurala uyumlu olmadığı için blok eklemesi yapamayacak. Bu aşamada madenci (miner) düğümünü eski kuralla mı çalıştırmaya devam mı edeceğine yoksa yeni kurala mı güncelleyeceğine karar vermesi gerekiyor. Hard Fork oluşturmak için blok zincirdeki büyük bir topluluğun onaylaması gereklidir. Yoksa fork başarıyla tamamlanmaz.
Hard Fork için sıklıkla yapılan eleştirilerden biri de “zorlayıcı” olduğudur. Burada ima edilen zorlama türü topluluk yoluyla zorlamadır. Topluluk, kuralları A’dan B’ye değiştirirse, kişisel olarak A’yı isteseniz bile, diğer kullanıcıların çoğu B’yi istiyor ve B’ye geçiyorsa, diğer herkesle aynı ağda olmak için değişikliği kişisel olarak onaylamamanıza rağmen B’ye geçmeniz gerekir.
Vitalik Buterin’ de tam bu noktada sanılanın aksine “zorlayıcı” olarak Soft Fork’ un olduğunu belirtiyor. Çünkü Soft Fork sürecinde kullanıcılara seçenek hakkı sunulmadığını eski sürümdeki kullanıcıların bir süre sonra mecburen yeni sürüme geçmesi gerektiğini belirtiyor. Hard Fork’ un kullanıcıların gözünde zorlayıcı olmasının sebebini de kullanıcıyı bir yazılım güncellemesi yüklemeye “zorlaması”, Soft Fork’ un ise kullanıcıların hiçbir şey yapmak “zorunda” olmamasıyla açıklıyor. Özetle her iki fork türünün de zorlayıcı olduğunu, kullanıcı özgürlüğünü ön planda tutarak Hard Fork’ un daha iyi bir geçiş olduğunu belirtmektedir.
There is an essential difference between hard and soft forks: hard forks are opt-in, whereas soft forks allow users no “opting” at all. In order for a user to join a hard forked chain, they must personally install the software package that implements the fork rules, and the set of users that disagrees with a rule change even more strongly than they value network effects can theoretically simply stay on the old chain -Vitalik Buterin
Yazı boyunca değişiklik yapılırken arkada dönen sürece ve Vitalik Buterin’ in konuya olan bakış açısını taradığım kaynaklar aracılığıyla sizlere aktardım. Bir sonraki yazımda biraz daha derine inerek Bitcoin (BTC) ve Ethereum (ETH)’ daki fork süreçlerine nasıl karar verdiklerine anlatacağım.
Görüşmek üzere 🚀 🙌
Kaynaklar
- (İnternet) https://vitalik.ca/general/2017/03/14/forks_and_markets.html
- (İnternet) https://ethereum.org/en/history/
- (İnternet) https://medium.com/mycrypto/the-history-of-ethereum-hard-forks-6a6dae76d56f
- (İnternet) https://eips.ethereum.org/EIPS/eip-1
- (Kitap) Mastering Ethereum: Building Smart Contracts and DApps 1st Edition
- (Kitap) Mastering Blockchain
- (Kitap) Ethereum For Dummies 1st Edition
- (Kitap) Blockchain For Dummies 3rd Edition