• Sonuç bulunamadı

BLOCKCHAİN İLE MAĞAZA KARTLARINDAKİ PARA TRANSFERİ UYGULAMASINDA SANAL MAKİNELERİN KURULMASI

N/A
N/A
Protected

Academic year: 2022

Share "BLOCKCHAİN İLE MAĞAZA KARTLARINDAKİ PARA TRANSFERİ UYGULAMASINDA SANAL MAKİNELERİN KURULMASI"

Copied!
30
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

BSM 401 BİLGİSAYAR MÜHENDİSLİĞİ TASARIMI

BLOCKCHAİN İLE MAĞAZA KARTLARINDAKİ PARA TRANSFERİ UYGULAMASINDA SANAL

MAKİNELERİN KURULMASI

G131210018 – Ufuk ERDOĞAN

2019-2020 Güz Dönemi Bölüm

Danışman :

:

BİLGİSAYAR MÜHENDİSLİĞİ Dr. Öğr. Üyesi Mustafa AKPINAR

(2)

Günümüzde teknolojinin hızla gelişmesi kullandığımız paralar konusunda da birçok yeniliği beraberinde getirmektedir. Lidyalıların parayı bulmasından günümüze kadar gelen süreçte paranın birçok formunu görme şansımız oldu. 90’lı yıllardan itibaren de sanal paraların temelleri atılmaya başladı. Bu sanal paraların asıl patlaması ise 2009 yılında Satoshi Nakamoto isimli biri veya bir grubun yayınladığı manifesto ile olmuştur. BlockChain modeli ile hayatımıza giren Bitcoin günümüzde en çok kullanılan sanal para birimidir. Bitcoin’in çıkışı ve tüm dünyada bu kadar meşhur olmasıyla benzer para birimleri de ortaya çıkmıştır. Bu çalışmada da kullanmış olduğumuz Ethereum da onlardan biridir.

Bankacılık, eğitim, müzik, eğlence vb birçok alanda kullanılan bu blockchain yapısının adının önümüzdeki yıllarda daha sık duyulması beklenmektedir. Özellikle finans sektöründe sıkça kullanılmaya başlayan bu yapı için birçok banka raporlar yayımlamaktadırlar. Bu proje kapmasında ise genel olarak bu yapıların özelliklerine, kullanım alanlarına ve gelecekteki yerine değinilerek örnek bir uygulama gösterilmektedir.

(3)

İÇİNDEKİLER

ÖNSÖZ……... ii

İÇİNDEKİLER... iii

ŞEKİLLER LİSTESİ………. v

ÖZET... vi

BÖLÜM 1. GİRİŞ... 7

1.1. Sanal Paraların Tarihi... 7

1.1.1. Bitcoin ve çağdaş kripto paraların patlaması……….. 7

1.2. BlockChain... 9

1.2.1. BlockChain’in farklı alanlarlarda ki kullanımı ve geleceği... 10

BÖLÜM 2. ÇALIŞMADA KULLANILACAK SİSTEMLER………….………... 11

2.1. Ethereum... 11

2.2. Smart Contract (Akıllı Sözleşme) ... 11

2.3. Solidity………... 12

2.4. Dapps (Decentralized Applications) ………... 13

2.5. PoW (Proof of Work) ve PoS (Proof of Stake) ...……… 14

BÖLÜM 3. DOCKER CONTAİNER VE KURULUMU 16 3.1. Docker………... 16 3.1.1. Docker container...

3.1.2. Docker ile container oluşturmak……….

3.1.3. Docker’ın versiyonunu öğrenmek………..

3.1.4. DockerHub’dan ilk imajı indirmek ve görüntülemek……….

3.1.5. Docker imajını kullanarak container yaratmak ………..

3.1.6. Container’ı tekrar başlatmak ve silmek………

16 18 18 19 19 20

(4)

3.2. Ethereum Ağı Oluşturmak……... 21 3.2.1. Geth ve yüklenmesi...

3.2.2. Ethereum blockchaini oluşturmak………..

21 22 3.3. Solidity ile Smart Contract Yazmak ve Derlemek... 25

BÖLÜM 4.

SONUÇLAR VE ÖNERİLER………... 27

KAYNAKLAR……….. 28

ÖZGEÇMİŞ……….……….. 29

BSM 401 BİLGİSAYAR MÜHENDİSLİĞİ TASARIMI

DEĞERLENDİRME VE SÖZLÜ SINAV TUTANAĞI……… 30

(5)

ŞEKİLLER LİSTESİ

Şekil 1.1. En Değerli Sanal Paralar [2]..………... 8

Şekil 1.2. Blok Zincirinde Bir Bloğun Yapısı……….. 10

Şekil 2.1. Solidity Kod Örneği……….……… 13

Şekil 2.2. Dapps ve Apps Farkı……….……….. 14

Şekil 2.3. PoW vs PoS……….……… 15

Şekil 3.1. Sanal Sunucu Mimarisi……… 17

Şekil 3.2. Docker Container Mimarisi………. 18

