Mühendisbilir'i Instagramdan takip ediyor musunuz?

BLOCKCHAIN Hakkında -2- (Uygulamalar)

Merhaba,

Şimdi bir önceki yazımızda ön giriş yaptığımız Blockchain yapısına uygulamalı olarak geçiş yapacağız :

Solidity ile başlayalım,

(   Akıllı sözleşmeler yazmak için nesne yönelimli bir programlama dilidir. En başta Ethereum olmak üzere çeşitli blok zinciri platformlarında akıllı sözleşmeler yapmak için kullanılır.Ethereum sanal makinesinde(EVM) çalıştırmak için tasarlanmış JavaScript e benzeyen bir dildir.   )

Önceki makalemizde sözel olarak Solidity i bu şekilde tanımlamıştık. Şimdi solidity de kod parçacıkları nasıl oluşturulur bununla başlayalım :

1-Yapı Oluşturma

struct Person {

uint yas;

string isim ;

}

 

2-Dizi Oluşturma

uint[2] sayiDizi;

string[5] textDizi ;

uint[] dinamikDizi ;

 

3-Fonksiyon Oluşturma

function carp(uint a ,uint b) private returns (uint){

return a*b ;

}

4-Olay Oluşturma (Event)

event TamsayiEkle(uint x, uint y , uint sonuc);

function add(uint x,uint y) public returns(uint){

uint sonuç = x+y;

emit TamsayiEkle(x,y,sonuc);

return sonuç ;

 

5-Atama Oluşturma(Mapping )

mapping (address => uint) public hesapDurumu;

mapping (uint => string) isimAta ;

 

6-msg.sender Oluşturma

mapping (address => uint) favoriSayim;

function ayarlaSayi(uint benimSayim) public{

favoriSayim[msg.sender] = benimSayim ;

}

function sayimiSoyle() public view returns (uint){

return favoriSayim[msg.sender];

}

Şimdi birlikte bir akıllı kontrat oluşturalım..

 

https://github.com/MyEtherWallet/etherwallet/releases   myetherwallet zip dosyasını indir .

burada

Html dosyasını aç.

Cüzdan oluştururken belirlediğin şifreni gir :

I understand de devam et..

Şimdi bu private key i bir yere kaydedin, ilerde lazım olacak.

Kaydettikten sonra save your address de ve aşağıdaki sayfada private key e tıklayın.Demin kaydettiğiniz key i girin ve kilidi aç deyin.

Şimdi sayfayı aşağı doğru kaydıralım ve kilit açıldı :

Bu işlemlerden sonra yapmamız gereken ganache uygulamasını indirmek . Hadi başlayalım

https://www.trufflesuite.com/ganache

siteden indirin ve uygulamayı direkt açın :

Önümüze  çıkan bu sayfada quickstart diyelim.

Gördüğünüz gibi Ganache a online giriş sağlandı.

Ganache kurulduktan sonra ilk açılışta 10 hesap ve hepsinde 100 ETH tanımlı olarak gelmekte bunları test işlemlerimizde kullanacağız.

İlk aşamada tek blok(genesis) içeren blockchain’i oluşturur :

RPC server’ı başlatır ve bağlanılmaya hazır hale gelir

Şimdi akıllı kontrat oluşturacağız :

Html olarak çalıştırdığımız myetherwallet a gel contracts kısmına tıkla

(NOT : sarı renk ile işaretlenmiş kısımda ganache yazması gerekmektedir, bizim indirdiğimiz ağa bağlı olduğunun göstergesidir.)

Ağa bağlı değilse bu kısımdan Ganache ı seçiniz .

Şimdi en son Contract dedik , şimdi deploy kısmına tıkla :

Şimdi byte code kısmına bir şeyler yazmamız gerek , contract kodumuzu yazıp onu byte code unu buraya kopyalayacağız :

Remix.ethereum a geliyoruz. deneme diye bir script oluşturuyoruz ve şu kodu yazıyoruz , burada çoğu yazan değer solidity e özgü paremetreler mesela uint , c deki python daki int e karşılık gelen bir parametre :

(Burada amaç basit bir contract oluşturmak ve bunu aktif hale getirmek,işlemek)

Solidity de yazılan kod 3 aşamadan oluşur :

  • Compile
  • Deploy
  • Run

Şimdi bu kod parçasını compile edelim :

Şimdi deploy edelim :

Gördüğünüz gibi oluşturmak istediğimiz kutular (kodda yazan) oluştu :

Şimdi buradan kodumuzun bytecode unu alıp myetherwallet da contractı oluşturabiliriz :

Tekrar compile kısmına gel ve aşağıda bytecode yazan yere tıkla, kopyalandı diye bir bildirim çıkacak :

              

Şimdi bu kopyalanan byte kodu al bi text dosyasına yapıştır :

Eğer benimle aynı kodu yazdıysanız önünüze böyle bir bytecode çıkacak arkadaşlar :

Tırnak işaretleri arasında yer alan değeri cüzdanda bytecode kısmına yapıştır

DİKKAT : Tırnaklar dahil alınmayacak.Sadece tırnagın içindeki değer alınacak yapıştırılacak.

NOT : Aşagıdaki gaz limit otomatik çıkması lazım, çıkmadıysa rastgele değer yazabilirsiniz .

 

Şimdi kod parçamızda kutu değerlerini değiştirerek ganache daki değişimleri gözlemleyelim :

 

Buraya deploy kısmından geldik .

Deneme amaçlı kutudaki değerleri arttır azalt yaptık ve ganacheda değerlerin değiştiğini gördük.

 

Şimdi kendi token ımızı yazalım :

pragma solidity ^0.4.4;

 

contract Token {

 

function totalSupply() constant returns (uint256 supply) {}

 

function balanceOf(address _owner) constant returns (uint256 balance) {}

 

function transfer(address _to, uint256 _value) returns (bool success) {}

 

function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}

 

function approve(address _spender, uint256 _value) returns (bool success) {}

 

function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}

 

 

