[PYTHON] Hallo Welt! (Minimum Viable Block Chain)

0. Einleitung

Was die Blockchain betrifft, habe ich gerade die Artikel im Internet gelesen, und obwohl ich irgendwie gehört hatte, dass "Blöcke in einer Kette verbunden" und "eher verteilt als zentralisiert" sind, verstehe ich das nicht richtig. Ich hatte es nicht, also habe ich es nachgeschlagen.

Anstatt ein Buch zu lesen und das Konzept oberflächlich zu verstehen, dachte ich, dass es mehr Spaß machen würde, eine "minimale Blockchain" zu erstellen, die nicht als Blockchain bezeichnet werden könnte, wenn sie weiter geschnitten würde, also fing ich das Netz auf. Als ich es versuchte, gab es einen Artikel, der genau richtig für mich war.

Beispielcode der kleinsten realisierbaren Blockkette (unvollendet) (imsut/minimum-viable-block-chain)

Indem ich dies in Python übersetzte und die Ausführungsergebnisse betrachtete, konnte ich Folgendes mit einem konkreten Bild verstehen (wie ich mich fühlte).

1. Übersicht der angezeigten Klassen

Kurz gesagt, ich verstehe, was eine Blockchain ist, "ein einmal geschriebenes Hauptbuch, das dezentralisiert ist, aber schwer zu manipulieren ist und die Zuverlässigkeit der Daten gewährleistet." Dies wird durch die Interaktion der fünf Klassen Benutzer, Transaktion, Prüfer, Netzwerk und Block erreicht.

User Eine Klasse, die einen Teilnehmer in einem Blockchain-Netzwerk darstellt. Nachrichten mit anderen Benutzern austauschen.

(Quellcode)

Transaction Eine Klasse, die die Interaktion zwischen Benutzern darstellt.

Es gibt die folgenden drei Arten von Transaktionen.

--MessageTransaction: Repräsentiert den Nachrichtenaustausch zwischen Benutzern --FeeTransaction: Transaktion, die den Austausch früherer Nachrichten zwischen Benutzern authentifiziert --SignedTransaction: Signierte MessageTransaction. Es scheint, dass es normalerweise mit PKI usw. verschlüsselt ist, aber es wird hier weggelassen.

In FeeTransaction kann Fee durch Authentifizierung von MessageTransaction zwischen anderen Benutzern abgerufen werden. (Minning in Bitcoin?)

(Quellcode)

Verifier

(Quellcode)

Network

(Quellcode)

Block

(Quellcode)

2. Experimentieren

Führen Sie beispielsweise die Transaktion wie unten gezeigt aus und beobachten Sie die Gesamtbewegung.

from simplest.network import Network
from simplest.user import User

network = Network()

alice = User('Alice', network)
bob = User('Bob', network)
chris = User('Chris', network)
dan = User('Dan', network)

alice.send('Yo!', to=bob, fee=1.0)
bob.send('Ho!', to=chris, fee=2.0)
chris.send('Yo!Ho!', to=alice, fee=3.0)

alice.verify_message_trxs()
dan.verify_message_trxs()
chris.verify_message_trxs()

(Quellcode)

Ausführungsergebnis

~/Python35/bin/python ~/blockchain/simplest/main.py
[User.init] Alice: joining the block chain network
[User.init] Bob: joining the block chain network
[User.init] Chris: joining the block chain network
[User.init] Dan: joining the block chain network
↑
Der Benutzer tritt dem Netzwerk bei, sobald es erstellt wurde

[User.send] Alice: sending a message to Bob. (Yo!:1.0).
[Network.announce_signed_trx] announcing "Transaction signed by Alice (Message Transaction: "Yo!" to Bob with fee 1.0)"
↑
Wenn Alice eine Nachricht an Bob sendet, wird diese im gesamten Netzwerk angekündigt.

[Verifier.receive_signed_trx] Dan: unconfirmed transactions [<simplest.transaction.SignedTransaction object at 0x108f09828>]
[Verifier.receive_signed_trx] Chris: unconfirmed transactions [<simplest.transaction.SignedTransaction object at 0x108f09828>]
↑
Benutzer, die nicht an der Transaktion beteiligt sind, erhalten die signierte Transaktion und behalten sie als unbestätigte Transaktion bei.

[Verifier.receive_signed_trx] Alice: not going to verify this transaction as I'm involved
[Verifier.receive_signed_trx] Bob: not going to verify this transaction as I'm involved
↑
Transaktionsparteien(Alice und Bob)Tut nichts.