Şekil 3.3. Solidity Compiler [4]…..………. 26

(6)

ÖZET

Anahtar kelimeler: BlockChain, Ethereum, Docker, Solidity, Smart Contract

Bu proje kapsamında Blockchain altyapısını kullanan Ethereum ile paranın sanal bir şekilde transferinin gerçekleştirilmesi hedeflenmiştir. Bu amaçla Ethereum, Docker, Solidity ve Geth gibi teknolojilerden yararlanılmıştır. Solidity ile yazılan akıllı sözleşmeler ve farklı teknolojilerin kullanımı konusunda bilgiler verilmiştir. Docker container teknolojisi ile sanallaştırmaların nasıl yapıldığı ve Geth dili kullanılarak Blockchain yapısı içinde ether transferinin nasıl gerçekleştirildiği adım adım gösterilmiştir.

İlk bölümlerde sanal paraların geçmişten günümüze hangi aşamalardan geçtiği anlatılmıştır. Bu aşamalar Bitcoin’in ortaya çıkmasıyla tüm dünyada daha popüler hale gelmiştir. Satoshi Nakamoto tarafından BlockChain altyapısını kullanan bu para birimiyle birlitke bu yapı kullanılarak daha sonra birçok para birimi ortaya çıkmıştır.

Projede kullanmış olduğumuz Ethereum’da bunlardan biridir. İkinci bölümde ise Ethereum ve BlockChain yapıları hakkında genel bilgiler verilmiştir.

Üçüncü bölümde ilk olarak Docker container teknolojisi hakkında bilgiler verilerek, diğer bir sanallaştırma teknolojisi olan HyperVisorler’e göre avantajlarından bahsedilmiştir. DockerHub’dan örnek bir imaj indirilerek container yaratma, silme, görüntüleme gibi işlemler gerçekleştirilmiştir. Devamında Geth dili ile ether transfer etmek için kullanıcı hesapları açılarak, bu işlemlerin yapım aşamaları gösterilmiştir.

Son bölümde ise yapılan projenin sonuçları hakkında bilgiler verilmiştir. Bu sonuçlarla beraber BlockChain kavramı ve diğer kripto paraların gelecekte kullanım alanlarının artacağı gözlemlenmiştir.

(7)

BÖLÜM 1. GİRİŞ

Çalışma konusu Blockchain teknolojisi kullanılarak paranın sanal olarak transferini gerçekleştirmektir. O nedenle ilk olarak sanal paraların tarihine göz atılmış, projede kullanılacak yöntemler hakkında bilgiler verilmiş ve son olarak da para transferi gerçekleştirilerek belli sonuçlara varılmıştır.

1.1. Sanal Paraların Tarihi

Sanal paralar fiziki gerçekliği olmayan, herhangi bir devlet garantisi altında olmayan para birimleridir. Normal zamanlarda bankalarda kullandığımız kredi kartları bankamatik kartı vb. ödeme yöntemlerini sanal paralara örnek verebiliriz. Bu ödeme yöntemleriyle kripto paralar arasındaki en temel fark ise sanal paraların herhangi bir merkezi otoriteye bağlı olmayışıdır. Oysa banka kartları bankalara, haliyle devletlere bağlıdır.

Günümüzde sanal paraların temelini oluşturan BlockChain yapısının kökeni Dr.

David Chaum’a bağlanmıştır. Kendisi 1983 yılında kripto para kavramını dile getiren ilk kişidir ve henüz Bitcoin yaratılmadan, kripto paraların atası diyebileceğimiz DigiCash’in kurucusudur. 1989 yılında ilk adımları atılmıştır. Ancak ömrü fazla uzun olmadı ve David Chaum’un şirketten ayrılmasıyla 1998 yılında iflas bayrağını çeken şirket 2002 yılında ise tamamıyla satılmıştır.

1.1.1. Bitcoin ve çağdaş kripto paraların patlaması

Bitcoin’in ortaya çıkış yılı 2009’dur ve buna 2008 senesinde yaşanan Amerika ekonomik krizinin de etken olduğu söylenebilir. Aslında Bitcoin her ne kadar çıkan ilk kripto para olarak anılsada temelleri 1990’lı yılların başında atılmıştır.

CypherPunk grubu o yıllarda kripto para ile ilgilenmekteydi. Tarih 2008 yılının kasım ayını gösterdiğinde ise CypherPunk mail grubuna, yazarının bir kişi mi yoksa bir grup mu olduğu bilinmeyen, Satoshi Nakamoto tarafından bir manifesto geldi.

Tarihte çok önemli bir yere sahip olan bu manifestonun aslına internetten ulaşmak

(8)

mümkündür [1]. Bu manifesto günümüz çağdaş kripto paraları için bir dönüm noktası olmuş, şu anda da yaygın olarak kullanılan Bitcoin ve BlockChain yapısı ile ilgili genel bilgilere sahipti.

