You are on page 1of 30

T.C.

TRAKYA ÜNİVERSİTESİ
MÜHENDİSLİK FAKÜLTESİ
BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ
PROJE 2 RAPORU

BLOCKCHAİN VE AKILLI SÖZLEŞMELER İLE


SOSYAL MEDYA PLATFORMU

PROJE DANIŞMANI: Dr. Öğr. Üyesi Tarık YERLİKAYA

HAZIRLAYAN: BEKTAŞ IŞIK 1171602005


İÇİNDEKİLER

ÖZET……………………………………………………………………………………….i

İÇİNDEKİLER……………………………………………………………………………. ii

1. GİRİŞ

1.1. Blockchain nedir?................................................................................................1

2. GELİŞME

2.1. Blockchain ve Kripto Para Birimi……………………………………………...4

2.2. Bir Blockchain Adım Adım Nasıl Çalışır?......................................................... 4

2.3. Neden Blockchain'e İhtiyacımız Var?.................................................................7

2.4. Blockchain Avantajları…………………………………………………………9

2.5. Bir Blockchain'in Temel Öğeleri……………………………………………...10

2.6. Blockchain Ağlarının Türleri……………………………………………….... 11

2.7. Blockchain Geliştiricisi Nasıl Olunur?............................................................. 12

3. SONUÇ

3.1. Kullanılan Servisler……………………………………………………………14

3.2. Kullanılan Programlama Dilleri………………………………………………16

3.3. Proje Kodlarım……………………………………………………………….. 17

3.4 Ekran Görüntüleri……………………………………………………………...23

4. KAYNAKLAR………………………………………………………………………..... 27

ii
Özet

Neredeyse her Twitter kullanıcısı er ya da geç bir bot hesapla karşılaşıyor. Yumurta biçimindeki
standart Twitter profil resmini kullananların ciddi bir bölümü bu tür bot hesaplar. Twitter'daki bu
sahte hesaplar, bazen belli bir markanın reklamını yapmak, bazen de siyasal görüş ya da belli bir
parti adına manipülatif yönlendirmede bulunmak gibi amaçlar için kullanılabiliyor. Bot hesaplar
sayesinde takipçi sayısı yüksek gösterilebiliyor, belli tweetlerin retweet ve favorilere eklenme
sayısı artırılabiliyor. Ben bu duruma çözüm olarak günümüzde yaygın olan ve geleceğin ihtiyacı
Blockchain teknolojisini kullanarak sosyal medya uygulamasını geliştirdim. Bu platformda kişiler
kripto hesaplarını kullanarak giriş yaptığı için ve günümüzde kripto hesapları KVKK onaylı
olduğu için kişiler gerçek kişi olmadan hesap oluşturamıyor. Bu platforma sadece gerçek kişiler
dâhil olabiliyor. Bu platformda kişi 0 Eth değerinde post paylaşabilir. Kişi like atmak istediği
zaman cüzdanından 0,0001 ETH yani mevcut durumda 2,01 TL ye denk gelen bir bağış atabilir.
Bu attığı bağış postu paylaşan kişinin kripto hesabına dâhil olur. Bu sayede yeni iş modülü de
ortaya çıkmış olur. Kişilerin kazanç sağladığı ve sadece gerçek kişilerin post paylaşımı yapabildiği
bu platform, gelecek zamanlardaki yeni dünyanın ilk adımı olacaktır.

ii
GİRİŞ

-------------------------------------------------------------------------------

Blockchain nedir?

Blockchain’in nasıl çalıştığını açıklamak için bir benzetme üzerinden yola çıkalım. Bir
banka işlemine bakalım.

Ali’nin bir banka havalesiyle Veli'ye para göndermek istediğini varsayalım.

Tüm parası, iki temel amacı olan bir banka hesabında saklanır:

• Ne kadar parası olduğunu takip ediyor.


• Veli’ye banka havalesi yapmasına izin veren çevrimiçi bir portal sağlar.

Ali banka havalesine her yetki verdiğinde, bankası işlemi işler ve onun hesabından Veli’
nin hesabına para aktarır.

Perde arkasında, bankanın bunu mümkün kılan iki temel teknik özelliği var.

