Рубрики
Без рубрики

Python dili Ile Basit blokzincir uygulaması Yazma

Bir Süredir Boş Vakitlerimde Blokzincir’e Bakıyordum. Таби ки Бириким Оларак “Монета” Лер де Игл де Бира … Tagged с Python, Blokzincir, Blockchain.

Bir Süredir Boş Vakitlerimde Blokzincir’e Bakıyordum. Таби Ки Бириким Оларак “Монета” Лер де Игил де Бираз Даха Текик Конуляр. BU KAPSAMDA HEM OğRENMEK ICIN HEM DE AKTARABILMEK ICIN Küçük Bir Blokzincir Uygulaması yapmak istedim.

Herhangi bir algoritmanın en hızlı şekilde uygulanması isicin Python Dilinin Kullanılmasının çok Hoş Olduğunu Düşünerek Bu Dille Yapılan örnekleri incledim ve olabildiğince basit olanı seçmeye çalıştım. BU NEDENLE BU YAZYYı Büyük Bir “Coin” altyapısı Olarak Değil öğrenme Olarak Düşünmeniz Gerekir.

Python ile belki onlarca çeşit alternatif olmasına rağmen belgelendirmede şifreleme algoritmaları isicin hashlib kütüphanesi kullanılmış. Bloklarımız Ise json formatında tutulması isicin yine bu kütüphane kullanılıyor. Çeşitli yerlerde de time kütüphanesiyle zaman ilgili işlemler yapılacaktır.

EN Temelinde BASIT Bir Sınıf Oluşturmamız Gerekir. Aşağıdaki Gibi Bir Sınıf Oluşturalım. Bu Sounıf Ilk Oluşturulurken ICinde Zincir Ve Bekleyen Işlemler Diye 2 Dizi Oluşmakta. Ve tabi ki temel bir yeni blok eklenmekte.

class Blockzincir(object):
    def __init__(self):
        self.zincir = []
        self.bekleyen_islemler = []
        self.yeni_blok(onceki_saglama="Herhangi bir içerik", delil=100)

Yeni adımda sınıfta giriş olarak kullandıgımız yeni_blok () fonksiyonunu oluşturarak başlıyoruz. Йена Блок Олуштурулуркен Беклиен Ишлемлери Гёруйоор В.Ую Ишлемлер Блок Исинде Эклиор. (işlemler adı altında) Ve tabi ki bunun bir zaman damgası ve bir önceki sağlama fonksiyonun kontrolü sağlanıyor.

    def yeni_blok(self, delil, onceki_saglama=None):
        blok = {
            'index': len(self.zincir) + 1,
            'timestamp': time(),
            'transactions': self.bekleyen_islemler,
            'proof': delil,
            'previous_hash': onceki_saglama or self.saglama(self.zincir[-1]),
        }
        self.bekleyen_islemler = []
        self.zincir.append(blok)

        return blok

Yeni bir işlem fonksiyonunda kullanılacak son_blok () fonksiyonunu Zincir Dizisindeki Son Blok Json’unu almak Isicin hazırlıyoruz.

    @property
    def son_blok(self):
        return self.zincir[-1]

Şimdi gönderici, alıcı ve gönderilecek büyuklüğun girildiği bir yeni işlem fonksiyonu oluşturuyoruz.

    def yeni_islem(self, gonderici, alici, miktar):
        islem = {
            'gönderici': gonderici,
            'alıcı': alici,
            'miktar': miktar
        }
        self.bekleyen_islemler.append(islem)
        return self.son_blok['index'] + 1

Görüldüğü Gibi Aslında Işlem Fonksiyonu Işlemi Sadece Bekleyen Işlemlere eklemekte.

Sağlama, Yani hash kısmı tüm uygulamamızın en önemli kısımlarından birisi. Burada çok Basit şekilde Sha256’lı bir şifreleme yöntemi secildi. Sağlama fonksiyonu bir blok değeri girdisini alıp sağlama hex değeri çıktısı vermekte. Ve bu fonksiyonu, йени Блок Эклме Фонксиону Исинде Циндирки Сон Блок Деарин Гёр Сахлама Япильмай Ичин Кулланилийор.

    def saglama(self, blok):
        string_object = json.dumps(blok, sort_keys=True)
        blok_string = string_object.encode()

        raw_saglama = hashlib.sha256(blok_string)
        hex_saglama = raw_saglama.hexdigest()

        return hex_saglama

Ve şimdi uygulama yaparsak örneğin ее Bir Blok Isicinde 3 işlem yaptıgımızı düşünelim ve ее 3 işlemden sonra bir blok oluşturup Zincire ekliyoruz. Даха Сонрадан BU BLOK ICINDEKI Tüm Işlemlerin Sağlaması yapılıp bir Sonraki Zincir Bloğuna eklenmiş Oluyor. Ayyrıca örnekteki Yeni Blok Oluştururken Delil (доказательство) Oluşturmak Da Konuya Bir Azı Daha Katmakta. Bunu Yapmadan Da Geliştirilen Basit Algoritmalar Bulunmakta.

blokzincir = Blockzincir()
t1 = blokzincir.yeni_islem("Ali", "Veli", '5 bloklira')
t2 = blokzincir.yeni_islem("Zeki", "Deli", '1 bloklira')
t3 = blokzincir.yeni_islem("Deli", "Ali", '3 bloklira')
blokzincir.yeni_blok(12345)

t4 = blokzincir.yeni_islem("Ali", "Deli", '0.5 bloklira')
t5 = blokzincir.yeni_islem("Veli", "Zeki", '3 bloklira')
t6 = blokzincir.yeni_islem("Zeki", "Deli", '1 bloklira')
blokzincir.yeni_blok(6789)

jsonStr = json.dumps(blokzincir.zincir)
print(jsonStr)

## blockid sağlaması kontrolü
#print(blokzincir.saglama(blokzincir.zincir[0]))

Çıktı aşağıdaki gibi olması gerekmekte

[
  {
    "index": 1,
    "timestamp": 1621265942.8971791,
    "transactions": [],
    "proof": 100,
    "previous_hash": "Herhangi bir içerik olsun"
  },
  {
    "index": 2,
    "timestamp": 1621265942.8971846,
    "transactions": [
      {
        "gönderici": "Ali",
        "alıcı": "Veli",
        "miktar": "5 bloklira"
      },
      {
        "gönderici": "Zeki",
        "alıcı": "Deli",
        "miktar": "1 bloklira"
      },
      {
        "gönderici": "Deli",
        "alıcı": "Ali",
        "miktar": "3 bloklira"
      }
    ],
    "proof": 12345,
    "previous_hash": "f9a5874b5b3415ea7a9ab323a24de7104cc076c1e34ef24e386235feb2b8d67d"
  },
  {
    "index": 3,
    "timestamp": 1621265942.8972323,
    "transactions": [
      {
        "gönderici": "Ali",
        "alıcı": "Deli",
        "miktar": "0.5 bloklira"
      },
      {
        "gönderici": "Veli",
        "alıcı": "Zeki",
        "miktar": "3 bloklira"
      },
      {
        "gönderici": "Zeki",
        "alıcı": "Deli",
        "miktar": "1 bloklira"
      }
    ],
    "proof": 6789,
    "previous_hash": "6e92837e2be20a929e85a976eb93222ada2050b273324fffa5a77081b6f4d78e"
  }
]

https://medium.com/coinmonks/python-tutorial-build-a-blockchain-713c706f6531

Оригинал: “https://dev.to/aciklab/python-dili-ile-basit-blokzincir-uygulamasi-yazma-169f”