Tüm Bitcoin çevresinde ün kazanan Satoshi Nakamoto’nın bu para biriminin genel olarak tüm dünyada kullanılmaya başlamasının en temel nedenleri; sistemin herhangi bir merkeze bağlanmamış olması, kullanıcılarının anonim olarak kalması ve BlockChain yapısı sayesinde kayıtların güvenli olarak tutulması olarak söylenebilir.

Günümüzde birçok firma Bitcoin kabul etmektedir.

Bununla beraber günümüzde Bitcoin’den esinlenerek BlockChain yapısı kullanan birçok sanal para birimi ortaya çıkmıştır. Aşağıdaki şekilde 2020 itibariyle piyasa en çok işlem hacmi gören kripto paralar görülmektedir.

Şekil 1.1. En Değerli Sanal Paralar [2]

(9)

1.2. BlockChain

Kısaca BlockChain Bitcoin, Ethereum vb. kripto paraların var olabilmesi için yaratılmış bir altyapı ve veri kayıt sistemi olarak tanımlanabilmektedir. Bir veri tabanı ile arasındaki fark ise BlockChainde ki verilerin silinemez ve değiştirilemez oluşudur. Birçok kullanıcıyla dağıtık olarak paylaşılan bu blok zincirinin güvenliği ise şifreleme algoritmalarıyla ile sağlanmaktadır. Bu bloklar transfer işlemi sırasında önce şifrelenerek değiştirilemez veya kırılamaz hale getirilir ve ağdaki herkese dağıtılarak tüm kullanıcılarda aynı şifreli bilgilerin bulunmasını sağlamaktadır. Yani tüm kayıtların herkese açık olduğu ve kayıtların herkes tarafından görülüp tutulabildiği bir yapıdır.

BlockChain yapısı 2008 yılında duyurulan ve 2009 yılında aktif olarak kullanılmaya başlayan, Satoshi Nakamoto tarafından yaratılan Bitcoin para biriminin temelini oluşturarak zamanla daha popüler hale gelmiştir. Günümüzde çoğu sanal para BlockChain yapısını kullanarak hem merkezi olmayan bir altyapıya hem de yüksek derece güvenliğe sahip olmaktadırlar. Farklı para birimlerine göre blok zinciri yapısı da değişiklik gösterebilmektedir.

Her blok zincirinin çalışması için bir başlangıç bloğuna ihtiyaç vardır. Bu ilk blok genesis bloğu olarak isimlendirilmektedir. Her blok kendisinden önce ki bloğun hashlenmiş haline sahiptir ve bu şekilde zincir yapısı sağlanmaktadır. Zincire en son eklenen blok ağdaki tüm bilgisayarlara gönderilerek kaydı tutulmuş ve güvenliği sağlanmış olur. Aşağıdaki şekilde yukarıda anlatılan blok zinciri yapısı görülmektedir.

(10)

Şekil 1.2. Blok Zincirinde Bir Bloğun Yapısı

1.2.1. BlockChain’in farklı alanlarlarda ki kullanımı ve geleceği

Blockchain teknolojisinin kullanıldığı en temel alanlardan bazıları Bankacılık, Emlak Sektörü, Eğitim, Müzik & Eğlence, Enerji ve Nesnelerin İnterneti (IOT) olarak sıralanabilir.

İleride noterlerin işini yapan ve müşteri senkronizasyonunu sağlayan smart contractlar işimizi kolaylaştıracaktır. Bu teknolojinin gelecekte daha çok bankacılık sektörü üzerine etki etmesi beklenmektedir. Kişilerin finansal hizmetlerinin kontrol altına alınmasıyla beraber bu yapı bankalarında ilgisini çekmektedir. Örnek olarak İstanbul’daki en büyük takas ve saklama bankası olarak anılan TakasBank, fiziksel altın ticaretini yapmak için BlockChain kullanan Ar-Ge projesi BiGa’nın tamamladığını açıklamıştır.

(11)

BÖLÜM 2. ÇALIŞMADA KULLANILACAK SİSTEMLER

2.1. Ethereum

Ethereum ilk olarak Rus asıllı Vitalik Butelin tarafından 2013 yılında tanıtımı yapılmıştır. Ethereum coin olarak piyasaya çıkmadan önce halka arz edilirken kurucularının bile beklemediği şekilde satış gerçekleştirerek bu dönemde yaklaşık 15 milyon dolar para toplamıştır. Bunun karşılığında ise insanlara 60 milyon ether dağıtmıştır. Bu sayede insanlar paralarını katlamışlardır. 2020 yılının başları itibariyle Bitcoin’den sonra piyasadaki en değerli ikinci sanal paradır.

Ethereum şu anda kripto para dünyasında çok büyük bir öneme sahiptir. Geliştirilen akıllı sözleşmeler sayesinde insanlar kendi coinlerini üreterek halka arz edebilmektedirler. Hali hazırda birçok coin Ethereum platformunu kullanmaktadır.

EOS ve TRON gibi coinler buna örnek olarak verilebilir.

2.2. Smart Contract (Akıllı Sözleşme)

Smart contractlarla alıcı ve satıcının karşı taraftan istediği koşullar tanımlanmaktadır.

