You are on page 1of 12

13.02.

2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye

OKUMANIZ GEREKENLER Türk Kripto Para Borsa    > Ara

ANA SAYFA LİSTELER ALTCOİNLER BLOCKCHAİN BİTCOİN ANALİZ YATIRIM ÖNE ÇIKAN KRİPTO PARA ETHEREUM İLETİŞİM

ANALİZLER ⌂ Anasayfa » Blockchain » Adım Adım Kendi Blokchain’ini Oluşturma Arama için entera basın

TradingView Kriptopara
Sinyal Bulucu Kullanımı
 28 Ocak 2018

RaiBlocks Hakkında
Bilmeniz Gereken 7 Şey
 28 Ocak 2018

28 Ocak 2018 Kripto Para


Piyasası Analizi: BTC, ETH,
Adım Adım Kend Blokcha n’ n Oluşturma
BCH, XRP, XLM, LTC, NEM,  Kategori: Blockchain, Öne Çıkan  1 Ekim 2017  8 Yorum
ADA
 28 Ocak 2018 Blockchain oluşturma zannedildiği kadar zor değildir.

24 Ocak 2018 Kripto Para Blockchain ya da Türkçe ifadeyle Blok Zincir’in ne olduğunu öğrenmek için öncelikle aşağıdaki yazıya bir göz
Piyasası Analizi: BTC, ETH, atın;
BCH, XRP, IOTA, LTC,
NEM, ADA Blok Zincir nedir?
 24 Ocak 2018
Yukarıdaki yazıyı okuduysanız devam edebiliriz. Bu yazıda blockchain’in ne olduğunu çok farklı bir yöntemle
IOStoken Nedir ve Nasıl öğreneceğiz: kendi blockchain’imizi oluşturacağız! Blockchain oluşturma tabii çok kolay bir işlem
Satın Alınır? – Tam Rehber değildir. Bunun için en azından bir takım temel teknik bilgi ve altyapıya sahip olmanız gerekiyor.
 24 Ocak 2018
Şu an burada bu yazıyı okuyorsun, çünkü benim gibi, kripto paraların yükselişi konusunda kafayı yemişsin.
PIVX Nedir ve Nasıl Satın Ve blockchain’in nasıl çalıştığını ve arkasındaki temel teknolojiyi bilmeyi arzuluyorsun. Bunun
Alınır – Adım Adım Tam ötesinde Blockchain oluşturma yöntemlerini merak ediyorsun.
Rehber
 23 Ocak 2018 Ancak blockchain’i anlamak kolay değildir – ya da en azından benim için değildi. Bol bol videolar izledim,
dersler aldım ve genelde hayal kırıklığı yaşadım.
Türk Kripto Para
Borsalarının İşlem Hacimleri Yaparak öğrenmeyi severim. Bazıları böyledir. Günlerce okur, çalışır fakat hiç birşey anlamaz. Bir kez yapar
 22 Ocak 2018 ve her şeyi kavrar. Ben öyleyim. Konuyu, kod düzeyinde ele almam lazım. Aynı şeyi siz de yaparsanız, bu
rehberin sonunda, blokchain’in nasıl çalıştığına dair sağlam bir kavrayışa sahip olacaksınız artı işleyen bir
Blockchain’iniz olacak. Blockchain oluşturma noktasında uzmanlık kazanmış olacaksınız.
SON YORUMLAR
İçindekiler [gizle]

Evrim 1 Başlamadan önce…


Dönmezgel: 2 Adım 1: Bir Blockchain Oluşturma
Rica ederim. 2.1 Temsili Blockchain Oluşturma
Umarım faydalı 2.2 Bir blok neye benzer? FACEBOOK SAYFAMIZA KATILIN
oluyordur.... 2.3 Bir Bloğa İşlem Ekleme
2.4 Yeni Bloklar Oluşturma
Kerem: şüphen Bitcoinlerim
2.5 İş İspatını Anlamak 1.275 beğenme
olmasın
2.6 Temel İş İspatı Uygulaması
kardeş.... 450
3 Adım 2: Bir API olarak Blockchain’imiz
tane aldım
3.1 Flask Kurulumu
0.29$ dan... bekliy...
3.2 İşlem Endpoint’i Sayfayı Beğen
Mustafa Ozsoy: 3.3 Madencilik Endpoint’i
Coin Turkey 4 Adım 3: Blok zincirimizle etkileşim
5 Adım 4: Fikir birliği (Konsensüs) Arkadaşların arasında bunu ilk b
Org olarak coin
turk üretilecek 5.1 Yeni Düğümlerin Kaydedilmesi
projeye katılmak... 5.2 Konsensüs Algoritmasının Uygulanması

