Konsensüsün babası: Proof-of-Work’a (İş İspatı) dair rehber

Bu makale aşağıdaki dillerde mevcuttur:

Author logo
Patrick Dike-Ndulue
Post image

Temel içgörüler

Makale, proof-of-work’ün (PoW) kökenlerini ve gelişimini ele alıyor; başlangıçta kaynak suistimalini önlemek için bir araçken, Bitcoin’in merkeziyetsiz blokzincirinin temeli hâline geldiğini açıklıyor. PoW’un işlemleri nasıl güvenceye aldığını ve madencilerin çözdüğü hesaplama bulmacalarıyla çift harcamayı nasıl önlediğini detaylandırıyor; ölçeklenebilirlik ve enerji tüketimi gibi zorluklara da dikkat çekiyor. Bu sınırlamaları aşmak için, makale blokzincir katmanlarının ve güvenlik ile merkeziyetsizliği korurken verimliliği artırmayı amaçlayan yeni konsensüs mekanizmalarının gelişimini vurguluyor.

Bugün merkeziyetsiz ağlarda birçok farklı konsensüs mekanizması kullanılıyor, ancak her şey proof-of-work (PoW) ile başladı. PoW’un nasıl ortaya çıktığını, nasıl çalıştığını ve Web3’te neden hâlâ temel algoritmalardan biri olduğunu anlatıyoruz.

Başlangıçta, proof-of-work merkeziyetsiz ağların temeli olarak tasarlanmamıştı. Hatta kriptoparalarla hiçbir ilgisi yoktu ve aslında “paylaşılan kaynak” kullanıcılarını çeşitli suistimal türlerinden korumak için geliştirilmişti. 1993’te ortaya atılan bu kavramın yaratıcıları, belirli bir kaynağa erişimi, katılımcıların karmaşık hesaplamalar yapmasını gerektiren bir çözümle kısıtlamayı önerdi. Ayrıca, bu hesaplamaların sonuçlarının kolay ve hızlı bir şekilde doğrulanabileceği de belirlendi.

Uygulanabilir ilk versiyon ise ancak beş yıl sonra, Adam Back’in spam’le mücadele amacıyla geliştirdiği Hashcash projesiyle ortaya çıktı. Fikir, toplu e-posta göndermeyi zorlaştırmak için kriptografi kullanmaktı. Her e-posta gönderilmeden önce, göndericinin karmaşık bir hesaplama yapması – x değerini öyle bulmalı ki SHA(x) hash’i N adet baştaki sıfır bitten oluşsun – ve sonucu (proof-of-work) mesaj başlığına eklemesi gerekiyordu.

Mektubun alıcıya ulaşabilmesi için, göndericinin kriptografik problemi çözdüğünün doğrulanması gerekir. Bu, önceden hazırlanmış bir etiketi kullanarak tek seferlik bir SHA-1 hesaplamasıyla çok hızlı yapılabilir. Bu etiket, gönderici tarafından problemi çözmeye başlamadan önce oluşturulur ve sistemdeki tüm katılımcılara açık hâle gelir. Sonuç olarak, birkaç mektup göndermek sorun yaratmaz; ancak toplu e-posta kampanyası için ciddi işlem gücüne ihtiyaç duyulur.

Kulağa tanıdık geliyor değil mi? Bu kavram, 2008’de Satoshi Nakamoto tarafından Bitcoin ve onun proof-of-work blokzinciri için kullanıldı.

PoW blokzincirler nasıl çalışır?

Nakamoto’nun (gerçek bir kişi mi yoksa bir geliştirici grubu mu olduğu hâlâ bilinmiyor) temel amacı, üçüncü taraflardan bağımsız, merkeziyetsiz bir elektronik para sistemi oluşturmaktı. Böylece para, bankalar gibi aracı kurumlar olmadan doğrudan gönderilebilecekti.

İşlemlerle ilgili bilgiler, sistem katılımcılarına dağıtılmış bir kayıtta tutulur. Sıralama süreci, işlemlerin bloklar hâlinde paketlenmesini içerir ve bu bloklar sınırlı boyuttadır. Her blok, önceki blokla ilgili bilgileri içermek zorundadır. Bunun için tüm ilgili veriler (işlemler, önceki bloğun hash’i, zaman damgası vb.) benzersiz bir kod olan hash’e dönüştürülür. Bu işlem, Bitcoin’de SHA-256 olarak adlandırılan bir hash fonksiyonu ile yapılır. Zincirlerin yönetiminden özel “tam düğümler” sorumluyken, madenci düğümler yeni blokların oluşturulmasında rol alır.

Burada önemli bir nokta, hash fonksiyonunun aynı veri kümesinden her zaman aynı hash’i üretmesidir. En küçük bir değişiklik bile farklı bir hash sonucu doğurur.

Daha önce belirttiğimiz gibi, bir bloğun zincire eklenebilmesi için madencilerin hash’i hesaplaması gerekir. Bu işlem kendi başına çok zaman almaz; ancak hesaplama probleminin çok hızlı çözülmesini önlemek için ağ, her 2.016 blokta bir zorluk seviyesini ayarlar. Bu yaklaşık iki haftalık bir süreye karşılık gelir. Amaç, blok madenciliği süresinin yaklaşık on dakika olmasını sağlamak ve blokzincirin istikrarlı çalışmasını temin etmektir.