Bu koşulların iki taraftan da onaylanması sonucu smart contratlarda belirlenen işlemler gerçekleştirilmektedir. Smart contractlar birer protokol olarak düşünülebilir.

Bu protokol sayesinde taraflar arası anlaşmazlıklar ortadan kaldırılmakta ve önceden belirlenen kural setlerine göre akıllı sözleşmeler imzalanabilmektedir. Smart contractlarda kullanılan kural setleri işlem maliyetini ve güvenlik riskini azaltır.

Smart contractlar yaygın olarak Ethereum BlockChain altyapısında kullanılmaktadır.

Nasıl ki Blockchain’de tüm veriler her bilgisayarda tutuluyor ve açık ise smart contract denilen yapıda da tüm veriler aynı şekilde tutulur.

(12)

2.3. Solidity

Günümüzde Ethereum sanal makinesini hedeflemek ve akıllı sözleşme yazmak için nesne yönelimli 3 programlama dili vardır; Solidity, Serpent ve LLL. Solidity bunlar arasından en çok kullanılan dil olmakla beraber Ethereum’un ana dili olarak nitelendirebilir.

Solidity ilk olarak 2014 yılında Gavin Wood tarafından önerilsede daha sonra Ethereum projesi kapsamında Christian Reitwiessner yönetimindeki Solidity ekibi tarafından geliştirildi. Bu isimler aynı zamanda Ethereum çekirdiğinin de geliştiricilerindendir.

Solidity’de yazılan kodlar Ethereum sanal makinesinden yürütülebilen baytcode olarak derlenmektedir. Solidity bir derleyici ile derlenir ve BlockChain’e transaction olarak gönderilmektedir. Browser tabanlı olarak Solidity kodlarını derlemek için Remix IDE kullanılabilir. Bu sayede insanlar Ethereum BlockChain yapısına uygun akıllı sözleşmeler yazabilirler. Genel olarak Solidity ile akıllı sözleşmeler yazmak işlemi çok zor bir işlem değildir.

Aşağıdaki şekilde Solidity ile yazılmış bir akıllı sözleşme örneği verilmiştir. Dilin akıllı sözleşme olduğunu belirtmek için en başta contract Gavcoin tanımlanmıştır.

Toplam coin görüntülenerek sonraki adımlarda ise adres belirtilerek örnek bir coin gönderme işlemi tanımlanmıştır.

(13)

Şekil 2.1. Solidity Kod Örneği

2.4. Dapps (Decentralized Applications)

Merkezi olmayan uygulama anlamına gelmektedir. Örnek olarak Google merkezi bir uygulamalar sunan bir platformdur. Gmail hesabına giriş yapan birinin hangi sunucudan giriş yaptığı bellidir ve bu durum saldırılara açık hale gelmesine neden olmaktadır. Ama bir Dapps uygulamasında ise bilgiler BlockChain yapısının içinde olduğu için silinemez ve değiştirilememektedirler. Bu sebeple saldıralara karşı da oldukça güçlü bir savunması vardır.

(14)

Bir uygulamanın BlockChain üzerinde çalışması ve bir Dapp sayılabilmesi için aşağıdaki özelliklere sahip olması gerekmektedir.

 Açık kaynak kodlu olma

 Uygulama verilerinin merkezi olmayan halka açık bir BlockChain üzerinde tutulması

 Uygulamanın kripto bir token kullanması

 Tokenlerin PoW gibi herhangi bir algoritma ile üretilmesi [3]

Şekil 2.2. Dapps ve Apps Farkı

2.5. PoW (Proof of Work) ve PoS (Proof of Stake)

Proof-of-work (PoW), iş kanıtı olarak anılan mutabakat, yapbozu bir araya getirmek için saatlerce uğraşmaya benzer fakat bir yapboz doğru şekilde bir araya getirildiğinde, bunu anlamak için şöylesine bir bakmak yeterlidir. İş Kanıtı mutabakatında, bulmacayı çözmek için gereken çabaya İş ve çözüme de İş Kanıtı adı verilir. Bitcoin, Ethereum gibi coinler bu yöntemle yeni blokları oluşturmaktadır. İş

(15)

Kanıtı’nı kullanan blok zincirleri, zincire eklenecek her bir yeni blok için böyle bir kanıt gerektirir; bu şekilde yeni bloklar yaratmak için İş’in yapılması gerekir. Bu İş sık sık ‘madencilik’ olarak anılmaktadır.

Proof-of-stake (PoS), PoW için harcanan elektriğin artması ve blokların üretilme süresinin uzaması ile farklı yöntemlere ihtiyaç durulmuştur. “Proof of Stake”

kavramı bu nedenlerden dolayı ortaya çıkmıştır. PoW her yeni bloğun rastlantısal olmayan bir şekilde, kişinin bakiyesine göre belirlendiği sistemdir. PoS sistemiyle para kazanmak için sadece coinin elektronik cüzdanlarda tutulması gerekmektir.

Cüzdanda ne kadar çok para varsa o kadar çok para kazanılmaktadır.

