Einführung in Blockchain und Ethereum

Schriftsteller:Null, Erstellt: 2016-05-05 17:31:57, Aktualisiert: 2016-05-05 17:32:31

Sie sind von:https://jysperm.me/2016/05/blockchain-slides/

Dieser Artikel stammt aus meinem Tech-Sharing auf LeanCloud Ende März und geht davon aus, dass die Leser bereits ein grundlegendes Wissen über Kryptowährungen und eine vorläufige Einsicht in die Umsetzung von Bitcoin haben.

Blockchain, auch bekannt als Blockchain, kann als eine Art HashTree betrachtet werden und hat daher einige Eigenschaften, die dem HashTree ähneln:

blockchain-hash-tree

Bild von:http://happypeter.github.io/bitcoin_basics/book/017_merkle_tree.html

Das heißt, in einer baumartigen Struktur hat jeder Endknoten einen Satzwert, während der Satzwert eines Nicht-Endknoten von allen seinen direkten Unterknoten abgeleitet wird, so dass jeder Knoten direkt oder indirekt Informationen von allen seinen Unterknoten enthält. Wenn also der Satzwert eines beliebigen Endknoten sich ändert, ändern sich die Satzwerte aller seiner Elternknoten.

Ich kann eine Anwendung zum HashTree nennen: "100% Reservennachweis", es gehört zu den Problemen der Art "Zero-Knowledge-Proofs". Wir können uns ein Szenario vorstellen, in dem ein Bitcion-Inhaber Bitcoin an eine Börse senden muss, um eine Transaktion durchzuführen, und die Börse das Geld theoretisch verschieben kann, was die Benutzer nicht sehen wollen, und die Börse will sich reinigen: Die Börse veröffentlicht zuerst eine Bitcoin-Adresse, die sie besitzt, um zu bestätigen, dass die Transaktion tatsächlich so viel Bitcoin als Reserven hält, aber wie kann man beweisen, dass das Geld tatsächlich größer ist als die Summe aller Benutzer?

blockchain-proof-of-reserves

Bild von:http://blog.bifubao.com/2014/03/16/proof-of-reserves

Wir können einen HashTree konstruieren, in dem alle Endknoten einen Benutzer repräsentieren und den Benutzer-Balance enthalten.Σ) und eine Reihe von Benutzer-IDs (z.B. E-Mail-Adresse)hDer Mutterknoten enthält die Summe der Salden seiner Kinderknoten.sum) und eine Zusammenstellung aller UnterknoteninformationenhashFür jeden Benutzer ist es nur nötig, ihm seinen eigenen Endkern und seinen Bruderknoten, alle seine Stammknoten und die Stammknoten seiner Stammknoten zu zeigen, da dieser Benutzer durch schrittweise Rückverfolgung des Stammknoten bestätigen kann, dass sein Saldo im Stammknoten enthalten ist und schließlich im Stammknoten enthalten ist.

Dadurch wird jedem Benutzer nur seine eigene Information und einige zusammengefasste Informationen angezeigt, und jeder Benutzer kann bestätigen, dass sein eigenes Gleichgewicht in einem Root-Node enthalten ist, ohne dass er weiß, dass andere Nutzungssalden enthalten sind.hFüre4df9d12Der Knoten sollte nicht ein Endknoten sein, der den Benutzer repräsentiert, sondern ein aggregierter Informationsknoten (dieser Knoten kann einen Benutzer mit 3333-Balance und einen Scheinbenutzer mit 0-Balance enthalten), um zu vermeiden, dass die Privatsphäre eines Benutzers verbreitet wird.

Jetzt schauen wir uns Git an, das eigentlich eine sehr typische Blockchain-Anwendung ist:

blockchain-git-objects-example

Bild von:http://gitbook.liuhui998.com/1_2.html(GPL v2)

In Git haben alle Dateien, ob Blob, Index oder Commit, einen Hash, der durch den Inhalt bestimmt wird. Wenn zwei Objekte denselben Inhalt haben, dann haben sie den gleichen Hash. In Git ist die gesamte Repository-Geschichte eine Blockchain. Jeder Commit entspricht einem Block.

Git nutzt die Blockchain, um eine einzigartige Geschichte für die Repository zu bestimmen. Oh, wenn ein Commit geändert wird, ändern sich alle Hashs von Commits danach.push --forceDie Veröffentlichung von "The New York Times" veröffentlichte einen Bericht über die Entwicklung des Internet-Systems.

Eine andere klassische Anwendung von Blockchain ist Bitcoin, der auch den Begriff Blockchain verbreitete (und der Begriff existiert schon immer):

blockchain-bitcoin-block-data

Bild von:https://commons.wikimedia.org/wiki/File:Bitcoin_Block_Data.png(CC-BY-SA-3.0)