1
• Bir veritabanı - banka ilişkisinde, Ali’nin hesap bakiyesini ve işlem geçmişini
belirlemek için tüm işlemlerinin bir veritabanı defterini tutar.
• Bir network - banka ilişkisinde ise, banka havalelerini işlemek için bir ağ kullanır,
böylece fonlar onun hesabından Veli’ nin hesabına gönderilebilir. Ayrıca, bunu yapmak
için bağlanabileceği bir çevrimiçi portal sağlar.

Blockchain, banka ihtiyacını tamamen ortadan kaldırarak bu modele bir alternatif


sunuyor.

Veli’ ye banka havalesi yoluyla para göndermek yerine, ona doğrudan bir blok zinciri
ile kripto para birimi gönderebilir.

Bir bankaya çok benzeyen blok zinciri, ona fonlarını güvenli bir şekilde saklaması ve
Veli’ye para göndermesi için bir yer sağlar. Bir bankanın iki temel teknik özelliğinin
yerini alır.

• Veritabanı Blockchain’de Ali'nin ne kadar parası olduğunu takip eder.


• Blockchain’de network ise Ali, para göndermek için bir blok zincirine
bağlanabilir. Bunu yaptığında, blok zinciri işlemini işler ve fonları hesabından Veli'nin
hesabına aktarır.

2
Bu rollerin her ikisine de hizmet ettiği için blok zincirini aynı anda hem network hem
de veritabanı olarak düşünebilirsiniz. Bu kavramların her ikisini de daha ayrıntılı
inceleyelim.

Blok zinciri, eşler arası bir ağdır, yani hepsi birbiriyle konuşan bir düğüm veya
bilgisayar sistemidir.

Bankanın yerini tamamen alan dünya çapında bir bilgisayar gibidir.

Ali’nin Veli’ye para gönderebilmesi için işlemleri işlemekten sorumludur. İşlemini


başlatmak için ağdaki bir düğüme bağlanması yeterlidir ve blok zinciri geri kalanını
perde arkasında halleder. Şimdi blockchain'in bir veritabanı gibi nasıl çalıştığını
inceleyelim.

Ağdaki her düğüm, blok zincirindeki verilerin bir kopyasını tutar. Örneğin, hepsi
Ali’nin hesabında ne kadar para olduğunu biliyor.

Tüm bu verileri merkezi bir veritabanında saklayan bir banka yerine, blok zinciri,
ağdaki her bir düğümde yedekli olarak depolar. Bu, verileri kurcalamayı neredeyse
imkânsız hale getirir.

Örneğin, Ali hesap bakiyesini manipüle edemez, çünkü diğer tüm düğümler gerçekte
ne kadar parası olduğunu bilir.

3
GELİŞME
-------------------------------------------------------------------------------

2.1. Blockchain ve Kripto Para Birimi

Blockchain ve kripto para biriminin aynı şey olmadığını unutmamak önemlidir.

Bitcoin bir kripto para birimidir, ancak blockchain, Bitcoin'in altında yatan
teknolojidir. Blok zincirler, bu raporda göstereceğim kripto para biriminin yanı sıra
başka amaçlar için de kullanılabilir.

2.2. Bir Blockchain Adım Adım Nasıl Çalışır?


Verdiğimiz örnekten devam edelim. Ali’nin Veli’ye bir miktar Bitcoin kripto para
göndermek istediğini varsayalım.

Bunu yapmak için Ali ve Veli’nin her birinin Bitcoin blok zincirinde bir hesaba ihtiyacı
var. Hesapları, kullanıcı adlarına çok benzer: Ali, Veli’ye kripto para göndermek için
Veli’nin kullanıcı adını veya hesap adresini bilmelidir.

Ardından, işlemi göndermek için Ali'nin bir Bitcoin cüzdanına ihtiyacı var. Bu
senaryoda, cüzdanı 10 Bitcoin'e sahip olduğunu yansıtıyor. Buna "hesap bakiyesi"
denir.

4
Çok cömert davranarak, bu 3 adımlı süreçte Veli'ye 1 BTC (Bitcoin) göndermeye karar
verir:

