Adım Adım İlk Akıllı Sözleşmenizi Oluşturun

Evrim Dönmezgel tarafından tarihinde yayınlandı

Son zamanlarda Bitcoin ve diğer kripto para birimlerinin fiyatlarının adeta patladığını biliyorsunuz. Yalnızca 2017’de Bitcoin’in bu yazı yazıldığı sırada fiyatı %2035.3 oranında arttı. Kripto para pazarındaki birçok para Bitcoin ile büyük oranda ilişkili olduğu için, Ethereum ve Litecoin gibi para birimleri, fiyatta eşit derecede inanılmaz artış gördü. Örneğin Ethereum’da %6365.3 artış, Litecoin’de ise %2775.49 artış görüldü.

Bitcoin’in bugün itibariyle kripto paraların kralı olduğunu biliyoruz, ancak şu an için birincil kullanımı yalnızca bir para birimi olmasıdır. Bu, günlük ödemeler için harika, ancak insanlar daha fazla işlevsellik istiyor. İnsanlar Bitcoin gibi büyük, merkezi olmayan bir ağda çalışacak bir yazılım istiyor. Bunu yapmak için, Bitcoin akıllı sözleşmeleri oluşturabiliriz, ancak Bitcoin’in akıllı sözleşme dili sınırlı olduğundan çok genişletilemez.

Büyük bir merkezi olmayan ağda çalışabilmesi için, akıllı sözleşmelerimizi Ethereum blok zincirinde oluşturacağız. Ethereum’u özel kılan şey, üzerine inşa edilmiş bir Turing Complete sanal makinesinin bulunduğu ilk blockchain uygulaması olmasıdır. Bu, akıllı bir Ethereum sözleşmesinin (teorik olarak) herhangi bir hesaplama görevi gerçekleştirmek için kullanılabileceği anlamına gelir. Daha basit şekilde ifade edecek olursak, Ethereum’da neredeyse her program çalıştırılabilir.

Akıllı Sözleşme Oluşturma

Bu yazıda, basit bir akıllı sözleşme oluşturacağız. Sözleşmeyi, JavaScript’e benzer bir dil olan Solidity adlı bir programlama dili ile yazacağız.

Başlamadan önce Ganache‘nin yüklü olması gerekir; bu sadece makinemizde çalışan özel bir blockchain oluşturmak için kullanacağımız araçtır. Ayrıca MyEtherWallet‘in bir kopyasını indirmeniz gerekir. Not: etherwallet-v3.xx.x.x.zip dosyasını indirin.

Bunlar kurulduktan sonra, tarayıcımızda https://remix.ethereum.org/ adresine giderek başlayacağız, burada aşağıdaki ekranı göreceğiz.

Bu, Solidity için online derleyici (compiler) olan Remix’tir. Akıllı sözleşme kodumuzu yazmak için kullanacağımız şey budur. Sayfayı ilk ziyaret ettiğinizde, metin editörüne bazı kodlar önceden yüklenir. Ancak, bunlara ihtiyacımız yok, bu nedenle bu metnin tümünü silip, yerine aşağıdaki kodu yapıştıracağız;

pragma solidity ^0.4.0;
contract Counter {
   int private count = 0;
   function incrementCounter() public {
       count += 1;
   }
   function decrementCounter() public {
       count -= 1;
   }
   function getCount() public constant returns (int) {
       return count;
   }
}

Bu sayacımızın kodudur. Gördüğünüz gibi, bir değişkeni ve üç fonksiyonu vardır. Count değişkeni, sözleşmenin kendisinden başka kimsenin erişemediği anlamına gelen özel bir tam sayıdır. İlk fonksiyon olan IncrementCounter(), kendi değerini artırarak Count değerini değiştirir. İkinci fonksiyon olan, decrementCounter(), kendi değerini azaltarak Count değerini değiştirir. Ve üçüncü fonksiyon olan getCount(), Count değerine erişir ve sonucunu, kim ya da hangi fonksiyon çağırdıysa ona verir.