In Bitcoin enthält jeder Block eine Reihe von Transaktionen und Hashs des vorherigen Blocks, während die gesamte Blockchain eine dezentrale Buchführung bildet. Da nur alle zehn Minuten ein neuer Block erzeugt wird und ein Block einmal erzeugt wird, bleibt er für immer auf der Blockchain.

Bitcoins

Der erste Teil dieses Teils ist ein einfacher Rückblick auf Bitcoin.

In Bitcoin werden Blöcke durch "Workload Proof" erzeugt, wobei alle "Miner", die am "Mining" beteiligt sind, eine rechnergestützte, zufällige, vielseitige Berechnung durchführen müssen, bis eine zufällige Zahl, die bestimmte Bedingungen erfüllt, berechnet wird, um das Recht zu erhalten, einen Block zu veröffentlichen.

Wenn jeder Miner die "längste Kette" vertraut und den nächsten Block auf der Grundlage der längsten Kette berechnet, die den bekannten Regeln entspricht, wird Ihre Rechenleistung verschwendet, da alle anderen Miner immer die längste Kette anerkennen.

Bitcoin ist so konzipiert, dass alle 10 Minuten ein neuer Block erzeugt wird. Dies geschieht, indem man gemeinsam die Schwierigkeit der Erstellung des nächsten Blocks anpasst, indem man die Intervalle zwischen den letzten Blöcken beobachtet. Wenn die Geschwindigkeit der Erstellung der letzten Blöcke höher ist als erwartet, wird angenommen, dass die Erstellung des nächsten Blocks höher sein sollte.

Normalerweise benötigt jeder Bitcoin-Knoten die Speicherung der vollständigen Blockchain-Daten, um zu bestätigen, ob eine Transaktion legal ist. Ob der Initiator der Transaktion über genügend Guthaben verfügt, um die Transaktion zu starten. Aber jetzt gibt es bereits 66G an der vollständigen Blockchain und wächst mit etwa 0.1G pro Tag.

blockchain-bitcoin-state-machine

Bild von:https://github.com/ethereum/wiki/wiki/White-Paper

  • Blockchain-Leichenbuch Lieblings-Status-Änderungsprotokoll
  • Transaktions-Plattform Transaktions-Plattform Einmalige Statusänderung
  • Blockieren ist ein "Konsens" über den aktuellen Stand der Dinge.

Wir können uns die Blockchain von Bitcoin als eine "Statusmaschine" vorstellen, in der die gesamte Blockchain eine "Buchmaschine" ist, in der alle Transaktionsprotokolle gespeichert werden, aus denen ausgehend von diesen Transaktionsprotokollen abgeleitet werden kann, wie viel Geld jedes Konto zu einem bestimmten Zeitpunkt in dem Bitcoin-Netzwerk hat. Jede Transaktion ist eine Änderung des Zustands, und jeder Block ist ein "Konsensus" der Bergleute des gesamten Bitcoin-Netzwerks über den aktuellen Zustand, da Bitcoin alle 10 Minuten einen neuen Block erzeugt, was einem Konsens in Bezug auf den Zustand aller Konten entspricht, während der Zustand des Kontos zwischen diesen zehn Minuten ein "Chaoszustand" ist.

Alt-Münze

Es gibt viele andere Kryptowährungen, die von Bitcoin abgeleitet wurden, die oft als "Alt Coin" bezeichnet werden.

Der erste ist, dass es ein eigenes Netzwerk verwendet, das relativ unabhängig von Bitcoin ist. Der Vorteil ist, dass Zyklon sehr flexibel seine eigenen Protokolle und Regeln entwerfen kann, aber die Verteidigungsfähigkeit gegen Malware-Angriffe sehr schwach ist, da die Anzahl der Benutzer schwierig ist, Bitcoin zu erreichen.

Der zweite ist die Implementierung eines "Meta-Protokolls" für das Bitcoin-Netzwerk, das eine eigene Logik mit kundenspezifischen Informationen über Bitcoins Transaktionen umfasst. Der Vorteil besteht darin, dass die Rechenleistung von Bitcoin zur Abwehr von Angriffen genutzt werden kann.

Für diese Kryptowährungen bietet Bitcoin eine Blockchain mit einer großen Anzahl von Minenarbeitern, die sich gegen massive Malware-Angriffe wehren kann, und Bitcoin-Transaktionen können auch mit kundenspezifischen Daten versehen werden, was dem Umsetzen von Kryptowährungen einen gewissen Raum gibt.