Aşağıdaki şekilde PoW ve PoS yapılarının nasıl çalıştığı örnek şekillerle gösterilmiştir.

Şekil 2.3. PoW vs PoS

(16)

BÖLÜM 3. SİSTEMLERİN KURULUMU

3.1. Docker

Günümüzde yazılım hizmeti sağlayan şirketler, gereksinimlerini karşılayacak uygulamalar geliştirmektedir. Bu uygulamaları hizmete aktarabilmek için sunuculara ihtiyaç duyulmaktadır. Ancak sunucuların tedarik edilmesi, gerekli kurulum ve ayarlamaların yapılması uzun ve yoğun bir süreci beraberinde getirmektedir. Bu ihtiyaçlar doğrultusunda ise Sanallaştırma Teknolojisi HyperVisor hayatımıza girmiştir. Bu teknolojinin en bilinen örnekleri ise Vmware, Xen, Hyper-V gibi HyperVisorlerdir.

Bu HyperVisor teknolojisi işimizi her ne kadar kolaylaştırsa da istenileni tam olarak karşılamamaktaydı. Bunun nedeni ise aşırı derecede fazla CPU, RAM gibi kaynakların tüketimi olarak söylenebilir. Sanal bilgisayarlar Host işletim sisteminin dışında ayrıca bir işletim sistemi daha çalıştırıyordu. Bu ihtiyaçlarla beraber 2008 yılında Docker ve container kavramları ortaya çıkarak Linux Kernel’ine eklenmiştir.

Docker’ın sanallaştırma yapısı bir HyperVisor katmanına sahip değildir. Bunun yerine Docker Engine Host olarak bulunduğu işletim sistemine erişebilmekte ve sistem araçlarını paylaşımlı olarak kullanabilmektedir. Bu şekilde klasik sanal makinelere göre daha az sistem kaynağı kullanarak, daha faydalı bir sanallaştırma teknolojisi olduğunu kanıtlamıştır.

3.1.1. Docker container

Sunucu üzerine sadece bir işletim sistemi kurulup, daha sonra bu işletim sistemi üzerinde containerlar oluşturularak bu yapı içerisinde uygulamalar çalıştırılabilmektedir. Tek bir işletim sistemi tarafından oluşturulan containerlar ve içinde çalışan prosesler, işletim sisteminde sadece kendilerinin bulunduğu haliyle yönlendirilmektedirler. Bir makine gücüne bağlı yüzlerce Docker containerı birden aynı anda çalıştırılabilmektedir.

(17)

Aynı işletim sistemi üzerinde çalışan containerlar birbirlerinden izole edilmiş ve istenmediği sürece de bu iletişimsizlik devam ettirilebilmektedir. Böyle bir şey yapılmasının temel nedeni ise güvenliğin sağlanmak istenmesidir.

Container, klasik sanal makinelerden farklı olarak üzerinden uygulama çalıştırabilmek için misafir bir işletim sistemine ihtiyaç duymamaktadır. Container yapısında tek bir işletim sistemi olduğundan tüm containerlar güvenli bir şekilde bu işletim sistemini paylaşabilmektedir. HyperVisor’lerle karşılaştıldığında ise container yapısının daha ekonomik olduğunun farkına varılmaktadır.

Şekil 3.1. Sanal Sunucu Mimarisi

(18)

Şekil 3.2. Docker Container Mimarisi

3.1.2. Docker ile container oluşturmak

Bu bölümde Docker CLI’ı kullanarak container oluşturma silme gibi işlemler gösterilmiştir. Bütün komutlar Windows işletim sistemi üzerinde uygulanmıştır.

Diğer işletim sistemlerinde de bütün komutlar çalışabilir ancak farklı çıktılar elde edilebilir.

3.1.3. Docker’ın versiyonunu öğrenmek

İşletim sistemine yüklenen Docker’ın versiyonunu öğrenmek için yazılacak komut docker –version komutudur.

(19)

3.1.4. DockerHub’dan ilk imajı indirmek ve görüntelemek

Docker imajları DockerHub’dan indirebilir. docker pull ‘imaj ismi’ komutu ile indirilen imajlar docker images komutu ile de görüntülenebilir. Aşağıdaki örnekteki mongo veritabanı imajı indirilip, docker images komutu ile daha önceden indirilen hello-world ve mongo imajı görüntülenebilir.

3.1.5. Docker imajını kullanarak container yaratmak

İndiilen imajı container haline getirmek ve çalıştırmaya başlamak için docker run

‘imaj ismi’ komutu kullanılır. Bu komuta bazı parametreler eklenerek ekstra işler yapmasını sağlamak mümkündür. -d parametresi ile container arka planda çalışmaya devam edebilir. Bu parametre olmazsa imaj bir kere çalışıp daha sonra kapanacaktır.

-- name komutu ile oluşturulan container için isim verilebilir. --link parametresi iile iki container birlikte çalıştırabilir. -p parametresi ise port bilgisini verir. Bir kere hazırlanan Docker imajı sürekli olarak kullanılabilir.

