Proof of Work, Türkçe tabiriyle “işin kanıtı”, 1999 yılında Markus Jakobsson ve Ari Juels tarafından neredeyse 20 yıl önce oluşturulan bir tanımdır. PoW’ün ana hedefi, blok gönderiminden önce yapılması gereken çalışmayı gerektirerek hizmet reddi saldırılarını, yani kısaca DDOS, engellemektir. Kripto para dünyasındaki yerine bakacak olursak PoW, bir Bitcoin bloğu oluşturmak için, yeterli hesaplama gücüne sahip olmanız gerektiği anlamına geliyor.
Bitcoin’in madencilik amaçları için PoW’ü nasıl kullandığını gözden geçirmeden önce birkaç tane terim öğrenmeniz gerekiyor. İlk olarak öğrenmeniz gereken terim Hashing. Hashing, bir değer veya karakter dizisi alarak onu Özel Hash Fonksiyonları ile tamamen farklı bir değer ya da karakter dizisi haline getiren bir program sayesinde, sözde rastgele öngörülemeyen bir şekil haline getirmek anlamına geliyor. Örneğin Bitcoin, SHA-256 Algoritmasını kullanıyor. SHA-256 diğerlerine benzer birçok karışık programlardan bir tanesi.
Mesela “apple” kelimesinin SHA-256 algoritmasına göre yazılmış hali şu şekilde:
3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
Bu karışık harf ve sayılar bakıldığında kişiye anlamsız ve saçma geliyor. Aslında istenilen de tam olarak bu. Veriyi gizli tutmak. Ama şuan konumuz tam olarak da bu değil.
Bitcoin madenciliği yapan kişiler madencilik yaparken “mempool” da (Bitcoin kullanıcılarından aldıkları işlem taleplerinin bir listesi) bir dizi işlem seçip bir blok halinde bir araya getirirler. Bloğu ayarladıktan sonra bloğun sonuna “nonce” adı verilen bir sayı eklerler. Daha sonrasında da tüm bloğu SHA-256 algoritması ile yukarıda da gördüğünüz gibi rastgele bir dizi haline getirirler.
Bitcoin, oluşan dizinin madencilerin hesaplama güçlerine bağlı olarak değişecek şekilde n sayıda sıfır ile başlamasını gerektiriyor. Diyelim ki sayımız 20 olsun. Madenci bloğu hashlediğinde 20 tane sıfır ile başlayıp başlamadığını görmek için diziyi kontrol eder. Eğer 20 sıfır yok ise 20 sıfır ile başlayana kadar hashing işlemi devam eder.
Nonce sayısını ve sıfır sayısını, örneğimizde 20 tane sıfır gerekiyordu, doğru elde eden madenci bloğu kazmaya hak kazanır ve ödülün sahibi olur. Bunu başaran madenci, 50.000$’ın üzerindeki blok ödülünü ve blokta ödediği tüm işlem ücretlerini geri alır. Madenci, doğru nonce’a sahip olana kadar sürekli olarak denemek zorunda. Gördüğümüz üzere PoW ile madencilik yapmak için oldukça iş yapmanız gerekiyor. Buradaki önemli noktalardan bir tanesi, bu işlemleri gerçekleştirirken çok fazla işlem ve hesaplama gücüne sahip olunması gerektiğidir.
PoW’ün bir diğer önemli amaçlarından bir tanesi, çift harcamalara karşı oluşan korumadır. Örneğin bir Bitcoin kullanıcısı olan Berk’in “Berk, 2 BTC’yi Fatih’e gönderir.” olan işlemini sürekli olarak blok zincirine tekrar tekrar yerleştirmesini PoW engelliyor. Aynı zamanda Bitcoin ağını DDOS saldırılarına karşı koruyor. Çünkü bir bloğu doldurmak için yeterli miktarda işlem gücüne ihtiyacınız var. Ayrıca Bitcoin madenciliğini tekelinize almak için ise tüm Bitcoin madencilerinin hesaplama gücünün çoğunluğunun kontrolüne ihtiyacınız var. Böylesi bir durum pek de mümkün olabilecek bir şey değil. Hatta imkansız da diyebiliriz. Kısacası Berk’in parasını Fatih’e sürekli olarak göndermesi için hesaplama gücüne sahip olması mümkün değil. Böylece ağ iyi bir şekilde koruma altındadır.