Basit Ethereum Blockchain Örneği

Blockchain şu anda google’da en çok kullanılan anahtar kelimelerinden biridir ve birçoğunuz Bitcoin veya Ethereum‘u daha önce duymuşsunuzdur. Tüm bu kripto para birimleri Blockchain olarak adlandırılan bu teknolojiye dayanmaktadır.

Blockchain nedir

Blockchain, 21. yüzyılın en iyi teknolojik icatlarından biridir. Blockchain’in arkasındaki beyin, takma adı Satoshi Nakamoto tarafından bilinen bir kişi veya gruptur. Blockchain, dijital bilginin dağıtılmasına, kopyalanmasına ve dağıtılmamasına izin verir. Blockchain teknolojisi yeni bir internet türü yarattı.

Ethereum Blockchain

Programlamaya başlamak ve etrafındaki farklı kütüphaneleri anlamak için Ethereum Blockchain’i kullanacağız. Bu derste, sadece Ethereum Blockchain’deki gelişmeye başlamak için hangi dili kullanacağımızı ve nasıl bir sunucu oluşturabileceğimizi ve verileri web sayfasına nasıl getirebileceğimizi görüyoruz. Aşağıdaki başlıklarda daha derinlemesine dalış yapacağız. Bu, Ethereum’un basit bir genel görünümüdür.

Adım 1: Paketleri kurun.

Öncelikle bir proje klasörü oluşturacağız ve bu durumda aşağıdaki komutu yazarak bir package.json dosyası oluşturacağız. Makinenizde Node.js yüklü olması gerekir.

npm init

Bir package.json dosyası oluşturacaktır. Şimdi aşağıdaki paketi yükleyin.

npm install --save-dev nodemon

Node.js sunucu dosyasını kaydettiğimizde, sunucu otomatik olarak yeniden başlayacaktır, bu yüzden sunucuyu manuel olarak yeniden başlatmamız gerekmez.

Şimdi, aşağıdaki komutu yazarak express node.js web çerçevesini kuracağız.

npm install --save express

Tamam, kök dizinde public adında bir klasör oluşturun ve bu klasörde index.html adlı bir HTML dosyası oluşturun.

Bizim package.json dosyası böyle görünüyor.

{
  "name": "ethereum-blockchain",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon server"
  },
  "author": "Abdullah Bozdag",
  "license": "ISC",
  "devDependencies": {
    "nodemon": "^1.18.6"
  },
  "dependencies": {
    "express": "^4.16.4"
  }
}

Şimdi, kök klasörün içinde bir server.js dosyası oluşturun ve node.js sunucu kodunu yazın.

// server.js

const express = require('express');
let app = express();
const PORT = 3000;

app.get('/', function(req, res){
   res.sendFile(__dirname + '/public/index.html');
});

app.listen(PORT, function(){
   console.log('Server is started on port:',PORT);
});

Adım 2: index.html dosyasını değiştirin.

Web sayfasındaki verileri görüntülemek için nodej.js sunucusuna bir ajax isteği yapmamız gerekiyor. Ajax isteğini göndermek için jQuery, axios veya get kütüphanesini kullanabiliriz. Ama şimdi AJAX isteğini yapmak ve göndermek için sade javascript kullanacağız.

<!DOCTYPE html>
<html lang="tr">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>Ethereum Blockchain Örneği</title>
</head>
<body>
   <p id="blockchain">Ethereum örneği</p>
   <button onclick="EthereumServer()">Ethereum'a Bağlan</button>
</body>
<script>
   function EthereumServer()
   {
      alert('blockchain');
   }
</script>
</html>

Burada, onclick fonksiyonunu test ettik ve şimdi bu fonksiyonda, bir node.js sunucusuna bir ajax isteği göndermemiz gerekiyor.

<!DOCTYPE html>
<html lang="tr">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>Ethereum Blockchain Örneği</title>
</head>
<body>
   <p id="blockchain">Ethereum örneği</p>
   <button onclick="EthereumServer()">Ethereum'a Bağlan</button>
</body>
<script>
   function EthereumServer()
   {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
         if (this.readyState == 4 && this.status == 200) {
         document.getElementById("blockchain").innerHTML = this.responseText;
         }
      };
      xhttp.open("GET", "/blockchain", true);
      xhttp.send();
   }
</script>
</html>