(20)

Çalışan veya çalışmayan tüm containerları görmek için docker ps -a komutu kullanabilir. Docker run --name my-mongo mongo komutu ile çalıştırılan imajın port numarası, ismi, oluşturulma tarihi vb. bilgiler bu komut sayesinde görüntülenebilir.

3.1.6. Container’ı tekrar başlatmak ve silmek

Bir önceki adımda çıkış yapan container tekrar başlatılabilir. docker start -a 9407a4936a09 komutu ile hello-world containerı tekrar çalıştırılır. Komutta yazılan 9407a4936a09 ise containerın ID’sidir. Bu komutun çıktısı docker run hello-world komutunun çıktısıyla aynıdır. Eğer komutta -a parametresini kullanılmazsa aşağıdaki gibi sadece container ID’si görülür.

(21)

Bu adımda ise çalıştırılan ve birkaç kere tekrar başlatılan hello-world containerı silinmiştir. docker rm <container_id> komutu ile çıkış yapmış containerlar silinebilir. docker rm -f <container_id> komutu, yani -f Force parametresi ile bir container çalışır durumda dahi olsa silinebilir. Force opsiyonunu kullanmak yerine önce docker stop <container_id> ile container durdurulıp daha sonra silinebilir.

docker rm -f 9407a4936a09 komutu ile hello-world containerı silinmiştir. Artık docker ps -a komutu sadece mongo containerını listelemelidir.

3.2. Ethereum Ağı Oluşturmak

Bu aşamada özel bir Ethereum ağı nasıl oluşturulur, ondan bahsedilmektedir.

3.2.1. Geth ve yüklenmesi

Geth, Ethereum ağı ile iletişime geçilebilmeyi sağlayan yazılımdır. Yazılım Ethereum ağını sürekli izleyip buna göre bilgisayarınıza atanan işi güncellemektedir.

Geth ile Ethereum üzerinde madencilik, para transferleri ve akıllı sözleşme işlemleri gibi birçok işlem yapılabilir.

Geth’in kendi sitesinden kullanılan işletim sistemine göre Geth’in son versiyonu indirilebilir.

(22)

3.2.2. Ethereum blockchaini oluşturmak

İlk olarak Geth kurulumunu yaptıktan sonra bir klasör açarak, içine aşağıdaki kodların yazıldığı bir json dosyası oluşturulur.

{

"config": {

"chainId": 12345,

"homesteadBlock": 0 },

"alloc": {},

"coinbase": "0x0000000000000000000000000000000000000000",

"difficulty": "0x20000",

"extraData": "",

"gasLimit": "0x2fefd8",

"nonce": "0x0000000000000042",

"mixhash":

"0x0000000000000000000000000000000000000000000000000000000000000 000",

"parentHash":

"0x0000000000000000000000000000000000000000000000000000000000000 000",

"timestamp": "0x00"

}

Buradaki config, BlockChain konfigurasyon tanımlarını içerir. chainId, replay attack’a karşı koruma amacıyla kullanılmaktadır. homesteadBlock, Ethereum’um ikinci büyük versiyonudur, sıfır seçildiğinde bunu kullanır. difficulty, mining işleminin zorluğunu tanımlar. gasLimit ise blok başına gaz maliyetinin limitidir.

Artık Geth ile Blockchain oluşturabilir. datadir ile BlockChain’in oluşturulacağı klasörü belirleyip, init ile başlangıç noktası olan genesis.json dosyası gösterilir.

Bunun için aşağıdaki komutu kullanılır.

geth --datadir "c:\myEth" init "genesis.json"

(23)

Ethereum BlockChain hazır olduktan sonra hesap açma ve mining işlemlerine başlanılabilir. Geth’de bu tarz işlemleri yapabilmek için Javascript tabanlı bir komut yorumlayıcısı vardır. Bunun için aşağıdaki komut yazılır.

geth --datadir "c:\myEth" --ipcdisable --nodiscover console

Bu komut içinde güvenlik sağlamak amaçlı bazı parametereler kullanılmaktadır.

İçindeki parametrelerin anlamı ise nodiscover: Blockchain’i manuel olarak eklemeyenler tarafından keşfedilemediğinden emin olmak için kullanılır ve bilgimiz dışında eklenilmesini engeller, ipcdisable: IPC-RPC sunucusunu devre dışı bırakır.

Yukarıda yazılan komutla beraber Javascript konsolunun içerisine girilmiş olunur.

Şimdi ise hesap açıp şifre koyulabilir. Personal.newAccount() komutu ile yeni hesap oluşturup şifre belirlenmiştir. Personal.listAccounts komutu ile de oluşturalan bu hesaplar görüntülenebilir. Şu an tek hesap olduğu için sadece az önce açılan hesap bilgisini görüntülenmiştir.

(24)