Evrim
Dönmezgel:
Video yapma Başlamadan önce… BİTCOİN HABERLERİNİ KAÇIRMA
noktasında çok
Bir blockchain ya da blok zincirin, bloklar olarak adlandırılan değişmez, sıralı bir kayıt zinciri olduğunu Bitcoin ile ilgili en son haberleri a
yorum alıyorum lakin
unutmayın. İşlem (transaction), dosya veya istediğiniz herhangi bir veriyi içerebilirler. Ancak önemli blogumuza e-mail ile üye olun.
yazmak sanki...
olan, hash yöntemleriyle birbirine zincirlenmiş olmalarıdır.
Evrim E-posta Adresi
Hash’in ne olduğundan emin değilseniz, buradaki kısa açıklamayı okuyabilirsiniz.
Dönmezgel:
Merhaba, Bu rehber kimleri hedefliyor? HTTP üzerinden Blockchain ile konuşacağımız için temel Python bilgisine Abone ol
Stellar
sahip olmanız gerek. Ayrıca HTTP isteklerinin (request) işleyişi hakkında biraz bilgi sahibi olmanız gerekir.
madenciliğe dayalı bir para
birimine sahip... Neye ihtiyacınız olacak? Sisteminizde Python 3.6+ (pip ile birlikte) kurulu olduğundan emin olun. Ayrıca,
Flask’ı ve Requests kitaplığını yüklemelisiniz: İLK TÜRKÇE BİTCOİN KİTABI (ÜC

BİTCOİN pip install Flask==0.12.2 requests==2.18.4

Ayrıca Postman veya cURL gibi bir HTTP istemcisine de ihtiyacınız olacak.

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 1/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye

Nihai kod nerede? Kaynak kodu burada mevcut.


28 Ocak 2018 Kripto Para
Piyasası Analizi: BTC, ETH,
BCH, XRP, XLM, LTC, NEM,
ADA
 28 Ocak 2018
Adım 1: Bir Blockchain Oluşturma
En sevdiğiniz metin editörünü veya IDE’yi açın, kişisel olarak ben PyCharm‘i seviyorum. Blockchain.py
adlı
Atomic Swap Nedir? Nasıl yeni bir dosya oluşturun. Yalnızca tek bir dosya kullanacağız, ancak kaybolursanız, kaynak koda her zaman
Çalışır? başvurabilirsiniz.
 11 Ocak 2018

Kripto Para Borsaları Nasıl


Çalışır? Temsili Blockchain Oluşturma
 5 Ocak 2018
Constructor‘ı boş bir liste oluşturan (blok zincirimizi depolamak için) bir blok zinciri sınıfı oluşturuyoruz ve bir
Rootstock Nedir diğerini ise işlemleri depolamak için kullanacağız. Sınıfımız için hazırlanan tasarı aşağıda belirtilmiştir:
 9 Aralık 2017
class Blockchain(object):
Princeton Üniversitesi’nden def __init__(self):
60 Ücretsiz Bitcoin Kursu self.chain = []
 9 Aralık 2017 self.current_transactions = []
def new_block(self):
Popüler Son Yazılar
Bitcoin Çılgınlığının Kalbi:
# Yeni bir blok oluşturur ve zincire ekler
Coinbase Adım Adım Kendi Blo
pass
 7 Aralık 2017 Oluşturma
def new_transaction(self):
 1 Ekim 20
Bitcoin Gerçek Para Değil # İşlem listesine yeni bir işlem ekler
Safsatası pass
Adım Adım Excel’de
 5 Aralık 2017 @staticmethod
Portföyü Oluşturma
def hash(block):
 31 Aralık
Bitcoin’in 3 Ekonomik # Bloku hash'ler
Dönemi ve Geleceği pass
 4 Aralık 2017
Adım Adım Bitcoin K
@property
Oluşturma
def last_block(self):  24 Eylül 2
Bitcoin ile İlgili Sormaya
# Zincirdeki son bloku döner
Utandığınız 7 Soru
 3 Aralık 2017 pass Yeni Başlayanlar İçin
Coin Rehberi
Y Kuşağı Parasını
Bankalarda Değil Bitcoin’de
Blockchain sınıfımız zinciri yönetmekten sorumludur. İşlemleri depolar ve zincire yeni bloklar eklemek için  9 Aralık 2
bazı yardımcı yöntemlere (helper methods) sahiptir. Bazı yöntemleri bulmaya başlayalım.
Saklıyor Kendi Kripto Paranız
 23 Kasım 2017 Tam Rehber
 17 Aralık
Bir blok neye benzer?
ETHEREUM Her blokta bir dizin(index), bir zaman damgası (Unix zamanında), işlemlerin bir listesi
, bir ispat
(daha sonra bunun üzerinde daha fazla bilgi edineceğiz fakat iş ispatı yazısına bakabilirsiniz) ve önceki ALTCOİNLER
5 Adımda Kendi ICO’nuzu blokun hash’i bulunur.
Oluşturun
Tek bir blokun nasıl göründüğüne dair bir örnek: 5 Adımda Kendi ICO
 4 Şubat 2018
 4 Şubat 2018
Ethereum Tabanlı block = {
Uygulamalara Nasıl Erişilir? 'index': 1,
 31 Ocak 2018 'timestamp': 1506057125.900785, Nano Nasıl Satın Alın
'transactions': [ Tam Rehber
28 Ocak 2018 Kripto Para {
 2 Şubat 2
Piyasası Analizi: BTC, ETH,
'sender': "8527147fe1f5426f9dd545de4b27ee00",
BCH, XRP, XLM, LTC, NEM, TradingView Kriptop
'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",
ADA Kullanımı
'amount': 5,
 28 Ocak 2018  28 Ocak
}
Ethereum Nasıl Alınır – ],
RaiBlocks Hakkında
Adım Adım Tam Rehber 'proof': 324984774000,
Şey
 7 Ocak 2018 'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
 28 Ocak 2018
}
Kendi Kripto Paranızı
Fortuna Nedir ve Na
Oluşturun: Detaylı Tam
Rehber Bu noktada, zincir fikrinin zihninizde belirginleşmiş olması lazım. Her yeni blok kendi içinde, önceki blokun Tam Rehber
hash’ini içerir. Bu çok önemlidir çünkü blok zincirlerin değiştirelemez olmasına neden olur: bir  25 Ocak
 17 Aralık 2017
saldırgan zincirdeki bir önceki bloğu bozarsa, sonraki tüm bloklar hatalı hash’ler içerir. Blockchain oluşturma
Adım Adım İlk Akıllı sürecindeki en önemli noktalardan biri budur. IOStoken Nedir ve N
Sözleşmenizi Oluşturun Tam Rehber
 9 Aralık 2017 Bütün bunlar size mantıklı geliyor mu? Gelmiyorsa, kendinize biraz daha zaman tanıyın. Eninde sonunda  24 Ocak
mantığını kavrayacaksınız.
Adım Adım MetaMask PIVX Nedir ve Nasıl S
Kullanımı Adım Tam Rehber
 2 Aralık 2017
Bir Bloğa İşlem Ekleme  23 Ocak

Ethereum’un Toplam Piyasa


Değeri Türk Lirası’nı Geçti
Bloğa işlem (transaction) eklemenin bir yoluna ihtiyacımız olacak. Bunun için new_transaction () yöntemi
sorumludur ve oldukça basittir:
 2 Aralık 2017 BLOKCHAİN
class Blockchain(object):
En İyi 11 Ethereum
... BarterDEX Nedir?
Geliştirme Aracı
def new_transaction(self, sender, recipient, amount):  20 Ocak 2018
 25 Kasım 2017
"""
Atomic Swap Nedir? Nasıl Çalışır?
Ethereum Classic nedir? Kazılacak bir sonraki blok için yeni bir işlem oluşturur.
 11 Ocak 2018
Ethereum vs Ethereum :param sender: Gönderenin adresi
Classic :param recipient: Alıcının adresi Kripto Para Borsaları Nasıl Çalışır
 24 Kasım 2017 :param amount: Tutar  5 Ocak 2018
:return: Bu işlemi gerçekleştirecek blok dizini

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 2/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye
BORSA """
Blockchain’in Olmazsa Olmazı: B
self.current_transactions.append({
Toleransı
'sender': sender,
Yeni Türk Kripto Para  2 Ocak 2018
Borsası OVIS Yayında! - 'recipient': recipient,

Reklam- 'amount': amount, Request Network İncelemesi: Re


 10 Şubat 2018 }) Nedir?
return self.last_block['index'] + 1  29 Aralık 2017
Türk Kripto Para
Kendi Kripto Paranızı Oluşturun:
Borsalarının İşlem Hacimleri
 22 Ocak 2018
New_transaction (), listeye bir işlem ekledikten sonra, işlemin ekleneceği -sonraki işlemin yapılacağı- Rehber
sonraki bloğun dizinini döndürür. Bu daha sonra, işlemi gönderen kullanıcı için faydalı olacaktır.  17 Aralık 2017
BarterDEX Nedir?
 20 Ocak 2018 Rootstock Nedir

Kripto Para Borsaları Nasıl


Yeni Bloklar Oluşturma  9 Aralık 2017

Çalışır? Blockchain’imiz oluşturulduğunda onu bir genesis bloğu ile tohumlamak gerekir. Genesis bloğunun ne
 5 Ocak 2018 olduğunu öğrenmek için bu yazımızı okuyun. Genesis bloğu başlangıç bloğudur ve hiçbir öncülü olmayan bir MADENCİLİK
Kucoin Shares ile Düzenli
bloktur. Madencilik sonucu üretilen genesis bloğumuza (veya iş ispatına) bir “ kanıt
” eklememiz gerekecek.
Madencilik hakkında ilerleyen kısımlarda konuşacağız.
Pasif Gelir Kazanma Bitcoin Madencileri 159 Ülkeden
 2 Ocak 2018 Constructor’ımızda genesis bloğunun oluşturulmasına ilaveten new_block (), new_transaction () ve hash () Üretiyor!
 23 Kasım 2017
yöntemlerini de inceleyelim:
Bitcoin Çılgınlığının Kalbi:
Coinbase Yeni Başlayanlar için Ethereum M
import hashlib
 7 Aralık 2017  1 Eylül 2017
import json

ABD Mahkemesi 15 Bin from time import time Madencilik Donanım Karşılaştırm
Bitcoin Kullanıcısının class Blockchain(object):  19 Ağustos 2017
Bilgilerini İstiyor def __init__(self):
 30 Kasım 2017 self.current_transactions = [] Bitcoin Madenciliği
 19 Ağustos 2017
self.chain = []
Merkezi Olmayan Borsa # Genesis blokunu oluşturuyoruz
Nedir Bitcoin Madenciliği Kârlılığını Hes
self.new_block(previous_hash=1, proof=100)
 6 Eylül 2017  15 Ağustos 2017
def new_block(self, proof, previous_hash=None):

En İyi Bitcoin Borsaları """

 31 Ağustos 2017 Blockchain içinde bir blok oluşturuyoruz


:param proof: İspat "İş İspatı" algoritmasıyla verilir
Bitcoin Ticareti için En İyi 5 :param previous_hash: (Opsiyonel) Önceki bloğun hash değeri
Araç :return: Yeni blok
 29 Ağustos 2017 """
block = {
'index': len(self.chain) + 1,
'timestamp': time(),
'transactions': self.current_transactions,
'proof': proof,
'previous_hash': previous_hash or self.hash(self.chain[-1]),
}
# Mevcut işlem listesini sıfırlıyoruz
self.current_transactions = []
self.chain.append(block)
return block
def new_transaction(self, sender, recipient, amount):
"""
Kazılan sonraki bloğa eklenecek yeni işlemi oluşturuyoruz
:param sender: Gönderen adresi
:param recipient: Alıcı adresi
:param amount: Tutar
:return: Bu işlemi gerçekleştirecek blok dizini
"""
self.current_transactions.append({
'sender': sender,
'recipient': recipient,
'amount': amount,
})
return self.last_block['index'] + 1
@property
def last_block(self):
return self.chain[-1]
@staticmethod
def hash(block):
"""
Blokun SHA-256 hash değerini oluşturuyoruz
:param block: Block
:return:
"""
# Dictionary'nin Ordered olduğundan emin olmalıyız, aksi halde tutarsız hash'ler olur.
block_string = json.dumps(block, sort_keys=True).encode()
return hashlib.sha256(block_string).hexdigest()

Yukarıdaki kod gayet açıklayıcı. Temsili blok zincirimizi neredeyse bitirdik. Ancak bu noktada, yeni blokların
nasıl oluşturulduğunu ya da çıkarıldığını merak ediyor olmalısınız.

İş İspatını Anlamak
https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 3/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye
İş ispatı algoritması (PoW – Proof of Work) yeni blokların blok zincirde nasıl oluşturulduğu veya çıkarıldığıyla
(madencilik) ilgilidir. Blockchain oluşturma sürecinin önemli adımlarından biridir. PoW’un amacı,
matematiksel bir problemi çözen bir numarayı bulmaktır. Numaranın bulunması zor olmalı (Bakınız:
Zorluk), ancak hesaplama açısından -ağdaki herkes tarafından- doğrulanması kolay olmalıdır. İş ispatının
arkasında yatan temel fikir budur.

İş ispatını (PoW) anlamaya yardımcı olması için çok basit bir örneğe bakacağız.

X tamsayısının hash değerinin başka bir y ile çarpılmasının 0 ile bitmesi gerektiğine karar verelim.
Yani hash (x * y) = ac23dc … 0 gibi bir şey elde edeceğiz.

Bu basitleştirilmiş örnek için x = 5 olsun. Bunu Python’da uyguluyoruz:

from hashlib import sha256


x = 5
y = 0 # y'nin ne olması gerektiğini henüz bilmiyoruz...
while sha256(f'{x*y}'.encode()).hexdigest()[-1] != "0":
y += 1
print(f'The solution is y = {y}')

Bu örnekte çözüm y=21’dir. Üretilen hash değeri 0 ile bitmiş olur;

hash(5 * 21) = 1253e9373e...5e3600155e860

Bitcoin’de, İş İspatı algoritmasına Hashcash denir. Ve yukarıdaki temel örneğimizden çok farklı değildir.
Madencilerin yeni bir blok oluşturmak için çözmeye çalıştıkları algoritma budur. Genel olarak, zorluk bir
dizedeki (string) aranan karakterlerin sayısına göre belirlenir. Madenciler daha sonra çözüm için bir koin ile
ödüllendirilirler.

Ağ, madencilerin çözümlerini kolayca doğrulayabilir.

Temel İş İspatı Uygulaması


Blok zincirimiz için benzer bir algoritma uygulayalım. Kuralımız yukarıdaki örneğe benzer:

Bir önceki bloğun çözümü ile kıyaslandığında, 4 tane 0 ile başlayan bir hash üretilen bir p sayısı bulalım.

import hashlib
import json
from time import time
from uuid import uuid4
class Blockchain(object):
...
def proof_of_work(self, last_proof):
"""
Basit bir İş İspatı algoritması:
:param last_proof:
:return:
"""
proof = 0
while self.valid_proof(last_proof, proof) is False:
proof += 1
return proof
@staticmethod
def valid_proof(last_proof, proof):
"""
İspatı doğrula: hash(last_proof, proof) 4 adet 0 ile başlıyor mu?
:param last_proof: Önceki İspat
:param proof: Mevcut İspat
:return: True if correct, False if not.
"""
guess = f'{last_proof}{proof}'.encode()
guess_hash = hashlib.sha256(guess).hexdigest()
return guess_hash[:4] == "0000"

Algoritmanın zorluğunu ayarlamak için önde gelen sıfırların sayısını değiştirebiliriz. Ama 4 yeterli. Tek bir
sıfırın eklenmesinin, bir çözüm bulmak için gereken zamana büyük bir fark yarattığını öğreneceksiniz.

Sınıfımız (class) neredeyse tamamlandı ve onunla HTTP istekleri kullanarak etkileşime geçmeye hazırız.

Adım 2: Bir API olarak Blockchain’imiz


Python Flask Framework’ünü kullanacağız. Kendisi bir mikro-framework’tür ve uç noktaları Python
fonksiyonlarına eşlemeyi kolaylaştırır. Bu, HTTP istekleri kullanarak web üzerindeki blok zincirimizle
konuşmamıza olanak tanır.

Üç metot oluşturacağız:

/transactions/new, bir bloğa yeni bir işlem oluşturmak için kullanılır.


/mine, sunucumuza yeni bir blok çıkarmasını söyler.
/chain, tam bir Blockchain döner.

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 4/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye

Flask Kurulumu
“Sunucumuz” blockchain ağımızda tek bir düğüm (node) oluşturacaktır. Kodu oluşturalım:

import hashlib
import json
from textwrap import dedent
from time import time
from uuid import uuid4
from flask import Flask
class Blockchain(object):
...
# Düğümümüzü (Node) somutlaştırıyoruz..
app = Flask(__name__)
# Bu düğüm için genel olarak benzersiz bir adres oluşturuyoruz.
node_identifier = str(uuid4()).replace('-', '')
# Blok zincirimizi somutlaştırıyoruz..
blockchain = Blockchain()
@app.route('/mine', methods=['GET'])
def mine():
return "Yeni blok çıkaracağız"
@app.route('/transactions/new', methods=['POST'])
def new_transaction():
return "Yeni işlem ekleyeceğiz"
@app.route('/chain', methods=['GET'])
def full_chain():
response = {
'chain': blockchain.chain,
'length': len(blockchain.chain),
}
return jsonify(response), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)