1. Alıcı olarak Veli’nin hesap adresini girer.


2. Veli’ye 1 BTC göndermek istediğini belirtir.
3. Resmi hale getirmek için işlemi imzalar.

Son adımda, Ali işlemi özel anahtarıyla imzalar. Hesap adresi kullanıcı adı gibiyse, özel
anahtarı da şifresi gibidir. Bu, Bitcoin cüzdanında saklanan ve başka kimseyle
paylaşmayacağı hassas verilerdir.

Ali'nin özel anahtarı, Veli’ye 1 BTC göndermek gibi blok zincirindeki işlemlerine izin
veren dijital imzalar oluşturmasına olanak tanır.

Bu noktada Ali, işlemi tamamlamak için yapması gereken her şeyi yapmıştır. Sürecin
geri kalanı Bitcoin blok zincirindeki perde arkasında gerçekleşir. Bunun nasıl çalıştığını
görelim.

Ali'nin işlemi imzalandıktan sonra Bitcoin ağına gönderilir.

Bitcoin madencileri, Ali’nin işlemini blok zincirine kaydetmek için " proof-of-work "
sorunu adı verilen matematiksel bir bulmacayı çözmelidir. Her madenci, "nonce" adı
verilen rastgele şifrelenmiş bir sayıyı tahmin etmek için birbirleriyle rekabet eder.

5
Bu sayıyı tahmin eden madenci önce cevabını veya " proof-of-work " sunar. Bu, onlara
işlemi blok zincirine kaydetme ve madencilik yarışmasını kazanmak için bir Bitcoin
ödülü alma yetkisi verir.

Ne zaman kaydetseler, blok zincirinde yeni bir işlem kaydı oluştururlar. İşlem grupları,
blok zincirini oluşturmak için "birlikte zincirlenen" "bloklar" olarak adlandırılır.

Madencilik işlemi sırasında, ağ "consensus"a ulaşır, yani her düğüm, diğer herkesle
aynı geçerli verilere sahip olduğunu doğrular. Bu mekanizmaya "consensus
algoritması" denir. Etkili bir şekilde, her düğüm "Evet, Ali'nin işleminin geçerli bir
kopyasına sahibim" der.

Hepsi aynı fikirdeyse, işlem tamamlanmıştır. Kripto para, Ali'nin hesabından Veli’nin
hesabına aktarılır. Veli cüzdanını kontrol ettiğinde, artık 1 BTC'si olduğunu görecek.

6
2.3. Neden Blockchain'e İhtiyacımız Var?

Bankacılık örneğimizle devam edelim. Ali'nin para depolamak ve göndermek için blok
zinciri kullanmayı seçmesinin nedenlerinden bazıları şunlardır:

• İşlem Hızı: Diyelim ki Ali ve Veli farklı ülkelerde yaşadılar. Uluslararası bir banka
havalesinin tamamlanması günler alabilir. Bunun yerine Ali, Veli’ye Bitcoin'i birkaç
dakika içinde gönderebilir.

• İşlem Komisyonu: Diyelim ki Veli bir tüccar ve Ali ona çok pahalı bir hizmet için,
diyelim ki 10.000 dolar para ödemek istiyor. Ali, Veli'ye kredi kartıyla ödeme yaparsa,
Veli yaklaşık %2 veya 200 $ işlem ücretine tabi olacaktır. Veli, Ali'nin arkadaşı olduğu
için, paradan tasarruf etmesi için ona Bitcoin ile ödeme yapar. Artık Veli’den işlem
ücreti alınmıyor ve Ali, Veli’ye para göndermek için yalnızca birkaç ekstra dolar
ödüyor.

7
• Aracı Taraf Yok: Ali ve Veli’nin birbirleriyle işlem yapmak için herhangi bir 3. kişiyi
dâhil etmeleri gerekmez. Para göndermek ve almak için bir bankada herhangi bir belge
imzalamaları veya onay beklemeleri gerekmez.

• Şeffaflık: Tüm hesap verilerini merkezi bir veritabanında saklayan bir banka yerine,
bunun yerine blok zincirinde depolanır. Güvenli ağdaki tüm hesap bakiyesini ve
işlemlerini doğrulayabilir.