eth ile mining işlemleri, hesaptaki para ile ilgili işlemler, blok işlemleri ve transaction gibi birçok işlem gerçekleştirilebilir. Öncelikle Ethereum BlockChain’indeki blok numarası öğrenilir. Bunun için eth.blockNumber komutu yazılır. Ancak henüz mining yapılmadığından genesis bloğundan başka bir blok görüntülenemez. Bu yüzden sonuç 0 olarak dönecektir. eth.getBlock(0) komutu ile de genesis bloğu görüntülenebilir.

miner.start(1) komutuyla mining işlemine başlanılır. Bu işlem ilk çalıştırmada biraz uzun sürecektir. Bir süre bekledikten sonra yeni bloklar mining edilmeye başlanacaktır. miner.stop() komutu ile mining işlemini durdurulduktan sonra blockNumber ile üretilen blok numarası kontrol edilebilir. Sonuç olarak da eth.blockNumber komutunu tekrar yazıldığında blok numarası artık sıfırdan farklı bir değerde olacaktır.

Hesaptaki miktar eth.getBalance(eth.accounts[0]) komutu ile öğrenilebilir. İlk başta bu değer wei olarak görüntülenmektedir. Bunu Ethereum para birimi olan ether’e çevirmek için web3.fromWei(eth.getBalance(eth.accounts[0]), "ether") kodu kullanılabilir. Aşağıdaki çıktıda 1245 ether olduğu görüntülenmiştir.

(25)

Bu aşamada bir hesap daha açılarak ilk hesaptan diğerine para gönderimi gerçekleştirilmiştir. Personal.newAccount() komutu ile yeni hesap açılır. Yeni hesap açıldıktan sonra ilk hesaptaki kilit işleminin kaldırılması gerekir. Bunun içinde aşağıdaki komut kullanılabilir.

Personal.unlockAccount(eth.accounts[0])

Eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value:

web3.toWei(245,"ether")}) komutu ile de 1245 ethere sahip olan hesaptan daha sonra açılan hesaba ether transferi gerçekleştirilmiştir.

Buradaki önemli nokta ise bu işlemin BlockChain’e eklenip gerçekleşmesi için miner’lar tarafından işlenmesi gerekimekte. Bunun için ise mining yapılmalıdır.

miner.start(1) ile mininge işlemine başlanıp miner.stop() ile bitirildiğinde ilk hesaptan ikinci hesaba ether transferinin gerçekleştirilmesi tamamlanmış olur.

3.3. Solidity ile Smart Contract Yazmak ve Derlemek

Solidty statik, nesne yönelimli ve şu anda akıllı sözleşmeler için en sık kullanılan programlama dilidir. Solidity ile akıllı sözleşme yazılma işlemi bittikten sonra Solidity derleyebilen bir derleyici ile derlenir ve BlockChain’e transaction olarak iletilir. Farklı türden akıllı sözleşmelerin BlockChain yapısında çalışması sağlanmaktadır.

(26)

Browser tabanlı olarak Solidity kodlarının yazılmasını ve daha sonra derleyip test edilmesi için https://remix.ethereum.org/ adresindeki Solidity derleyicisi olan Remix IDE kullanılabilir. Küçük sözleşmeler yazmak ve derlemek için uygundur.

Aşağıda şekilde Remix derleyisinde yazılmış basit bir akıllı sözleşme örneği verilmiştir.

Şekil 3.3. Solidity Compiler [4]

(27)

BÖLÜM 4. SONUÇLAR VE ÖNERİLER

Bu projede Geth kullanılarak iki hesap arasında para transferi gerçekleştirilmiş ve Solidity ile de akıllı sözleşmelere giriş yapılmıştır. Böylelikle gelecekte özellikle bankacılık ve finans sektöründe blok zinciri ve akıllı sözleşme kavramlarının ne kadar önemli olacağı gözlemlenmiştir.

Gelecekte bu tarz kripto paraların kullanım alanları artarak günlük hayatımızın çoğu yerinde kullanılmaya başlanacaktır. 2008 yılında Satoshi Nakamoto ile hayatımıza giren Blockchain yapısı ve Bitcoin gibi paralar sayesinde farklı bir gelecek şekillenmektedir. Bu sonuca bakarak “gelecek merkezi olmayan sistemdedir”

denilebilir [5].

Gelişmek isteyen ülkelerin, bu teknojileri yakından takip edip bu teknojiler konusunda deneyimli eleman yetişirmeleri gerekmektedir. Finans, Bankacılık, Eğitim ve daha bir sürü sektörle bu teknolojileri senkronize ederek tüm dünyada yaşanan teknolojik gelişime ayak uydurmak gerekmektedir.

(28)

KAYNAKLAR

[1] Satoshi Nakamoto “Bitcoin: A Peer-to-Peer Electronic Cash System”

https://bitcoin.org/bitcoin.pdf, 2008 [2] En Değerli Sanal Paralar,

https://tr.investing.com/crypto/currencies , 30.12.2019 [3] Süleyman Kaya “DApps-Merkezi Olmayan Uygulamalar”,

https://coinbalina.com/dapps/

[4] Remix Ethereum IDE https://remix.ethereum.org/

[5]