Yukarıda eklemiş olduğumuz şeylerin kısa bir açıklaması:

Düğümümüzü (node) başlattık. Flask hakkında daha fazla bilgi için buraya tıklayın.
Düğümümüz için rasgele bir isim oluşturduk.
Blockchain sınıfını hazırladık.
Bir GET isteği olan /mine endpoint’i oluşturduk.
Verileri ona gönderirken bir POST isteği olan /transactions/new endpoint’i oluşturduk.
Full blok zincirini döndüren /chain endpoint’i oluşturduk.
Sunucuyu 5000 port’undan çalıştırdık.

İşlem Endpoint’i
Bir işlem talebi aşağıdaki gibi görünecektir. Kullanıcının sunucuya gönderdiği şey budur:

{
"sender": "benim adresim",
"recipient": "başka birinin adresi",
"amount": 5
}

İşlemleri bir bloğa eklemek için kullanılan sınıf yöntemimiz zaten olduğundan, geri kalanı kolaydır. İşlem
ekleme fonksiyonunu yazalım:

import hashlib
import json
from textwrap import dedent
from time import time
from uuid import uuid4
from flask import Flask, jsonify, request
...
@app.route('/transactions/new', methods=['POST'])
def new_transaction():
values = request.get_json()
# Zorunlu alanların POST ile gönderilen verinin içinde olduğunu kontrol ediyoruz..
required = ['sender', 'recipient', 'amount']
if not all(k in values for k in required):
return 'Missing values', 400
# Yeni işlem oluşturuyoruz
index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount'])
response = {'message': f'İşlem {index} blokuna eklenecektir'}
return jsonify(response), 201