• Güvenlik: Geleneksel veritabanları ve BT sistemleri saldırılara açık olabilir. Ali'nin


hesap bakiyesini veya işlem geçmişini değiştirmek için Bitcoin blok zincirini
"hacklemek" neredeyse imkânsızdır.

• Dolandırıcılık Önleme: Blok zinciri işlemleri herkese açık olarak doğrulanabilir


olduğundan, şirketlerin sahte işlemler yapmayı veya fonları zimmete geçirmeyi çok
zorlaştıran dolandırıcılık karşıtı çözümler oluşturmasını sağlar.

8
2.4. Blockchain Avantajları [1]

Operasyon ekipleri, yinelenen kayıt tutma ve üçüncü parti doğrulama işlemlerine


genellikle boş yere çaba harcarlar. Kayıt tutma sistemleri, dolandırıcılığa ve siber
saldırılara açık olabilir. Sınırlı şeffaflık, veri doğrulamasını yavaşlatabilir. Ayrıca
IoT'nin gelişiyle birlikte, işlem hacimlerinde de büyük bir patlama söz konusu. Tüm
bunlar işi yavaşlatır, karlılığı düşürür ve daha iyi bir yola ihtiyacımız olduğu anlamına
gelir. Burada blockchain devreye girer.

Daha fazla güven

Blockchain, yalnızca üyelere açık olan bir ağın üyesi olarak, zamanında ve doğru
verileri aldığınızdan ve gizli blockchain kayıtlarınızın sadece özel olarak erişim izni
verdiğiniz ağ üyeleriyle paylaşılacağından emin olabiliriz.

Daha güçlü güvenlik

Tüm ağ üyelerinin veri doğruluğu üzerinde görüş birliğinde olmaları gerekir ve


doğrulanan tüm işlemler kalıcı olarak kaydedildiğinden bunlar hiçbir şekilde
değiştirilemez. Hiç kimse, hatta sistem yöneticisi bile, bir işlemi silemez.

Daha fazla verimlilik

Ağ üyeleri arasında paylaşılan dağıtılmış bir büyük defter sayesinde, zaman kaybına
yol açan kayıt mutabakatları ortadan kaldırılır. Ayrıca, işlemleri hızlandırmak için
blockchain içinde, akıllı sözleşme adı verilen bir dizi kural depolanıp otomatik olarak
yürütülebilir

9
2.5. Bir Blockchain'in Temel Öğeleri [2]

• Dağıtık büyük defter teknolojisi

Tüm ağ katılımcılarının, dağıtık büyük deftere ve üzerinde


değişiklik yapılamayan işlem kayıtlarına erişimi vardır. Bu
paylaşılan büyük defterle, işlemler yalnızca bir kez
kaydedilerek geleneksel iş ağlarında sık görülen aynı işlemi
tekrar etme ortadan kaldırılır.

• Üzerinde değişiklik yapılamayan kayıtlar

Bir işlem, paylaşılan büyük deftere kaydedildikten sonra hiçbir


katılımcı tarafından değiştirilemez veya kurcalanamaz. Bir
işlem kaydı hata içeriyorsa, hatayı tersine çevirmek için yeni
bir işlem eklenmelidir ve her iki işlem de görünür olur.

• Akıllı sözleşmeler

İşlemleri hızlandırmak için, blockchain'de akıllı sözleşme adı


verilen bir dizi kural depolanır ve bunlar otomatik olarak
yürütülür. Bir akıllı sözleşme, kurumsal tahvil aktarımlarına ait
koşulları tanımlayabilir, ödenecek seyahat sigortasına ait koşulları
ve daha fazlasını içerebilir.

10
2.6. Blockchain Ağlarının Türleri [3]

Genel blockchain ağları

Genel bir blockchain, Bitcoin gibi, herkesin katılabileceği bir blockchain'dir.


Dezavantajları, çok fazla bilgi işlem gücü gerekmesi, işlemler için çok az gizlilik olması
veya hiç gizlilik olmaması ve zayıf güvenlik olabilir. Bunlar, işletmelerin blockchain
kullanım senaryolarına yönelik göz önüne alacakları önemli konulardır.