Bitocin bietet auch eineBitcoin ScriptEs ist jedoch nicht die zentrale Funktion von Bitcoin, so dass nur relativ einfache Operationen durchgeführt werden können und nur sehr begrenzt Daten auf der Blockchain gelesen werden können, und es ist schwierig, eine allgemeine, Turing-fähige Logik zu schreiben, da es keine Kreislaufmechanismen gibt.

Ethereum

blockchain-ethereum

Bild von:https://www.ethereum.org/assets(CC 3.0)

Ethereum ist eine Blockchain-basierte, dezentrale Anwendungsplattform, die die Infrastruktur von Bitcoin und kryptographisch basierte Blockchain-Technologie zu einer universellen Plattform zusammensetzt und einige fehlende Funktionen des Bitcoin-Netzwerks ergänzt, damit Entwickler ihre eigenen dezentralen Anwendungen auf der Blockchain betreiben können.

Bevor ich Ethereum im Detail beschreibe, möchte ich zunächst die beiden Grundlagen eines dezentralen Netzwerks beschreiben: Kryptographie und Glücksspiel. Natürlich muss man nicht zu viel sagen, wenn es darum geht, die Sicherheit mathematisch durch öffentliche Schlüsselverschlüsselung, digitale Signaturen, Sätze und Abzugsalgorithmen zu gewährleisten. Glücksspiel bedeutet, dass in einem dezentralen Netzwerk, an dem jeder teilnehmen kann, einschließlich derjenigen, die den Netzwerk böswillig angreifen möchten, jeder Teilnehmer in der Interessengruppe des dezentralen Netzwerks denken muss, um zu gewährleisten, dass die Interessen maximiert werden, wenn die Regeln befolgt werden, und wenn die Regeln nicht befolgt werden, werden Verluste oder Risiken eingebracht.

In der digitalen Welt ist die Veröffentlichung eines Datensatzes jedoch kostengünstig, es gibt keinen "Gewinn" und keinen "Verlust", daher muss eine Verbindung zur physischen Welt hergestellt werden, um den "Gewinn" zu definieren. Zum Beispiel im Bitcoin-Netzwerk benötigt ein Angreifer eine höhere Rechenleistung als alle anderen Miner, wenn er den Kurs der Blcokchain künstlich ändern möchte.

In einem dezentralen Netzwerk werden also nicht alle Probleme von "Technologie" gelöst, und in den Bereichen, in denen die Technologie nicht erreichbar ist, müssen sie durch Gewinn, durch wirtschaftliche Anreize gelöst werden. Auch wegen der Notwendigkeit von "Wirtschaftsanreizen" hat Ethereum ein Geldbeutelsystem (die Währungseinheit heißt "Ether"), bei dem jeder Benutzer eine Geldbeuteladresse als seine einzige Identität hat, die in diesem Punkt dem Bitcion ähnlich ist.

"Contract" ist das wichtigste Konzept, das Ethereum eingeführt hat. In Bitcoin gehören alle Adressen einem Benutzer an. Wenn wir "Benutzer" sagen, meinen wir eigentlich ein Paar öffentlicher und privater Schlüssel. In Ethereum gibt es jedoch neben der Adresse, die von einem Schlüssel besessen ist, auch eine Adresse, die von "Code" besessen ist, nämlich Contract.

  • Die Ergebnisse der tatsächlichen Berechnung müssen nicht in der Blockchain gespeichert werden, da sie jederzeit neu berechnet werden können.
  • Funktionen in anderen Verträgen können aufgerufen werden (der Code und die Daten anderer Verträge sind ebenfalls auf der Blockchain enthalten).
  • Während der Ausführung können neue Transaktionen (manipulieren Sie Ihren eigenen Portemonnaie-Guthaben) erstellt werden, die möglicherweise andere Kontrakte ausführen.

Als erstes gibt es ein Beispiel für ein "Multi-Holded Wallet", bei dem es eine Funktion gibt, in der mehrere Geldbörsen in dem offiziellen Client von Ethereum erstellt werden können:

blockchain-ethereum-multi-sig-wallet

Wie in der Abbildung dargestellt, kann mit dieser Funktion eine Wallet-Adresse erstellt werden, die gemeinsam mit zwei anderen Personen besessen wird, wobei jeder jeweils bis zu 100 Ether pro Tag verwenden kann. Wenn diese Grenze überschritten wird, muss die Zustimmung des anderen Personen erteilt werden.

Diese Funktion erstellt tatsächlich einen Vertrag, und die oben beschriebene Logik wird durch den Code in Contract beschrieben. Wenn Sie aus dieser gemeinsamen Brieftasche auszahlen möchten, müssen Sie eine Nachricht an diese gemeinsame Brieftasche senden (Transaktion ist eine Nachricht, der Transaktionsbetrag kann null sein und nur Daten tragen), und dann wird der Code aus der gemeinsamen Brieftasche ausgeführt, um eine echte Ausgabetransaktion zu starten, wenn die Ausgabenaufforderung der oben beschriebenen Logik entspricht, sonst wird die Ausgabenaufforderung ohne echte Ausgabenaufforderung abgelehnt.

