Solidity dilinin ne olduğunu öğrendikten sonra akıllı kontratlarının arkasındaki yapı olan Blockchain'in temellerine göz atmamız faydalı olacaktır.
Blokzinciri teknolojisini anlamamızda işimizi kolaylaştıracak bazı kavramlar var.
- Mining
- P2P (Peer to Peer)
- Hashing
- Merkle Tree
- Elliptic-curve cryptography
Mining, madenci olarak isimlendirilen kişilerin kendi donanımlarını, aygıtlarını kullanarak blockchain ağındaki havuzda biriken işlemleri matematiksel işlemleri çözerek onaylaması ve karşılığında ödül kazanmasıdır. Madenciler havuzda biriken işlemleri (bloklar) onaylamak ve ödül kazanmak için şifrelenmiş bulmacaları çözmelidirler. Bu akış ağdaki güveni ve sürdürülebilirliği sağlayan temel etkendir.
Peer to peer (p2p), iki veya daha fazla istemci arasındaki bilgi paylaşımını bir merkeze başvurmadan, eşler arası, sağlayan bir ağ protokolüdür. Peer to peer ağ protokolünde, bir merkez ve merkezi koordinasyon olmadığından ağa dahil olan bilgisayarlar kendi donanımlarını, güçlerini, işlemci gücü, disk depolama veya ağ bant genişliği gibi kaynaklarını kullanarak hem tedarikçi hem de diğer protokollerin birçoğundaki gibi tüketici konumundadır. [Vikipedi]
Hashing(Karma işlevi), uzunlukları farketmeksizin almış olduğu girdileri sabit uzunlukta karma verilere çeviren, veri kümelerine haritalayan algoritma ya da alt programlardır. [Karma_işlevi] Hashing'de sizin girmiş olduğunuz verinin her harfine, rakamına veya sembolüne göre belirli uzunlukta karmaşık veri çıkartılmaktadır.
Merkle ağacı, ya da Hash ağacı, bilgisayarlar arasında transfer edilen veya barındırılan verilerin doğrulanmasında kullanılan bir yöntemdir. Ralph Merkle tarafından 1979 yılında patenti alınmıştır.
Merkle ağacı ile farklı boyutlardaki verileri parçalayarak ve ardından karma yöntemi uygulayarak(hashing) elde ettiğimiz şifreli veriyi parçadan bütüne ya da tam tersi şekilde ilerleyerek yorumlarız. Böylelikle hatanın olup olmadığını veya hangi dalda bozulma gerçekleştiğini anlayabiliriz.
Merkle Tree(Merkle Ağacı), P2P ağlarında eşler arası gönderilen verilerin hasar tespiti, güvenilirliği, değişim durumunu farketmemize ve buna göre önlem almamıza da yardımcı olur.
Eliptik eğri şifrelemesi, anahtar anlasması, dijital imzalama ve daha birçok alanda kullanılan, sonlu cisimler üzerindeki eliptik eğrilerin cebirsel topolojisine dayanan bir açık anahtar şifrelemesidir. [Kaynak: Vikipedi]
Eliptik eğri kriptografisi çok kapsamlı bir konu olduğu için bu yazımızda tanım olarak bahsedeğiz.
Blockchain dağıtık, paylaşımlı, işleme dayalı bir ağdır. Ağa katılan her kişi (participant) ağdaki işlemleri ve işlemlerin detayını görebilir. Ağda yapılması istenen değişikliklerde bir işlem(transaction) oluşturulur. Oluşturulan işlem node denilen bilgisayarlar tarafından onaylanmalıdır. Aksi taktirde işlem iptal edilir ve değişiklikler uygulanmaz.
Blokzinciri ağında meydana gelen her işlem ana bir karmaya(root hash) sahiptir. Root hash, zaman (timestamp), işlemlerin genel özeti ve nonce gibi çeşitli bilgiler kullanılarak oluşturulan hexadecimal bir karmadır. Örneğin,
Her bloğa özel hem ana bir karma (root hash) hem de bir önceki bloğa ait karma (from hash) bulunmaktadır. [Resim 1.1]
[Hash ve blok ilişkisi - Kaynak: Microsoft]
Karmalar SHA-256 şifreleme yöntemi ile tek taraflı olarak şifrelenir. Yani karmalar çözülemez, içerisinden bilgiler alınamaz, sadece damgalama için kullanılır. [ayr.bkz]
Ethereum işlemleri kendi içerisinde standart ve gelişmiş bazı verileri barındırılmaktadır.
- İşlem karması(Transaction hash) - İşlemin onaylanması sonrası oluşturulan hash değeri
- Durum(Status) -
- Gas limit, ağda gerçekleşecek işlemin(transaction) harcayacağı maksimum işlem ücreti değeri
- Gas used, işlem sonunda harcanmış olan gaz miktarı
- Gas price, gaz birimi başına harcanacak ücret
- Nonce, gönderen kişinin işlem numarası
- Input data, işlem için gerekli olan ek veriler
Bloklar(blocks), blokzincir ağlarındaki işlemleri ve bloğa ait bazı ek bilgileri içeren yapılardır. Bloklar her ağda farklı sürelerde zincire dahil edilmektedir. Örneğin, Ethereum ağında yaklaşık 12 saniyede, Bitcoin ağında yaklaşık 10 dakikada bir işlemler bloklaştırılarak zincire eklenmektedir.
Ayrıca bloklar zincire düzenli aralıklarla eklendiği için dizi oluşur. Bu zincire de "Blockchain" adı verilir.
[Blokzincirinin örnek fotoğrafı - Resim 1.2]
Etherum ağındaki bloklar içerisinde standart ve karmaşık bazı veriler bulundurmaktadır.
- Blok yüksekliği(Block height) - Mevcut bloğun blok uzunluğu veya numarası. Örneğin, yeni bir ağınız var ve maksimum blok yüksekliği 500 olsun. Ağa dahil olan ilk bloğun yüksekliği 0 olur ve ardışık olarak artar. (0-1-2-3-4-...-499-500) Blok numarası 500 olan blok eklendiğinde ağa artık yeni blok katılamaz gibi düşünebiliriz.
- Zaman(Timestamp) - Madencinin bloğu çıkarmış olduğu zaman
- İşlemler(Transactions) - Bir bloğun içerisinde bulunan tüm işlemlerin sayısı ve bilgisi. [Resim 1.2]
- Madenci(Miner) - Bir bloğun çıkarılmasını sağlayan madencinin bilgileri (madenci adresi)
- Ödül(Reward) - Bir bloğa eklenen işlemlerden alınan ücretlerin (gas fees) toplamı, madencinin blok oluşturması sonucu aldığı ödül miktarı (ETH cinsinden)
- Zorluk (Difficulty) - Blok madenciliğinin matematiksel işlemlerin çözümü, yeni blok oluşturma zorluğu
- Amca Ödülü(Uncles Reward) - Ethereum ağının güvenliği için önemli olan Uncle Block'un üretilmesi sonucu ortaya çıkan ödüldür. Normal bloktan daha az bir değere sahiptir ve genellikle reddedilir
- Büyüklük(Size) - Bloğun toplam boyutu (byte-megabyte). Ayrıca bloklarda bulunan işlemlerin artması boyutu da etkilemektedir.
- Kullanılan gas(Gas used) - Blok içerisinde gas limiti belirtilen işlemler(transactions) için ne kadar gas kullanıldığını gösteren bilgi
- Gaz limiti(Gas limit) - Blok içerisindeki tüm işlemler için belirtilen gas limit değeri toplamı
- Ek veriler(Extra Data) - Madencinin ağa işlemiş olduğu ek veriler
- Ana karma(Hash) - Bloğun özelleştirilmesini sağlayan kriptografik yöntemlerle karma uygulanmış(hashing) ana karma değeri (root hash)
- Önceki karma(Parent hash) - Şu anki bloktan bir önce eklenmiş olan bloğa ait olan karma değeri (hash)
- Sha3Uncles - Ethereum Javascript RLP'nin boş bir dizeyi kodladığı Parent Hash için gerekli olan tüm amca blokların(uncle blocks) karması(hash)
- StateRoot - Sistemin durumunu barındıran Merkle Tree'nin ana karma değeri (state root hash)
- Nonce - Madencinin iş kanıtını(Proof of Work) gösteren karma değer
İki madenci birbirine çok yakın zamanlarda iki blok oluşturduğunda düğümler(nodes) arasında yalnızca bir blok onaylanır. Onaylanmayan madenciye de Uncles Reward ödülü verilir. [ayr. bkz. Standart veriler]
Amca bloklar(Uncles blocks),
- kimin madenci olduğu,
- ne kadar ödül kazanıldığı,
- bloğun yüksekliğinin ne olduğu,
- ne zaman oluşturulduğu
gibi bilgileri madenciden alır ve gösterir.
[Ethereum ağının ilk bloğunun standart ve gelişmiş verileri - Etherscan]
Solidity serimizin ikinci yazısında işlemler(transactions), bloklar(blocks), blokların ve işlemlerin taşıdığı standart ve gelişmiş veriler gibi bazı detay konulara değindik. Bir sonraki yazıda accounts(hesaplar) konusunu ele alacağız. Takipte kalın!
Yorumunu Bırak
Yorumlar
0 Yorum yokHenüz yorum yapılmamış. İlk yorum yapan sen ol.