[User.send] Bob: sending a message to Chris. (Ho!:2.0).
[Network.announce_signed_trx] announcing "Transaction signed by Bob (Message Transaction: "Ho!" to Chris with fee 2.0)"
[Verifier.receive_signed_trx] Alice: unconfirmed transactions [<simplest.transaction.SignedTransaction object at 0x108f09c50>]
[Verifier.receive_signed_trx] Dan: unconfirmed transactions [<simplest.transaction.SignedTransaction object at 0x108f09828>, <simplest.transaction.SignedTransaction object at 0x108f09c50>]
[Verifier.receive_signed_trx] Chris: not going to verify this transaction as I'm involved
[Verifier.receive_signed_trx] Bob: not going to verify this transaction as I'm involved
↑
Wenn Bob eine Nachricht an Chris sendet, wird die Transaktion im gesamten Netzwerk angekündigt, und Benutzer, die nicht an der Transaktion beteiligt sind, behalten sie als nicht identifizierte Transaktion bei.

[User.send] Chris: sending a message to Alice. (Yo!Ho!:3.0).
[Network.announce_signed_trx] announcing "Transaction signed by Chris (Message Transaction: "Yo!Ho!" to Alice with fee 3.0)"
[Verifier.receive_signed_trx] Alice: not going to verify this transaction as I'm involved
[Verifier.receive_signed_trx] Dan: unconfirmed transactions [<simplest.transaction.SignedTransaction object at 0x108f09828>, <simplest.transaction.SignedTransaction object at 0x108f09c50>, <simplest.transaction.SignedTransaction object at 0x108f09cc0>]
[Verifier.receive_signed_trx] Chris: not going to verify this transaction as I'm involved
[Verifier.receive_signed_trx] Bob: unconfirmed transactions [<simplest.transaction.SignedTransaction object at 0x108f09cc0>]
↑
Ähnlich

[Verifier.verify_message_trxs] Alice: created Transaction signed by Alice (Fee Transaction: Alice gets confirmation fee 2.0)
↑
Alice authentifiziert die vorherige Transaktion(Bergbau in Bitcoin?)Machen.

[Block.init] trxs: [<simplest.transaction.SignedTransaction object at 0x108f09c50>, <simplest.transaction.SignedTransaction object at 0x108f09d30>], prev_block: None
↑
Ein Block, der mehrere Transaktionen sammelt, wird generiert. Transaktionen ohne Alice(Bob-Transaktionen zwischen Chris)Sie können sich nur authentifizieren, sodass Sie 2 Gebühren erhalten.0。

[Network.announce_block] announcing "Block of 2 transactions (Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, Previous Block Id: None, secret: 27)"
↑
Zwei Transaktionen(1 MessageTransaction und 1 FeeTransaction)Es wird angekündigt, dass ein Block mit generiert wird.

[Verifier.receive_block] Alice: validated Block of 2 transactions (Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, Previous Block Id: None, secret: 27) is valid
[Verifier.receive_block] Alice: my trx "Fee Transaction: Alice gets confirmation fee 2.0" is validated by network!
[Verifier.receive_block] Dan: validated Block of 2 transactions (Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, Previous Block Id: None, secret: 27) is valid
[Verifier.receive_block] Chris: validated Block of 2 transactions (Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, Previous Block Id: None, secret: 27) is valid
[Verifier.receive_block] Bob: validated Block of 2 transactions (Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, Previous Block Id: None, secret: 27) is valid
[Verifier.receive_block] Bob: my trx "Message Transaction: "Ho!" to Chris with fee 2.0" is validated by network!

[Verifier.verify_message_trxs] Dan: created Transaction signed by Dan (Fee Transaction: Dan gets confirmation fee 4.0)
↑
Dan authentifiziert dann den Rest der Transaktion. Dan ist an keiner Nachrichtentransaktion beteiligt, daher sollte er in der Lage sein, alle verbleibenden Nachrichtentransaktionen zu authentifizieren.

[Block.init] trxs: [<simplest.transaction.SignedTransaction object at 0x108f09828>, <simplest.transaction.SignedTransaction object at 0x108f09cc0>, <simplest.transaction.SignedTransaction object at 0x108f09da0>], prev_block: Block of 2 transactions (Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, Previous Block Id: None, secret: 27)
↑
Ein Block mit Transaktionen, die nicht von Alice genehmigt wurden, wurde generiert. prev_Es hat einen Block, der von Alice als Block generiert wurde. (Die Blöcke sind in einer Kette!)