Ein weiteres Beispiel sind "Hedging Contracts", bei denen immer wieder behauptet wird, dass Bitcoin als digitale Währung unbeständig ist, wobei es häufig vorkommt, dass sich der Wert der Währung zwischen einem Tag und dem nächsten verdoppelt oder verdoppelt, aber wenn ein Hedging-Vertrag mit einem Contract realisiert wird, kann dies bis zu einem gewissen Grad behoben werden.

Wir bezeichnen denjenigen, der den Wert der Währung halten möchte, als "Risiko-Abweicher" und den anderen, der bereit ist, das Risiko der Währungsschwankungen zu übernehmen und davon zu profitieren, als "Risiko-Täter", so dass sie einen Betrag (z. B. 1000 CNY) und ein Zeitfenster (z. B. einen Monat) vereinbaren und einen Vertrag erstellen können, der die folgende Logik ausführt:

  • Der Abweicher schickt 1000 CNY Ether an die Geldbörsenadresse des Vertrags und der Abweicher schickt 1000 CNY (oder mehr) Ether an den Vertrag, um den Vertrag abzuschließen.
  • Ein Monat später konnte der Risikovermeidende 1000 Ether, die damals CNY wert waren, aus dem Vertrag zurückziehen, während der Rest der Ether vom Risikobereiter zurückgenommen wurde, unabhängig vom Wechselkurs zwischen Ether und CNY.

Wenn der Wert von Ether steigt, profitiert der Risikobereiter, wenn der Wert von Ether sinkt, verliert der Risikobereiter, aber der Risikobereiter ist immer glücklich. Natürlich können sich der Risikobereiter und der Risikobereiter im Voraus über eine "Versicherungsgebühr" verständigen, die der Risikobereiter zahlen muss, oder über eine Bürgschaft von mehreren Malen von 1000 CNY (je höher die Risikoproportionen sind, desto größer ist das Risiko, das er übernehmen kann).

Es gibt auch ein Problem, das nicht sehr gut gelöst ist, nämlich wie man den Wechselkurs zwischen Ether und dem Geld festlegt. Wie wir bereits erwähnt haben, haben Contract nur Zugriff auf Daten auf der Blockchain, während das Geld Daten in der physischen Welt und nicht in der kryptographischen Welt ist. Wir müssen diese "Daten aus der nicht-kryptographischen Welt" durch einen Mechanismus in die Blockchain bringen.

Wir können einen weiteren Vertrag entwerfen, der eine Logik angibt, die den Wechselkurs zwischen Ether und einer Währung aus der realen Welt in jedem Zeitfenster (z. B. eine Stunde) erhebt:

  • Jeder kann eine Kaution an Contract zahlen und einen Wechselkurs anbieten.
  • Am Ende des Zeitfensters berechnet und veröffentlicht Contract den Durchschnitt des von allen angebotenen Wechselkurses (gemessen an dem Gewicht des Pfandbetrags).
  • Die gesammelten Pfandgelder werden an die 25% derer verteilt, die sich dem Durchschnitt am nächsten befinden (nach dem Gewicht der Pfandgelder).

Für jeden Teilnehmer, der nicht weiß, was der andere angeboten hat, besteht eine größere Chance, einen echten Wechselkurs zu erhalten, während ein unfassbarer Wechselkurs eine hohe Chance hat, die Kaution zu verlieren.

Natürlich gibt es einige Schwachstellen in dieser Regel, z. B. wenn eine Person eine sehr große Anzahl von Sicherheiten hat, kann sie den Durchschnitt zu einem Preis anheben, der höher oder niedriger ist als der tatsächliche Wechselkurs, während sie gleichzeitig eine Belohnung erhält und einige andere Leute, die den richtigen Wechselkurs anbieten, verlieren. Aber in der Tat ist es in der realen Welt genauso, wenn Sie eine sehr große Menge an Geld haben, können Sie den Preis eines Waren gleichermaßen erhöhen oder drücken.

Ein weiterer Schwachpunkt ist, dass "jeder kann den Vertrag abschließen und einen Wechselkurs bereitstellen". Dieser Schritt erfolgt durch die Erstellung von Transaktionen, und alle Transaktionen werden auf der Blockchain geschrieben, so dass der Wechselkurs, den Sie einreichen, für andere sichtbar ist, was weitere Möglichkeiten für bösartige Angreifer schafft.