Özel blockchain ağları

Genel bir blockchain ağına benzeyen özel bir blockchain ağı, dağıtılmış bir eşler arası
ağdır. Ancak, ağı yöneterek kimlerin katılmasına izin verileceğini kontrol eden, bir
uzlaşma protokolünü yürüten ve paylaşılan büyük defteri koruyan tek bir kuruluştur.
Kullanım senaryosuna bağlı olarak bu durum, katılımcılar arasında güveni önemli
ölçüde artırabilir. Özel bir blockchain bir şirket güvenlik duvarının arkasında
çalıştırılabilir ve hatta şirket içinde barındırılabilir.

İzne tabi blockchain ağları

Özel bir blockchain oluşturan işletmeler genellikle izne tabi bir blockchain oluştururlar.
Genel blockchain ağlarının da izne tabi olabileceğini unutmayın. Bu, ağa ve belirli
işlemlere kimlerin katılmasına izin verileceğiyle ilgili bazı sınırlamalar getirir.
Katılımcıların katılmak için bir davet ya da izin almaları gerekir.

Konsorsiyum blockchainleri

Bir blockchain'i koruma sorumluluğunu birden çok kuruluş paylaşabilir. Bu önceden


seçilmiş kuruluşlar, kimlerin işlemleri gönderebileceğini veya verilere erişebileceğini
belirler. Konsorsiyum türü blockchain, tüm katılımcıların blockchain için izne ve ortak
bir sorumluluğa sahip olması gerektiğinde işletmeler için idealdir.

11
2.7. Blockchain Geliştiricisi Nasıl Olunur?

Şimdiye kadar Bitcoin blok zinciri ile nasıl para gönderileceğini tartıştık. Şimdi blok
zincirinde çalışan uygulamaların nasıl oluşturulacağına odaklanmak istiyorum. Bitcoin
bu alanda oldukça sınırlıdır, bu yüzden onun yerine Ethereum adlı farklı bir blok
zincirine bakacağız.

Ethereum, kripto para birimi göndermeye ek olarak, geliştiricilerin blok zincirinde


çalışan merkezi olmayan uygulamalar veya dApp'ler oluşturmasına olanak
tanır. Ethereum bunu blok zincirinde çalışan programlar olan akıllı sözleşmelerle
başarır. Bu uygulamaların nasıl çalıştığını görelim.

Normalde bir web uygulaması kullandığınızda, bir ağ üzerinden merkezi bir web
sunucusuyla konuşan bir web sayfasını yüklemek için bir web tarayıcısı
kullanırsınız. Bu uygulamanın tüm kodu bu merkezi sunucuda bulunur ve tüm veriler
merkezi bir veritabanında bulunur.

Bu uygulama ile her işlem yaptığınızda, doğrudan bu merkezi sunucu ile etkileşime
girmelisiniz. Bu birkaç sorun sunar. Uygulama yaratıcıları, tam kontrole sahip oldukları
için sunucudaki uygulama kodunu veya veritabanını istedikleri zaman değiştirebilirler.

12
Bunun yerine blok zinciri kullanarak bu sorunları ortadan kaldırabiliriz.

Bir arka uç sunucusu ve veritabanı yerine doğrudan blok zinciriyle konuşan bir web
sayfasını yüklemek için tarayıcımızı kullanabiliriz. Tüm uygulama kodunu ve verilerini
bu merkezi sunucu yerine bir blok zincirinde saklayabiliriz. Bu, uygulama kodunun ve
verilerinin değişmeyeceğini bilmenin tamamen şeffaf ve güvenilir bir yoludur. Neden?

Uygulamanın arka uç kodunun tamamı akıllı sözleşmelerden oluşacaktır. Bunlar, blok


zinciri uygulamalarının değişmez ("değiştirilemez") yapı taşlarıdır. Kod bir kez blok
zincirine konulduğunda kimse onu değiştiremez ve her seferinde aynı şekilde
çalışacağını biliyoruz.

