Konsensüsün babası: Proof-of-Work (İş İspatı) rehberi

Author logo
Patrick Dike-Ndulue
Post image

Temel içgörüler

Makale, proof-of-work (PoW) mekanizmasının kökenlerini ve evrimini ele alıyor; PoW'un başlangıçta kaynak kötüye kullanımını önlemek için geliştirildiğini ve Bitcoin’in merkeziyetsiz blok zincirinin temeli haline geldiğini açıklıyor. PoW'un işlemleri nasıl güvenceye aldığı ve madenciler tarafından çözülen hesaplama bulmacalarıyla çifte harcamayı nasıl engellediği anlatılırken, ölçeklenebilirlik ve enerji tüketimi gibi zorluklara da değiniliyor. Bu sınırlamaların aşılması için blok zinciri katmanlarının ve yeni konsensüs mekanizmalarının geliştirildiği, böylece verimlilik artarken güvenlik ve merkeziyetsizlikten ödün verilmediği vurgulanıyor.

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 neden hâlâ Web3'ün temel algoritmalarından biri olduğunu anlatıyoruz.

Başlangıçta proof-of-work, merkeziyetsiz ağların temeli olarak tasarlanmamıştı. Kripto paralarla da ilgisi yoktu ve aslında “paylaşılan kaynaklar”ı kötüye kullanıma karşı korumak amacıyla geliştirilmişti. 1993 yılında ortaya atılan bu kavramın yaratıcıları, bir kaynağa erişimi kısıtlamak için katılımcıların karmaşık hesaplamalar yapmasını gerektiren bir çözüm sundu. Ayrıca, bu hesaplamaların sonuçlarının kolay ve hızlı şekilde doğrulanabileceği de belirlendi.

Uygulanabilir ilk versiyon ise ancak beş yıl sonra, Adam Back’in Hashcash projesini geliştirmesiyle ortaya çıktı. Hashcash’in ana amacı, spam ile mücadeleydi. Fikir, toplu e-posta göndermeyi zorlaştırmak için kriptografi kullanmaktı. Her e-posta gönderilmeden önce, gönderenin karmaşık bir hesaplama yapması – x değerini bulup SHA(x) hash’inin N adet baştaki biti sıfır olacak şekilde – ve sonucu (proof-of-work) mesaj başlığına eklemesi gerekiyordu.

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

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

PoW blok zincirleri nasıl çalışır?

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

İşlemler hakkındaki bilgiler, sistem katılımcılarına dağıtılmış bir kayıtta tutulur. Sıralama süreci, işlemlerin bloklar halinde paketlenmesiyle gerçekleşir; blokların boyutu sınırlıdır. Her blok, bir önceki bloğa ait bilgileri içermelidir. 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, Bitcoin’de SHA-256 adı verilen bir hash fonksiyonu ile yapılır. Özel “tam düğümler” zincirlerin yönetiminden sorumluyken, madenci düğümler yeni blokların oluşturulmasında rol alır.

Burada önemli bir nokta, hash fonksiyonunun aynı veri setinden her zaman aynı hash’i üretmesidir. En küçük bir değişiklik bile farklı bir hash ile sonuçlanır.

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

Peki bu pratikte nasıl işler? Madenciler blokları alır ve hash’i hesaplar. Ancak ağ, hash’in belirli bir değerden düşük olmasını ister. Ama hash değiştirilemiyor demiştik, peki bu nasıl mümkün oluyor? Burada devreye nonce (yalnızca bir kez kullanılan sayı) girer. Madenciler, hesaplamalar sırasında bloğa nonce ekler ve değiştirir, böylece farklı bir hash elde ederler. Sonra, elde edilen hash’i zorluk hedefiyle karşılaştırırlar; eğer hash değeri daha yüksekse nonce tekrar değiştirilir ve hash yeniden hesaplanır. Bu işlem, sonuç hedef hash değerine eşit veya daha düşük olana kadar (milyonlarca kez) tekrarlanır.

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

115792089237316195423570985008687907853269984665640564039457584007913129639936

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

İşlem zinciri

Şimdi tüm bunların nasıl işlediğini görmek için standart bir işlemi ele alalım. Diyelim ki BTC olarak birine fon gönderiyoruz. İşlemi özel anahtarımızla oluşturup imzaladıktan sonra ağa gönderiyoruz. 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 onaylanmamış işlemler (mempool) kuyruğuna ekler.

Madenciler, mempool’dan işlemleri toplar (öncelikle yüksek komisyonlu olanları 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ış” kabul edilir ve blok zincirine eklenir; bilgisi tüm ağ katılımcılarına iletilir. Ardından madenciler bir sonraki blok için çalışmaya başlar. Aynı zamanda, işlemimizin bulunduğu bloktan sonra blok zincirine ne kadar çok blok eklenirse, işlemin onay seviyesi de o kadar artar.

Basitçe ifade etmek gerekirse, bir işlemin geçerli sayılması için ağdaki çoğu düğümün, işlemin bulunduğu bloğun doğru şekilde hesaplandığı konusunda hemfikir olması gerekir.

Bunların hepsi kaçınılmaz mı?

Nakamoto, merkeziyetsiz bir sistem oluşturmayı amaçlayan ilk kişi (veya ekip) değildi; ancak proof-of-work konsensüs mekanizmasını kullanan ilk kişi oldu. Bu mekanizma olmadan, bir göndericinin sistem işlemi onaylamadan aynı fonları iki kez harcaması anlamına gelen çifte harcama sorunu çözülemezdi. Madenciler, mempool’dan aldıkları işlemleri her seferinde çifte harcama açısından kontrol ederler.

PoW blok zincirlerinde, iki madencinin aynı bloğu kazması mümkündür. Bu her zaman kötü niyetli bir durum değildir; iki madenci neredeyse aynı anda işlemi tamamladığında ve birinin, bloğun zaten kazıldığını zamanında öğrenememesi durumunda 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 blok zincirini 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 haliyle – ölçeklenebilirliktir. Örneğin, Bitcoin blok zincirinin saniyede işleyebildiği işlem sayısı yaklaşık 7’dir ve bu 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 veya daha hızlı kazmak gibi görünebilir.

Ancak blok boyutunu artırmak ciddi sonuçlar doğurur: Blokları 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 konsensüse ulaşamama riski doğar. Bu nedenle, blok zincirinde “dal” sayısı artar ve çifte harcama mümkün hale gelir.

Tüm bunlar, blok zinciri üçlemesi olarak bilinen kavramda özetlenir: Merkeziyetsiz ağlar aynı anda yalnızca üç temel avantajından ikisini sunabilir – merkeziyetsizlik, güvenlik ve ölçeklenebilirlik. PoW bağlamında bunu çözmek için blok zinciri 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üvenliği için PoW kullanır, ancak bloklar blok zinciri yerine yönlendirilmiş çevrimsiz bir grafikte paketlenir; böylece madenciler farklı bloklar üzerinde paralel çalışabilir.

Daha sıradan bir sorun ise şudur: Bir blok zinciri 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.