Madencilik Endpoint’i
Madencilik endpoint’imiz büyünün gerçekleştiği yerdir. Üç şey yapmak zorundayız:

İş ispatını hesaplamalıyız

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 5/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye
1 adet koin veren bir işlem ekleyerek madenciyi ödüllendirmeliyiz
Yeni bloğu zincire ekleyerek çıkarmalı ya da kazımalıyız.

import hashlib
import json
from time import time
from uuid import uuid4
from flask import Flask, jsonify, request
...
@app.route('/mine', methods=['GET'])
def mine():
# Sonraki kanıtı almak için iş kanıtı algoritmamızı çalıştırıyoruz...
last_block = blockchain.last_block
last_proof = last_block['proof']
proof = blockchain.proof_of_work(last_proof)
# Kanıtı bulduğumuz için ödül alıyoruz..
blockchain.new_transaction(
sender="0",
recipient=node_identifier,
amount=1,
)
# Yeni bloğu zincire ekleyerek çıkarıyoruz..
block = blockchain.new_block(proof)
response = {
'message': "Yeni blok çıkarıldı",
'index': block['index'],
'transactions': block['transactions'],
'proof': block['proof'],
'previous_hash': block['previous_hash'],
}
return jsonify(response), 200

Çıkarılan bloğun alıcısının düğümümüzün adresi olduğunu unutmayın. Ve burada yaptığımız şeylerin çoğu
Blockchain sınıfındaki yöntemlerle etkileşim kuruyor. Bu noktada işimiz bitti ve blok zincirimizle etkileşime
geçmeye başlayabiliriz.