Wir haben bereits erwähnt, dass Contract die Daten auf der Blockchain lesen kann, aber die Daten auf der Blockchain sind fest, woher soll man eine Zufallszahl bekommen, wenn wir eine Applikation wie Glücksspiel umsetzen wollen?

Eine zufällige Zahlenquelle, die man sich vorstellen kann, ist der Hash des nächsten Blocks, und in den meisten Fällen ist dieser Grad an Zufälligkeit ausreichend. Aber in der Tat kann der Miner diesen Zufallszahlen zu einem gewissen Grad manipulieren. Angenommen, ein Miner ist an einem Glücksspiel beteiligt und der Gewinn aus dem Glücksspiel ist größer als der Gewinn aus dem Ausgraben eines Blocks, dann ist es offensichtlich, dass der Miner wählt, den neuen Block nicht zu veröffentlichen.

Daher müssen wir einen Mechanismus einführen, der ähnlich wie ein Wechselkurs sammeln ist, um eine zufällige Anzahl von Samen zu sammeln, die dann am Ende jedes Zeitfensters verwendet werden, um eine zufällige Anzahl zu berechnen. Aber genau wie ein Sammelkurs, da der Teilnehmer den Kommissions-Wechselkurs durch die Erstellung von Transaktionen realisiert, sind die zufälligen Zahlen, die jeder in einem Zeitfenster einreicht, für alle anderen sichtbar, so dass ein Mensch, der bereits an einem Glücksspiel teilgenommen hat, eine zufällige Anzahl von Samen sorgfältig auswählen kann, damit die von anderen eingereichten Samen und die zufälligen neuen Samen, die er erzeugt hat, genau dem entsprechen, was er erwartet.

Es ist also notwendig, das Sammelfenster in zwei Teile zu teilen, um eine zufällige Anzahl zu erhalten, die niemand vorhersehen und intervenieren kann:

  • Schritt 1: Jeder kann eine Kaution an Contract zahlen und "die Anzahlung eines zufällig ausgewählten Samens" bereitstellen.
  • Phase 2: Teilnehmer der Phase 1 stellen Contract ungespaltete Samen zur Verfügung.
  • Ende der Phase 2: Der Vertrag sortiert alle legitimen Samen, erzeugt eine Reihe von Zufallszahlen und veröffentlicht sie; Rückkehr in Phase 2: Garantie für denjenigen, der die richtigen Samen bereitstellt.

In der ersten Phase kennt man nur die Satzwerte der anderen eingereichten Samen, ohne die tatsächlichen zu kennen, und kann daher nicht sorgfältig einen Samen konstruieren, um das Ergebnis zu beeinflussen; in der zweiten Phase bestätigen alle nur die Samen, die in der ersten Phase eingereicht wurden, können keine neuen eingereicht werden, und sie können auch nicht verhindern, dass andere Samen eingereicht werden.

Wie wir bereits erwähnt haben, bietet Bitcoin Script keine Fähigkeit zum Locken, Zurückgehen, Springen usw. Vielleicht ist Bitcoin aus Gründen der Kontrolle über eine Bitcoin Script-Ausführungszeit, da nach Turing's "Stopp-Theorem" Programme, die in einer vollständigen Turing-Programmiersprache geschrieben wurden, nicht immer nur aus Sicht der statischen Analyse beurteilen können, ob sie nach begrenzten Schritten enden, so dass ein böswilliger Angreifer eine Transaction konstruieren kann, die einen Todeszyklus verursacht, um die normale Arbeit der Miner zu stören.

Ethereum umgeht das Problem wieder mit "ökonomischen Anreizen". Der Contract läuft in Form von Opcode (Betriebscode) auf einer virtuellen Maschine namens EVM (Ethereum Virtual Machine), eine virtuelle Maschine mit einer "Gebühr", die in den EVM-Standards den Verbrauch von Gas für jeden Opcode definiert, der von Ether gekauft wird, je nach benötigtem Speicher und CPU-Zeit.

Wir sprechen dann noch einmal über die Frage des "Konsens-Intervalls", zuvor erwähnt, dass Bitcoin alle 10 Minuten einen neuen Block erhält, d.h. das gesamte Netzwerk erreicht alle 10 Minuten einen "Konsens", so dass normalerweise Bitcoin-Transaktionen einige zehn Minuten warten, bis sie bestätigt werden, wenn die Rechenleistung nicht sehr hoch ist.

Das ist, weil schnelleren Konsens-Intervall zu einem gewissen Grad erhöhen den Vorteil der "zentralisierten Mining-Pool". Der so genannte "Mining-Pool" bedeutet, dass Bitcoin-Miner kommen zusammen, um zu minen, die Miner unbedingte Befehle des Mining-Pools zu befolgen, und schließlich mit dem Mining-Pool zu vereinbaren, die Gewinne zu teilen, offensichtlich Bitcoin als ein dezentralisiertes System, nicht wollen, dass diese zentralisierten Mining-Pools zusätzliche Vorteile haben.