[Network.announce_block] announcing "Block of 3 transactions (Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, Previous Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, secret: 1545)"
[Verifier.receive_block] Alice: validated Block of 3 transactions (Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, Previous Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, secret: 1545) is valid
[Verifier.receive_block] Alice: my trx "Message Transaction: "Yo!" to Bob with fee 1.0" is validated by network!
[Verifier.receive_block] Dan: validated Block of 3 transactions (Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, Previous Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, secret: 1545) is valid
[Verifier.receive_block] Dan: my trx "Fee Transaction: Dan gets confirmation fee 4.0" is validated by network!
[Verifier.receive_block] Chris: validated Block of 3 transactions (Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, Previous Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, secret: 1545) is valid
[Verifier.receive_block] Chris: my trx "Message Transaction: "Yo!Ho!" to Alice with fee 3.0" is validated by network!
[Verifier.receive_block] Bob: validated Block of 3 transactions (Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, Previous Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, secret: 1545) is valid

[Verifier.verify_message_trxs] Chris: created Transaction signed by Chris (Fee Transaction: Chris gets confirmation fee 0)
↑
Chris versucht dann, sich zu authentifizieren, bekommt aber keine Gebühr, weil Dan alles authentifiziert hat.

[Block.init] trxs: [<simplest.transaction.SignedTransaction object at 0x108f2e0f0>], prev_block: Block of 3 transactions (Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, Previous Block Id: 0003430f7a84c5973edf31e42e9c25c0eed725af7e818adba62b0efe4d966188, secret: 1545)
[Network.announce_block] announcing "Block of 1 transactions (Block Id: 0006a4dc569ff1a61c6c371980635341d39be3b0c23363030511501e76ac6536, Previous Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, secret: 1062)"
[Verifier.receive_block] Alice: validated Block of 1 transactions (Block Id: 0006a4dc569ff1a61c6c371980635341d39be3b0c23363030511501e76ac6536, Previous Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, secret: 1062) is valid
[Verifier.receive_block] Dan: validated Block of 1 transactions (Block Id: 0006a4dc569ff1a61c6c371980635341d39be3b0c23363030511501e76ac6536, Previous Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, secret: 1062) is valid
[Verifier.receive_block] Chris: validated Block of 1 transactions (Block Id: 0006a4dc569ff1a61c6c371980635341d39be3b0c23363030511501e76ac6536, Previous Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, secret: 1062) is valid
[Verifier.receive_block] Chris: my trx "Fee Transaction: Chris gets confirmation fee 0" is validated by network!
[Verifier.receive_block] Bob: validated Block of 1 transactions (Block Id: 0006a4dc569ff1a61c6c371980635341d39be3b0c23363030511501e76ac6536, Previous Block Id: 000302fdb2b0a45e99e40675cce0299de96d227289d200210a0d774653a80b9a, secret: 1062) is valid

Process finished with exit code 0

3. Zusammenfassung

Ich konnte die einfache Frage zur Blockchain, wie eingangs erwähnt, nicht nur mit einer konzeptionellen Erklärung, sondern auch mit einem konkreten Bild des Quellcodes verstehen (ich habe Lust dazu). Auf der anderen Seite habe ich mir in Bezug auf den Arbeitsnachweis ein Bild von der Bewegung gemacht, war mir aber nicht sicher, wie notwendig und wie schwierig die Aufgabe sein sollte, deshalb würde ich sie gerne noch einmal untersuchen, wenn ich Zeit habe.

4. Referenzierte Site

  1. Minimum Viable Block Chain Ein Artikel, der erklärt, warum Blockchain so funktioniert wie jetzt.

  2. Blockchain noch tiefer verstehen Erklärung auf Japanisch von 1.

  3. Beispielcode der kleinsten realisierbaren Blockkette (unvollendet) (imsut/minimum-viable-block-chain) Implementierung durch Scala in 1. Die ursprüngliche Geschichte dieses Artikels.

  4. izqui/blockchain 1 Golang-Implementierung

  5. Erklärung einer leicht verständlichen Blockchain? Was ist Blockchain (konzeptionelle Erklärung)

  6. Ist es Zeit, Blockchain zu studieren? Was ist Blockchain (konzeptionelle Erklärung)

  7. TED: How the blockchain will radically transform the economy Was ist Blockchain (konzeptionelle Erklärung)

Recommended Posts

Hallo Welt! (Minimum Viable Block Chain)
Hallo Welt
Pymacs helloworld
Cython Helloworld
web2py Hinweis: Hallo Welt
Hallo Welt mit ctypes
RabbitMQ Tutorial 1 ("Hallo Welt!")
Hallo, Welt mit Docker
Hallo Welt mit Django
Djangos erste Hallo Welt
Hallo Welt auf Flasche
Zeichne Hallo Welt mit mod_wsgi
Hallo Welt mit Flask + Hamlish
Bis hallo Welt mit Zappa
Hallo Welt in GO-Sprache
Hallo Welt (Anfänger) mit Django
Python beginnend mit Hallo Welt!