Adım 3: Blok zincirimizle etkileşim


Bir ağ üzerinden API’miz ile etkileşimde bulunmak için cURL veya Postman kullanabilirsiniz.

Sunucuyu çalıştırın:

$ python blockchain.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

http://localhost:5000/mine adresine GET talebi göndererek bir blok çıkarmaya çalışalım;

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 6/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye
http://localhost:5000/transactions/new adresine POST talebi göndererek işlem (transaction)
oluşturmaya çalışalım;

Postman kullanmıyorsanız, aynı talebi cURL kullanarak da yapabilirsiniz:

$ curl -X POST -H "Content-Type: application/json" -d '{


"sender": "d4ee26eee15148ee92c6cd394edd974e",
"recipient": "someone-other-address",
"amount": 5
}' "http://localhost:5000/transactions/new"

Sunucumu restart ettim ve 2 tane daha blok çıkararak toplamda 3 blok elde ettim.
Şimdi http://localhost:5000/chain adresine istek göndererek zincirin tamamını talep edelim;

{
"chain": [
{
"index": 1,
"previous_hash": 1,
"proof": 100,
"timestamp": 1506280650.770839,
"transactions": []
},
{
"index": 2,
"previous_hash": "c099bc...bfb7",
"proof": 35293,
"timestamp": 1506280664.717925,
"transactions": [
{
"amount": 1,
"recipient": "8bbcb347e0634905b0cac7955bae152b",
"sender": "0"
}
]
},
{
"index": 3,
"previous_hash": "eff91a...10f2",
"proof": 35089,
"timestamp": 1506280666.1086972,
"transactions": [
{
"amount": 1,
"recipient": "8bbcb347e0634905b0cac7955bae152b",
"sender": "0"
}
]
}

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 7/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye
],
"length": 3
}