Yukarıdaki kodu Remix’e yapıştırdığınızda, aşağıdaki gibi görünmeli ve otomatik olarak derlenmelidir.

Bu sekmeyi açık bırakacağız, böylece daha sonra geri dönebiliriz. Şimdi, Ganache’yi açın ve böyle bir şey göreceksiniz;

En tepede “RPC SERVER” yazan bir yer göreceksiniz. Burayı daha sonra kullanacaz.

Şimdi, MyEtherWallet dosyasını indirin ve klasörü açın. Ardından, aşağıdaki ekranı görmek için tarayıcınızda index.html dosyasını açın.

Sağ üst köşede, EthereWallet’e hangi Ethereum ağının bağlanacağını söyleyen açılır bir menü göreceksiniz. Varsayılan olarak, Ethereum (ETH) ana ağına bağlanır. Açılır menüye tıklayarak bunu değiştireceğiz.

Yeni Node Oluşturun

Add Custom Network/Node yazan yere tıklıyoruz.

Artık Ganache’nin daha önce bize verdiği RPC sunucu bilgilerini girebiliriz. Not: Node’unuzu istediğiniz şekilde adlandırabilirsiniz.

MyEtherWallet artık kendini host eden blok zinciriniz ile Ganache üzerinde bağlanmış durumda. Hazırladığımız Sayaç akıllı sözleşmemizi blok zincirimize yüklemek için MyEtherWallet’i kullanalım. Bunu yapmak için, MyEtherWallet’in en üstteki gezinti çubuğunda “Sözleşmeler”i tıklayıp “Deploy Contract“ı seçeceğiz.

 

Gördüğünüz gibi, MyEtherWallet sözleşmenin bayt kodunu soruyor. Bunu bulmak için tekrar Remix IDE’ye gidip “Ayrıntılar” (Details) butonuna tıklayın.

Şimdi, Sayaç sözleşmeniz hakkında çok fazla bilgi içeren bir diyalog ekranı göreceksiniz.

Bayt kodunu kopyalamak için “BYTECODE” yanındaki clipboard simgesine tıklayın.

Ardından, MyEtherWallet’e geri dönüp byte kodunu diyalog kutusuna yapıştırıyoruz.

Şimdi, sözleşmeyi yüklemek için aşağıya inebilir ve bir account’u içe aktarabiliriz. Neyse ki Ganache, özel blok zincirimizle etkileşim kurmak için kullanabileceğimiz 5 adres verdi. Bu sözleşmeyi yüklemek için bunlardan birini kullanmak için, Ganache’ye geri dönüp herhangi bir adres için anahtar simgesini tıklayabiliriz.

Simgeye tıkladığımızda bu hesapla ilişkili özel anahtar bize gösterilir.

Bu özel anahtarı kopyalayıp MyEtherWallet’e yapıştırabiliriz.

Şimdi, “Kilit Açma”yı (Unlock) tıklarsak, MyEtherWallet bize bu işlemi imzalayıp imzalamayacağımızı sorar ve sözleşmemizi başlatır. Yapalım.

İşlem başarılı bir şekilde gerçekleştiyse, Ganache “Mevcut Bloğun” değerini artıracak ve sözleşmeyi uygulamak için kullandığımız hesabın işlem sayısı da artacaktır.

Sözleşme şimdi blok zincirimize yüklendi! Sayacı arttırarak ve azaltarak onunla etkileşimde bulunmak için, MyEtherWallet’e dönüp “Sözleşme İle Etkileşim”i seçebiliriz.

MyEtherWallet, şimdi yeni açılan sözleşmenin bulunduğu adresi ve sözleşmenin Application Binary Interface (ABI) istemektedir. Sözleşme adresini bulmak için Ganache’ye geri dönebilir ve işlem günlüğümüzü görebiliriz.

