Altcoins Talks - Cryptocurrency Forum

Local => Kripto Para Türkçe Forumları (Turkish) => Madencilik & Masternode => Topic started by: Marshal on June 26, 2018, 09:37:12 AM

Title: Mining - Difficulty, Target, Bits Değerlerindeki Değişiklikler
Post by: Marshal on June 26, 2018, 09:37:12 AM
Bitcoin dünyasında özellikle madencilik ile ilgili başlıkların altında sıklıkla gördüğünüz bu üç terim birbiri ile yakından bağlantılıdır. Hash hesaplaması yapan madencilerin amaçlarının target değerinden küçük veya ona eşit bir hash değeri bulmak olduğunu biliyoruz. Aslında target, tıpkı blokların hash değerleri gibi, 256 bit (32 byte) büyüklüğünde bir başka hash değeridir. Bu değişken, madencilere basitçe hedeflerini göstermektedir. Çünkü target değerine eşit veya ondan daha küçük hash değerini bulan ilk madenci yeni bloğu ekleyecek ve blok ödünü kazanacaktır. Bunu bir örnek ile incelemek için blockchain üzerindeki ilk bloğa (genesis block) bir göz atalım.

(https://cdn-images-1.medium.com/max/1600/1*pRKe_NhwYT3nx62Fm3crLg.png)

Bu üç terimin karışıklığı kullanıcılar için genelde bu noktada başlıyor. Çünkü bloğu incelediğinizde herhangi bir target değerine sahip olmadığını göreceksiniz. Blockchain üzerinde target değerini bits olarak daha kısa bir formatta görebiliyoruz. Bunun temel sebebi yer tasarrufu yapmaktır.

DLT (distributed ledger technology) sistemlerinin en sık karşılaştığı problem scalibility denilen veri büyüklüğünün kontrolüdür. Bitcoin gibi devasa bir sistemde bu sorun üzerinde çalışılmaz ise kısa zamanda sistemin sonunu getirebilir. Amaç, verileri olabildiğince kısa formatta saklamaktır. Bitcoin, bu alanda ciddi gelişmeler kaydedilmesini sağlamıştır. Daha sonra yakından inceleyeceğimiz SegWit, Segwit2x ve Lightning network bu alanda yapılmış çalışmalardır.

Bits, target değerinin sıkıştırılmış formatıdır. 4 byte büyüklüğündedir ve yine hexidecimal yapıdadır. Bu kısa format sayesinde 32 byte büyüklüğündeki target değerini 4 byte büyüklüğündeki bits değeri ile gösterebiliyoruz. Bu kısaltmanın yapılabilmesinin nedeni, aradığımız değerin (madencilerin aradığı hash değeri) özel bir değer olmasından ziyade belirli küçüklükte bir değer olmasıdır. Bu format, floating-point arithmetic hesaplamalarına benzemektedir. 4 byte büyüklüğündeki bits değerinin ilk byte’ı significant kısmının büyüklüğünü gösterir.

blockchain.info sitesinde bits değerleri decimal karşılıkları üzerinden gösteriliyor. Genesis block ‘un bits değerini bulmak için öncelikle bir decimal-to-hexidecimal çevirici (https://www.binaryhexconverter.com/) kullanmamız gerekiyor. 486604799 sayısının hexidecimal karşılığı 1d00ffff çıkmaktadır.

İlk byte olan 1d bize target için significant kısmının 29 byte olduğunu göstermektedir.

Öyleyse 00ffff ile başlayan significant değer

00ffff0000000000000000000000000000000000000000000000000000 şeklindedir.

Target değerinin 32 byte olduğunu biliyoruz. Öyleyse başında 3 byte 0 bulunmaktadır. Yani target:

00000000ffff0000000000000000000000000000000000000000000000000000 şeklindedir.

Bitcoin madenciliği anlatılırken kullanılan en genel örnek, hash değerinin başındaki 0 sayısı ile iligli oluyor. Hash değerinin başındaki 0 sayısının toplamı arttıkça zorluğunda arttığını ve aranan hash verilerinin aynı oranda 0 ile başlaması gerektiğini anlatıyoruz. Konunun temel olarak anlaşılması için en iyi örnek bu anlatım şekli olsada aslında hesaplanma ve kontrol şekli çok daha derin ve karmaşıktır.

Bitcoin madenciliğinin “Yeni blok: SHA-256[SHA-256(header)]≤ target” şeklinde formüle edildiğini söyledik. Burada dikkat edilmesi gereken nokta “baştaki 0 sayısı” deyiminin hash ve target değerlerinin binary formatı için kullanıldığıdır.

Difficulty değerine genesis block üzerinde baktığımızda karşılığını 1 olarak görüyoruz. Buradan şu formüle ulaşıyoruz:

(https://cdn-images-1.medium.com/max/1600/1*_XYzUb3MYWjggmSq0383vQ.png)

Yani bits değeri 0x1d00ffff olan ilk blok difficulty 1 olarak belirlenmiştir. Bu, aynı zamanda difficulty değerinin alabileceği en düşük sayı olarak sabitlenmiştir. Yani ağ üzerindeki toplam hesaplama gücü ne kadar düşerse düşsün zorluk bu noktadan sonra düşmeyecektir. Difficulty, zorluk hesaplamasını kolaylaştırmak için bir sabit değer sunmaktadır. Target 0x1d00ffff olduğunda bu hash değerine eşit veya ondan küçük bir hash sonucu bulmanın olasılığını hesapladığımızda, difficulty değeri üzerinden hesaplamalar ve kıyaslamalar yapmamız çok daha kolaylaşır. Örneğin 40000. bloğun difficulty değerine bir göz atalım:

(https://cdn-images-1.medium.com/max/1600/1*mpVWtgKSLwrHamqGTHfOgg.png)

40000. bloğuğun difficulty değeri 1.82 olarak görünüyor. Bunun anlamı istenen hash değerini bulmanın genesis block’a oranla 1.82 kat daha zor olduğudur. Difficulty sabiti sayesinde bu bilgiyi tek bakışta elde etmek mümkün. Aşağıda bitcoin sisteminin zorluk derecesinin yıllar içindeki artışını görebilirsiniz.

(https://cdn-images-1.medium.com/max/1600/1*wLuma0t77SzDl73mfkHEZg.png)

Zorluk derecesinin her 2016 blokta bir düzenlendiğinden daha önce bahsetmiştik. Burada hesaplama:

(https://cdn-images-1.medium.com/max/1600/1*DbBnLlz_z_rEy1pcn_oN0w.png)

formülüne dayanır. Bitcoin üzerinde her 2016 blokta bir bu hesaplama yapılır ve bu sayede zorluk her 10 dakikada bir yeni bir blok bulunacak şekilde ayarlanır. Zorluk derecesinde çok agresif oynamalar olmaması için tek seferde %400 değişilik sınırı getirmiştir.

17 Haziran 2018 itibariyle difficulty değeri 4.940.704.885.521'a (block #527945) ulaşmıştır. Bu, zorluk derecesinin yaklaşık 5 trilyon arttığını göstermektedir.

Not : Makaleyi hazırlayan Ahmet Seyhan (https://medium.com/@ahmetseyhan)'a Teşekkürler...