git init
git add .
git commit -m "initalize javafx"
git remote add origin URL
git push -u origin master
git clone https://github.com/hamitmizrak/Ecodation_TechIstanbul_Blockchain.git
JDK JavaFx bizlere önerdiği JDK sürümü 17'dir.
Settings => Build, Execution => Compiler => Build Compiler (JDK 17 seçelim)
Projects Structure => Project (JDK 17 seçelim)
Projects Structure => Modules => Module,Source,Dependency (JDK 17 seçelim)
Projects Structure => SDK => (JDK 17 seçelim)
Build => Rebuild Project
Build => Rebuild Project
mvn clean
mvn clean install
mvn clean package
mvn clean package -DskipTests
module-info.java bu dosya içinde izinler vermemiz gerekiyor.
Bu JavaFX destekli Java projesi olan “JavaFX Smart Contract Blockchain Simulator”, temel bir blockchain (blok zinciri) sisteminin arka plan mantığını simüle eder. Aşağıda projenin ne işe yaradığını, bileşenlerini ve senaryo akışını çok detaylı bir şekilde açıklıyorum:
Bu proje, birden fazla kullanıcının cüzdan (wallet) bakiyelerini yönettiği, bu kullanıcılar arasında transferlerin yapılabildiği, her üç işlemde bir blok oluşturarak bu işlemleri zincire kalıcı olarak kaydeden basit ama işlevsel bir blockchain simülasyonudur.
Proje, aşağıdaki kavramları öğretmek veya uygulamak için geliştirilmiştir:
- Blockchain yapısı
- SHA-256 hash algoritması
- Genesis Block (ilk blok)
- İşlem zinciri (Transaction pool)
- Akıllı kontrat simülasyonu
- Konsensüs ve zincir geçerliliği
- Java'da nesne yönelimli programlama uygulamaları
- JavaFX üzerinden grafiksel arayüze genişletilebilirlik
Bir transfer işlemini temsil eder:
- Gönderen (
from
) - Alıcı (
to
) - Miktar (
amount
)
SHA-256 hash fonksiyonunu uygular. Blockchain’de verilerin bütünlüğünü sağlamak için kullanılır.
Bir blok nesnesini temsil eder:
index
: Blok sırasıtimestamp
: Zaman damgasıtransactions
: İşlem listesipreviousHash
: Önceki bloğun hash değerihash
: Bu bloğun hash değeri
Blok zincirini yönetir:
- Genesis bloğunu oluşturur.
- Yeni blokları zincire ekler.
- Zincirin geçerliliğini kontrol eder.
- Zinciri yazdırır.
Her kullanıcıya bir cüzdan oluşturur ve bakiyesini takip eder. Transfer sırasında bakiyeyi günceller.
İşlem havuzu yönetimini yapar ve 3 işlem biriktiğinde yeni blok oluşturur. Ayrıca transfer işlemlerinin başarıyla gerçekleşmesini denetler.
Komut satırından çalışan test senaryosudur. Kullanıcıdan giriş alarak menü üzerinden:
- Transfer yapılmasını
- Blockchain’in yazdırılmasını
- Cüzdan bakiyelerinin görüntülenmesini
- Zincirin geçerliliğinin kontrolünü sağlar.
-
Blockchain Başlatılır. (Genesis Block oluşur)
-
3 Kullanıcı Cüzdanı: "Hamit", "Habibe", "Hulusi"
-
Kullanıcı Transferi: Kullanıcılar birbirine para transfer eder.
-
Transfer Havuzu: Her transfer havuza atılır. 3 transfer birikince blok oluşur.
-
Zincir Büyür: Yeni bloklar önceki bloğun hash değerine bağlı olarak eklenir.
-
Kullanıcı Bakiyeleri Güncellenir.
-
Konsol Menü üzerinden kullanıcı;
- Transfer yapabilir.
- Blockchain’i yazdırabilir.
- Tüm cüzdanları görebilir.
- Zincirin geçerli olup olmadığını görebilir.
- ✅ Kullanıcı adı geçerli değilse tekrar sorar.
- ✅ Negatif miktar girişi engellenir.
- ✅ Bakiye yetersizse işlem yapılmaz.
- ✅ Zincir geçerliliği her blokta hash ve önceki hash eşleşmesiyle kontrol edilir.
Bu temel yapı istenirse şu şekilde genişletilebilir:
- JavaFX ile kullanıcı arayüzü: TextField, ComboBox, Button’larla kontrol
- Dosya sistemine export/import
- Ağ üzerinden diğer node’larla senkronizasyon
- Gelişmiş smart contract kuralları (şartlı işlemler)
Bu proje, bir blockchain zincirinin teknik mimarisini, güvenliğini ve işlem kontrolünü sade ve anlaşılır bir biçimde modelleyen bir örnektir. Eğitim amaçlı olarak çok etkilidir. Gerçek dünyada aşağıdaki alanlara temel oluşturabilir:
- Kripto para cüzdanları
- Dijital sözleşmeler
- Dağıtık sistem altyapıları
- Güvenli veri transferi uygulamaları
Yukarıdaki blockchain simülasyonu projesine aşağıdaki gelişmiş özellikleri ekleyerek sistemi daha işlevsel, öğretici ve gerçek dünyaya daha yakın hâle getirebilirsiniz:
- Her kullanıcı için
public
veprivate key
üretimi yapılabilir. - İşlemler
private key
ile imzalanabilir, doğrulamapublic key
ile yapılabilir. - Bu, gerçek blockchain güvenliğini öğretir.
-
Koşullu işlemler:
if (amount > 1000 && userType == "student") return "Limit aşımı!";
-
Tarih bazlı sözleşmeler (gelecekte otomatik tetiklenme)
-
DAO benzeri yönetim kuralları
- Her kullanıcı kaç işlem yapmış?
- Toplam transfer edilen miktar nedir?
- Hangi blokta kaç işlem var?
blockchain.json
gibi bir dosyaya zincirin kaydedilmesi- Program başlarken bu dosyadan blockchain’in geri yüklenmesi
-
Şu anda blok oluşmayı bekleyen işlemleri ayrı listele:
contract.getPendingTransactions().forEach(System.out::println);
- Bloklardan birinin içeriğini bilinçli bozup
isChainValid()
sonucunu test etme - Kullanıcılara zincir saldırısı örnekleri gösterilebilir
- Aynı anda iki farklı yol izleyen zincir örnekleri (fork durumu)
- Konsensüs mekanizması: uzun zinciri kabul etme
- Cüzdanlara sabit bir token türü atama (örnek:
EduCoin
,SmartToken
) - İleride farklı token işlemleri yapılmasını sağlayabilir
-
Arayüz tasarımıyla kullanıcı:
- Liste kutusundan kullanıcıları seçebilir
- Transfer formu doldurabilir
- Cüzdan bakiyelerini grafikle görebilir
- Blockchain yapısını tablolu veya grafiksel görebilir
- Birden fazla bağımsız blockchain node'u
- Her node’un kendi zinciri
- Broadcast ile zincir paylaşımı, konsensüs sağlama
-
Her bir sınıfa özel JUnit testleri yazılabilir:
TransactionTest
BlockTest
WalletTest
BlockchainValidationTest