Adım 4: Fikir birliği (Konsensüs)


Bu kısım çok güzel. İşlemleri kabul eden ve yeni blokları çıkarmamızı sağlayan temel bir Blockchain var.
Fakat Blockchain’in bütün çıkış noktası merkezi olmaması dır. Peki merkezi bir yapı olmadan, tüm düğümlerin
aynı zinciri yansıtmalarını nasıl sağlayabiliriz? Buna Konsensüs adı verilir ve ağınızda birden fazla düğüm
istiyorsanız Konsensüs Algoritması çalıştırmak zorundasınız.

Yeni Düğümlerin Kaydedilmesi


Bir Konsensüs Algoritması çalıştırmaya başlamadan önce, bir düğümün ağdaki komşu düğümleri bilmesine
izin vermenin bir yoluna ihtiyacımız var. Ağımızdaki her düğüm ağdaki diğer düğümlerin kayıtlarını
tutmalıdır. Dolayısıyla, daha fazla endpoint’e ihtiyacımız olacak:

1. /nodes/register: URL biçimindeki yeni düğümlerin listesini kabul etmek için.


2. /nodes/resolve: herhangi bir uyuşmazlığı çözen konsensüs algoritmasını uygulamak için.

Blockchain yapıcısını değiştirmeli ve düğümlerin kaydedilmesi için bir yöntem sağlamalıyız:

...
from urllib.parse import urlparse
...
class Blockchain(object):
def __init__(self):
...
self.nodes = set()
...
def register_node(self, address):
"""
Düğüm listesine yeni bir düğüm ekliyoruz..
:param address: Düğüm adresi. Örneğin. 'http://192.168.0.5:5000'
:return: None
"""
parsed_url = urlparse(address)
self.nodes.add(parsed_url.netloc)

