Python-Programm zum Erstellen von Blockchain und Mining

| |

Home » Python-Programm zum Erstellen von Blockchain und Mining

Die Blockchain-Technologie ist heute eines der meistdiskutierten Themen der Welt. Es revolutioniert die Art und Weise, wie wir Dinge tun. Unternehmen sollten dies zur Kenntnis nehmen und untersuchen, was mit Blockchain getan werden kann. Dieses Tutorial erklärt ein Python-Programm zum Erstellen von Blockchain und Mining.

Was ist Blockchain?

Bevor wir uns den Code tatsächlich ansehen, wollen wir verstehen, was Blockchain ist. Stellen Sie sich vor, Sie haben eine Tabellenkalkulation auf Ihrem Computer – Sie können sie bearbeiten und alles tun, was Sie wollen. Blockchain ähnelt der Tabellenkalkulation und kann zum Speichern von fast allem verwendet werden. Alles, was auf der Blockchain gespeichert ist, ist öffentlich und wenn Sie eine Kopie der Blockchain haben, haben Sie alle Informationen, die darauf gespeichert sind. In unserem Fall werden wir die Blockchain mit Python erstellen.

Voraussetzungen:

Hashlib: Eine Hashlib ist eine Sammlung von Hash-Funktionen zum Bearbeiten von Strings. Hashlib wird verwendet, um Hash-Werte aus einer Zeichenfolge zu erstellen. Um Hashlib zu installieren, verwenden Sie den folgenden Befehl:

pip install hashlib

Schritt -1: Importieren der Abhängigkeiten und Erstellen eines Blocks

In diesem Python-Programm zum Erstellen von Blockchain müssen wir zunächst einige vorinstallierte Bibliotheken importieren:

import datetime
import hashlib

Erstellen eines Blocks

Eine Blockchain hat zwei Klassen, eine Blockklasse und eine Blockchainklasse. Wenn wir einen Block abbauen, fügen wir ihn der Blockchain hinzu, die ein Objekt ist, das Informationen über alle unsere Blöcke enthält. Ein Blockchain-Objekt ist daher eine Sammlung aller unserer bisherigen Blöcke und jeder einzelne wird als Instanz der Blockklasse bezeichnet.

class Block:
    blockNo = 0
    data = None
    next = None
    hash = None
    nonce = 0
    previous_hash = 0x0
    timestamp = datetime.datetime.now()

Jeder Block hat eine Art von Informationen:

  1. Jeder Block hat eine Nummer 
  2. Hat Daten, die wir speichern möchten
  3. Ein Zeiger auf den nächsten Block
  4. Eine Hash-ID
  5. Jeder Block hat auch eine vorherige Block-Hash-ID
  6. Zeitstempel (es ist für diese Blockchain nicht wirklich wichtig, aber wenn es sich in einem Blockchain-Netzwerk befindet, dann ist es wichtig, weil es sie miteinander synchronisiert)

Hinweis: Die Blockchain ist unveränderlich, denn um einen Block in der Blockchain zu ändern, müssen Sie aufgrund des vorherigen Hashs jeden nachfolgenden Block ändern, der vorherige Hash verbindet sie miteinander

Hinweis: Eine Nonce ist nur eine Zahl, die wir jedes Mal erhöhen, wenn wir eine Vermutung validieren, und durch Ändern dieser einen Zahl erhalten wir einen völlig anderen Hash.

Hier haben wir einen Block zum Speichern von Daten erstellt

def __init__(self, data):
        self.data = data

Schritt -2: Berechnen des Hash des Blocks

Die Berechnung des Blocks erforderte also einige Dinge

1. the nonce

2. the data

3. previous_hash

4. timestamp

5. and block number

Wir haben alle diese Funktionen in einer einzigen Zeichenfolge zusammengefasst und diese dann durch die SHA-256-Hash-Funktion laufen lassen, und das gibt uns unseren Block-Hash. Dies ist die Struktur eines Blocks.

def hash(self):
        h = hashlib.sha256()
        h.update(
        str(self.nonce).encode('utf-8') +
        str(self.data).encode('utf-8') +
        str(self.previous_hash).encode('utf-8') +
        str(self.timestamp).encode('utf-8') +
        str(self.blockNo).encode('utf-8')
        )
        return h.hexdigest()

Diese Funktion formatiert den Block einfach so, dass er schön und leicht lesbar erscheint.

def __str__(self):
     return "Block Hash: " + str(self.hash()) + "\nBlockNo: " + str(self.blockNo) + "\nBlock Data: " + str(self.data) + "\nHashes: " + str(self.nonce) + "\n--------------"

Schritt -3: Erstellen der Blockchain

Eine Blockchain ist also eine verknüpfte Liste, die alle Elemente akzeptiert. Es kann gesehen werden, wenn wir den Hash des Blocks berechnen, der einen Hash des vorherigen Blocks enthält. Hier ist der erste Block, den wir erstellt haben, ein Genesis-Block