Akıllı sözleşmeler, JavaScript'e çok benzeyen Solidity adlı bir dilde yazılır. Blok
zincirine veri okumak/yazmak ve programladığımız herhangi bir iş mantığını
yürütmekten sorumludurlar. Web'deki bir mikro hizmet gibi çalışırlar. Ayrıca,
değiştirilemez bir dijital sözleşmeyi veya sözleşmeyi temsil ettikleri için akıllı
sözleşmeler olarak adlandırılırlar.

Uygulamaya ilişkin tüm veriler, blok zincirindeki blokların içinde işlem kayıtları olarak
saklanacaktır. Daha önce gördüğümüz gibi, ağdaki her düğüm, güvenli ve değişmemiş
olmasını sağlamak için bu verilerin bir kopyasını tutar.

13
SONUÇ

-------------------------------------------------------------------------------

3.1. Kullanılan Servisler

3.1.1. node.js

İhtiyacınız olan ilk bağımlılık, size Düğüm Paket Yöneticisi (NMP) verecek olan
node.js'dir . Bu projede diğer bağımlılıkları yüklemek için NPM kullanıldı.
Terminalden bu komutu çalıştırarak zaten node'un kurulu olup olmadığını kontrol
edebiliriz:

3.1.2. Ganache Blockchain [4]

Bir sonraki bağımlılık, bir üretim blok zincirinin davranışını taklit etmek için
kullanılabilen bir geliştirme blok zinciridir. Bu proje için Ganache'yi geliştirme blok
zincirimiz olarak kullanıldı. Akıllı sözleşmeler geliştirmek, uygulamalar oluşturmak ve
testler yapmak için kullanıldı.

14
3.1.3. Truffle Framework

Bir sonraki bağımlılık, blok zinciri uygulamaları geliştirmek için bize bir takım araçlar
sağlayan Truffle Framework. Akıllı sözleşmeler geliştirmemizi, bunlara karşı testler
yazmamızı ve bunları blok zincirine yerleştirmemizi sağladı. Truffle'ı komut satırından
NPM ile şu şekilde kuruldu:

3.1.3. Metamask Ethereum Wallet [5]

Web tarayıcımızı bir blockchain tarayıcısına dönüştürmek için Metamask Ethereum


Wallet'ı yüklenildi. Mevcut web tarayıcınız büyük olasılıkla bunu yerel olarak
desteklemiyor, bu nedenle blok zincirine bağlanmak için Google Chrome için
Metamask uzantısına ihtiyaç olunacak.

15
3.2. Kullanılan Programlama Dilleri [6]

3.2.1. JavaScript

GitHub’ın yayınladığı araştırmaya göre JavaScript geliştiriciler arasında en popüler


programlama dili olma unvanını koruyor. Web sitelerinin yüzde 95’inde bir şekilde
kullanılan bu dil, sadece web geliştirme konusunda değil blokzincir geliştirme
konusunda da oldukça esnek çözümler sunuyor.

JavaScript’in blokzincir geliştiricileri için uygun bir programlama dili olmasının ana
sebeplerinden birisi asenkron kodu işleme biçimi. Bu blokzinciri için oldukça önemli.
Binlerce hatta milyonlarca işlemin gerçekleştiği bir ağda asenkron ve paralel
programlama bir programın aynı anda birden fazla işlemi tamamlanasını sağlar.
Standart, eş zamanlı programlama ise bu kadar büyük bir hacmi kaldıramaz.

3.2.2. Solidity

Solidity, Ethereum geliştiricileri tarafından yaygın olarak kullanılan akıllı sözleşme ve


blokzinciri geliştirme dilidir. Etki alanına özgü dil, yüksek kaliteli, merkezi olmayan
uygulamalar oluşturmak için JavaScript ile aynı ilkelerin ve söz diziminin çoğunu
kullanır.

Geliştiriciler Solidity’yi tercih ediyor çünkü onların en düşük seviyedeki makinede bile
derlenebilecek ikinci en popüler kripto para birimi olan Ethereum blokzinciri ağı için
yüksek seviye kod yazmalarını sağlıyor. Ayrıca, bireylerin işletmeler arasında akıllı
sözleşmeler oluşturmaları için Ethereum dijital işlem defteri kullanmalarına da olanak
tanıyor.