Düğümlerin listesini tutmak için bir set () kullandık. Bu, yeni düğümlerin eklenmesinin eş-kuvvette olmasını
sağlamanın ucuz bir yoludur.

Konsensüs Algoritmasının Uygulanması


Belirtildiği gibi, bir çatışma, bir düğümün başka bir düğüme farklı bir zincire sahip olması demektir. Bunu
çözmek için, en uzun geçerli zincirin yetkili olması kuralını uygularız. Başka bir deyişle, ağdaki en
uzun zincir fiilen geçerlidir. Bu algoritmayı kullanarak, ağımızdaki düğümler arasında fikir birliğine
varıyoruz.

...
import requests
class Blockchain(object)
...
def valid_chain(self, chain):
"""
Verilen bir blok zincirin geçerli olup olmadığını belirliyoruz..
:param chain: A blockchain
:return: True if valid, False if not
"""
last_block = chain[0]
current_index = 1
while current_index < len(chain):
block = chain[current_index]
print(f'{last_block}')
print(f'{block}')
print("\n-----------\n")
# Blok hash değerinin doğru olup olmadığını kontrol ediyoruz..
if block['previous_hash'] != self.hash(last_block):
return False
# İş kanıtının doğru olup olmadığını kontrol ediyoruz..
if not self.valid_proof(last_block['proof'], block['proof']):
return False
last_block = block
current_index += 1
return True
def resolve_conflicts(self):
"""
Bu konsensüs algoritmamızdır. Çatışmaları,
zincirimizi ağdaki en uzun zincirle değiştirerek çözer.
:return: True if our chain was replaced, False if not

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 8/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye
"""
neighbours = self.nodes
new_chain = None
# Bizimkilerden daha uzun zincirleri arıyoruz...
max_length = len(self.chain)
# Ağımızdaki tüm düğümlerden gelen zincirleri alıp doğruluyoruz:
response = requests.get(f'http://{node}/chain')
if response.status_code == 200:
length = response.json()['length']
chain = response.json()['chain']
# Zincirin uzunluğunu ve doğruluğunu kontrol ediyoruz..
if length > max_length and self.valid_chain(chain):
max_length = length
new_chain = chain
# Kendimizinkinden daha uzun ve geçerli zincir bulduğumuzda replace ediyoruz..
if new_chain:
self.chain = new_chain
return True
return False

İlk yöntem olan valid_chain (), bir zincirin her bir blok boyunca döngü yapılarak geçerli olup olmadığını
kontrol etmekten ve hem hash değerinin hem de kanıtın doğrulamasından sorumludur.

resolve_conflicts () komşu düğümlerimiz arasında döngü oluşturan, zincirlerini indiren ve yukarıdaki


yöntemi kullanarak doğrulayan bir yöntemdir. Uzunluğu bizimkinden daha büyük olan bir geçerli
zincir bulunursa, bizimkinin yerini alır. Bu kısım çok önemlidir. Blockchain oluşturma sürecinin belki de
en önemli adımlarından biridir.

İki endpoint’i API’mize kaydettirelim; bir tanesi komşu düğümler eklemek ve diğeri çatışmaları çözmek için:

@app.route('/nodes/register', methods=['POST'])
def register_nodes():
values = request.get_json()
nodes = values.get('nodes')
if nodes is None:
return "Hata: Lütfen geçerli düğüm listesi sunun", 400
for node in nodes:
blockchain.register_node(node)
response = {
'message': 'Yeni düğümler eklendi',
'total_nodes': list(blockchain.nodes),
}
return jsonify(response), 201
@app.route('/nodes/resolve', methods=['GET'])
def consensus():
replaced = blockchain.resolve_conflicts()
if replaced:
response = {
'message': 'Zincirimiz değiştirildi',
'new_chain': blockchain.chain
}
else:
response = {
'message': 'Zincirimiz yetkili',
'chain': blockchain.chain
}
return jsonify(response), 200

Bu noktada isterseniz farklı bir makine kullanabilir ve ağınızda farklı düğümleri döndürebilirsiniz. Ya da aynı
makinedeki farklı bağlantı noktalarını kullanarak işlemleri hızlandırabilirsiniz. Ben makinemde, farklı bir
bağlantı noktasında başka bir düğüm oluşturdum ve mevcut düğümüme kaydettim. Böylece, iki düğümüm
var:

http://localhost:5000 ve http://localhost:5001.

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 9/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye

Sonrasında zincirin uzun olduğundan emin olmak için 2nci düğüm üzerinde yeni bloklar çıkardım. Konsensüs
algoritmasının replace edildiği 1nci düğüm üzerinde GET /nodes/resolve komutunu çağırdım.

Ve işte tamamlandı! Blockchain oluşturma yöntemini öğrendiniz! Gidip birkaç arkadaşınızdan blok zincirinizi
test etmesini isteyin.