Bu sayfada, sözleşmemizin dağıtımını yaparken daha önce oluşturduğumuz işlemi gösteririz. Gördüğünüz gibi, Ganache sözleşmeyi dağıtmak için kullandığımız adresi, sözleşmenin adres bloğumuzdaki adresini ve işlemle ilgili daha fazla bilgiyi bize bildirir. İşlemi tıklayın, oluşturulan sözleşme adresini kopyalayıp MyEtherWallet’e yapıştırın.

İhtiyacımız olan tek şey ABI. MyEtherWallet’e sözleşmeyle nasıl etkileşime geçeceğini söyleyen şey budur. Almak için Remix’e geri dönüp kopyalamak için “INTERFACE – ABI” yanındaki clipboard simgesini tıklayın.

Şimdi MyEtherWallet’e geri dönebilir, ABI’yı metin kutusuna yapıştırabilir ve “Access” butonuna basabiliriz.

Sözleşmeyle Etkileşime Geçin

Süper! Şimdi “Select a function” açılır menüsünü tıklayarak sözleşmeyle etkileşim kurabiliriz.

Kodumuzda, count’ın başlangıç değerini 0 olarak ayarladık. Sözleşmenin düzgün çalıştığını onaylamak için getCount () fonksiyonunu çağıralım.

Çalıştı! Sözleşmemiz değiştirilmeden önce Count’un değerini alırken 0’a döndü. Ancak incrementCounter() ve decrementCounter() fonksiyonlarını da uyguladık. Bunu test etmek için incrementCounter()’ı çağıralım. Fonksiyon açılır menüsünü tekrar seçerek, incrementCounter’i seçerek ve yeni bir işlem oluşturarak bunu yapacağız.

Bu sadece count’un değerini artırdı. Şimdi, değerin gerçekten değişip değişmediğini teyit etmek için getCount() öğesini tekrar çağırabiliriz.

Gördüğünüz gibi count şimdi 1’e eşit oldu! Yani, incrementCount() fonksiyonu çalıştı. DecrementCount()’u kendiniz test etmekte özgürsünüz ve daha da fazlasını keşfedebilirsiniz!

Sonuç

Bu yazı boyunca, kendi makinemizde bir blockchain açtık, akıllı bir sözleşme yaptık ve sözleşme ile etkileşim kurduk. Yaptığımız örnek profesyonel Ethereum akıllı sözleşmelerin iş akışına çok benzerdir. Bu süreç, akıllı sözleşmelerin ilk gelişimi sırasında oldukça iyi sonuç verir, ancak başkalarının akıllı sözleşmenizle gerçek para harcamadan ana ağa deploy etkileşime girmesini istiyorsanız ne olur? Bu durumda, sözleşmenin Ethereum’un global ağındaki her makineye kopyalanması için sözleşmenizi Ethereum test ağına ya da testnet’e yükleyebilirsiniz; ancak kullanıcılar yine de onunla etkileşim kurmak için taklit paralar kullanabilirler. Sonraki yazıda akıllı sözleşmeleri testnet’e nasıl deploy edeceğimizi anlatıyor olacağız.

Facebook Yorumları

Evrim Dönmezgel

"Satoshi" adlı ilk Türkçe Bitcoin kitabının yazarı Evrim Dönmezgel, Bitcoinlerim.com sitesinin yazarıdır. Kripto para ve blockchain teknolojileri sevdalısıdır.

2 yorum

mehmet · 19 Aralık 2017 01:21 tarihinde

Gerçekten muazzam bir anlatım. En ince detayına kadar herşey düşünülüp tane tane anlatılmış. Başarılarınızın ve bu güzel anlatımlarınızın devamını diliyorum. Türkçe kaynak bulmakta oldukça zorlanıyoruz fakat siz bunu bizim için sorun olmaktan çıkartıyorsunuz. Teşekkür ederim

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.