Wenn ein Bergarbeiter A einen neuen Block findet, gibt er diesen Block aus, und wenn andere diese Nachricht erhalten, beginnen sie sofort mit der Arbeit an dem neuen Block. Während andere die Berechnung der Zeit zwischen "A den neuen Block findet" und "Nachricht von A erhält" tatsächlich verschwenden, haben andere Bergarbeiter im zentralen Pool kein Problem, da sie schneller Informationen über den neu entstandenen Block erhalten und sofort mit der Arbeit an dem neuen Block beginnen können.

blockchain-ethereum-without-uncles

Die Ausstrahlung dauert möglicherweise mehrere Sekunden, was für 10 Minuten nicht so wichtig ist, aber die Vorteile eines zentralisierten Miningpools werden immer deutlicher, wenn man die Konsensintervalle verkürzt. Ethereum hat das Problem gelöst, indem es das Konzept des "Uncle Blocks" eingeführt hat, das den Konsens bis zu 15 Sekunden reduziert und die Zahlungsbestätigung im Vergleich zu Bitcoin erheblich verbessert.

In der Bitcoin-Blockchain kann ein Block nur einen Stammblock und nur einen Stammblock haben. In Ethereum kann ein neu erzeugter Block jedoch einen Stammblock und mehrere Stammblöcke haben. Zurück zum Beispiel oben, wenn ein neuer Block in A abgebaut wird, aber andere noch nicht empfangen haben, wenn jemand einen neuen Block aus der Zeit der Ausstrahlung abgebaut hat, aber weil die Ausstrahlung später nicht angenommen wurde, dann ist es möglich, dass dieser Block der "Stammblock" des nächsten Blocks wird.

blockchain-ethereum-uncles

Bild von:https://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time

Probleme, die noch nicht gelöst sind

In diesem Abschnitt werde ich euch einige Probleme vorstellen, die Ethereum bisher nicht gelöst hat.

Zunächst einmal ist die derzeitige Einigung, dass Ethereum wie Bitcoin immer noch durch POW (Workload Proof) garantiert wird, dass nur Knoten, die eine bestimmte Menge an Arbeit erledigt haben, an der Produktion von Blöcken teilnehmen können. Das Problem mit dem Workload Proofing ist, dass es eine Menge Rechenleistung kostet, um die Sicherheit des Netzwerks zu gewährleisten. Obwohl dies auch auf der Grundlage der oben genannten "wirtschaftlichen Anreize" basiert, kann es verbessert werden.

Wenn Ether an sich wertvoll ist, warum nicht auch eine wirtschaftliche Anreizung? Ein POS ist eine Garantie, dass jeder Knoten, der an der Produktion eines Blocks teilnehmen möchte (in traditionellem Sinne Mining), einem System eine Garantie zahlen muss. Wenn der Block tatsächlich zum nächsten Block wird, werden alle eingesetzten Knoten belohnt, sonst wird die Garantie nicht bezahlt.

Das Modell ist in der Tat sehr ähnlich wie bei POW. In POW setzen die Miner ihre eigenen Rechenkräfte ein, und wenn eine Kette länger ist, müssen sie auf diese Kette wechseln, um weiter zu graben. Oh, denn je mehr Teilnehmer an der Kette sind, desto wahrscheinlicher ist es, dass sie die richtige Kette ist.

POSs werden die Bandbreite des gesamten Netzwerks erhöhen. Es wird nicht mehr nötig sein, einen Konsens zu erzielen, indem man eine Menge sinnloser Berechnungen durchführt, und die Anzahl der Prozesse pro Knoten wird sich der Anzahl der Berechnungen nähern, die den Code in den Verträgen ausführen und Daten überprüfen.

Der Grund, warum POSs noch nicht eingesetzt werden, ist natürlich, dass es noch einige Probleme gibt, die nicht gelöst wurden, darunter das Problem der 51%-Attacke wie POW, bei der die 51%-Rechenleistung des gesamten Netzwerks in POWs physisch begrenzt ist.

Ein weiteres Thema ist die "Splittung", ob Bitcoin oder Ethereum, die derzeit alle Transaktionen auf derselben Blockchain bestätigt, was die Rechenleistung eines dezentralen Netzwerks stark einschränkt.