Umarım bu rehber size yeni bir şeyler yaratmak için ilham kaynağı olmuştur. Kripto paralar konusunda çok
mutlu ve umutluyum, çünkü Blockchain’in ekonomileri, hükümetleri ve kayıt tutma konusundaki
düşüncelerimizi hızla değiştireceğine inanıyorum.

Yazıyı beğendiyseniz ya da eklemek istedikleriniz varsa lütfen yorum yazınız.

Blockchain oluşturma kodunun tamamını buradan indirebilirsiniz.

Kaynak

Facebook Yorumları

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 10/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye

0 Yorum Sırala: En Eski

Yorum ekle...

Facebook Yorumları Eklentisi

            
14

Genel Bakış

Kullanıcı Oylaması: 4.33 ( 5 oy)

Etiketler: BİTCOİN BLOCKCHAİN BLOCKCHAİN ÖĞRENME BLOK ZİNCİR BLOK ZİNCİRİ BLOKZİNCİR

GENESİS GENESİS BLOĞU KRİPTO PARA PYTHON

İLGİLİ YAZILAR

TradingView Kriptopara 28 Ocak 2018 Kripto Para 24 Ocak 2018 Kripto Para
Sinyal Bulucu Kullanımı Piyasası Analizi: BTC, ETH, Piyasası Analizi: BTC, ETH,
8 YORUM
28 Ocak 2018 BCH, XRP, XLM, LTC, NEM, BCH, XRP, IOTA, LTC, NEM,
ADA ADA
 28 Ocak 2018  24 Ocak 2018
Tosba
20:13 / 4 Ekim 2017

Hocam çok güzel olmuş teşekkürler.


Cevapla

Ahmet
16:26 / 10 Ekim 2017

elinize sağlık başarılı bir makale olmuş


Cevapla

baris
14:37 / 13 Ekim 2017

merhaba sitenizde iletişim kısmı göremedim bana survivalbaris@gmail.com mail adresinden


ulaşırmısınız sizinle bir konuda görüşmem gerekli.
Cevapla

bitcoin
17:41 / 23 Kasım 2017

Merhaba, bize hello @ bitcoinlerim.com adresinden e-mail gönderebilirsiniz.


Cevapla

burak aksu
18:08 / 2 Kasım 2017

Bu konuyu videolu bir şekilde ele alsanız veya varsa videolu ele alan atsanız olur mu? Açıkcası
kodlama bilmediğim için anlamadım hazır indirdiğim blockchain dosyasınıda postman’de
çalıştıramadım. Yardımcı olur musunuz ?
Cevapla
https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 11/12
13.02.2018 Adım Adım Blockchain Oluşturma - Bitcoin Türkiye
Cevapla

Temmuz
17:37 / 23 Kasım 2017

Merhaba,

Ben btcmatik Pazarlama Muduru Temmuz. Yakın zamanda Turkiye pazarında resmi olarak faaliyete
gececek olan btcmatik.com markası olarak, bitcoin borsası uzerine bir proje baslatmıs bulunmaktayız.
Bu surecte gerek mackolik gerekse diger firmalarla olan calismalarinizi yakindan takip ediyoruz.

btcmatik.com suan icin web sayfamiz tasarim asamasinda olup pazar arastirmasi yapmaktayiz. bu
surec icerisinde sizlerden online borsa ve bitcoin uzerine olan tum platformlarda yerimizi almayi
hedefledigimiz bir paket fiyat teklifi talep ediyorum. Eger reklam aginizda firmamizi tanitabilecegimiz
uygun alanlar varsa trafigi satin almak istiyoruz. En kisa surede donus yapmanizi rica ederim.

Iyi Calismalar,

Temmuz Ozturk

mail : temmuz@btcmatik.com
Cevapla

bitcoin
17:45 / 23 Kasım 2017

Merhaba, mail kutunuzu kontrol ediniz.


Cevapla

Mustafa Ozsoy
01:57 / 3 Şubat 2018

Coin Turkey Org olarak coin turk üretilecek projeye katılmak için sizi mutlaka bekliyorum.
Yazılarınızı okudum bize katılın sizin gibi biriyle ilk adımları başlatmak bana gurur verir.
Cevapla

CEVAPLA

E-posta adresiniz yayınlanmayacak. Gerekli alanlar işaretlenmelidir *

İsim *

E-posta *

Siteniz

Yorumu gönder

Beni sonraki yorumlar için e-posta ile bilgilendir.


Beni yeni yazılarda e-posta ile bilgilendir.

SON YORUMLAR

Adım Adım İlk Akıllı Sözleşmenizi Oluşturun için Evrim Dönmezgel

Yeni Başlayanlar İçin: Cardano Nedir? için Kerem

Bitcoinlerim.com - https://bitcoinlerim.com - 2018

https://bitcoinlerim.com/blockchain-olusturma-blockchain-ogren/ 12/12

You might also like