Bob Wigley, Nicolas Cary “The Future is Decentralised”

(29)

ÖZGEÇMİŞ

Ufuk Erdoğan, 06.05.1995 de İstanbul’da doğdu. İlk, orta ve lise eğitimini Sarıyer’de tamamladı. 2013 yılında Firuzan Kemal Demironaran Lisesi’nden mezun oldu. 2013 yılında Sakarya Üniversitesi Bilgisayar Mühendisliği Bölümü’nü kazandı. 2015 yılında Arkas Lojistik Şirketinde donanım stajını ve 2016 yılında da İnnova Şirketinde yazılım stajını yaptı. Şu anda Sakarya Üniversitesi Bilgisayar Mühendisliği Bölümünde öğrenim görmektedir.

(30)

BSM 401 BİLGİSAYAR MÜHENDİSLİĞİ TASARIMI DEĞERLENDİRME VE SÖZLÜ SINAV TUTANAĞI

KONU :

ÖĞRENCİLER (Öğrenci No/AD/SOYAD):

Değerlendirme Konusu İstenenler Not

Aralığı Not

Yazılı Çalışma

Çalışma klavuza uygun olarak hazırlanmış mı? x 0-5

Teknik Yönden

Problemin tanımı yapılmış mı? x 0-5

Geliştirilecek yazılımın/donanımın mimarisini içeren blok şeması

(yazılımlar için veri akış şeması (dfd) da olabilir) çizilerek açıklanmış mı?

Blok şemadaki birimler arasındaki bilgi akışına ait model/gösterim var mı?

Yazılımın gereksinim listesi oluşturulmuş mu?

Kullanılan/kullanılması düşünülen araçlar/teknolojiler anlatılmış mı?

Donanımların programlanması/konfigürasyonu için yazılım gereksinimleri belirtilmiş mi?

UML ile modelleme yapılmış mı?

Veritabanları kullanılmış ise kavramsal model çıkarılmış mı? (Varlık ilişki modeli, noSQL kavramsal modelleri v.b.)

Projeye yönelik iş-zaman çizelgesi çıkarılarak maliyet analizi yapılmış mı?

Donanım bileşenlerinin maliyet analizi (prototip-adetli seri üretim vb.) çıkarılmış mı?

Donanım için gerekli enerji analizi (minimum-uyku-aktif-maksimum) yapılmış mı?

Grup çalışmalarında grup üyelerinin görev tanımları verilmiş mi (iş-zaman çizelgesinde belirtilebilir)?

Sürüm denetim sistemi (Version Control System; Git, Subversion v.s.) kullanılmış mı?

Sistemin genel testi için uygulanan metotlar ve iyileştirme süreçlerinin dökümü verilmiş mi?

Yazılımın sızma testi yapılmış mı?

Performans testi yapılmış mı?

Tasarımın uygulamasında ortaya çıkan uyumsuzluklar ve aksaklıklar belirtilerek çözüm yöntemleri tartışılmış mı?

Yapılan işlerin zorluk derecesi? x 0-25

Sözlü Sınav

Yapılan sunum başarılı mı? x 0-5

Soruları yanıtlama yetkinliği? x 0-20

Devam Durumu

Öğrenci dönem içerisindeki raporlarını düzenli olarak hazırladı mı? x 0-5

Diğer Maddeler

Toplam

DANIŞMAN : DANIŞMAN İMZASI:

Referanslar

Benzer Belgeler

Gün geçtikçe küçülen fakat işlevleri artan bilgisayarlara, ünlü teknoloji firması Quadro tarafından bir yenisi daha eklendi: Quadro Stick PC.. Mobil kullanım için rahat

ARCH denkleminin volatilite tahmininde yeterli esnekliğe sahip olmaması nedeniyle (Brooks, 2008), GARCH modeli test edilmiş, uygun gecikme katsayısı ve değişen varyans

KryptEd bir kripto eğitim platformu kurarak, dünyayı eğitmek amaçlı merkezi olmayan bir siber akademi vasıtasıyla dijital para ve blockchain teknolojisi ile ilgili

Grinberg; Bitcoin’in çalışma yöntemlerini, internet siteleri ve hizmetlerinin ekosistemini, Bitcoin gibi dijital altın para birimi olarak işlem yapan diğer

Ripple çok nadir olarak diğer ticari para birimleri arasında bir köprü rolü görmek amacıyla ve gerçekleşmesi ihtimal olan sanal saldırıları önlemek maksadıyla hizmet

İlk olarak Büyükşehir Belediye Ankara Spor Kulübü Bedensel Engelliler Takımı'nda basketbol oynamaya başladığını anlatan Demirdağ, daha sonra TSK

Özel paranın başarısız olma nedeninin ilki belirli bir para biriminin bir piyasadaki diğer ekonomik aracılar tarafından genel kabul görmesi ve paranın tüm fonksiyonlarını

n Bitcoin gibi kripto para birimlerinin gele- ceğin para birimi olacağına inananlar, daha da değer kazanmadan satın almak için ya- rış içerisindeler.. n Kripto para