event Transfer(address indexed _from, address indexed _to, uint256 _value);

event Approval(address indexed _owner, address indexed _spender, uint256 _value);

 

}

 

contract StandardToken is Token {

 

function transfer(address _to, uint256 _value) returns (bool success) {

if (balances[msg.sender] >= _value && _value > 0) {

balances[msg.sender] -= _value;

balances[_to] += _value;

Transfer(msg.sender, _to, _value);

return true;

} else { return false; }

}

 

function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {

if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {

balances[_to] += _value;

balances[_from] -= _value;

allowed[_from][msg.sender] -= _value;

Transfer(_from, _to, _value);

return true;

} else { return false; }

}

 

function balanceOf(address _owner) constant returns (uint256 balance) {

return balances[_owner];

}

 

function approve(address _spender, uint256 _value) returns (bool success) {

allowed[msg.sender][_spender] = _value;

Approval(msg.sender, _spender, _value);

return true;

}

 

function allowance(address _owner, address _spender) constant returns (uint256 remaining) {

return allowed[_owner][_spender];

}

 

mapping (address => uint256) balances;

mapping (address => mapping (address => uint256)) allowed;

uint256 public totalSupply;

}

 

contract ERC20Token is StandardToken {

 

function () {

throw;

}

 

string public name;

uint8 public decimals;

string public symbol;

string public version = ‘H1.0’;

 

function ERC20Token(

) {

balances[msg.sender] = 500000;

totalSupply = 500000;

name = “nurtoken”;

decimals = 0;

symbol = “NR”;

}

 

function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {

allowed[msg.sender][_spender] = _value;

Approval(msg.sender, _spender, _value);

 

if(!_spender.call(bytes4(bytes32(sha3(“receiveApproval(address,uint256,address,bytes)”))), msg.sender, _value, this, _extraData)) { throw; }

return true;

} }

Kodumuz bu, şimdi şu kısımlara dikkat edelim :

Burada görüldüğü üzere kendi tokenımın adını kendim koydum ve kendime bir değer ürettim 500000 olsun dedim, bir para birimi belirledim NR olsun dedim.

Yukarıda yaptığım işlemleri tek tek yapmayacagım compile deploy kısımlarını, bunları da yapınca

Matemask ımı da aşağıdaki  şekilde editledim.

Görüldüğü üzere 500000 NR token ım var,

Bu şekilde kişiler kendi aralarında token alışverişi de yapabilirler.Ben key ini bildiğim birine token  gönderebilirim yada birileri bana göndebilir.

Peki ERC20 Nedir ?

ERC20 bir token standardıdır.

 

ERC20 , tüm ethereum tokenları için izlenecek kuralların ortak bir listesini tanımlar. Yani, bu token, yeni tokenların daha büyük ethereum sistemi içinde nasıl çalışacağını doğru bir şekilde tahmin etmek için her tür geliştiriciye olanak sağlar. ERC20 ‘nin proje geliştiricilerine olan etkisi büyüktür çünkü yeni bir token yayınlandığında projelerin yeniden yapılması gerekmez. Tokenlar kurallara uymaları şartıyla, yeni tokenlarlar uyumlu olacak şekilde tasarlanmıştır. Bu sebeple yeni tokenların geliştiricileri ERC20 kurallarını genelde gözlemlemişlerdir. Bu da ethereum ico’ları ile piyasaya sürülen tokenların çoğunun ERC20 ile uyumlu olduğu anlamına gelmektedir.

 

ERC20, ethereum sistemi içindeki diğer tokenların yararı için altı farklı fonksiyon tanımlar. Bunlar genellikle tokenların nasıl aktarılacağı ve kullanıcıların tokenlarla ilgili verilere nasıl erişebilecekleri gibi temel işlevsellik konularını içerir.

Bir araya getirdiğinizde, bu fonksiyon ve sinyaller, ethereum tokenlarının farklı tiplerde olan ethereum sistemi içindeki herhangi bir yerde normal olarak çalışmasını sağlar. Bu durum, eter para birimini destekleyen hemen hemen tüm cüzdanların ERC20 uyumlu olduğu anlamına gelir.

 

Teknikten ziyade uygulamaya ağırlık vererek ethereum blockchain teknolojisi ile uygulama nasıl geliştirilir, token nasıl oluşturulur,akıllı kontrat nasıl oluşturulur bunların üzerinde durmaya çalıştım fakat yeni öğrenmeye başlayanlara karışık gelebilir , geliştirmeye devam edin, çok çalışın .

Kolay gelsin .