Mehrere Transaktionen erstellen

Die von verschiedenen Clients getätigten Transaktionen werden im System in die Warteschlange gestellt. Die Bergleute nehmen die Transaktionen aus dieser Warteschlange auf und fügen sie dem Block hinzu. Sie werden dann den Block abbauen und der siegreiche Bergmann hätte das Privileg, den Block zur Blockchain hinzuzufügen und dadurch etwas Geld für sich selbst zu verdienen.

Wir werden diesen Mining-Prozess später beschreiben, wenn wir die Erstellung der Blockchain diskutieren. Bevor wir den Code für mehrere Transaktionen schreiben, fügen wir ein kleines Dienstprogramm hinzu, um den Inhalt einer bestimmten Transaktion zu drucken.

Transaktion anzeigen

Das display_transactionDie Funktion akzeptiert einen einzelnen Parameter des Transaktionstyps. Das Wörterbuchobjekt innerhalb der empfangenen Transaktion wird in eine temporäre Variable namens aufgerufendict Mit den Wörterbuchschlüsseln werden die verschiedenen Werte auf der Konsole gedruckt.

def display_transaction(transaction):
   #for transaction in transactions:
   dict = transaction.to_dict()
   print ("sender: " + dict['sender'])
   print ('-----')
   print ("recipient: " + dict['recipient'])
   print ('-----')
   print ("value: " + str(dict['value']))
   print ('-----')
   print ("time: " + str(dict['time']))
   print ('-----')

Als Nächstes definieren wir eine Transaktionswarteschlange zum Speichern unserer Transaktionsobjekte.

Transaktionswarteschlange

Um eine Warteschlange zu erstellen, deklarieren wir eine globale list Variable aufgerufen transactions wie folgt -

transactions = []

Wir werden einfach jede neu erstellte Transaktion an diese Warteschlange anhängen. Bitte beachten Sie, dass wir der Kürze halber die Warteschlangenverwaltungslogik in diesem Lernprogramm nicht implementieren.

Mehrere Clients erstellen

Jetzt beginnen wir mit der Erstellung von Transaktionen. Zunächst werden wir vier Kunden erstellen, die sich gegenseitig Geld senden, um verschiedene Dienstleistungen oder Waren von anderen zu erhalten.

Dinesh = Client()
Ramesh = Client()
Seema = Client()
Vijay = Client()

Zu diesem Zeitpunkt haben wir vier Kunden namens Dinesh, Ramesh, Seema und Vijay. Wir gehen derzeit davon aus, dass jeder dieser Kunden einige TPCoins für Transaktionen in seiner Brieftasche hat. Die Identität jedes dieser Clients würde unter Verwendung der Identitätseigenschaft dieser Objekte angegeben.

Erste Transaktion erstellen

Jetzt starten wir unsere erste Transaktion wie folgt:

t1 = Transaction(
   Dinesh,
   Ramesh.identity,
   15.0
)

In dieser Transaktion sendet Dinesh 5 TPCoins an Ramesh. Damit die Transaktion erfolgreich ist, müssen wir sicherstellen, dass Dinesh genügend Geld für diese Zahlung in seiner Brieftasche hat. Beachten Sie, dass wir eine Genesis-Transaktion benötigen, um die TPCoin-Zirkulation im System zu starten. Sie werden den Transaktionscode für diese Genesis-Transaktion sehr bald schreiben, während Sie mitlesen.

Wir werden diese Transaktion mit dem privaten Schlüssel von Dinesh signieren und wie folgt zur Transaktionswarteschlange hinzufügen:

t1.sign_transaction()
transactions.append(t1)

Nach der ersten von Dinesh durchgeführten Transaktion werden wir mehrere weitere Transaktionen zwischen verschiedenen Kunden erstellen, die wir oben erstellt haben.

Weitere Transaktionen hinzufügen

Wir werden nun mehrere weitere Transaktionen erstellen, wobei jede Transaktion ein paar TPCoins an eine andere Partei verteilt. Wenn jemand Geld ausgibt, muss er nicht in dieser Brieftasche nach ausreichenden Guthaben suchen. Der Miner in jedem Fall würde jede Transaktion auf das Guthaben überprüfen, das der Absender beim Initiieren der Transaktion hat.

Bei unzureichendem Guthaben markiert der Miner diese Transaktion als ungültig und fügt sie diesem Block nicht hinzu.

Der folgende Code erstellt neun weitere Transaktionen und fügt sie unserer Warteschlange hinzu.

