Java ile Kripto Para Yazılım Uygulaması

Java ile Kripto Para Yazılım Uygulamasını basit ve temel olarak kripto paranın mantığının anlaşılması için yapılmıştır. Genelde kripto paralar C++ gibi düşük seviyeli programlama dilleri ile yazılıyor. Java ile yazılmış bir kripto para henüz yok. C++ programlama diline düşük seviyeli denilmesinin sebebi; sistem kaynaklarına yakın ve etkin yazılım yapılabilmesidir. Özellikle madencilik gerektiren kripto paralar, çok sistem kaynağı gerektirmektedir. İlk kripto para olan Bitcoin C++ dilinde çok güçlü bir şekilde kodlanmıştır.

Bitcoin’nin mucidi Satoşi Nakamoto (muhtemelen Avustralyalı iş insanı Craig Wright), 2008 yılında patlak veren A.B.D deki emlak balonu (mortgage) krizinden etkilenerek bitconi geliştirdiğini söylüyor. Belkide Bay Nakamoto ekonomideki balon sistemini çözmüştür. Her şey güven ve “değer balonu” üzerine kuruluyor. A.B.D. deki mortgage  krizinde; herkes çok uzun vadeli krediler ile kolayca mülk sahibi olabiliyordu. Kolayca mülk alınabildiği için mülk fiyatları şişerek iki üç katına belki de daha fazla oldu. Banka bu verdiği krediler üzerinden fonlar, değerli kağıtlar üretip sattı. Mülklerin fiyatları aşırı değerlendiği için sahipleri yüksek meblağlı krediler çekip kolayca borçlanabildi. Krediler geri ödenmemeye başlayınca balon patlamaya başladı. Gayri menkuller gerçek değerine indi ve bankaların elindeki kağıtlar elinde kaldı.



Aslında tüm ekonomiler “değer balonu” ve güven üzerine işliyor. Ekonomiler büyümek için bir değer balonu arıyor. Bu değer balonlarından en eskisi altın, emlak, petrol, dolar. Tüm bunlar aslında insanlar değer verdiği için değerlidir.  İşte kripto paralar da özellikle Bitcoin, bir değer balonu olma yolunda hızla ilerliyor. Teknolojisini ispatladıkça ve güven kazandıkça, çok büyük ve uzun süreli bir “değer balonu” olmaya adaydır.

Kripto para sistemi; birçok farklı teknolojinin bir araya gelmesiyle oluşturulan sistemdir. Kriptoloji, P2P ağ, IPFS, Konsensüs algoritmalarından oluşur.

Kriptoloji:

Kripto para sistemlerinde özet alma (hash) fonksiyonları kullanılır. sha256 gibi özet algoritmaları geriye dönüşümsüz çok büyük girdileri sabit 256 bitlik benzersiz değerlere döndürür. Kripto para madenciliğindeki blok bulma; sıfır ile başlayan sha256 özetini bulmaktır. Kaç tane yan yana sıfır ile başlayan özet bulunması zorluk seviyesini belirler.  Örnek olarak Bitcoin Diamond zorluk derecesi 116547.766953407 olarak bildirilmektedir. Bitcoin zorluk seviyesi on dakida bir blok bulunması üzerine kurgulanmıştır. Eğer bir blok on dakikadan az bir sürede bulunursa bir sonraki blok için zorluk seviyesi otomatik olarak artırılır.

P2P Ağ:

Noktadan noktaya ağ, merkezi omayan blok zinciri uygulamanın temel sistemlerinden birisidir. P2P bağlantıları kripto para sisteminde madenciler ve ağ nodları oluşturur. Ağ nodları tüm blok zincirini üzerinde depolar. Madenciler para üretimi ve işlemleri onaylama süreçlerini yönetir.

IPFS:

