Professional Documents
Culture Documents
Bektas Isik 1171602005 Huntow Makale Proje2
Bektas Isik 1171602005 Huntow Makale Proje2
TRAKYA ÜNİVERSİTESİ
MÜHENDİSLİK FAKÜLTESİ
BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ
PROJE 2 RAPORU
ÖZET……………………………………………………………………………………….i
İÇİNDEKİLER……………………………………………………………………………. ii
1. GİRİŞ
2. GELİŞME
3. SONUÇ
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.
Tüm parası, iki temel amacı olan bir banka hesabında saklanır:
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.
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.
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.
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
-------------------------------------------------------------------------------
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.
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:
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.
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.
8
2.4. Blockchain Avantajları [1]
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.
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]
• Akıllı sözleşmeler
10
2.6. Blockchain Ağlarının Türleri [3]
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.
Ö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
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.
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?
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.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:
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:
15
3.2. Kullanılan Programlama Dilleri [6]
3.2.1. JavaScript
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
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.
16
3.3. Proje Kodlarım
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>
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.')
}
}
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ı:
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ı:
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ı:
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:
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