Ethereum möchte daher in Zukunft einen "Fragmentationsmechanismus" einführen, um das gesamte Netzwerk in mehrere Teile zu teilen, um die Transaktionen unabhängig voneinander zu verifizieren. Aber zwischen den Fragmenten werden Daten von anderen Fragmenten durch die Struktur der Zeiger zitiert, und durch asynchrone Aufrufe auf andere Fragmenten wirken, so dass das gesamte Netzwerk für den Benutzer ein Ganzes bleibt, obwohl die Verarbeitungsfähigkeit des gesamten Netzwerks sehr stark expandierbar sein wird.

Vertrag

In diesem Abschnitt werde ich Ihnen einige praktische, funktionierende Contract-Codes zeigen. Contracts können in vielen verschiedenen Parameters geschrieben werden, die schließlich in opcode kompiliert werden und auf EVM ausgeführt werden.

contract Test {
  uint storedData; // State variable

  struct Voter { // Struct
    uint weight;
    bool voted;
    address delegate;
    uint vote;
  }

  event HighestBidIncreased(address bidder, uint amount); // Event

  function func() { // Function
    if (msg.sender.balance < 10 finney) {
        msg.sender.send(10 finney);
    }

    sha256("...");

    address nameServer = 0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2;
    nameServer.delegatecall("isAvailable", "MyName");
    nameServer.call("register", "MyName");
  }
}

Hier sind einige Demonstrationen von Kernsymptomen, in denen Sie in Solidity Statusvariablen deklarieren können.uint storedData;Die Werte dieser Variablen werden für immer auf der Blockchain gespeichert.structEs kann auch definiert werden, welche Funktionen ausgeführt werden, wenn die Transaktion empfangen wird, und der Transaktionsinitiator kann wählen, welche Funktionen ausgeführt werden, so dass ein Contract mehrere Funktionen bereitstellen kann, in denen logische Urteile, Schaltungen und Änderungen der Werte durchgeführt werden können.

Die Sprache bietet einige praktische Funktionen, wie zum Beispiel die gängigen kryptologischen Algorithmen.sha256Einheitliche Abrechnung10 finneyUnd dann schreibt man die Adresse der Brieftasche.0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2Ich bin nicht sicher, ob das stimmt.msgEine globale Variable, aus der Informationen über die Transaktion abgerufen werden können, wie z. B. Initiator, Betrag usw. Contract kann den Code anderer Contracts in zwei Arten aufrufen.delegatecallDas gleiche gilt für die Ausführung von Code aus einem anderen Contract im aktuellen Kontext, als ob man eine Bibliotheksfunktion einführte.callDie Logik ist, eine neue Transaktion auszulösen, um einen anderen Vertrag auszulösen.

Wie kann ein Vertrag dann Daten aus der Blockchain lesen und schreiben? Diese komplexe Aufgabe wird für "Statusvariablen" abstrahiert. Die StoredData ist eine Statusvariable. Die Änderungen an den Statusvariablen während der Contract-Ausführung werden nicht in der Blockchain gespeichert, da der Contract eine Bestimmung ausführt.

Als nächstes zeige ich Ihnen einen wirklich nutzbaren Contract Jack, um einen eigenen Token auf dem Ethereum-Netzwerk zu veröffentlichen:

contract Coin {
    // The keyword "public" makes those variables
    // readable from outside.
    address public minter;
    mapping (address => uint) public balances;

    // Events allow light clients to react on
    // changes efficiently.
    event Sent(address from, address to, uint amount);

    // This is the constructor whose code is
    // run only when the contract is created.
    function Coin() {
        minter = msg.sender;
    }
    function mint(address receiver, uint amount) {
        if (msg.sender != minter) return;
        balances[receiver] += amount;
    }
    function send(address receiver, uint amount) {
        if (balances[msg.sender] < amount) return;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        Sent(msg.sender, receiver, amount);
    }
}

Der Code stammt vonhttp://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html#subcurrency-example(MIT)