Peki bu süreç pratikte nasıl işler? Madenciler blokları giriş olarak alır ve hash’i hesaplar. Ancak ağ, hash’in belirli bir değerden düşük olmasını ister. Ama – hash’in değiştirilemeyeceğini söylemiştik, değil mi? Nasıl oluyor bu? İşte burada nonce (yalnızca bir kez kullanılan sayı) devreye girer. Madenciler, hesaplamalar sırasında bloğa nonce ekler ve değiştirerek farklı hash’ler elde eder. Sonra, elde edilen hash’i zorluk hedefiyle karşılaştırırlar; eğer hash değeri daha büyükse, nonce tekrar değiştirilir ve hash yeniden hesaplanır. Bu süreç, eşleşme bulunana kadar (sonuç hedef hash değerine eşit ya da daha küçük olmalı) milyonlarca kez tekrar edilebilir.

Görevin ölçeğini daha iyi anlamak için şu sayıya bakın:

115792089237316195423570985008687907853269984665640564039457584007913129639936

Bu, SHA-256 hash’inde olası kombinasyonların sayısıdır. Evrenimizdeki yıldızların sayısının 115 milyar katı kadar!

İşlem zinciri

Şimdi tüm bu sürecin nasıl işlediğini görmek için standart bir işlemi ele alalım. Diyelim ki birine BTC gönderiyoruz. İşlemi özel anahtarımızla oluşturup imzaladıktan sonra, ağda yayınlıyoruz. Tam düğüm, işlemin doğruluğunu kontrol eder ve bir sorun yoksa işlemin ağda ilerlemesine izin verir. Diğer düğümler de doğrulama yapar ve işlemi onay bekleyenler (mempool) kuyruğuna ekler.

Madenciler, mempool’dan işlemleri toplar (öncelikle yüksek komisyon getirenleri seçer), bunları bir blokta toplar ve hesaplamalara başlar. Madencilerden biri problemi çözdüğünde, tam düğümler çözümü kontrol eder ve doğruysa madenci ödül alır. Bu noktada blok “kazılmış” sayılır ve blokzincire eklenir; bilgisi tüm ağ katılımcılarına iletilir. Ardından madenciler yeni blok üzerinde çalışmaya başlar. Aynı zamanda, işlemin yer aldığı bloktan sonra blokzincire ne kadar çok blok eklenirse, işlemin onay seviyesi de o kadar artar.

Basitçe söylemek gerekirse, bir işlemin geçerli sayılması için ağdaki çoğu düğümün, işlemi içeren bloğun doğru hesaplandığına hemfikir olması gerekir.

Tüm bunlar kaçınılmaz mı?

Nakamoto, merkeziyetsiz bir sistem oluşturmayı amaçlayan ilk kişi (veya ekip) değildi; fakat proof-of-work konsensüs mekanizmasını kullanan ilk kişi oldu. Onsuz, çift harcama sorununu çözmek mümkün olmazdı; bu sorun, bir göndericinin sistem işlemi onaylamadan aynı fonları iki kez harcamasıyla ortaya çıkar. Madenciler, mempool’dan aldıkları işlemleri her seferinde çift harcama açısından kontrol eder.

PoW blokzincirinde iki madencinin aynı bloğu kazması mümkündür. Bu, kötü niyetli bir durum olmak zorunda değildir; iki madenci neredeyse aynı anda hesaplamayı tamamlarsa ve biri bloğun zaten kazıldığını zamanında öğrenemezse ortaya çıkabilir. Böyle bir durumda, hatalı bloktan başlayan paralel bir zincir oluşur. Yanlış “dal”ı ortadan kaldırmak için konsensüs mekanizması iki blokzinciri karşılaştırır ve daha uzun olanı tercih eder.

Sorunlar ve sınırlamalar

PoW’un en büyük sorunu – en saf hâliyle – ölçeklenebilirliktir. Örneğin, Bitcoin blokzincirinin saniyede yaklaşık 7 işlem kapasitesi vardır, bu da oldukça düşüktür. Bu nedenle, yoğun dönemlerde mempool dolar ve düşük işlem ücretli işlemler saatlerce, hatta günlerce bekleyebilir. İlk bakışta, hızı artırmanın en kolay yolu blokları büyütmek (daha fazla işlemi sığdırmak) ya da daha hızlı kazmak gibi görünebilir.

Ancak blok boyutunu artırmak ciddi sonuçlar doğurur: Blok oluşturmak için çok daha fazla işlem gücü gerekir ve bunun sonucunda yalnızca büyük madenciler veya madencilik havuzları ağda kalır, bu da merkeziyetsizliği azaltır.

İşlem süresini kısaltırsanız, ağ düğümlerinin bir sonraki blok gelmeden önce fikir birliğine varamama riski doğar. Bu da blokzincir “dallarının” artmasına ve çift harcamayı mümkün kılmasına yol açar.

Tüm bunlar, blokzincir üçlemesi kavramında özetlenir: Merkeziyetsiz ağlar aynı anda yalnızca üç temel faydadan ikisini sunabilir – merkeziyetsizlik, güvenlik ve ölçeklenebilirlik. PoW bağlamında bunu çözmek için blokzincir katmanları kullanılır. Bu katmanlar ana sistemin “üzerinde” çalışır ve işlem hızlarını artırır.

Ayrıca, PoW ile birlikte çalışan yeni konsensüs protokolleri de geliştirilmektedir. Örneğin, Kaspa, ağı güvenceye almak için PoW kullanır, ancak bloklar blokzinciri yerine yönlendirilmiş asiklik grafikte paketlenir; böylece madenciler farklı bloklar üzerinde paralel çalışabilir.

Daha sıradan bir sorun ise şudur: Bir blokzincir ne kadar fazla işlem gücü toplarsa, hesaplama karmaşıklığı ve madencilikte enerji ihtiyacı da o kadar artar.

Author logo
Yazar Patrick Dike-Ndulue

Senior editor covering crypto, onchain equities, and technology.

Author logo
İnceleyen: Rukkayah Jigam

Writer & editor covering digital assets and product updates.