class Blockchain:

    diff = 20
    maxNonce = 2**32
    target = 2 ** (256-diff)

    block = Block("Genesis")
    dummy = head = block

Die Blockchain ist wie eine verknüpfte Liste, und um der Liste etwas hinzuzufügen, brauchen wir hier nur ein paar Zeilen Code. Und weil es sich um eine Blockchain handelt, schaffen wir ein endloses Seil von einem Block zum nächsten. Dazu setzen wir den vorherigen gleich dem aktuellen Block ganz oben in der Liste, und wir setzen den neuen Block gleich dem des aktuellen Blocks + 1.

Wenn Sie sich erinnern, hat jeder Block einen Zeiger auf den nächsten Block, also haben wir den nächsten Zeiger gleich dem Block hinzugefügt, den wir hinzufügen wollten, und das fügt den Block am Ende der Liste hinzu

def add(self, block):

        # self.block refers to the block that is at the top of our link list
        block.previous_hash = self.block.hash()
        # we are setting the new block equal to current block plus 1
        block.blockNo = self.block.blockNo + 1

        self.block.next = block
        # this sign just moves the next pointer up so that it can keep adding new block
        self.block = self.block.next

der Bergbau

Der Hash eines Blocks wird berechnet, indem alle Daten des Blocks genommen und mit einem Hash-Algorithmus wie SHA-256 gehasht werden. Genau so macht es Bitcoin.

Diese For-Schleife rät also ziemlich genau von Null bis zur maximalen Nonce, und jedes Mal, wenn wir eine Schleife durchlaufen, prüfen wir den Hash-Wert des aktuellen Blocks. Es ist kleiner oder gleich dem Ziel.

  def mine(self, block):
        for n in range(self.maxNonce):
            if int(block.hash(), 16) <= self.target:
                self.add(block)
                print(block)
                break
            else:
                block.nonce += 1

Wir haben hier eine Blockchain-Klasse, nach der eine Formel verwendet wird, um eine For-Schleife zu erstellen, und die For-Schleife setzt den Mining-Prozess fort, es sei denn, es bedeutet 10 Blöcke.

blockchain = Blockchain()

for n in range(10):
    blockchain.mine(Block("Block " + str(n+1)))

Alles, was wir hier tun, ist, jeden Block in einer Blockchain auszudrucken

while blockchain.head != None:
    print(blockchain.head)
    blockchain.head = blockchain.head.next

Der gesamte Code in einem Abschnitt:

import datetime
import hashlib

class Block:
    blockNo = 0
    data = None
    next = None
    hash = None
    nonce = 0
    previous_hash = 0x0
    timestamp = datetime.datetime.now()

    def __init__(self, data):
        self.data = data

    def hash(self):
        h = hashlib.sha256()
        h.update(
        str(self.nonce).encode('utf-8') +
        str(self.data).encode('utf-8') +
        str(self.previous_hash).encode('utf-8') +
        str(self.timestamp).encode('utf-8') +
        str(self.blockNo).encode('utf-8')
        )
        return h.hexdigest()

    def __str__(self):
        return "Block Hash: " + str(self.hash()) + "\nBlockNo: " + str(self.blockNo) + "\nBlock Data: " + str(self.data) + "\nHashes: " + str(self.nonce) + "\n--------------"

class Blockchain:

    diff = 20
    maxNonce = 2**32
    target = 2 ** (256-diff)

    block = Block("Genesis")
    dummy = head = block

    def add(self, block):

        block.previous_hash = self.block.hash()
        block.blockNo = self.block.blockNo + 1

        self.block.next = block
        self.block = self.block.next

    def mine(self, block):
        for n in range(self.maxNonce):
            if int(block.hash(), 16) <= self.target:
                self.add(block)
                print(block)
                break
            else:
                block.nonce += 1

blockchain = Blockchain()

for n in range(10):
    blockchain.mine(Block("Block " + str(n+1)))

while blockchain.head != None:
    print(blockchain.head)
    blockchain.head = blockchain.head.next

Ausgabe

Letzte Worte

Wir hoffen, dass Ihnen dieser Blogbeitrag über den Aufbau einer Blockchain gefallen hat. Dies ist nur ein einfaches Beispiel für ein Python-Programm zum Erstellen von Blockchain, aber mit diesen Grundlagen im Hinterkopf können Sie jetzt damit beginnen, Ihre eigene Blockchain für jeden Zweck zu erstellen, den Sie sich vorstellen! Das war es für diesen Beitrag und wir würden uns freuen, von Ihnen zu hören, wenn Sie Fragen zum Prozess haben.

Hier sind einige nützliche Tutorials, die Sie lesen können:

Spread the love
 
   
Vorheriger

Erstellen Sie einen Websocket-Server mit Python und Tornado

RDF-Verarbeitung in Python mit RDFLib

Nächster

Schreibe einen Kommentar