Solidity şu anda Ethereum, Ethereum Classic, Tendermint ve Counterparty gibi çeşitli


blokzincir platformlarında mevcut. Ticari sözleşmeler, açık artırmalar, kitle fonlaması
dâhil olmak üzere çeşitli uygulamalar için kullanılıyor.

16
3.3. Proje Kodlarım

Proje klasörümü şu şekilde görebilirsiniz.


“public” klasörü internet tarayıcısındaki bağlantıyı
sağlar.
“src” klasörü içindeki “components” klasörü içindeki
“App.js” dosyası web3 ile Metamask cüzdanına
bağlanma, Ganache Blockchain’ine bağlanma, post
oluşturma ve tip işlemlerinin yapıldığı kısımdır.
“Main.js” dosyası arayüzü tasarlanılan kısımdır.
“Navbar.js” dosyası ise kişinin oturum açtığı zaman
kişinin kimlik adresinin gösterildiği kısımdır.
“contracts” klasörü içindeki “SocialNetwork.sol”
dosyası ise post oluşturma ve tip işlemlerini yapan
fonksiyonların olduğu kısımdır. “truffle-config.js”
dosyası ise Ganache uygulaması ile uygulamamış
arasındaki bağlamı oluşturduğumuz kısımdır.

17
Tarayıcı ile bağlantı kurduğumuz kod dizini:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<meta name="theme-color" content="#000000" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<title>Huntow Social Media</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>

Web3 bağlantısı kurulan kod dizini:

