
- Select a language for the TTS:
- Turkish Female
- Turkish Male
- Language selected: (auto detect) - TR
Play all audios:
BLOKZINCIRIN ÇALIŞMA MEKANIZMASINI ANLATTIĞIM YAZI DIZISININ IKINCISI, TRANSFER IŞLEMLERININ BLOKLAR IÇERISINDE KAYIT EDILMESIDIR. Yazılar genel olarak aşağıdaki konuları kapsamaktadır. *
Transfer İşlemlerinin Oluşturulması * Blokların Oluşturulması BLOKLARIN OLUŞTURULMASI Bir önceki yazıda transfer işlemlerinin nasıl dağıtık şekilde tutulduğundan bahsettik. Dağıtık cüzdanı
tutan düğümler, bir işlem mesajı aldığında bazı kontroller yapıyor ve uygun olan işlem kaydını defterine yazarak, mesajı diğer düğümlere dağıtmaya devam ediyordu. Burada çözülmesi gereken
diğer bir konu da çift harcama problemidir. İki kişi arasında transfer yapılırken, gönderici sahip olduğu bir veya daha fazla işlemi, yeni işleme girdi olarak ekliyordu. İşlem mesajını alan
düğümler de girdi olarak kullanılan eski işlemin harcanıp harcanmadığına bakıyor. Burada göz önünde bulundurulması gereken konu, yeni oluşturulan transfer mesajı ağ üzerinde dağıtılırken,
farklı düğümlere farklı zamanlarda ulaşıyor olması. “İzin gerektirmeyen açık paylaşımlı” ağlarda düğümler dünyanın farklı farklı yerlerinde bulunmaktadır. Burada meydana gelebilecek olan
durum, gönderenin kullandığı bir işlem girdisini diğer bir işlemde de kullanarak ağda yayınlamasıdır. Bu durumda, ağda dolaşan iki farklı işlem mesajı olacaktır ve ikisinde de aynı işlem
girdi olarak kullanılmış olacaktır. Mesajlardan birini alan düğüm bunu defterine yazacak ve dağıtmaya devam edecek. Fakat çift harcama yapılmış mesaj da başka düğümler tarafından defterine
yazılmış olacak ve ağda dağıtılmaya devam edecektir. Eğer bu transfer karşılığında alıcı (Mehmet) bir ürün veya hizmet sunuyorsa, çift harcanan transferlerden kendi adına olanı görüp
karşılığında geri alınamaz bir hizmeti(lisans key satışı gibi) karşı tarafa gönderebilir. Fakat diğer harcama ağda daha hızlı dağıtılarak düğümler arasında kabul edilen şeçilebilir.
Karşılığında hizmet satılan transfer işlemi ise düğümlere daha sonra ulaşacağı için, çift harcama olarak kabul edilecek ve deftere yazılmayacaktır. Bu durumda satıcı hem ürününden hem de
parasından olabilir. Düğümler bir işlem mesajı aldıklarında bunu defterlerine yazarlar. Fakat bazı düğümlere ilk olarak çift harcama olan ulaşabileceği için onlar da defterlerine bu kaydı
yazacak ve ağda iki farklı defter kaydı olacaktır. Bunu engellemek için ağdaki düğümler, işlemleri sırası konusunda mutabakata varmalılar. Bunu sağlamanın yolu da bitcoin blokzincirinde
matematiksel bir yarış olarak oyunlaştırılmıştır. Yapılan transfer işlemlerin sıralı şekilde yapılabilmesi için işlemler kayıt altına alınmalı ve oluşacak defter üzerine tüm ağ mutabık
kalmalıdır. Bunun için de transfer işlemlerinden kalıcı olarak kayıt edilmemişleri bir araya toplayarak bunlardan bir blok oluşturmak adına düğümler çalışmaya başlar. Düğümler seçtikleri
işlem bilgilerini değiştirilemez bir şekilde bir araya getirilerek (hash ve merkel ağacı) blok içerisine ekler ve yeni oluşturduğu bloğu mevcut blok zincirine ekler. Eklediği bu bloğu diğer
düğümlerin kendi blokzincirlerini güncelleyebilmesi için ağ üzerinde yayar. Fakat yeni bloğun oluşturulması için birden çok düğüm blok oluşturmuş ve ağa yaymış olabilir. Bu durumda ağdaki
düğümler, bir sonraki bloğun hangi blok olacağına nasıl karar verecek? Yeni bloğu hangi düğümün oluşturup blokzincire ekleyeceğini belirlemek için düğümler kendi arasında mutabakata
varmalılar. Bitcoin blokzincirinde mutabakat algoritması Emeğin İspatı (Proof of Work — PoW) olarak belirlenmiştir. Düğümler blokzincirine yeni bir blok ekleyebilmek için ortaya koydukları
emeği ispat etmelidirler. Bunun yolu da belli bir kriterde hash değeri üretmektir. Kriptografik hash fonksiyonunda (SHA256) fonksiyon içerisine konulan metne göre birbirinden farklı ama aynı
uzunlukta değerler üretilmektedir. Hash i hesaplanacak olan metinde bir karakterin bile değişmesi tamamen farklı bir hash değeri üretilmesine sebep olacaktır. Hash fonksiyonu sonucunda
üretilen değer belli bir kriterde olması gerektiğini belirttik. Hash i alınacak metin(işlemler) aynı olduğu için, farklı hash değerleri üretebilmek adına fonksiyona rastgele oluşturulan bir
sayı eklenir (nonce). Bu sayı her seferinde rastgele üretilerek tekrar tekrar hash fonkiyonuna sokulur ve oluşan hash değerinin ilk birkaç karakterinin (değişken sayıda) sıfır olup olmadığı
kontrol edilir. Eğer düğümlerden biri bu denemeler sonucunda beklenen kriterlere uygun bir hash değeri bulursa yeni bloğu eklemeye hak kazanır ve yeni yarattığı bloğu, bulduğu nonce değeri
ile beraber ağda yayınlar. Bu beklenen zorluktaki hash değerinin üretilebilmesi için gereken denemeler, standart bir bilgisayar ile bir yılı bulabilir. Fakat ağdaki tüm bilgisayarların
denemesi ile yaklaşık olarak 10dk bir blok üretilmektedir. Nonce değerinin üretilmesindeki rastgelelik ile, bir sonraki bloğu kimin üreteceği dengeli bir şekilde dağıtılmıştır ve aynı anda
iki kişinin blok ekleme ihtimali de oldukça düşüktür. Bulunan yeni bloğun, mevcuk blok zincirine eklendiği söylemiştik. Bu zincir ilişkisini sağlamak için, hash fonksiyonuna bir önceki
bloğun hash i girdi olarak verilir. Bu sayede oluşan bir bloğun değişmesi de engellenir. Herhangi bir blok içerisinde yapılacak ufak bir değişiklik bloğun hash değerinin değişmesine sebep
olacak ve dolayısıyla o bloktan sonra gelen blokların da hash değeri değişecektir. Herhangi bir bloğa yazılan bir işlem değiştirilmek istediğinde, o bloğun hash değeri baştan
hesaplanmalıdır. Blokların içeriklerini hash’lerken bir önceki bloğun hash’i de kullanıldığı için sonraki blokların da hash’i baştan hesaplanması gerekmektedir. Onun için herhangi bir bloğa
müdahale etmek isteyen bir kişi en az bir bloğun veya daha fazlasınının hash’ini baştan hesaplamalıdır. Bir bloğu bir pc nin tek başına hesaplaması bir yılı bulabileceği için ve dağıtık
olarak hesaplandığında da nonce değerinin rastgeleliğinden dolayı aynı kişinin ard arda iki blok hesaplaması oldukca düşük olduğu için, blokların değiştirilemezliği güven altına alınmıştır.
Blokların bu değiştirilmeye karşı dayanaklığını sayesinde, bir bloğa yazılmış işlem, varlığını kalıcı olarak ispat etmiş demektir. Ağdaki işlem gücünün çoğunu elinde bulunduran biri daha
kolay bir şekilde blok içeriğini değiştirip yeni bir blok ekleyebilir olsa da, blokzincirinde geriye gittikçe, yapılan bir değişiklik sonucunda blokların zincirleme olarak değişmesi
gerekeceği için, bir transfer işlemi tamamlandığından emin olmak için birkaç blok beklenebilir. Blokzincirin sürekli bir şekilde çalışabilmesi için düğümler, işlemlerin doğrulanması ve yeni
blokların üretilmesi için çalışmalıdırlar. Bir düğümün tek başına yeni bir blok eklemesi oldukça zordur, onun için birçok düğüm eş zamanlı olarak yeni blok eklemek için çalışması
gerekmektedir. Sistemin devamlılığı sağlamak adına düğümleri çalışmaya ikna etmek için bir ödül sistemi getirilmiştir. Yeni bir blok eklemek için gerekli olan hash’i çözen düğüme ödül olarak
12.5 Bitcoin verilmektedir. (~424.000 TL — 25.03.2018). Ödülü elde edebilmek için blok eklemek üzerine çalışan düğüm, bloğun içine ekleyeceği transfer işlemlerinden ilkini kendi adına
tanımlar. Eğer gerekli olan nonce değerini bulup ta blok eklemeyi başarırsa kendi hesabına tanımlanmış 12.5 BTC yi ödül olarak alacaktır. Blok ödülüne ek olarak, blok içerisine ekleyeceği
işlemlerin ücretini de alır. Bunun için düğümler bloklara ekleyeceği işlemleri seçerken, ücreti yüksek tanımlanmış işlemleri öncelikli olarak seçer. Bir transfer işlemi tanımlarken işlem
ücretini ne karar yüksek tanımlarsanız işleminizin blok içerisine dahil olma ihtimali o kadar artar. Yeni üretilen blok için dağıtılan ödül sayesinde sisteme yeni bitcoinleri girişi
sağlanır. Bitcoin blokzincirinde blok ödülleri her 4 yılda bir yarılanacak şekilde ayarlanmıştır. Yarılanmalar sonucunda daha fazla BT üretilmeyecek ve toplamda 21 milyon BTC üretilmiş
olacaktır. Blok ödülleri sıfırlandığında blok ekleyen düğümler sadece işlem ücretlerini ödül olarak alacaktır. Blok eklemeye çalışan düğümler, emeklerin ispatı karışılığında (Proof of Work)
ödül olarak yeni bitcoinler ürettiği için bu işleme madencilik de denilmekte(Mining). Blokzincirinin sürekliliği için ağdaki düğümlerin aktif olarak blok eklemesi gerekmektedir. Herhangi bir
kişi işlem gücünü çok artırarak veya sisteme daha fazla düğümün dahil olması ile blokların üretilme süresi çok düşebilir. Bunu engellemek için dinamik olarak değişen bir zorluk sistemi
getirilmiştir. Üretilen blok hash inin ilk birkaç hanesinin 0 olması gerektiğini söylemiştik. Bu değeri bulabilmek içinde blok içeriğine eklenecek olan nonce değerini bulmak için defalarca
rastgele değer üretilmesi gerekmektedir. Yüksek işlem gücüne sahip olan biri hızlı bir şekilde nonce değerini bulup blokları seri bir şekilde eklemesini engellemek için, zorluk seviye
değişir ve hash değerinin başında olması gereken sıfırların adeti değişir. Eğer ağdaki işlem gücü artar ve blokların eklenmesi 10dk nın altına inerse sistem otomatik olarak zorluk seviyesi
artırır ve blok eklenme süresini 10dk civarına ayarlar. Eğer madencilik yapan düğümler azalır yani ağdaki işlem gücü azalırsa ve dolayısıyla blok eklenme süresi 10dk nın üzerine çıkarsa
sistem zorluk seviyesini azaltacaktır. Her iki haftada bir Bitcoin yazılımı tekrar kalibre olarak zorluk seviyesini ayarlar. KAYNAKLAR _Bitcoin: A Peer-to-Peer Electronic Cash System
__https://bitcoin.org/bitcoin.pdf__ How Bitcoin Works Under the Hood? __http://www.imponderablethings.com/__ How Does the Blockchain Work?
__https://medium.com/@micheledaliessi/how-does-the-blockchain-work-98c8cd01d2ae_