t2 = Transaction(
   Dinesh,
   Seema.identity,
   6.0
)
t2.sign_transaction()
transactions.append(t2)
t3 = Transaction(
   Ramesh,
   Vijay.identity,
   2.0
)
t3.sign_transaction()
transactions.append(t3)
t4 = Transaction(
   Seema,
   Ramesh.identity,
   4.0
)
t4.sign_transaction()
transactions.append(t4)
t5 = Transaction(
   Vijay,
   Seema.identity,
   7.0
)
t5.sign_transaction()
transactions.append(t5)
t6 = Transaction(
   Ramesh,
   Seema.identity,
   3.0
)
t6.sign_transaction()
transactions.append(t6)
t7 = Transaction(
   Seema,
   Dinesh.identity,
   8.0
)
t7.sign_transaction()
transactions.append(t7)
t8 = Transaction(
   Seema,
   Ramesh.identity,
   1.0
)
t8.sign_transaction()
transactions.append(t8)
t9 = Transaction(
   Vijay,
   Dinesh.identity,
   5.0
)
t9.sign_transaction()
transactions.append(t9)
t10 = Transaction(
   Vijay,
   Ramesh.identity,
   3.0
)
t10.sign_transaction()
transactions.append(t10)

Wenn Sie den obigen Code ausführen, befinden sich zehn Transaktionen in der Warteschlange, damit die Miner ihre Blöcke erstellen können.

Dumping-Transaktionen

Als Blockchain-Manager möchten Sie möglicherweise regelmäßig den Inhalt der Transaktionswarteschlange überprüfen. Zu diesem Zweck können Sie die verwendendisplay_transactionFunktion, die wir früher entwickelt haben. Um alle Transaktionen in der Warteschlange zu sichern, durchlaufen Sie einfach die Transaktionsliste und rufen Sie für jede referenzierte Transaktion die aufdisplay_transaction Funktion wie hier gezeigt -

for transaction in transactions:
   display_transaction (transaction)
   print ('--------------')

Die Transaktionen sind zur Unterscheidung durch eine gestrichelte Linie getrennt. Wenn Sie den obigen Code ausführen, wird die Transaktionsliste wie folgt angezeigt:

sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214
4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e
c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b
47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311
c4d866c12d79d3fc3034563dfb0203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e
674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad
d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977
04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484
d805f874260dfc2d1627473b910203010001
-----
value: 15.0
-----
time: 2019-01-14 16:18:01.859915
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214
4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e
c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b
47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311
c4d866c12d79d3fc3034563dfb0203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae14
3cbe59b3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fb
d9ee74b9e7ea12334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0
961b4f212d1fd5b5e49ae09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d0623
75799742a359b8f22c5362e5650203010001
-----
value: 6.0
-----
time: 2019-01-14 16:18:01.860966
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e
674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad
d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977
04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484
d805f874260dfc2d1627473b910203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100cba097c0854876
f41338c62598c658f545182cfa4acebce147aedf328181f9c4930f14498fd03c0af6b0cc
e25be99452a81df4fa30a53eddbb7bb7b203adf8764a0ccd9db6913a576d68d642d8fd47
452590137869c25d9ff83d68ebe6d616056a8425b85b52e69715b8b85ae807b84638d8f0
0e321b65e4c33acaf6469e18e30203010001
-----
value: 2.0
-----
time: 2019-01-14 16:18:01.861958
-----
--------------

Der Kürze halber habe ich nur die ersten Transaktionen in der Liste gedruckt. Im obigen Code drucken wir alle Transaktionen, die mit der allerersten Transaktion beginnen, mit Ausnahme der Genesis-Transaktion, die dieser Liste nie hinzugefügt wurde. Da die Transaktionen regelmäßig zu den Blöcken hinzugefügt werden, möchten Sie im Allgemeinen nur die Liste der Transaktionen anzeigen, die noch abgebaut werden müssen. In diesem Fall müssen Sie eine entsprechende erstellenfor Schleife, um die Transaktionen zu durchlaufen, die noch nicht abgebaut wurden.

Bisher haben Sie gelernt, wie Sie Clients erstellen, untereinander zulassen und eine Warteschlange mit den ausstehenden Transaktionen führen, die abgebaut werden sollen. Nun kommt der wichtigste Teil dieses Tutorials und das Erstellen einer Blockchain selbst. Sie werden dies in der nächsten Lektion lernen.