IPFS dağıtılmış web olarak tanımlanıyor.  Merkezi olmayan yeni bir internet sistemi. Bilindiği üzere internet üzerinde bir web sitesi yayınlamak için bir internet servis sunucusuna hostinge ihtiyacımız var. IPFS bu internet servis hizmetini merkezi olmayan dağıtık bireysel kullanıcı bilgisayarları üzerinden paylaştırarak sunuyor. Eğer bu yaygınlaşırsa web çok değişecektir. Kripto paralar bu sistemi blok zincirini yayınlamak için kullanıyor.



Unspent Transaction Outputs (UTXOs) Nedir?

UTXO; harcanmayan işlem (transaction) çıktılarıdır. Kripto para sisteminde bir işlemin çıktısı daha sonraki bir işlemin girdisi olacaktır. UTXO’ların toplamı bir nevi sizin hesap cüzdanınızdaki bakiyedir.

Konsensüs:

Kripto para tasarlayanlar, konsensüs kurallarını belirler. Kripto para ağındaki blok zincirine erişerek değiştiren tüm madencilerin ve nodların yani tüm blok zinciri kopyalarının her birinin aynı olduğu durumuna konsensüs deniliyor. Eğer farklılık olursa blok zincirinde çatallanma olur. Kripto para sistemin tüm ağına konsensüs ağ katmanı deniliyor.

Hard Fork:

Kripta para geliştiricileri zaman zaman sistem üzerinde değişiklik yapmak istiyorlar. Bu değişikliğin  tüm konsensüs ağı tarafından kabul edilmesi gerekir. Eğer edilmezse blok zinciri bölünüyor. Bu bölünmeye çatallanma hard fork deniliyor. Bitcoin hard forkleri Bitcoin CashBitcoin Diamond, Bitcoin Gold vb. gibidir.



Genesis Blok:

Üretilen ilk bloktur. Her şeyin bir başlangıcı olduğuna göre, blok zincirinin de bir başlangıcı var. Bu, özel bir durumdur. Çünkü kripto paranın mantığında önceki işlemlerin çıktıları, diğer yeni işlemlerin (transaction) girdileri olmalıdır. Bu yüzden özel olarak üretilen ilk bloğa genesis blok denir.

Java ile kripto para yazılım uygulamasının kaynak kodlarını https://github.com/nakitasarim/FreeCoin üzerinden inceleyebilirsiniz. Uygulamada kripto paranın P2P, konsensüs katmanı bulunmamaktadır. Blok zinciri kavramını basitçe anlamak için yapılmıştır. Temel olarak blok, işlem (transaction), cüzdan (wallet), madenci (miner) ve kriptoloji işlemleri mevcuttur.



Miner.java dosyasındaki zorluk derecesi difficulty = 5 olarak ayarlanmıştır. Bunun anlamı; bulunan özet (hash) değerlerinin ilk 5 karakterinin sıfır ile başlamasıdır. Kripto paradaki çözülmesi istenen problem budur.  Buradaki zorluk derecesini artırarak işlemin zorluğunu test edebilirsiniz.

Sitemdeki madenciler yeni blok bulduklarında kripto para kazanırlar. Aynı zamanda o zamandaki para gönderim işlemlerini (transactionlarını) de onaylayarak bloğa eklerler. Bunun karşılığında da para kazanırlar.



IntelliJ Idea ile oluşturulmuş proje kaynak kodu: GitHub

Çalışırken https://blockgeeks.com/guides/blockchain-coding/ ve https://medium.com/programmers-blockchain sitelerinden yararlandım. Yaptığımız kodlama da aslında medium.com daki yapılan uygulamanın çok az değiştirilerek çalıştırılmasından ibarettir. Kripto paranın mantığını iyice kavramak istiyorsanız http://learnmeabitcoin.com/   sitesinde oldukça güzel görsel anlatımlar mevcuttur. Eğer kripto para satın almak isterseniz, kripto para borsası Binance üzerinden güvenli bir şekilde alıp satabilirsiniz.

Etiketler: , , , , , , , , , , ,