Der Vertrag, genannt Coin, erklärt zwei Zustandsvariablen, die sich in einem Zustand verändern.minterDer Schöpfer des Tokens, der verwendet wird, um dieses zu speichern, arbeitet an der Konstruktion der Funktion (((function Coin()Die Variablen werden von den Initiatoren der ersten Transaktion zugewiesen, die den Vertrag erstellt hat; eine Map der Wallet-Adresse zu den Zahlen wird auch erklärt.balancesDas bedeutet, dass jeder, der den Token besitzt, einen entsprechenden Kontostand hat.

mintDie Funktion entscheidet, ob der Transaktionsinitiator der Schöpfer des Tokens ist. Wenn dies der Fall ist, wird eine bestimmte Anzahl von Token nach den Funktionsparametern an die angegebene Adresse addiert.sendDiese Funktion kann von allen aufgerufen werden und zieht einen bestimmten Betrag von der Adresse des Transaktionsinitiators ab (wenn genügend Balance vorhanden ist) und fügt ihn an die Zieladresse hinzu, was einer Überweisungsfunktion entspricht.

Wir haben auch eine Erklärung unter dem NamenSentDie Veröffentlichung von Ereignissen, die keine praktische Rolle spielen, sondern nur die wichtigsten Ereignisse beim Debugging drucken, wird in Zukunft auch die Realisierung von Leichtbau-Clients erleichtern (Leichtbau-Clients akzeptieren nur Ereignisse und führen keine Contract-Ausführung aus).

blockchain-ethereum-mix

Ethereum bietet eine IDE namens Mix, um diesen Code zu deaktivieren. Auf der rechten Seite des Mix können Sie einige Blöcke und Konten erstellen, um Ihren Vertrag zu testen, und sehen, wie sich der Wert jeder Zustandsvariable während der Ausführung ändert.

Wenn wir das geschrieben haben, können wir diesen Vertrag mit dem Ethereum-Wallet ins Netz veröffentlichen:

blockchain-ethereum-create-contract

Nach der Veröffentlichung können Sie sich an diesem Vertrag orientieren, indem Sie sich an die Details der Verträge wenden:

blockchain-ethereum-wallet-contract

Auf der linken Seite sehen Sie die Werte der beiden Zustandsvariablen.minterIch bin ein junger Mann und ich bin ein junger Mann, und ich bin ein junger Mann.balancesDa es sich um eine Karte handelt, können Sie eine Adresse eingeben, um den Saldo zu fragen. Auf der rechten Seite können Sie einen neuen Deal für diesen Vertrag starten.sendOdermintDie Funktion, in der Sie die Parameter für die Übermittlung an den Vertrag ausfüllen können. Hier müssen wir nicht den Betrag für die Transaktion festlegen, da wir hier die Transaktion mit dem Ziel durchführen, eine Nachricht zu übermitteln, nicht Ether.

Als nächstes möchte ich Ihnen einen interessanten Contract vorstellen, der einen "Ponzi-Schwindel" durchführt, bei dem Sie 1 Ether für diesen Contract zahlen, um in das Spiel einzutreten, und dann, wenn drei Leute eintreten, dann 3 Ether an den ersten Teilnehmer in der Reihenfolge:

contract Pyramid {
    struct Participant {
        address etherAddress;
    }

    Participant[] public participants;

    uint public payoutIdx = 0;

    // events make it easier to interface with the contract
    event NewParticipant(uint indexed idx);

    // fallback function - simple transactions trigger this
    function() {
        enter();
    }

    function enter() {
        if (msg.value < 1 ether) {
            msg.sender.send(msg.value);
            return;
        }

        if (msg.value > 1 ether) {
            msg.sender.send(msg.value - 1 ether);
        }

        uint idx = participants.length;
        participants.length += 1;
        participants[idx].etherAddress = msg.sender;

        NewParticipant(idx);

        // for every three new participants we can
        // pay out to an earlier participant
        if (idx != 0 && idx % 3 == 0) {
            // payout is triple, minus 10 % fee
            uint amount = 3 ether;
            participants[payoutIdx].etherAddress.send(amount);
            payoutIdx += 1;
        }
    }

    function getNumberOfParticipants() constant returns (uint n) {
        return participants.length;
    }
}

Der Code ist vereinfacht vonhttps://ethereumpyramid.com/contract.html

Der Code ist sehr einfach, der Vertrag erklärt eineparticipantsDie Arrays werden verwendet, um die Wallet-Adressen aller Teilnehmer in der Reihenfolge zu speichern, oder um einepayoutIdxEs wird verwendet, um festzuhalten, wie viele Teilnehmer 3 Ether bereits zurückbekommen haben.enterDie wichtigsten Funktionen, die mit diesem Vertrag realisiert werden, sind zunächst einige Parameterprüfungen, um sicherzustellen, dass jeder Teilnehmer 1 Ether bezahlt, und dann die neuen Teilnehmer in die ETH-Karte einzahlen.participantsAm Ende des Arrays, schließlich, wenn die Anzahl der aktuellen Teilnehmer gerade ein Vielfaches von 3 ist, wird 3 Ether an den Teilnehmer gesendet.payoutIdxSie werden sich in den nächsten Tagen treffen.payoutIdxSie verweisen auf den nächsten Teilnehmer.

Verweise

HashTree:

Bitcoin:

Haltungsproblem:

Ethereum:

Ethereum Netzwerk:

Das nächste von Ethereum:

Vertrag:

Vertragliche IDE:


Mehr

Kleine TräumeIch bin völlig verwirrt, ich kann nur so ziemlich verstehen, ich weiß zu wenig.

ZuanxuanDer Chef ist mit BTC und ETH auf der Suche.

MoxIch weiß es nicht.