server.js dosyamız da şu şekilde oldu;

// server.js

const express = require('express');
let app = express();
const PORT = 3000;

app.get('/', function(req, res){
   res.sendFile(__dirname + '/public/index.html');
});

app.get('/blockchain', function(req,res){
    res.json('ethereum isteği var');
 });

app.listen(PORT, function(){
   console.log('Server is started on port:',PORT);
});

Adım 3: Blockchain paketlerini yükleyin.

İki şeye ihtiyacımız var.

  • testrpc network
  • web3

Global olarak testrpc‘i sistemimize kurmamız gerekiyor. Ram’de sanal bir blockchain ağı olarak çalışacak. Bununla oynayabiliriz ve üretim için hazır olduğumuzda, merkezi olmayan uygulamalar geliştirmek için gerçek eternum blockchain‘i kullanacağız. (DApps)

Global olarak testrpc yüklememiz gerekiyor, bu yüzden terminalinizde aşağıdaki komutu yazınız.

npm install -g ethereumjs-testrpc

Paketi kurduktan sonra, şimdi aşağıdaki komutu yazarak nasıl göründüğünü görebilirsiniz.

testrpc

Bu ağda çalışmak için bazı test hesapları vardır. Hesapları alıp önyüzde göstereceğiz. Bu yüzden öncelikle testrpc ağını node.js uygulamamız ile iletişim kurmamız gerekiyor.

Adım 4: web3.js’i kurun.

Web3’ün 1.0.0 sürümünü yüklememiz gerekiyor. Yani terminalinize aşağıdaki komutu yazın.

npm install web3

Şimdi server.js dosyasımıza ekleyelim.

// server.js

const express = require('express');
let app = express();
const PORT = 3000;

const Web3 = require('web3');
let web3 = new Web3();

app.get('/', function(req, res){
   res.sendFile(__dirname + '/public/index.html');
});

app.get('/blockchain', function(req,res){
    res.json('ethereum isteği var');
 });

app.listen(PORT, function(){
   console.log('Server is started on port:',PORT);
});

Aşağıdaki gibi web3 sınıfında sağlayıcılar yöntemlerini çağırabiliriz.

console.log(Web3.providers);

Bize üç çeşit sağlayıcı sunacak.

  1. IPC
  2. HTTP
  3. WebSocket

Testrpc bunu kullandığı ve şu adresten çalıştırılacağı için HTTP Sağlayıcıyı kullanacağız: 8545

Böylece hesapları testrpc‘den node.js uygulamasına getirebiliriz.

//server.js

const Web3 = require('web3');
let web3 = new Web3();

web3.setProvider(new Web3.providers.HttpProvider('http://localhost:8545'));

web3.eth.getAccounts(function(err, res){
   console.log(err, res);
});

Bir dizi hesap verecektir. İlk argüman bir hatadır. Bu durumda, bir null ve ikinci argüman bir hesaplar dizisidir.

Son Dokunuş

Son olarak server.js dosyamız böyle görünüyor. Unutmayın, aynı anda iki sunucu çalıştırmamız gerekiyor.

  • testrpc
  • node.js

İçlerinden biri durdurulursa, tüm sistemimiz çökecektir. Yani blockchain ağı asla durmayacak ve gerçek zamanlı olarak sonsuza dek sürecek. Yani bu ağ blokları gelecekte eklenecektir. Daha fazla blok eklenir ve daha fazla ağ güvenli olacaktır.

// server.js

const express = require('express');
let app = express();
const PORT = 3000;

const Web3 = require('web3');
let web3 = new Web3();

web3.setProvider(new Web3.providers.HttpProvider('http://localhost:8545'));

app.get('/', function(req, res){
   res.sendFile(__dirname + '/public/index.html');
});

app.get('/blockchain', function(req,res){
   web3.eth.getAccounts(function(err, accounts){
      if(err == null) res.send(JSON.stringify(accounts));
   });
 });

app.listen(PORT, function(){
   console.log('Server is started on port:',PORT);
});

Böylece, son olarak, butona tıkladığınızda hesaplar dizisi görüntülenir. Bu hesaplar eternum ağındadır ve node.js uygulamamızı eternum ağına başarıyla bağladık.

Kodlara GitHub Üzerinde Ulaşabilirsiniz : https://github.com/apo-bozdag/ethereum-nodejs

Bir Cevap Yazın