Blockchain Coding: The Many different Languages You Need!

Blockchain-Codierung: Die vielen verschiedenen Sprachen, die Sie brauchen!

2 months ago
    en flag
    es flag
    Subscribe

    Die Blockchain-Technologie ist unglaublich faszinierend. Es ist nicht allzu schwer sich eine Zukunft vorzustellen, die vollständig darauf aufbauen wird. Also, was müssen Sie lernen, um mit der Entwicklung für die Blockchain zu beginnen? W

    Blockchain-Codierung: Die vielen verschiedenen Sprachen, die Sie brauchen!

    Die Blockchain-Technologie ist unglaublich faszinierend. Es ist nicht allzu schwer sich eine Zukunft vorzustellen, die vollständig darauf aufbauen wird. Also, was müssen Sie lernen, um mit der Entwicklung für die Blockchain zu beginnen? Welche Sprachen verschaffen Ihnen einen Vorteil? In diesem Leitfaden werden wir einige der wichtigsten durchgehen. Und wenn Sie gerade erst anfangen, besuchen Sie unsere umfassenden Blockchain-Kurse.

    Programmierung von Blockkettenproblemen

    Bevor wir beginnen, lassen Sie uns einige der Herausforderungen, denen ein Blockchain-Entwickler gegenübersteht, herausfinden. Die Erstellung und Pflege einer öffentlichen Blockchain ist aus verschiedenen Gründen nicht einfach.

    (Bevor wir fortfahren, ein großer Dank an David Schwartz für seine Grundsatzrede zum Einsatz von C++ in der Blockchain-Softwareentwicklung auf der CPPCON 2016.)

    Grund #1: Sicherheit

    Blockchain, wie David Schwartz es ausdrückt, sollten Festungen sein. Erstens ist der Kodex öffentlich und für jedermann einsehbar. Jeder kann sich den Code ansehen und nach Fehlern und Schwachstellen suchen. Im Gegensatz zu anderen Open-Code-Ressourcen ist der Nachteil, Schwachstellen im Blockchain-Code zu finden, jedoch enorm. Jeder Programmierer kann sich einhacken und mit potenziell Millionen und Abermillionen von Dollar davonkommen. Aufgrund dieser berechtigten Sicherheitsbedenken ist die Entwicklung der Blockchain in der Regel sehr langsam.

    Grund #2: Ressourcenmanagement

    Es ist wichtig, mit dem Netzwerk Schritt zu halten. Man darf nicht zu weit zurückfallen und es ist nicht möglich mit allen Netzwerkanforderungen Schritt zu halten. Sie sollten gut gerüstet sein, um Fern- und lokale Anfragen zu bearbeiten.

    Grund #3: Performance

    Die Blockchain muss immer mit den höchstmöglichen Leistungsvermögen arbeiten, aber dafür muss die gewählte Sprache extrem vielseitig sein. Bestimmte Aufgaben in der Blockchain sind parallelisierbar, andere Aufgaben können nicht parallel ausgeführt werden.

  • BGAP Business HorDate
  • Ein gutes Beispiel für eine „parallelisierbare“ Aufgabe ist die Überprüfung digitaler Signaturen. Alles, was Sie für die Signaturprüfung benötigen, sind der Schlüssel, die Transaktion und die Signatur. Mit nur drei Daten können Sie Bestätigungen parallelisiert durchführen.

    Allerdings sollten nicht alle Funktionen einer Blockchain auf diese Weise ausgeführt werden. Denken Sie an die Ausführung der Transaktion selbst. Mehrere Transaktionen können nicht parallel ausgeführt werden; es muss eine nach der anderen durchgeführt werden, um Fehler wie doppelte Ausgaben zu vermeiden. Einige Sprachen sind für parallele Operationen gut geeignet, andere eignen sich für nicht-parallele Operationen.

    Grund #4: Isolation

    Was ist deterministisches Verhalten?

    Wenn A + B = C, dann gilt unabhängig von den Umständen, dass A+B immer gleich C sein wird. Das nennt man deterministisches Verhalten.

    Hash-Funktionen sind deterministisch, d.h. der Hash von A wird immer H(A) sein.

    In der Blockchain-Entwicklung müssen also alle Transaktionsoperationen deterministisch sein. Sie können keine Transaktion haben, die sich an einem Tag so und am nächsten Tag anders verhält. Ebenso wenig darf es Smart Contracts geben, die auf zwei verschiedenen Maschinen unterschiedlich ausgeübt werden.

    Die einzige Lösung dafür ist die Isolation. Grundsätzlich isolieren Sie Ihre Smart Contracts und Transaktionen von nicht-deterministischen Elementen.

    Damit haben wir die Hauptprobleme angesprochen, mit denen Blockchain-Entwickler konfrontiert sind. Nun lassen Sie uns einige der Sprachen ausprobieren, die Entwickler zum Kodieren auf der Blockchain verwenden können.

    Sprache #1: C++

    Beginnen wir zunächst mit dem Urvater aller Sprachen, dem ewig jungen C++. C++ wurde von Bjarne Stroustrup als Erweiterung der C-Sprache entwickelt. Die Sprache wurde so konzipiert, dass sie die Flexibilität und Effizienz von C hat, aber einige große Unterschiede aufweist. Der größte Unterschied zwischen C und C++ besteht darin, dass C prozessorientiert ist, während C++ objektorientiert ist.

  • BGAP in Hyperledger H
  • Das bedeutet, dass in C++ die Daten und Funktionen in einem kleinen Paket namens „objects“ zusammengefasst sind. Das heißt, dass ein einmal erstelltes Objekt leicht aufgerufen und in anderen Programmen wiederverwendet werden kann und so die Programmierzeit erheblich reduziert.

    Betrachten wir das einfachste C++-Programm der Welt. Das Programm „Hello World“:

    Dieser Code druckt: Hallo Welt!

    Also, warum wird immer noch C++ zur Programmierung verwendet? Es gibt inzwischen glamourösere Sprachen, warum also bestehen Entwickler weiterhin darauf zu C++ zu verwenden? Warum ist die Bitcoin-Blockchain in C++ kodiert?

    Das liegt daran, dass C++ bestimmte Funktionen hat, die sehr ansprechend sind. (Vielen Dank an Peter Wiulle und David Schwartz für die folgende Erklärung).

    Merkmal #1: Speichersteuerung

    Erinnern Sie sich, was wir eingangs über die Herausforderungen der Blockchain-Entwicklung gesagt haben? Blockchains sollten nicht nur wie Festungen gesichert sein, sondern auch ein effektives Ressourcenmanagement haben. Eine Blockchain soll mit vielen nicht vertrauenswürdigen Endpunkten interagieren und gleichzeitig einen schnellen Service für alle Knoten bieten.

    Dieser schnelle und sofortige Service ist entscheidend für den Erfolg einer Kryptowährung wie Bitcoin. Denken Sie daran, dass sie alle auf dem Prinzip des „Konsenses“ basieren, alle Knoten im Netzwerk müssen genau die gleichen Blöcke akzeptieren und ablehnen, sonst kann es eine Fork in der Kette geben.

    Um all diese Anforderungen zu erfüllen und auf höchstem Niveau zu arbeiten, benötigen Sie eine strenge und vollständige Kontrolle über die CPU- und Speichernutzung. C++ stellt dies seinen Benutzer bereit.

    Feature #2: Threading

    Wie bereits angesprochen, ist es eine der Hauptherausforderungen der Blockchain-Programmierung die Integration von Aufgaben, die gut parallelisierbar sind und on solchen, die nicht parallelisierbar sind. Die meisten Sprachen sind auf eine einzige spezialisiert, aber die Threading-Fähigkeit von C++ ist geeignet, sowohl parallele als auch nicht-parallele Aufgaben zu bewältigen. Ein Thread ist ein Satz von Anweisungen, die gleichzeitig ausgeführt werden können. C++ ermöglicht nicht nur erstklassige Multithreading-Funktionen mit effektiver Inter-Thread-Kommunikation, sondern optimiert auch die Single-Thread-Performance.

  • BGAP in Hyperledger H
  • Feature #3: Bewegungssemantik

    Einer der interessantesten Aspekte von C++ ist die Bewegungssemantik. Die Bewegungsemantik bietet eine Möglichkeit, Inhalte zwischen Objekten zu verschieben anstatt sie direkt zu kopieren. Lassen Sie uns die Unterschiede zwischen Kopiersemantik und Bewegungssemantik untersuchen. (Angaben aus Peter Alexanders Antwort in „Stackoverflow“).

    Kopiersemantik:

    • assert(b == c);
    • a = b;
    • assert(a == b && b == c);

     

    Was passiert hier? Der Wert von b geht in a über und b bleibt am Ende des Ganzen unverändert.

    Nun bedenken Sie Folgendes.

    Bewegungsemantik:

    • assert( b = = c);
    • move (a,b);
    • ssert (a = =c);

     

    Was ist also los?

    Können Sie den Unterschied zwischen den beiden Codeblöcken sehen?

    Wenn wir die Bewegungssemantik verwenden, muss der Wert von “b” nicht unverändert sein. Das ist der Unterschied zwischen Kopiersemantik und Bewegungssemantik. Der größte Vorteil der Bewegungssemantik besteht darin, dass Sie nur dann Kopien bestimmter Daten erhalten können, wenn Sie sie benötigen. Das verringert die Redundanz im Code sehr stark und bewirkt eine enorme Leistungssteigerung. Wie Sie sehen können, sind dieses effiziente Speichermanagement und die hohe Leistung für die Blockchain von Interesse.

    Feature #4: Zeitpolymorphismus kompilieren

    Was ist Polymorphismus?

    Erinnern Sie sich, dass wir C++ als „objektorientierte Programmiersprache (OOP)“ bezeichnet haben? Polymorphismus ist eine OOP-Eigenschaft. Mit Hilfe des Polymorphismus verwenden Sie ein bestimmtes Merkmal auf mehr als eine Weise. In C++ kann Polymorphismus auf zwei Arten verwendet werden:

    • Kompilierungszeit-Polymorphismus.
    • Laufzeit-Polymorphismus.

    Hier befassen wir uns nur mit der Zusammenstellung von Kompilierungszeit-Polymorphismus. Es gibt zwei Möglichkeiten, wie C++ Kompilierungszeit-Polymorphismus implementiert:

    • Funktionsüberladung.
    • Bedienungsüberladung.

     

    Funktionsüberladung:

    Funktionsüberladung ist, wenn Sie viele Funktionen gleichen Namens, aber mit unterschiedlicher Parameteraufnahme haben.

    Betrachten Sie dieses Programm:

    Wenn Sie nun diese Funktion ausführen, wird die Ausgabe erfolgen:

    • 2
    • 2.65
    • 7

    Wie Sie sehen können, wurde also die gleiche Funktion func() auf 3 verschiedene Arten verwendet.

    Bedienungsüberladung:

    In C++ kann derselbe Operator mehr als eine Bedeutung haben.

    • Z.B. „+“ kann sowohl für die mathematische Addition als auch für die Verkettung verwendet werden.
    • Verkettung bedeutet im Grunde genommen, zwei Zeichenketten zu nehmen und sie als eine zu kombinieren.
    • Also 3+4 = 7.

    UND

    • Block+geeks = Blockgeeks.
    • Der gleiche Operator hat zwei verschiedene Funktionen ausgeführt, das ist eine Bedienungsüberladung.

    Der Kompilierungszeit-Polymorphismus ist bei der Entwicklung auf der Blockchain sehr hilfreich. Es hilft, die Verantwortlichkeiten in verschiedenen Funktionen getrennt zu verteilen und damit die Leistung des Gesamtsystems zu steigern.

    Feature #5: Code-Isolierung

    C++ hat Namensbereichfunktionen, die von einem Programm in ein anderes importiert werden können. Der Namensbereich hilft, Namenskollisionen zu vermeiden. Da C++ Klassen hat, kann es auch als Grenze zwischen verschiedenen APIs dienen und bei der klaren Trennung helfen.

    Eine Klasse in C++ ist ein benutzerdefinierter Typ oder eine Datenstruktur, die mit einer Schlüsselwortklasse deklariert ist, die Daten hat und als ihre Mitglieder fungiert. Sie können auf die in der Klasse deklarierten Funktionen zugreifen, indem Sie Objekte dieser Klasse deklarieren.

    Feature #6: Reifegrad

    Die Sprache ist sowohl ausgereift und wird auch regelmäßig aktualisiert. Es gibt mindestens 3 solide Compiler, wie David Schwartz sagt, und die neuen Features zielen darauf ab, echte Probleme zu lösen. Debugger und Analysewerkzeuge aller Art stehen für alle Bereiche zur Verfügung, vom Leistungsprofiling bis zur automatischen Erkennung von Problemen aller Art. Das bedeutet, dass die Sprache ständig wächst und neue und bessere Funktionen integriert.

    Aufgrund der oben genannten Funktionen hat sich Satoshi Nakamoto für C++ als Basissprache des Bitcoin-Quellcodes entschieden.

    Sprache #2: Javascript

    Als nächstes haben wir Javascript.

    Sie ist neben HTML und CSS eine der drei Kerntechnologien in der World Wide Web Content Produktion. Javascript wird in der Regel verwendet, um hochinteraktive Webseiten zu erstellen. Wir werden sehen, wie man eine sehr einfache Blockchain mit Javascript erstellt. Ein großer Dank an savjee.be für den Inhalt in diesem Abschnitt.

    Angenommen, wir wollen eine einfache Blockchain in Javascript erstellen. Bevor wir das tun müssen wir bestimmte Dinge angehen.

    Was ist eine Blockchain und wie genau funktioniert sie… vom Coder her gesehen?

    Eine Blockchain ist im Grunde genommen eine Kette von Blöcken, die Daten enthalten. Es ist im Grunde genommen eine verlinkte Liste, die angehimmelt wird. Aber was macht es so besonders? Eine Blockchain ist unveränderlich. Das bedeutet, dass Daten, die einmal in einem Block enthalten sind, nie wieder geändert werden können. Wie erreicht eine Blockchain Unveränderlichkeit? Das geschieht aufgrund eines einfachen, aber genialen Mechanismus namens „Hashing“. Schauen Sie sich das folgende Diagramm an:

    Blockchain Coding: The Many different Languages You Need!

    Bild mit freundlicher Genehmigung: Lauri Hartikka

    Jeder Block ist mit dem vorherigen Block über einen Hash-Pointer verbunden, der den Hash des vorherigen Blocks enthält. Wie macht das die Kette unveränderlich?

    Eine der faszinierendsten Eigenschaften von kryptographischen Hash-Funktionen ist, dass, wenn Sie die Eingabe nur minimal ändern, dies den Ausgabehash stark beeinflussen kann. Sehen Sie sich z.B. dies hier an:

    Blockchain Coding: The Many different Languages You Need!

    Allein die Änderung des ersten „T“ von Groß- auf Kleinschreibung hat den Output-Hash stark verändert.

    Wie wirkt sich das auf die Blockkette aus?

    Jeder Block ist mit dem vorherigen über den Hash-Pointer verbunden. Wenn also jemand die Daten in einem Block manipulieren würde, würde dies den Hash drastisch verändern und somit die gesamte Kette betreffen (da alle Blöcke verknüpft sind). Dies würde die Kette erstarren lassen, was unmöglich ist. Somit bleiben die Blöcke unverändert.

    Wie erstellen wir einen Block? Woraus besteht ein einfacher Block? In unserem einfachen Kryptocoin, das wir herstellen werden (nennen wir es „BlockGeeksCoin“), wird jeder Block die folgenden Informationen enthalten:

    • Index: Um die Satznummer zu erfahren.
    • Zeitstempel: Um die Zeit der Erschaffung zu kennen.
    • Daten: Die Daten innerhalb des Blocks.
    • Vorheriger Hash: Der Hash des vorherigen Blocks.
    • Hash: Der Hash des aktuellen Blocks.

    Bevor wir weitermachen müssen Sie bestimmte Begriffe verstehen, die wir in unserem Programm verwenden werden:

    • this: Das Schlüsselwort „this“ wird innerhalb einer Funktion aufgerufen und ermöglicht den Zugriff auf die Werte innerhalb eines bestimmten Objekts, das diese bestimmte Funktion aufruft.
    • Constructor: Ein Constructor ist eine spezielle Funktion, die beim Anlegen und Initialisieren eines Objekts innerhalb einer Klasse helfen kann. Jede Klasse ist auf nur einen Constructor beschränkt.

    Jetzt, da das erledigt ist, erstellen wir unseren Block.

    Erstellen des Blocks

    Code-Analyse

    Das hier stammt aus dem Block. In der ersten Zeile des Codes haben wir die crypto-js-Bibliothek aufgerufen, weil die sha256-Hash-Funktion in JavaScript nicht verfügbar ist.

    Als nächstes haben wir einen Constructor innerhalb der Klasse hervorgerufen, um Objekte aufzurufen, die bestimmte Werte haben. Was Ihnen wahrscheinlich ins Auge fällt, ist die Funktion calculateHash(). Mal sehen, was genau es macht.

    In einem Block nehmen wir den gesamten Inhalt und hashen ihn, um den Hash dieses bestimmten Blocks zu erhalten. Wir verwenden die Funktion JSON.stringify, um die Daten des Blocks in Zeichenketten umzuwandeln, um sie zu hashen.

    Damit haben wir den Block fertiggestellt und sind startklar. Verbinden wir nun die Blöcke zu einer Blockchain.

    Erstellen der Blockchain

    Code-Analyse

    In der Kette oben passiert eine ganze Menge; lassen Sie es uns in Abschnitte unterteilen.

    Abschnitt 1: Der Genesis-Block

    Was ist der Genesis-Block?

    Der Genesis-Block ist der erste Block der Blockkette. Er ist besonders ist, da jeder Bock auf den Block vor ihm verweist, der Genesis-Block dagegen nicht. Sobald also eine neue Kette erstellt wird, wird der Genesis-Block sofort aufgerufen. Außerdem sehen Sie eine „createGenesisBlock()“-Funktion, bei der wir die Daten des Blocks manuell eingegeben haben:

    Nachdem wir nun den Genesis-Block erstellt haben, lassen Sie uns den Rest der Kette aufbauen.

     

    Abschnitt 2: Hinzufügen der Blöcke

    Erstens müssen wir wissen, was der letzte Block in der Blockchain derzeit ist. Dazu verwenden wir die Funktion getLatestBlock().

    Was sehen wir hier? Wie fügen wir die Blöcke hinzu? Wie überprüfen wir, ob der angegebene Block gültig ist oder nicht?

    Erinnern Sie sich an den Inhalt eines Blocks?

    Ein Block hat den Hash des vorherigen Blocks, richtig?

    Was wir hier tun werden, ist einfach. Vergleichen Sie den previousHash-Wert des neuen Blocks mit dem Hash-Wert des letzten Blocks.

    Blockchain Coding: The Many different Languages You Need!

    Bild mit freundlicher Genehmigung: Lauri Hartikka

    Wenn diese beiden Werte übereinstimmen, dann bedeutet das, dass der neue Block legal ist und zur Blockchain hinzugefügt wird.

    Abschnitt 3: Überprüfung der Kette

    Jetzt müssen wir überprüfen, dass niemand in unsere Blockchain eingegriffen hat und ob alles stabil ist.

    Wir verwenden die „for“-Schleife, um vom Block 1 zum letzten Block zu gelangen. Der Genesis-Block ist Block 0.

    Wenn der “previousHash” des aktuellen Blocks nicht gleich dem „Hash“ des vorherigen Blocks ist, dann gibt diese Funktion False zurück, sonst True.

    Verwendung der Blockchain

    Nun werden wir endlich die Blockchain nutzen, um unser BlockGeeksCoin zu erstellen.

    Und das ist es auch schon!

    Also, was ist hier passiert?

    Wir haben eine neue Kryptowährung auf Basis der Blockchain erstellt und sie BlockGeeksCoin genannt. Durch den Aufruf dieses neuen Objekts habe ich den Constructor aktiviert, der wiederum den Genesis-Block automatisch erstellt hat.

    Wir haben einfach zwei weitere Blöcke hinzugefügt und ihnen einige Daten gegeben.

    So einfach ist das.

    (Danke savjee.be für die erstaunliche und einfache Erklärung.)

    Sprache #3: Python

    Guido van Rossum, ein niederländischer Programmierer, hat Python bereits 1991 geschaffen. Python basiert auf einer einfachen Philosophie: Einfachheit und Minimalismus. Eine der bemerkenswertesten Möglichkeiten, wie Einfachheit in die Sprache integriert wurde, ist die Verwendung von Leerzeichen zur Kennzeichnung von Codeblöcken anstelle von geschweiften Klammern oder Schlüsselwörtern. Mal sehen, was das bedeutet.

    Lassen Sie uns ein einfaches „Hallo Welt“-Programm ausprobieren.

    print(‘Hallo, Welt!’)

    Das ist es auch schon!

    Vergleichen Sie das mit dem C++-Programm „hello world“.

    Sehen Sie, wie unkompliziert es im Vergleich dazu ist? Wie wäre es, wenn wir etwas Komplizierteres tun? Nehmen wir an, wir fügen zwei Zahlen hinzu und drucken das Ergebnis aus.

     

    Und das ist alles.

    Das Programm gibt aus:

    • Die Summe aus 1,5 und 6,3 ergibt 7,8.

    Also, lassen Sie uns den Einsatz erhöhen. Wie programmieren wir eine komplette Blockchain mit Python? Die folgenden Daten und Codes stammen aus Gerald Nash’s Artikel in Medium.

    Erstellen des Blocks

    Lassen Sie uns unseren Block bilden:

    Import Hashlib als Hashher

    Code-Analyse

    Wir beginnen mit dem Import der Hash-Bibliothek, um die SHA 256 Hash-Verfeinerungen zu verwenden (ähnlich wie bei Javascript).

    Wie bisher hat der Block den gleichen Wert:

    • Index.
    • Zeitstempel.
    • Daten.
    • Vorheriger Hash.
    • Hasch.

     

    Wir füllen die Hash-Werte über eine Funktion, wie auch schon zuvor.

    Erstellen des Genesis-Blocks

    Lassen Sie uns den Genesis-Block erstellen:

    Datum/Uhrzeit als Datum importieren

    Code-Analyse

    Wir haben datetime importiert, um den Zeitstempel einzufügen.

    Wir haben einfach den Genesis-Block generiert und ihm manuell einige Daten gegeben, mit denen er arbeiten kann. Der vorherige Hash-Wert ist „0“, da er auf keinen anderen Block zeigt.

    Erstellen der weiteren Blöcke

    Nun werden wir festlegen, wie die nachfolgenden Blöcke erstellt werden.

    Code-Analyse

    Wie bestimmen wir die Werte jedes einzelnen Datenstücks innerhalb jedes einzelnen Blocks?

    Der Blockindex ist einfach der Index des letzten Blocks + 1.

    Der Zeitstempel ist das aktuelle Datum und die aktuelle Uhrzeit.

    Die Daten des Blocks sind eine einfache Nachricht: „Hey! Ich bin Block <Indexnummer>“.

    Den Hash berechnen wir mit der Funktion, die wir zuvor definiert haben.

    Und schließlich geben wir alle diese Werte an den Block zurück.

    Erstellen der Blockchain

    Abschließend erstellen wir die Blockchain.

    Code-Analyse

    Zuerst erstellen wir den Genesis-Block und geben seinen Wert an „previous_block“ weiter.

    Dann bestimmen wir, wie viele Blöcke hinzugefügt werden sollen, in diesem Beispiel entscheiden wir uns für 15.

    Wir lassen eine Schleife laufen, die bis 15 geht und jeden einzelnen Block zur Blockchain hinzufügt. Am Ende der Betrachtung drucken wir, welcher Nummernblock der Blockchain hinzugefügt wurde, indem wir deren Indexnummer anzeigen. Außerdem drucken wir auch den Hash.

    So wird die Ausgabe aussehen:

    Bild mit freundlicher Genehmigung: Gerald Nash

    Natürlich können Sie sowohl in diesem als auch im Javascript kompliziertere Funktionen wie Proof Of Work hinzufügen. Wenn Sie lernen wollen, wie man das umsetzt, dann gehen Sie den Artikel von Gerald Nash durch. Im Augenblick wissen Sie zumindest, wie man eine einfache Blockchain in Python erstellt.

    Sprache #4: Solidity

    Schließlich kommen wir zu Solidity. Für jeden, der lernen möchte, wie man DAPPs (Dezentrale Anwendungen) erstellt ein ICO auflegt, ist das Erlernen von Solidity ein absolutes Muss. Wir haben bereits eine detaillierte Anleitung dazu, die Sie hier lesen können. An dieser Stelle möchten wir Ihnen jedoch einen grundlegenden Überblick geben. Solidity wurde von Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai und weiteren ehemaligen wichtigen Ethereum-Mitarbeitern entwickelt, um das Schreiben von Smart Contratcs auf Blockchain-Plattformen wie Ethereum zu ermöglichen.

    Solidity ist eine gezielt verschlankte, lose geschriebene Sprache mit einer Syntax, die dem ECMAScript (Javascript) sehr ähnlich ist. Es gibt einige wichtige Punkte im Ethereum Design Rationale Dokument zu beachten. Dazu gehört, dass wir innerhalb eines Stack-and-Memory-Modells mit einer 32-Byte-Befehlswortgröße arbeiten, die EVM (Ethereum Virtual Machine) gibt uns Zugang zum Programm „stack“, das einem Verzeichnisraum entspricht, in dem wir auch Speicheradressen hinterlegen können, um den Programmzähler loop/jump festzulegen(für die sequentielle Programmsteuerung), ein erweiterbarer temporärer „Speicher“ und ein permanenterer „Speicher“, der tatsächlich in die permanente Blockchain geschrieben wird und vor allem, das EVM erfordert einen totalen Determinismus innerhalb der Smart Contracts.

    Bevor wir fortfahren, lassen Sie uns also ein einfaches Beispiel für einen Solidity-Vertrag ausprobieren. (Codes aus github).

    Lassen Sie uns eine einfache while-Schleife in Solidity laufen:

    Also, lassen Sie uns dies analysieren.

    Abschnitt 1: Werte zuweisen

    Im ersten Schritt füllen wir ein Array namens „Integers“, das 10 8-Bit unsigned Integers aufnimmt. Wir wählen dazu eine while-Schleife. Schauen wir uns an, was in der while-Schleife passiert.

    while(x < integers.length) {

    Ganzzahlen[x] = x;

    x++;

    }

    Denken Sie daran, dass wir der ganzen Zahl x bereits einen Wert von „0“ zugewiesen haben. Die while-Schleife geht von 0 auf integer.length. Integers.length ist eine Funktion, die die maximale Kapazität des Arrays zurückgibt. Wenn wir also entschieden haben, dass ein Array 10 ganze Zahlen haben wird, gibt arrayname.length einen Wert von 10 zurück. In der obigen Schleife geht der Wert von x von 0 – 9 (<10) und weist den Wert von sich selbst ebenfalls dem ganzen Array zu. Am Ende der Schleife haben ganze Zahlen also den folgenden Wert:

    0,1,2,3,4,5,6,7,8,9.

    Abschnitt 2: Hinzufügen des Array-Inhalts

    Innerhalb der getSum() Funktion werden wir den Inhalt des Arrays selbst addieren. Dazu wiederholen wir die gleiche while-Schleife wie oben und es wird die Variable „sum“ verwendet, um den Inhalt des Arrays hinzuzufügen.

     

    Abschnitt 3: Beendigung des Vertrages

    Diese Funktion beendet den Vertrag und sendet die restlichen Geldmittel des Vertrages an den Vertragsersteller zurück.

    Auf die Frage zur Inspiration und Motivation Solidity zu schaffen, antwortete Dr. Gavin Woods:

    „Es [Solidity] sollte ein ausgeklügeltes Werkzeug für die Entwicklung von Verträgen sein, das letztendlich sowohl Entwicklern als auch Benutzern gute Informationen darüber geben kann, was der Code tut. Um dies zu unterstützen, habe ich NatSpec entwickelt, ein vertragsfreundliches Dokumentationsformat; ein First-Class-Objekt in Solidity. Ich habe auch eine formale Untermenge der Korrektursprache vorgeschlagen (noch nicht umgesetzt), um die möglichen Korrektheitsgarantien zu maximieren.

    Ich habe Ereignisse als First-Class-Objekt in die Solidity-Sprache eingeführt, um eine schöne Abstraktion für LOGs zu ermöglichen, die in ihrer Form den Funktionsaufrufen ähnelt. Die Inspiration dazu kam von den „Signalen“ des Qt-Metazielsystems.

    Ein später hinzugefügtes Merkmal, das Christian R. und ich zusammen entwickelt haben, waren Funktionsmodifikatoren; das erlaubt es Attributen, die als Teil einer Funktionssignatur platziert wurden, einige Änderungen am Funktionskörper vorzunehmen. Als erklärendes Ausdrucksmittel ist es ein Idiom, das gut in den vertragsorientierten Programmierraum passt.“

    Blockchain-Codierung: Fazit

    In diesem Artikel haben wir nur 4 Sprachen für Blockchain-Codierung behandelt, die bei der Entwicklung in und um die Blockchain herum verwendet werden. In Wirklichkeit gibt es viel mehr Sprachen, die Sie potenziell verwenden können (Java, Go). Wenn Sie ein Programmierer sind, dann sind die Möglichkeiten unendlich. Da die Welt immer mehr dezentralisiert wird und die Blockchain immer mehr zum Mainstream wird, ist die Zukunft für Sie absolut grenzenlos.

    elche Sprachen verschaffen Ihnen einen Vorteil? In diesem Leitfaden werden wir einige der wichtigsten durchgehen. Und wenn Sie gerade erst anfangen, besuchen Sie unsere umfassenden Blockchain-Kurse.

    Programmierung von Blockkettenproblemen

    Bevor wir beginnen, lassen Sie uns einige der Herausforderungen, denen ein Blockchain-Entwickler gegenübersteht, herausfinden. Die Erstellung und Pflege einer öffentlichen Blockchain ist aus verschiedenen Gründen nicht einfach.

    (Bevor wir fortfahren, ein großer Dank an David Schwartz für seine Grundsatzrede zum Einsatz von C++ in der Blockchain-Softwareentwicklung auf der CPPCON 2016.)

    Grund #1: Sicherheit

    Blockchain, wie David Schwartz es ausdrückt, sollten Festungen sein. Erstens ist der Kodex öffentlich und für jedermann einsehbar. Jeder kann sich den Code ansehen und nach Fehlern und Schwachstellen suchen. Im Gegensatz zu anderen Open-Code-Ressourcen ist der Nachteil, Schwachstellen im Blockchain-Code zu finden, jedoch enorm. Jeder Programmierer kann sich einhacken und mit potenziell Millionen und Abermillionen von Dollar davonkommen. Aufgrund dieser berechtigten Sicherheitsbedenken ist die Entwicklung der Blockchain in der Regel sehr langsam.

    Grund #2: Ressourcenmanagement

    Es ist wichtig, mit dem Netzwerk Schritt zu halten. Man darf nicht zu weit zurückfallen und es ist nicht möglich mit allen Netzwerkanforderungen Schritt zu halten. Sie sollten gut gerüstet sein, um Fern- und lokale Anfragen zu bearbeiten.

    Grund #3: Performance

    Die Blockchain muss immer mit den höchstmöglichen Leistungsvermögen arbeiten, aber dafür muss die gewählte Sprache extrem vielseitig sein. Bestimmte Aufgaben in der Blockchain sind parallelisierbar, andere Aufgaben können nicht parallel ausgeführt werden.

    Ein gutes Beispiel für eine „parallelisierbare“ Aufgabe ist die Überprüfung digitaler Signaturen. Alles, was Sie für die Signaturprüfung benötigen, sind der Schlüssel, die Transaktion und die Signatur. Mit nur drei Daten können Sie Bestätigungen parallelisiert durchführen.

    Allerdings sollten nicht alle Funktionen einer Blockchain auf diese Weise ausgeführt werden. Denken Sie an die Ausführung der Transaktion selbst. Mehrere Transaktionen können nicht parallel ausgeführt werden; es muss eine nach der anderen durchgeführt werden, um Fehler wie doppelte Ausgaben zu vermeiden. Einige Sprachen sind für parallele Operationen gut geeignet, andere eignen sich für nicht-parallele Operationen.

    Grund #4: Isolation

    Was ist deterministisches Verhalten?

    Wenn A + B = C, dann gilt unabhängig von den Umständen, dass A+B immer gleich C sein wird. Das nennt man deterministisches Verhalten.

    Hash-Funktionen sind deterministisch, d.h. der Hash von A wird immer H(A) sein.

    In der Blockchain-Entwicklung müssen also alle Transaktionsoperationen deterministisch sein. Sie können keine Transaktion haben, die sich an einem Tag so und am nächsten Tag anders verhält. Ebenso wenig darf es Smart Contracts geben, die auf zwei verschiedenen Maschinen unterschiedlich ausgeübt werden.

    Die einzige Lösung dafür ist die Isolation. Grundsätzlich isolieren Sie Ihre Smart Contracts und Transaktionen von nicht-deterministischen Elementen.

    Damit haben wir die Hauptprobleme angesprochen, mit denen Blockchain-Entwickler konfrontiert sind. Nun lassen Sie uns einige der Sprachen ausprobieren, die Entwickler zum Kodieren auf der Blockchain verwenden können.

    Sprache #1: C++

    Beginnen wir zunächst mit dem Urvater aller Sprachen, dem ewig jungen C++. C++ wurde von Bjarne Stroustrup als Erweiterung der C-Sprache entwickelt. Die Sprache wurde so konzipiert, dass sie die Flexibilität und Effizienz von C hat, aber einige große Unterschiede aufweist. Der größte Unterschied zwischen C und C++ besteht darin, dass C prozessorientiert ist, während C++ objektorientiert ist.

    Das bedeutet, dass in C++ die Daten und Funktionen in einem kleinen Paket namens „objects“ zusammengefasst sind. Das heißt, dass ein einmal erstelltes Objekt leicht aufgerufen und in anderen Programmen wiederverwendet werden kann und so die Programmierzeit erheblich reduziert.

    Betrachten wir das einfachste C++-Programm der Welt. Das Programm „Hello World“:

    Dieser Code druckt: Hallo Welt!

    Also, warum wird immer noch C++ zur Programmierung verwendet? Es gibt inzwischen glamourösere Sprachen, warum also bestehen Entwickler weiterhin darauf zu C++ zu verwenden? Warum ist die Bitcoin-Blockchain in C++ kodiert?

    Das liegt daran, dass C++ bestimmte Funktionen hat, die sehr ansprechend sind. (Vielen Dank an Peter Wiulle und David Schwartz für die folgende Erklärung).

    Merkmal #1: Speichersteuerung

    Erinnern Sie sich, was wir eingangs über die Herausforderungen der Blockchain-Entwicklung gesagt haben? Blockchains sollten nicht nur wie Festungen gesichert sein, sondern auch ein effektives Ressourcenmanagement haben. Eine Blockchain soll mit vielen nicht vertrauenswürdigen Endpunkten interagieren und gleichzeitig einen schnellen Service für alle Knoten bieten.

    Dieser schnelle und sofortige Service ist entscheidend für den Erfolg einer Kryptowährung wie Bitcoin. Denken Sie daran, dass sie alle auf dem Prinzip des „Konsenses“ basieren, alle Knoten im Netzwerk müssen genau die gleichen Blöcke akzeptieren und ablehnen, sonst kann es eine Fork in der Kette geben.

    Um all diese Anforderungen zu erfüllen und auf höchstem Niveau zu arbeiten, benötigen Sie eine strenge und vollständige Kontrolle über die CPU- und Speichernutzung. C++ stellt dies seinen Benutzer bereit.

    Feature #2: Threading

    Wie bereits angesprochen, ist es eine der Hauptherausforderungen der Blockchain-Programmierung die Integration von Aufgaben, die gut parallelisierbar sind und on solchen, die nicht parallelisierbar sind. Die meisten Sprachen sind auf eine einzige spezialisiert, aber die Threading-Fähigkeit von C++ ist geeignet, sowohl parallele als auch nicht-parallele Aufgaben zu bewältigen. Ein Thread ist ein Satz von Anweisungen, die gleichzeitig ausgeführt werden können. C++ ermöglicht nicht nur erstklassige Multithreading-Funktionen mit effektiver Inter-Thread-Kommunikation, sondern optimiert auch die Single-Thread-Performance.

    Feature #3: Bewegungssemantik

    Einer der interessantesten Aspekte von C++ ist die Bewegungssemantik. Die Bewegungsemantik bietet eine Möglichkeit, Inhalte zwischen Objekten zu verschieben anstatt sie direkt zu kopieren. Lassen Sie uns die Unterschiede zwischen Kopiersemantik und Bewegungssemantik untersuchen. (Angaben aus Peter Alexanders Antwort in „Stackoverflow“).

    Kopiersemantik:

    • assert(b == c);
    • a = b;
    • assert(a == b && b == c);

     

    Was passiert hier? Der Wert von b geht in a über und b bleibt am Ende des Ganzen unverändert.

    Nun bedenken Sie Folgendes.

    Bewegungsemantik:

    • assert( b = = c);
    • move (a,b);
    • ssert (a = =c);

     

    Was ist also los?

    Können Sie den Unterschied zwischen den beiden Codeblöcken sehen?

    Wenn wir die Bewegungssemantik verwenden, muss der Wert von “b” nicht unverändert sein. Das ist der Unterschied zwischen Kopiersemantik und Bewegungssemantik. Der größte Vorteil der Bewegungssemantik besteht darin, dass Sie nur dann Kopien bestimmter Daten erhalten können, wenn Sie sie benötigen. Das verringert die Redundanz im Code sehr stark und bewirkt eine enorme Leistungssteigerung. Wie Sie sehen können, sind dieses effiziente Speichermanagement und die hohe Leistung für die Blockchain von Interesse.

    Feature #4: Zeitpolymorphismus kompilieren

    Was ist Polymorphismus?

    Erinnern Sie sich, dass wir C++ als „objektorientierte Programmiersprache (OOP)“ bezeichnet haben? Polymorphismus ist eine OOP-Eigenschaft. Mit Hilfe des Polymorphismus verwenden Sie ein bestimmtes Merkmal auf mehr als eine Weise. In C++ kann Polymorphismus auf zwei Arten verwendet werden:

    • Kompilierungszeit-Polymorphismus.
    • Laufzeit-Polymorphismus.

    Hier befassen wir uns nur mit der Zusammenstellung von Kompilierungszeit-Polymorphismus. Es gibt zwei Möglichkeiten, wie C++ Kompilierungszeit-Polymorphismus implementiert:

    • Funktionsüberladung.
    • Bedienungsüberladung.

     

    Funktionsüberladung:

    Funktionsüberladung ist, wenn Sie viele Funktionen gleichen Namens, aber mit unterschiedlicher Parameteraufnahme haben.

    Betrachten Sie dieses Programm:

    Wenn Sie nun diese Funktion ausführen, wird die Ausgabe erfolgen:

    • 2
    • 2.65
    • 7

    Wie Sie sehen können, wurde also die gleiche Funktion func() auf 3 verschiedene Arten verwendet.

    Bedienungsüberladung:

    In C++ kann derselbe Operator mehr als eine Bedeutung haben.

    • Z.B. „+“ kann sowohl für die mathematische Addition als auch für die Verkettung verwendet werden.
    • Verkettung bedeutet im Grunde genommen, zwei Zeichenketten zu nehmen und sie als eine zu kombinieren.
    • Also 3+4 = 7.

    UND

    • Block+geeks = Blockgeeks.
    • Der gleiche Operator hat zwei verschiedene Funktionen ausgeführt, das ist eine Bedienungsüberladung.

    Der Kompilierungszeit-Polymorphismus ist bei der Entwicklung auf der Blockchain sehr hilfreich. Es hilft, die Verantwortlichkeiten in verschiedenen Funktionen getrennt zu verteilen und damit die Leistung des Gesamtsystems zu steigern.

    Feature #5: Code-Isolierung

    C++ hat Namensbereichfunktionen, die von einem Programm in ein anderes importiert werden können. Der Namensbereich hilft, Namenskollisionen zu vermeiden. Da C++ Klassen hat, kann es auch als Grenze zwischen verschiedenen APIs dienen und bei der klaren Trennung helfen.

    Eine Klasse in C++ ist ein benutzerdefinierter Typ oder eine Datenstruktur, die mit einer Schlüsselwortklasse deklariert ist, die Daten hat und als ihre Mitglieder fungiert. Sie können auf die in der Klasse deklarierten Funktionen zugreifen, indem Sie Objekte dieser Klasse deklarieren.

    Feature #6: Reifegrad

    Die Sprache ist sowohl ausgereift und wird auch regelmäßig aktualisiert. Es gibt mindestens 3 solide Compiler, wie David Schwartz sagt, und die neuen Features zielen darauf ab, echte Probleme zu lösen. Debugger und Analysewerkzeuge aller Art stehen für alle Bereiche zur Verfügung, vom Leistungsprofiling bis zur automatischen Erkennung von Problemen aller Art. Das bedeutet, dass die Sprache ständig wächst und neue und bessere Funktionen integriert.

    Aufgrund der oben genannten Funktionen hat sich Satoshi Nakamoto für C++ als Basissprache des Bitcoin-Quellcodes entschieden.

    Sprache #2: Javascript

    Als nächstes haben wir Javascript.

    Sie ist neben HTML und CSS eine der drei Kerntechnologien in der World Wide Web Content Produktion. Javascript wird in der Regel verwendet, um hochinteraktive Webseiten zu erstellen. Wir werden sehen, wie man eine sehr einfache Blockchain mit Javascript erstellt. Ein großer Dank an savjee.be für den Inhalt in diesem Abschnitt.

    Angenommen, wir wollen eine einfache Blockchain in Javascript erstellen. Bevor wir das tun müssen wir bestimmte Dinge angehen.

    Was ist eine Blockchain und wie genau funktioniert sie… vom Coder her gesehen?

    Eine Blockchain ist im Grunde genommen eine Kette von Blöcken, die Daten enthalten. Es ist im Grunde genommen eine verlinkte Liste, die angehimmelt wird. Aber was macht es so besonders? Eine Blockchain ist unveränderlich. Das bedeutet, dass Daten, die einmal in einem Block enthalten sind, nie wieder geändert werden können. Wie erreicht eine Blockchain Unveränderlichkeit? Das geschieht aufgrund eines einfachen, aber genialen Mechanismus namens „Hashing“. Schauen Sie sich das folgende Diagramm an:

    Blockchain Coding: The Many different Languages You Need!

    Bild mit freundlicher Genehmigung: Lauri Hartikka

    Jeder Block ist mit dem vorherigen Block über einen Hash-Pointer verbunden, der den Hash des vorherigen Blocks enthält. Wie macht das die Kette unveränderlich?

    Eine der faszinierendsten Eigenschaften von kryptographischen Hash-Funktionen ist, dass, wenn Sie die Eingabe nur minimal ändern, dies den Ausgabehash stark beeinflussen kann. Sehen Sie sich z.B. dies hier an:

    Blockchain Coding: The Many different Languages You Need!

    Allein die Änderung des ersten „T“ von Groß- auf Kleinschreibung hat den Output-Hash stark verändert.

    Wie wirkt sich das auf die Blockkette aus?

    Jeder Block ist mit dem vorherigen über den Hash-Pointer verbunden. Wenn also jemand die Daten in einem Block manipulieren würde, würde dies den Hash drastisch verändern und somit die gesamte Kette betreffen (da alle Blöcke verknüpft sind). Dies würde die Kette erstarren lassen, was unmöglich ist. Somit bleiben die Blöcke unverändert.

    Wie erstellen wir einen Block? Woraus besteht ein einfacher Block? In unserem einfachen Kryptocoin, das wir herstellen werden (nennen wir es „BlockGeeksCoin“), wird jeder Block die folgenden Informationen enthalten:

    • Index: Um die Satznummer zu erfahren.
    • Zeitstempel: Um die Zeit der Erschaffung zu kennen.
    • Daten: Die Daten innerhalb des Blocks.
    • Vorheriger Hash: Der Hash des vorherigen Blocks.
    • Hash: Der Hash des aktuellen Blocks.

    Bevor wir weitermachen müssen Sie bestimmte Begriffe verstehen, die wir in unserem Programm verwenden werden:

    • this: Das Schlüsselwort „this“ wird innerhalb einer Funktion aufgerufen und ermöglicht den Zugriff auf die Werte innerhalb eines bestimmten Objekts, das diese bestimmte Funktion aufruft.
    • Constructor: Ein Constructor ist eine spezielle Funktion, die beim Anlegen und Initialisieren eines Objekts innerhalb einer Klasse helfen kann. Jede Klasse ist auf nur einen Constructor beschränkt.

    Jetzt, da das erledigt ist, erstellen wir unseren Block.

    Erstellen des Blocks

    Code-Analyse

    Das hier stammt aus dem Block. In der ersten Zeile des Codes haben wir die crypto-js-Bibliothek aufgerufen, weil die sha256-Hash-Funktion in JavaScript nicht verfügbar ist.

    Als nächstes haben wir einen Constructor innerhalb der Klasse hervorgerufen, um Objekte aufzurufen, die bestimmte Werte haben. Was Ihnen wahrscheinlich ins Auge fällt, ist die Funktion calculateHash(). Mal sehen, was genau es macht.

    In einem Block nehmen wir den gesamten Inhalt und hashen ihn, um den Hash dieses bestimmten Blocks zu erhalten. Wir verwenden die Funktion JSON.stringify, um die Daten des Blocks in Zeichenketten umzuwandeln, um sie zu hashen.

    Damit haben wir den Block fertiggestellt und sind startklar. Verbinden wir nun die Blöcke zu einer Blockchain.

    Erstellen der Blockchain

    Code-Analyse

    In der Kette oben passiert eine ganze Menge; lassen Sie es uns in Abschnitte unterteilen.

    Abschnitt 1: Der Genesis-Block

    Was ist der Genesis-Block?

    Der Genesis-Block ist der erste Block der Blockkette. Er ist besonders ist, da jeder Bock auf den Block vor ihm verweist, der Genesis-Block dagegen nicht. Sobald also eine neue Kette erstellt wird, wird der Genesis-Block sofort aufgerufen. Außerdem sehen Sie eine „createGenesisBlock()“-Funktion, bei der wir die Daten des Blocks manuell eingegeben haben:

    Nachdem wir nun den Genesis-Block erstellt haben, lassen Sie uns den Rest der Kette aufbauen.

     

    Abschnitt 2: Hinzufügen der Blöcke

    Erstens müssen wir wissen, was der letzte Block in der Blockchain derzeit ist. Dazu verwenden wir die Funktion getLatestBlock().

    Was sehen wir hier? Wie fügen wir die Blöcke hinzu? Wie überprüfen wir, ob der angegebene Block gültig ist oder nicht?

    Erinnern Sie sich an den Inhalt eines Blocks?

    Ein Block hat den Hash des vorherigen Blocks, richtig?

    Was wir hier tun werden, ist einfach. Vergleichen Sie den previousHash-Wert des neuen Blocks mit dem Hash-Wert des letzten Blocks.

    Blockchain Coding: The Many different Languages You Need!

    Bild mit freundlicher Genehmigung: Lauri Hartikka

    Wenn diese beiden Werte übereinstimmen, dann bedeutet das, dass der neue Block legal ist und zur Blockchain hinzugefügt wird.

    Abschnitt 3: Überprüfung der Kette

    Jetzt müssen wir überprüfen, dass niemand in unsere Blockchain eingegriffen hat und ob alles stabil ist.

    Wir verwenden die „for“-Schleife, um vom Block 1 zum letzten Block zu gelangen. Der Genesis-Block ist Block 0.

    Wenn der “previousHash” des aktuellen Blocks nicht gleich dem „Hash“ des vorherigen Blocks ist, dann gibt diese Funktion False zurück, sonst True.

    Verwendung der Blockchain

    Nun werden wir endlich die Blockchain nutzen, um unser BlockGeeksCoin zu erstellen.

    Und das ist es auch schon!

    Also, was ist hier passiert?

    Wir haben eine neue Kryptowährung auf Basis der Blockchain erstellt und sie BlockGeeksCoin genannt. Durch den Aufruf dieses neuen Objekts habe ich den Constructor aktiviert, der wiederum den Genesis-Block automatisch erstellt hat.

    Wir haben einfach zwei weitere Blöcke hinzugefügt und ihnen einige Daten gegeben.

    So einfach ist das.

    (Danke savjee.be für die erstaunliche und einfache Erklärung.)

    Sprache #3: Python

    Guido van Rossum, ein niederländischer Programmierer, hat Python bereits 1991 geschaffen. Python basiert auf einer einfachen Philosophie: Einfachheit und Minimalismus. Eine der bemerkenswertesten Möglichkeiten, wie Einfachheit in die Sprache integriert wurde, ist die Verwendung von Leerzeichen zur Kennzeichnung von Codeblöcken anstelle von geschweiften Klammern oder Schlüsselwörtern. Mal sehen, was das bedeutet.

    Lassen Sie uns ein einfaches „Hallo Welt“-Programm ausprobieren.

    print(‘Hallo, Welt!’)

    Das ist es auch schon!

    Vergleichen Sie das mit dem C++-Programm „hello world“.

    Sehen Sie, wie unkompliziert es im Vergleich dazu ist? Wie wäre es, wenn wir etwas Komplizierteres tun? Nehmen wir an, wir fügen zwei Zahlen hinzu und drucken das Ergebnis aus.

     

    Und das ist alles.

    Das Programm gibt aus:

    • Die Summe aus 1,5 und 6,3 ergibt 7,8.

    Also, lassen Sie uns den Einsatz erhöhen. Wie programmieren wir eine komplette Blockchain mit Python? Die folgenden Daten und Codes stammen aus Gerald Nash’s Artikel in Medium.

    Erstellen des Blocks

    Lassen Sie uns unseren Block bilden:

    Import Hashlib als Hashher

    Code-Analyse

    Wir beginnen mit dem Import der Hash-Bibliothek, um die SHA 256 Hash-Verfeinerungen zu verwenden (ähnlich wie bei Javascript).

    Wie bisher hat der Block den gleichen Wert:

    • Index.
    • Zeitstempel.
    • Daten.
    • Vorheriger Hash.
    • Hasch.

     

    Wir füllen die Hash-Werte über eine Funktion, wie auch schon zuvor.

    Erstellen des Genesis-Blocks

    Lassen Sie uns den Genesis-Block erstellen:

    Datum/Uhrzeit als Datum importieren

    Code-Analyse

    Wir haben datetime importiert, um den Zeitstempel einzufügen.

    Wir haben einfach den Genesis-Block generiert und ihm manuell einige Daten gegeben, mit denen er arbeiten kann. Der vorherige Hash-Wert ist „0“, da er auf keinen anderen Block zeigt.

    Erstellen der weiteren Blöcke

    Nun werden wir festlegen, wie die nachfolgenden Blöcke erstellt werden.

    Code-Analyse

    Wie bestimmen wir die Werte jedes einzelnen Datenstücks innerhalb jedes einzelnen Blocks?

    Der Blockindex ist einfach der Index des letzten Blocks + 1.

    Der Zeitstempel ist das aktuelle Datum und die aktuelle Uhrzeit.

    Die Daten des Blocks sind eine einfache Nachricht: „Hey! Ich bin Block <Indexnummer>“.

    Den Hash berechnen wir mit der Funktion, die wir zuvor definiert haben.

    Und schließlich geben wir alle diese Werte an den Block zurück.

    Erstellen der Blockchain

    Abschließend erstellen wir die Blockchain.

    Code-Analyse

    Zuerst erstellen wir den Genesis-Block und geben seinen Wert an „previous_block“ weiter.

    Dann bestimmen wir, wie viele Blöcke hinzugefügt werden sollen, in diesem Beispiel entscheiden wir uns für 15.

    Wir lassen eine Schleife laufen, die bis 15 geht und jeden einzelnen Block zur Blockchain hinzufügt. Am Ende der Betrachtung drucken wir, welcher Nummernblock der Blockchain hinzugefügt wurde, indem wir deren Indexnummer anzeigen. Außerdem drucken wir auch den Hash.

    So wird die Ausgabe aussehen:

    Bild mit freundlicher Genehmigung: Gerald Nash

    Natürlich können Sie sowohl in diesem als auch im Javascript kompliziertere Funktionen wie Proof Of Work hinzufügen. Wenn Sie lernen wollen, wie man das umsetzt, dann gehen Sie den Artikel von Gerald Nash durch. Im Augenblick wissen Sie zumindest, wie man eine einfache Blockchain in Python erstellt.

    Sprache #4: Solidity

    Schließlich kommen wir zu Solidity. Für jeden, der lernen möchte, wie man DAPPs (Dezentrale Anwendungen) erstellt ein ICO auflegt, ist das Erlernen von Solidity ein absolutes Muss. Wir haben bereits eine detaillierte Anleitung dazu, die Sie hier lesen können. An dieser Stelle möchten wir Ihnen jedoch einen grundlegenden Überblick geben. Solidity wurde von Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai und weiteren ehemaligen wichtigen Ethereum-Mitarbeitern entwickelt, um das Schreiben von Smart Contratcs auf Blockchain-Plattformen wie Ethereum zu ermöglichen.

    Solidity ist eine gezielt verschlankte, lose geschriebene Sprache mit einer Syntax, die dem ECMAScript (Javascript) sehr ähnlich ist. Es gibt einige wichtige Punkte im Ethereum Design Rationale Dokument zu beachten. Dazu gehört, dass wir innerhalb eines Stack-and-Memory-Modells mit einer 32-Byte-Befehlswortgröße arbeiten, die EVM (Ethereum Virtual Machine) gibt uns Zugang zum Programm „stack“, das einem Verzeichnisraum entspricht, in dem wir auch Speicheradressen hinterlegen können, um den Programmzähler loop/jump festzulegen(für die sequentielle Programmsteuerung), ein erweiterbarer temporärer „Speicher“ und ein permanenterer „Speicher“, der tatsächlich in die permanente Blockchain geschrieben wird und vor allem, das EVM erfordert einen totalen Determinismus innerhalb der Smart Contracts.

    Bevor wir fortfahren, lassen Sie uns also ein einfaches Beispiel für einen Solidity-Vertrag ausprobieren. (Codes aus github).

    Lassen Sie uns eine einfache while-Schleife in Solidity laufen:

    Also, lassen Sie uns dies analysieren.

    Abschnitt 1: Werte zuweisen

    Im ersten Schritt füllen wir ein Array namens „Integers“, das 10 8-Bit unsigned Integers aufnimmt. Wir wählen dazu eine while-Schleife. Schauen wir uns an, was in der while-Schleife passiert.

    while(x < integers.length) {

    Ganzzahlen[x] = x;

    x++;

    }

    Denken Sie daran, dass wir der ganzen Zahl x bereits einen Wert von „0“ zugewiesen haben. Die while-Schleife geht von 0 auf integer.length. Integers.length ist eine Funktion, die die maximale Kapazität des Arrays zurückgibt. Wenn wir also entschieden haben, dass ein Array 10 ganze Zahlen haben wird, gibt arrayname.length einen Wert von 10 zurück. In der obigen Schleife geht der Wert von x von 0 – 9 (<10) und weist den Wert von sich selbst ebenfalls dem ganzen Array zu. Am Ende der Schleife haben ganze Zahlen also den folgenden Wert:

    0,1,2,3,4,5,6,7,8,9.

    Abschnitt 2: Hinzufügen des Array-Inhalts

    Innerhalb der getSum() Funktion werden wir den Inhalt des Arrays selbst addieren. Dazu wiederholen wir die gleiche while-Schleife wie oben und es wird die Variable „sum“ verwendet, um den Inhalt des Arrays hinzuzufügen.

     

    Abschnitt 3: Beendigung des Vertrages

    Diese Funktion beendet den Vertrag und sendet die restlichen Geldmittel des Vertrages an den Vertragsersteller zurück.

    Auf die Frage zur Inspiration und Motivation Solidity zu schaffen, antwortete Dr. Gavin Woods:

    „Es [Solidity] sollte ein ausgeklügeltes Werkzeug für die Entwicklung von Verträgen sein, das letztendlich sowohl Entwicklern als auch Benutzern gute Informationen darüber geben kann, was der Code tut. Um dies zu unterstützen, habe ich NatSpec entwickelt, ein vertragsfreundliches Dokumentationsformat; ein First-Class-Objekt in Solidity. Ich habe auch eine formale Untermenge der Korrektursprache vorgeschlagen (noch nicht umgesetzt), um die möglichen Korrektheitsgarantien zu maximieren.

    Ich habe Ereignisse als First-Class-Objekt in die Solidity-Sprache eingeführt, um eine schöne Abstraktion für LOGs zu ermöglichen, die in ihrer Form den Funktionsaufrufen ähnelt. Die Inspiration dazu kam von den „Signalen“ des Qt-Metazielsystems.

    Ein später hinzugefügtes Merkmal, das Christian R. und ich zusammen entwickelt haben, waren Funktionsmodifikatoren; das erlaubt es Attributen, die als Teil einer Funktionssignatur platziert wurden, einige Änderungen am Funktionskörper vorzunehmen. Als erklärendes Ausdrucksmittel ist es ein Idiom, das gut in den vertragsorientierten Programmierraum passt.“

    Blockchain-Codierung: Fazit

    In diesem Artikel haben wir nur 4 Sprachen für Blockchain-Codierung behandelt, die bei der Entwicklung in und um die Blockchain herum verwendet werden. In Wirklichkeit gibt es viel mehr Sprachen, die Sie potenziell verwenden können (Java, Go). Wenn Sie ein Programmierer sind, dann sind die Möglichkeiten unendlich. Da die Welt immer mehr dezentralisiert wird und die Blockchain immer mehr zum Mainstream wird, ist die Zukunft für Sie absolut grenzenlos.

     

    Like what you read? Give us one like or share it to your friends

    0

    Discussion

    Please to comment

    Join Blockgeeks

    Create an account to access our exclusive point system, get instant notifications for new courses, workshops, free webinars and start interacting with our enthusiastic blockchain community. Don’t miss out and join right now!

    Already have an account? Sign In