async loadWeb3() {
if (window.ethereum) {
window.web3 = new Web3(window.ethereum)
await window.ethereum.enable()
}
else if (window.web3) {
window.web3 = new Web3(window.web3.currentProvider)
}
else {
window.alert('Non-Ethereum browser detected.
You should consider trying MetaMask!')
}
}

18
Blockchain verilerine ulaşılan kod kısmı:

async loadBlockchainData() {
const web3 = window.web3
// Load account
const accounts = await web3.eth.getAccounts()
this.setState({ account: accounts[0] })
// Network ID
const networkId = await web3.eth.net.getId()
const networkData = SocialNetwork.networks[networkId]
if (networkData) {
const socialNetwork = web3.eth.Contract(SocialNetwork.abi,
networkData.address)
this.setState({ socialNetwork })
const postCount = await socialNetwork.methods.postCount().call()
this.setState({ postCount })
// Load Posts
for (var i = 1; i <= postCount; i++) {
const post = await socialNetwork.methods.posts(i).call()
this.setState({
posts: [...this.state.posts, post]
})
}
// Set loading to false
this.setState({ loading: false })
} else {
window.alert('SocialNetwork contract not deployed to detected netwo
rk.')
}
}

Post oluşturma ve tip işlemleri için yazılan kod kısmı:

createPost(content) {
this.setState({ loading: true });
var self = this;
this.state.socialNetwork.methods.createPost(content).send({ from: thi
s.state.account }, function (error, transactionHash) {
self.setState({ loading: false });
window.location.reload();})};
tipPost(id, tipAmount) {
this.setState({ loading: true });
var self = this;
this.state.socialNetwork.methods.tipPost(id).send({ from: this.state.
account, value: tipAmount }, function (error, transactionHash) {
self.setState({ loading: false }); window.location.reload();})}

19
Arayüz tasarlanılan kod kısmı:

class Main extends Component {


render() {return (
<div className="container-fluid mt-5">
<div className="row">
<main role="main" className="col-lg-12 ml-auto mr-auto"
style={{ maxWidth: '500px' }}>
<form onSubmit={(event) => {
event.preventDefault() content = this.postContent.value
this.props.createPost(content)}}>
<div className="form-group mr-sm-2">
<input id="postContent" type="text"
ref={(input) => { this.postContent = input }}
className="form-control"
placeholder="Anlat hele..."
required />
</div>
<button type="submit" className="btn btn-primary btn-block mb-
3">PAYLAS</button>
</form> div className="content mr-auto ml-auto">
{this.props.posts.map((post, key) => {
return (div className="card mb-4" key={key} >
<div className="card-header">
<img className='mr-2' width='30' height='30'
src={`data:image/png;base64,${new Identicon(post.author, 30).toString()}`
}/>
<small className="text-muted">{post.author}</small>
</div>
<ul id="postList" className="list-group list-group-flush">
<li className="list-group-item">
<p>{post.content}</p>
</li>
<li key={key} className="list-group-item py-2">
<small className="float-left mt-1 text-muted">
TIPS: {window.web3.utils.fromWei(post.tipAmount.toString(),
'Ether')} ETH</small>
<button className="btn btn-link btn-sm float-right pt-0"
name={post.id}onClick={(event) => {
let tipAmount = window.web3.utils.toWei('0.0001', 'Ether')
this.props.tipPost(event.target.name, tipAmount)}}>Like 0.0001 ETH
</button>
</li></ul></div>)})}</div></main></div></div>);}}

export default Main;

20
Navbar kısmında kişinin oturum açtıktan sonraki gözüken id numarası ve avatar kısmı
yazılan kod parçası:

class Navbar extends Component {


render() {return (
<nav className="navbar navbar-dark fixed-top bg-dark flex-md-nowrap p-
0 shadow">
<a className="navbar-brand col-sm-3 col-md-2 mr-0"
href="http://localhost:3000/"
rel="noopener noreferrer”> Huntow </a>
<ul className="navbar-nav px-3">
<li className="nav-item text-nowrap d-none d-sm-none d-sm-block">
<small className="text-secondary">
<small id="account">{this.props.account}</small>
</small> {this.props.account?
<img className='ml-2' width='30' height='30'
src={`data:image/png;base64,${new Identicon(this.props.account, 30).toStr
ing()}`}/>: <span></span>}
</li></ul></nav>
);
}
}
export default Navbar;

soliditiy ^0.5.0 sürümü kullanıp post oluşturma ve tip işlemleri için yazılan
fonksiyonların kod kısımları:

function createPost(string memory _content) public {


require(bytes(_content).length > 0);
postCount++;
posts[postCount] = Post(postCount, _content, 0, msg.sender);
emit PostCreated(postCount, _content, 0, msg.sender); }
function tipPost(uint256 _id) public payable {
require(_id > 0 && _id <= postCount);
Post memory _post = posts[_id];
address payable _author = _post.author;
address(_author).transfer(msg.value);
_post.tipAmount = _post.tipAmount + msg.value;
posts[_id] = _post;
emit PostTipped(postCount, _post.content, _post.tipAmount, _autho
r);}

21
Host ve port bağlantılarının yapıldığı kısım:

module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match any network id
},
},
contracts_directory: './src/contracts/',
contracts_build_directory: './src/abis/',
compilers: {
solc: {
optimizer: {
enabled: true,
runs: 200
}
}
}
}

22
3.4. Ekran Görüntüleri

Ana ekran:

Post paylaşıldığı zaman 0 Eth ile Metamask ’den onay alınarak paylaşılır.

23
Post paylaşımı sonrası ana ekran:

Paylaşılan Post’a like atıp tip verebiliyoruz.

24
Like atacağımız zaman Metamask cüzdanına bağlanılır ve onay alınınca transfer
sürecine geçer.

Hesapta var ise transfer gerçekleşir ve like atılan postun sahibinin hesabına geçer.

25
Biz Ganache’ deki hesaba bağlandığımız için tip işlemlerinde buradan aktarım yapıldı.

26
Kaynakça
[1]https://www.ibm.com/tr-tr/topics/what-is-
blockchain#:~:text=Blockchain%20avantajlar%C4%B1

[2]https://www.ibm.com/tr-tr/topics/what-is-
blockchain#:~:text=Bir%20blockchain%27in%20temel%20%C3%B6%C4%9F
eleri

[3]https://www.ibm.com/tr-tr/topics/what-is-
blockchain#:~:text=Blockchain%20a%C4%9Flar%C4%B1n%C4%B1n%20t%
C3%BCrleri

[4] https://www.trufflesuite.com/ganache

[5]https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnko
dbefgpgknn

[6] https://bctr.org/blokzinciri-icin-onerilen-4-programlama-dili-11660/

https://github.com/bektasisik/SmartContract

27

You might also like