Wie das Bitcoin-Protokoll tatsächlich funktioniert

Originalautor: Michael Nielsen
  • Übersetzung
(Eine wunderbare Erklärung der Funktionsprinzipien des Bitcoin-Netzwerks von Michael Nielsen. Viel Text, ein paar Bilder. Über die ungeschickte Übersetzung - in PM werde ich sie korrigieren, sobald ich es herausfinde.)

Viele tausend Artikel wurden geschrieben, um Bitcoin zu erklären - online, Peer-to-Peer-Währung (p2p) . Die meisten dieser Artikel beschreiben oberflächlich das Wesen des kryptografischen Protokolls und lassen viele Details aus. Sogar jene Artikel, die tiefer graben, ignorieren oft wichtige Punkte. Mein Ziel in dieser Publikation ist es, die Grundideen des Bitcoin-Protokolls in einer übersichtlichen, leicht zugänglichen Form zu erläutern. Wir beginnen mit einfachen Prinzipien, gehen dann zu einem umfassenden theoretischen Verständnis der Funktionsweise des Protokolls über und gehen dann tiefer in die Rohdaten einer Bitcoin-Transaktion ein.

Es ist schwierig genug, die Funktionsweise des Protokolls im Detail zu verstehen. Stattdessen ist es viel einfacher, Bitcoin für selbstverständlich zu halten und darüber zu spekulieren, wie man mit Bitcoin reich wird, ob Bitcoin eine Blase ist, ob Bitcoin eines Tages die Steuerpflicht zerstören kann und so weiter. Das alles macht Spaß, schränkt aber Ihr Verständnis erheblich ein. Das Verstehen der Details des Bitcoin-Protokolls eröffnet unzugängliche Perspektiven. Dies ist insbesondere die Grundlage für das Verständnis der integrierten Skriptsprache (Skriptprogrammiersprache) Bitcoin, die es ermöglicht, mithilfe von Bitcoin neue Arten von Finanzinstrumenten wie beispielsweise intelligente Verträge zu erstellen ( 1 2)) Neue Finanzinstrumente können wiederum genutzt werden, um neue Märkte zu schaffen und neue Formen des kollektiven menschlichen Verhaltens zu erlangen.

Ich werde Konzepte wie Verträge in den folgenden Veröffentlichungen beschreiben. In diesem Beitrag wird das Innere des Bitcoin-Protokolls erläutert. Um mich zu verstehen, müssen Sie mit der Idee eines öffentlichen Kryptoschlüssels und mit eng verwandten Ideen zu digitalen Signaturen vertraut sein . Ich gehe auch davon aus, dass Sie mit der kryptografischen Hash-Funktion vertraut sind(Durch Ändern der Eingabedaten um nur ein Bit wird die Hash-Summe drastisch geändert, ca. pro.). Nichts davon ist sehr schwierig. Die wichtigsten Ideen können aus Studiengängen in Mathematik an der Universität oder aus Kursen in Computerinformatik gewonnen werden. Die Ideen sind wunderschön. Wenn Sie mit ihnen nicht vertraut sind, empfehle ich, einige Stunden zu verbringen, um sich mit ihnen vertraut zu machen.

Es mag überraschen, dass die Kryptographie die Basis von Bitcoin ist. Ist Bitcoin keine Währung, keine Möglichkeit, geheime Nachrichten zu versenden? Tatsächlich betreffen die Probleme, die Bitcoin lösen sollte, hauptsächlich die Sicherheit von Transaktionen - um sicherzugehen, dass die Leute sich nicht gegenseitig stehlen oder sich als solche ausgeben können und so weiter. In der Welt der Atome erreichen wir diese Sicherheit mit Geräten wie Schlössern, Safes, Signaturen und Bankgewölben. In der Welt der Bits erreichen wir diese Art von Sicherheit durch Kryptographie. Und deshalb ist Bitcoin in der Seele ein kryptografisches Protokoll.

Die Strategie, die ich in meiner Publikation verwenden werde, beinhaltet die schrittweise Erstellung von Bitcoin. Ich beginne damit, eine sehr einfache digitale Währung zu erklären, die auf fast offensichtlichen Ideen basiert. Wir werden diese Währung als Infocoin bezeichnen, um sie von Bitcoin zu unterscheiden. Natürlich wird unsere erste Version von Infocoin viele Mängel aufweisen, und daher werden wir mehrere Iterationen von Infocoin durchlaufen. Mit jeder neuen Iteration werden wir nur ein oder zwei einfache neue Ideen einführen. Nach mehreren derartigen Iterationen kommen wir zum vollständigen Bitcoin-Protokoll. Wir werden Bitcoin neu entdecken!

Diese Strategie funktioniert langsamer als wenn ich die Funktionsweise des gesamten Bitcoin-Protokolls in einem Zug erklärt hätte. Selbst wenn Sie die Funktionsweise von Bitcoin anhand einer solchen Erklärung verstehen, ist es schwierig zu verstehen, warum Bitcoin so konzipiert ist. Der Vorteil einer langsamen, iterativen Erklärung besteht darin, dass wir jedes Bitcoin-Element besser verstehen.

Schließlich muss ich erwähnen, dass ich neu bei Bitcoin bin. Ich beobachte es seit 2011 (und Kryptowährungen seit Ende der neunziger Jahre), habe mich aber erst zu Beginn dieses Jahres ernsthaft mit den Einzelheiten des Bitcoin-Protokolls befasst. Daher bin ich dankbar für die Korrektur von Fehlern meinerseits. Außerdem habe ich in mein Material eine Reihe von „Problemen für den Autor“ aufgenommen und mir Notizen zu Problemen gemacht, die während des Schreibens aufgetreten sind. Sie finden sie vielleicht interessant, aber Sie können sie auch komplett überspringen, ohne den Haupttext zu verlieren.

Erste Schritte: Absichtserklärung unterschrieben


Wie können wir also eine digitale Währung gestalten?

Eine digitale Währung erscheint auf den ersten Blick unmöglich. Stellen Sie sich eine Person vor - nennen wir sie Alice - sie hat digitales Geld, das sie ausgeben möchte. Wenn Alice eine Bit-Zeichenfolge als Geld verwenden kann, wie können wir sie davon abhalten, dieselbe Bit-Zeichenfolge immer wieder zu verwenden, um so eine unbegrenzte Menge Geld zu erzeugen? Oder, wenn wir dieses Problem irgendwie lösen können, wie können wir die Fälschung einer solchen Kette von Bits verhindern und sie verwenden, um von Alice zu stehlen?

Dies sind nur zwei der vielen Herausforderungen, die gemeistert werden müssen, um Informationen als Geld zu nutzen.

Lassen Sie uns in der ersten Version von Infocoin einen Weg finden, wie Alice eine Reihe von Bits in einer (sehr primitiven und unvollständigen) Form von Geld verwenden kann, aber so, dass sie zumindest einen gewissen Schutz vor Fälschungen hat. Angenommen, Alice möchte einer anderen Person einen Namen geben, nennen wir sie Bob, eine Infomünze. Dazu schreibt Alice die Nachricht "Ich, Alice, gib Bob eine Infomünze . " Dann signiert sie die Nachricht in digitalem Format mit dem privaten Verschlüsselungsschlüssel (Kryptoschlüssel) und kündigt die signierte Bitfolge der ganzen Welt an.

(Übrigens verwende ich "Infocoin" mit einem Großbuchstaben, um das Protokoll und das allgemeine Konzept zu bezeichnen, und "Infocoin" mit einem Großbuchstaben, um eine bestimmte Banknote zu bezeichnen. Eine solche Praxis ist in der Bitcoin-Welt üblich, wenn auch nicht universell.)

Solch ein Prototyp einer digitalen Währung wird Sie nicht wirklich beeindrucken! Aber er hat einige Vorteile. Jeder auf der Welt (einschließlich Bob) kann mithilfe des öffentlichen Schlüssels von Alice überprüfen, ob Alice tatsächlich die Person war, die die Nachricht "Ich, Alice, gib Bob eine Infomünze" signiert hat . Niemand sonst könnte diese Zeichenkette erschaffen, was bedeutet, dass Alice sich nicht umdrehen und sagen kann: "Nein, ich wollte Bob keineswegs eine Infomünze geben.". Somit legt das Protokoll fest, dass Alice wirklich vorhat, Bob eine Infomünze zu geben. Die gleiche Tatsache - niemand könnte eine solche signierte Nachricht verfassen - bietet Alice einen begrenzten Schutz vor Fälschungen. Nachdem Alice ihre Nachricht veröffentlicht hat, besteht natürlich die Möglichkeit, dass sie von anderen kopiert wird. In gewissem Sinne ist also eine Fälschung möglich. Dies ist jedoch nicht von Grund auf möglich. Diese beiden Merkmale - Alices Vorsatzbestimmung und begrenzter Fälschungsschutz - sind wirklich bemerkenswerte Merkmale dieses Protokolls.

Ich habe (vollständig) nicht gesagt, dass es tatsächlich digitales Geld gibt. Ich erkläre: Dies ist nur die Nachricht selbst, dh eine Folge von Bits, oder vielmehr eine digital signierte Nachricht: "Ich, Alice, gib Bob eine Infomünze.". In Zukunft werden die Protokolle dahingehend ähnlich sein, dass alle unsere Formen des digitalen Geldes einfach aussagekräftigere Nachrichten sein werden.

Verwenden von Seriennummern zur Identifizierung von Münzen


Das Problem mit der ersten Version von Infocoin ist, dass Alice weiterhin immer wieder dieselbe signierte Nachricht an Bob senden kann. Angenommen, Bob erhält zehn Exemplare der signierten Nachricht "Ich, Alice, gib Bob eine Infomünze . " Bedeutet das, dass Alice Bob zehn verschiedene Infocoins geschickt hat? Wurde ihre Nachricht versehentlich dupliziert? Vielleicht wollte sie Bob dazu bringen, so zu tun, als gäbe sie ihm zehn verschiedene Ifnokoins, während die Botschaft der Welt nur beweist, dass sie vorhat, eine Infomünze zu überreichen.

Wir möchten einen Weg finden, um Infocoins einzigartig zu machen. Sie benötigen ein Etikett oder eine Seriennummer. Alice wird eine Nachricht signieren „Ich, Alice, gibt Bob ein infokoin, mit der Seriennummer 8740348“ . Dann kann Alice die Nachricht später signieren„Ich, Alice, gebe Bob eine Infomünze mit der Seriennummer 8770431“, und Bob (und alle anderen) werden wissen, dass eine andere Infomünze gesendet wurde.

Damit dieses Schema funktioniert, benötigen wir eine zuverlässige Quelle für Seriennummern für Infocoins. Eine Möglichkeit, eine solche Quelle zu erstellen, besteht darin, eine Bank zu eröffnen. Diese Bank wird Seriennummern für Infocoins bereitstellen, nachverfolgen, wer welche Infocoins besitzt, und überprüfen, ob Transaktionen tatsächlich legitim sind. Nehmen

wir genauer an, Alice kommt zur Bank und sagt: "Ich möchte eine Infomünze von meinem Konto abheben.". Die Bank reduziert ihren Kontostand um einen Infocoin und weist ihm eine neue, nie verwendete Seriennummer zu, z. B. 1234567. Wenn Alice Bob ihren Infocoin geben möchte, signiert sie die Nachricht „Ich, Alice, gib Bob einen Infocoin mit der Seriennummer 1234567 " . Aber Bob nimmt nicht nur Infocoin. Stattdessen nimmt er Kontakt mit der Bank auf und überprüft, dass: (a) die Infomünze mit dieser Seriennummer Alice gehört; und (b) Alice hat diese Information noch nicht ausgegeben. Wenn die Bedingungen korrekt sind, teilt Bob der Bank mit, dass er diese Infomünze akzeptieren möchte, und die Bank aktualisiert seine Aufzeichnungen, um anzuzeigen, dass die Infomünze mit dieser Seriennummer derzeit für Bob verfügbar ist und nicht mehr Alice gehört.

Erstelle gemeinsam eine Bank


Diese letzte Entscheidung sieht vielversprechend aus. Es stellt sich jedoch heraus, dass wir etwas viel Ehrgeizigeres tun können. Wir können die Bank vollständig vom Protokoll ausschließen. Dies ändert die Art der Währung erheblich. Dies bedeutet, dass es keine einzige Organisation mehr gibt, die für die Währung verantwortlich ist. Und wenn Sie sich die enorme Macht in den Händen der Zentralbank vorstellen - die Kontrolle über die Geldmenge - dann ist dies eine ziemlich ernste Veränderung.

Die Idee ist, dass jeder (gemeinsam) eine Bank ist. Insbesondere gehen wir davon aus, dass alle Infocoin-Nutzer vollständig aufzeichnen, wem die Infocoins gehören. Sie können sich dies als offenes Hauptbuch bei allen Infocoin-Transaktionen vorstellen. Wir werden dieses Buch "Blockchain" (Blockchain) nennen, so nennt Bitcoin die öffentliche Aufzeichnung aller Transaktionen.

Nehmen wir nun an, Alice möchte den Infocoin an Bob weitergeben. Sie signiert die Nachricht „Ich, Alice, gib Bob eine Infomünze mit der Seriennummer 1234567“ und sendet die signierte Nachricht an Bob. Bob kann anhand seiner Kopie der Blockchain überprüfen, ob die Infomünze wirklich Alice gehört. Wenn dies überprüft wird, sendet er Alice gleichzeitig eine Nachricht und eine Nachricht über die Annahme der Transaktion über das Netzwerk, und jeder aktualisiert seine Kopien der Blockkette.

Wir haben immer noch das Problem „Woher kommt die Seriennummer?“, Aber es stellt sich als recht einfach heraus, das Problem zu lösen, und deshalb werde ich es auf einen späteren Zeitpunkt verschieben, wenn wir über Bitcoin sprechen. Ein komplexeres Problem ist, dass dieses Protokoll es Alice ermöglicht, durch doppelte Ausgaben ihrer Infocoins zu schummeln. Sie sendet die signierte Nachricht „Ich, Alice, gib Bob eine Infomünze mit der Seriennummer 1234567“ an Bob und die Nachricht „Ich, Alice, gib Charlie eine Infomünze mit der [gleichen] Seriennummer 1234567“.Charlie. Sowohl Bob als auch Charlie verwenden ihre Kopie der Blockchain, um zu überprüfen, ob die Infocoin Alice gehört. Vorausgesetzt, sie führen diese Prüfung gleichzeitig durch (bevor sie die Gelegenheit hatten, voneinander zu hören), werden beide feststellen, dass die Kette der Blöcke den Münzbesitz von Alice anzeigt. Sie akzeptieren also beide die Übertragung und senden gemeinsam Informationen über die Annahme der Transaktion. Jetzt haben wir ein Problem. Wie sollten andere Leute ihre Blockchain aktualisieren? Es ist möglicherweise nicht so einfach, einen Weg zu finden, um ein passendes gemeinsames Transaktionsbuch zu erhalten. Und selbst wenn jeder zustimmen kann, seine Blockchain fortlaufend zu aktualisieren, gibt es ein weiteres Problem, bei dem Bob oder Charlie betrogen werden könnten.

Auf den ersten Blick scheint es für Alice schwierig zu sein, die Ausgaben erneut zu tätigen. Wenn Alice die Nachricht zuerst an Bob sendet, kann Bob die Nachricht überprüfen und alle anderen im Netzwerk (einschließlich Charlie) anweisen, ihre Blockketten zu aktualisieren. Sobald dies geschah, konnte sich Charlie nicht mehr von Alice täuschen lassen. Daher kann Alice höchstwahrscheinlich nur in kurzer Zeit wiederholte Ausgaben tätigen. Es ist jedoch offensichtlich, dass ein solcher Zeitraum unerwünscht ist. Schlimmer noch, es gibt Methoden, mit denen Alice diesen Zeitraum verlängern kann. Sie kann beispielsweise die Netzwerkverkehrsanalyse verwenden, um die Zeit zu ermitteln, in der Bob und Charlie viele Kommunikationsverzögerungen haben. Oder vielleicht kann sie etwas tun, um ihre Verbindung bewusst zu stören. Wenn sie die Verbindung auch nur ein wenig verlangsamen kann,

Wie können wir das Problem der doppelten Kosten lösen? Die offensichtliche Lösung ist, dass wenn Alice Bob eine Infomünze schickt, Bob nicht versuchen sollte, den Deal alleine zu verifizieren. Höchstwahrscheinlich sollte er eine mögliche Transaktion an alle Benutzer des Infocoin-Netzwerks senden und sie bitten, ihm dabei zu helfen, festzustellen, ob die Transaktion legitim ist. Wenn alle entscheiden, dass der Deal in Ordnung ist, kann Bob diesen Infocoin akzeptieren und jeder aktualisiert seine Blockketten. Diese Art von Protokoll kann helfen, das Problem der doppelten Kosten zu vermeiden. Wenn Alice versucht, ihre Infobox mit Bob und Charlie zu verbringen, bemerken andere Personen im Netzwerk, und Netzwerkbenutzer werden Bob und Charlie mitteilen, dass es ein Problem mit der Transaktion gibt, und die Transaktion sollte es nicht sein umgesetzt.

Nehmen wir genauer an, Alice möchte Bob eine Infomünze geben. Nach wie vor signiert sie die Nachricht „Ich, Alice, gib Bob eine Infomünze mit der Seriennummer 1234567“.und gibt Bob eine signierte Nachricht. Nach wie vor führt Bob mit seiner Kopie der Blockchain einen Gesundheitscheck durch, um zu überprüfen, ob die Münze wirklich Alice gehört. Aber in diesem Moment wird das Protokoll geändert. Bob geht nicht einfach weiter und akzeptiert den Deal. Stattdessen sendet es Alice eine Nachricht an das gesamte Netzwerk. Andere Netzwerkmitglieder prüfen, ob Alice diese Information hat. Wenn ja, senden sie die Nachricht "Ja, Alice besitzt die Infocoin 1234567, jetzt kann sie an Bob übertragen werden." Sobald genügend Leute diese Nachricht online verbreitet haben, aktualisiert jeder seine Blockchain, um zu zeigen, dass der Infocoin 1234567 nun Bob gehört und der Deal abgeschlossen ist.

Dieses Protokoll enthält derzeit viele ungenaue Elemente. Was bedeutet es zum Beispiel zu sagen, "genug Leute sollten diese Nachricht senden"? Was bedeutet "genug"? Dies kann nicht jeder im Netzwerk bedeuten, da wir nicht a priori wissen, wer sich im Infocoin-Netzwerk befindet. Aus dem gleichen Grund kann dies nicht bedeuten, dass einige Benutzer im Netzwerk einen festen Anteil haben. Wir werden jetzt nicht versuchen, dies herauszufinden. Stattdessen werde ich im nächsten Abschnitt auf schwerwiegende Probleme bei dem von uns beschriebenen Ansatz hinweisen. Indem wir diesem Problem Aufmerksamkeit schenken, werden wir einen angenehmen Nebeneffekt haben, die obigen Ideen verständlicher zu machen.

Arbeitsnachweis


Angenommen, Alice möchte es erneut in dem gerade beschriebenen Protokoll ausgeben. Sie kann dies tun, indem sie die Kontrolle über das Infocoin-Netzwerk übernimmt. Angenommen, es wird ein automatisiertes System verwendet, um eine große Anzahl individueller Identitäten (Benutzer), beispielsweise eine Milliarde, im Infocoin-Netzwerk zu konfigurieren. Nach wie vor versucht sie, Bob und Charlie zweimal dieselbe Infomünze auszuzahlen. Wenn Bob und Charlie das Netzwerk auffordern, die Transaktionen zu überprüfen, werden die zusätzlichen Benutzer von Alice das Netzwerk überfordern, indem sie Bob mitteilen, dass sie seine Transaktion bestätigt haben, und Charlie, dass sie seine Transaktion bestätigt haben, indem sie eine oder beide gleichzeitig getäuscht haben und eine solche Transaktion angenommen haben.

Es gibt eine Möglichkeit, dieses Problem mit einer Idee zu vermeiden, die als Proof-of-Work bezeichnet wird. Die Idee ist paradox und beinhaltet eine Kombination von zwei anderen Ideen: (1) (künstlich) die Bestätigung von Transaktionen in Form von Computerberechnungen für Netzwerkbenutzer kostspielig zu machen; und (2) belohnen Sie sie für die Unterstützung bei der Überprüfung von Transaktionen. Die Belohnung wird verwendet, damit Benutzer im Netzwerk versuchen, Transaktionen zu überprüfen, obwohl für diesen Vorgang Rechenleistung aufgewendet werden muss. Die Überprüfung von Transaktionen ist kostengünstig und trägt dazu bei, die Abhängigkeit von der Anzahl der von jemandem kontrollierten Identitäten (Netzwerkbenutzer) zu vermeiden. Somit kann nur die gesamte Rechenleistung den Test unter Druck setzen. Wie wir sehen werden, können wir dies mit einem ausgeklügelten Design tun

Hier ist die Essenz des Nachweises der korrekten Funktion. Aber um wirklich zu verstehen, müssen wir uns die Details ansehen.

Angenommen, Alice sendet die Nachricht „Ich, Alice, gib Bob eine Infomünze mit der Seriennummer 1234567“ .

Wenn diese Nachricht abgehört wird, fügt sie jeder Person in die Warteschlange ausstehender Transaktionen ein: Sie wird abgehört, wurde jedoch noch nicht vom Netzwerk genehmigt. Ein anderer Netzwerkbenutzer namens David hat möglicherweise die folgende Warteschlange ausstehender Transaktionen:

I, Tom, gib Sue einen Info-Code mit der Seriennummer 1201174.

I, Sydney, gib Cynthia einen Info-Code mit der Seriennummer 1295618.

I, Alice, gib Bob einen Infocoin mit der Seriennummer 1234567.


David überprüft seine Kopie der Blockchain und stellt fest, dass jeder Trade gut ist. Er möchte helfen, indem er Nachrichten über die Gültigkeit von Transaktionen für das gesamte Netzwerk sendet.

Zuvor muss David jedoch als Teil des Verifizierungsprotokolls ein schwieriges Rechenproblem lösen - den Nachweis der korrekten Funktionsweise. Ohne dieses Problem zu lösen, akzeptiert der Rest des Netzwerks die Überprüfung von Transaktionen nicht.

Welches Problem muss David lösen? Um dies zu erklären, sei h eine feste Hash-Funktion, die jedem im Netzwerk bekannt ist - sie ist in das Protokoll integriert. Bitcoin verwendet die bekannte Hash-Funktion SHA-256Jede kryptografisch sichere Hash-Funktion ist jedoch ausreichend. Lassen Sie uns Davids Warteschlange mit unvollendeten Deals mit dem Label L versehen, damit wir uns bequemer darauf beziehen können. Angenommen, David addiert die Zahl x (die sogenannte einmalige Zahl) und berechnet die Hash-Summe aus der Kombination. Wenn wir zum Beispiel L = "Hallo Welt!" (Dies ist offensichtlich keine Liste von Operationen, sondern nur eine Linie zur Veranschaulichung) und ein einmaliges x = 0 verwenden, dann (wir erhalten die Ausgabe im hexadezimalen Format)

h ("Hallo Welt! 0") ") = 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64

Die Aufgabe, die David lösen muss, ist der Nachweis des korrekten Betriebs- ist es, eine Primzahl x zu finden, so dass, wenn wir x zu L addieren und das Ergebnis des Hash der Kombination mit einer Reihe von Nullen beginnt. Eine Aufgabe kann mehr oder weniger schwierig gemacht werden, indem die Anzahl der zur Lösung dieses Problems erforderlichen Nullen geändert wird. Ein relativ einfacher Beweis für die Richtigkeit der Aufgabe kann zu Beginn des Hashs nur drei oder vier Nullen erfordern, während ein schwierigerer Beweis für die Richtigkeit der Aufgabe eine viel größere Anzahl von Nullen erfordern kann, beispielsweise 15 aufeinanderfolgende Nullen. In jedem Fall ist der obige Versuch, eine geeignete einmalige Zahl mit x = 0 zu finden, fehlgeschlagen, da das Ergebnis nicht von vorne anfängt. Versuchen wir mal x = 1,. Funktioniert auch nicht:

h ("Hello, world! 1") = e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8

Wir können weiterhin nach verschiedenen Werten für x = 2,3,4 suchen. Mit x = 4250 erhalten wir schließlich:

h ("Hello, world! 4250") = 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9

Diese Zahl gibt uns eine Folge von vier Nullen am Anfang der Hash-Ausgabe . Dies wird ausreichen, um das einfache Problem des "Arbeitsnachweises" zu lösen, aber nicht ausreichen, um das schwierigere Problem des "Arbeitsnachweises" zu lösen.

Es gibt eine Sache, die es schwierig macht, diese Aufgabe zu lösen. Das Ergebnis der kryptografischen Hash-Funktion verhält sich wie Zufallszahlen: Ändern Sie mindestens ein Bit in den Quelldaten, und das Ergebnis wird sich so stark unterscheiden, dass es nicht vorherzusagen ist. Wenn wir also einen Hash-Wert mit 10 Nullen am Anfang haben wollen, muss David im Durchschnitt sortieren,Bildverschiedene x-Werte, bevor er eine passende Primzahl findet. Dies ist eine ziemlich komplizierte Aufgabe, die viel Rechenleistung erfordert.

Es ist möglich, diese Aufgabe durch mehr oder weniger Nullen am Ende der Hash-Funktion mehr oder weniger schwierig zu lösen. Tatsächlich erhält das Bitcoin-Protokoll eine ziemlich gute Kontrolle über die Schwierigkeit der Aufgabe, indem eine geringfügige Variation des oben beschriebenen Rätsels zum Nachweis der Arbeit verwendet wird. Anstatt Nullen zu erfordern, muss der Hash des Transaktionsblock-Headers als Beweis für die korrekte Operation kleiner oder gleich der als Ziel bekannten Zahl sein . Dieses Ziel wird automatisch so angepasst, dass der Bitcoin-Block durchschnittlich etwa zehn Minuten für die Autorisierung benötigt.

(In der Praxis ist die Wahrscheinlichkeit groß, dass die Genehmigung eines Blocks viel Zeit in Anspruch nimmt. Manchmal dauert die Genehmigung eines neuen Blocks nur ein oder zwei Minuten, in anderen Fällen sogar 20 Minuten oder länger. Dies ändert sich direkt im Bitcoin-Protokoll, also in der Zeit Für die Überprüfung beträgt die maximale Zeit etwa zehn Minuten. Anstatt ein Problem zu lösen, müssen möglicherweise mehrere Probleme gelöst werden. Mit einem sorgfältig entworfenen Software-Design können wir die Zeitabweichung für die Überprüfung der Blöcke erheblich verringern Weihnachtsbaum.)

Nehmen wir an, David hatte Glück und fand die richtige Zahl x. Hurra! (Er erhält eine Belohnung für das Finden der Nummer, wie unten beschrieben wird). Es übersetzt den von ihm behaupteten Operationsblock zusammen mit dem Wert von x in das Netzwerk. Andere Mitglieder des Infocoin-Netzwerks können bestätigen, dass x eine Lösung ist, um die Richtigkeit der Aufgabe zu beweisen. Und dann müssen sie ihre Blockketten aktualisieren, um den neuen Block von Operationen in die Kette aufzunehmen.

Damit die Idee des Nachweises des ordnungsgemäßen Betriebs Erfolg haben kann, benötigen Netzwerkbenutzer einen Anreiz, mit dem sie Transaktionen überprüfen können. Ohne einen solchen Anreiz haben sie keinen Grund, wertvolle Rechenleistung auszugeben, um die Operationen anderer zu überprüfen. Und wenn Netzwerkbenutzer nicht bereit sind, diese Leistung zu verbrauchen, funktioniert das gesamte System nicht. Die Lösung für dieses Problem besteht darin, Personen zu belohnen, die bei der Überprüfung von Transaktionen behilflich sind. Angenommen, wir belohnen diejenigen, die einen Transaktionsblock erfolgreich überprüft haben, mit einer bestimmten Anzahl von Infocoins. Die Belohnung für Infocoin ist so groß, dass sie einen Anreiz erhalten, an dem Test teilzunehmen.

Im Bitcoin-Protokoll wird dieser Bestätigungsvorgang als Mining bezeichnet. Für jeden überprüften Transaktionsblock erhält ein erfolgreicher Miner eine Belohnung in Bitcoins. Ursprünglich war diese Auszeichnung auf 50 Bitcoins festgelegt. Bei 210.000 überprüften Blöcken (ungefähr alle vier Jahre) halbiert sich die Belohnung. Das ist nur einmal passiert. Bisher wurden 25 Bitcoins als Belohnung für den Abbau des Blocks vergeben. Diese Senkung der halben Rate wird alle vier Jahre bis zum Jahr 2140 fortgesetzt. In diesem Moment sinkt die Minenprämie unter 10 ^ -8 Bitcoins pro Block. 10 ^ -8 Bitcoins sind in der Tat die kleinste Einheit von Bitcoin und werden als Satoshi bezeichnet . Daher wird das Gesamtangebot an Bitcoins im Jahr 2140 nicht mehr zunehmen. Dies wird jedoch nicht den Anreiz beseitigen, die Transaktionen weiter zu überprüfen. Bitcoin ermöglicht es auch, einen bestimmten Betrag in der Transaktion als Transaktionsgebühr zuzuweisen, die an den Bergarbeiter geht, der bei der Annahme von Transaktionen hilft. In den Anfängen von Bitcoin war die Transaktionsgebühr Null, aber mit der Beliebtheit von Bitcoin sind die Transaktionsgebühren allmählich gestiegen und sind derzeit eine zusätzliche Ergänzung zur Belohnung von 25 Bitcoins für den Mining-Block.

Sie können sich Proof of Work als einen Wettbewerb vorstellen, der Transaktionen schneller akzeptiert. Jeder Einstieg in den Wettbewerb kostet etwas Rechenleistung. Die Chance, dass ein Bergmann den Wettbewerb gewinnt, ist (grob gesagt und mit einigen Vorbehalten) gleich der gesamten Verarbeitungsleistung, die er kontrolliert. Wenn ein Miner beispielsweise ein Prozent der gesamten Verarbeitungsleistung kontrolliert, die zur Überprüfung von Transaktionen in Bitcoin verwendet wird, hat er eine Gewinnchance von etwa einem Prozent. Vorausgesetzt, dass die Konkurrenz viel Rechenleistung benötigt, hat ein unehrlicher Bergmann höchstwahrscheinlich eine relativ geringe Chance, den Überprüfungsprozess zu verzerren, es sei denn, er verwendet eine große Menge an Rechenressourcen.

Dies inspiriert zwar, aber die unehrliche Seite hat nur eine relativ geringe Chance, die Blockkette zu ruinieren, aber dies reicht nicht aus, um Vertrauen in die Währung zu schaffen. Insbesondere haben wir das Problem der Ausgabenreduzierung noch nicht vollständig gelöst.

Ich werde bald doppelte Kosten analysieren. Zuvor möchte ich ein wichtiges Detail in der Infocoin-Beschreibung ausfüllen. Ideal wäre es, die Reihenfolge in dem Infocoin-Netzwerk zu koordinieren, in dem die Transaktionen stattfanden. Wenn wir keinen solchen Befehl haben, kann es jederzeit unklar werden, wem welche Infocoins gehören. Um dies zu lösen, müssen neue Blöcke zusätzlich zur Liste der Transaktionen im Block immer einen Zeiger auf den vorherigen in der Kette genehmigten Block enthalten. (Der Zeiger ist eigentlich nur ein Hash des vorherigen Blocks). Wir haben also eine Blockkette (Blockkette) - es ist nur eine direkte Kette von Transaktionsblöcken nacheinander, wobei jeder Block einen Zeiger auf den unmittelbar vorhergehenden Block enthält:

Bild

Manchmal erscheint ein Stecker in einer Kette von Blöcken. Dies kann beispielsweise der Fall sein, wenn zwei Bergleute versehentlich gleichzeitig den Betriebsblock überprüft haben und beide ihren neu genehmigten Block an das Netzwerk senden und einige Personen ihre Blockkette in die eine und andere in die andere Richtung aktualisieren:

Bild

Dies scheint ein Problem zu verursachen was wir zu vermeiden versuchen - es ist nicht mehr klar, in welcher Reihenfolge die Transaktionen stattfanden, und dies stellt nicht klar, wem welche Infocoins gehören. Glücklicherweise gibt es eine einfache Idee, mit der man alle Stecker entfernen kann. Die Regel lautet: Wenn plötzlich ein Stecker auftaucht, verfolgen die Leute im Netzwerk beide Zweige. Zu jedem Zeitpunkt arbeiten die Bergleute jedoch nur daran, die Verzweigung fortzusetzen, in der eine Kopie der Blockkette länger ist.

Angenommen, wir haben eine Gabelung, in der einige Bergleute zuerst Block A und einige Bergleute Block B erhalten. Die Bergleute, die zuerst Block A erhalten, werden weiterhin in diesem Zweig arbeiten, während andere Bergleute Zweig B folgen dass Bergleute, die in Zweig B arbeiten, einen Block erfolgreich abgebaut haben:

Bild

Nachdem jeder die Nachricht erhalten hat, dass dies geschehen ist, werden die Bergleute, die an Zweig A arbeiten, feststellen, dass Zweig B jetzt länger ist, und werden zu diesem Zweig wechseln. Das ist alles! Die Arbeit an Zweig A wird sofort beendet, und alle arbeiten an derselben linearen Kette, und Block A kann ignoriert werden. Unbestätigte Transaktionen in Block A warten natürlich noch auf Entscheidungen in den Warteschlangen der Bergarbeiter in Zweigstelle B, und anschließend werden alle Transaktionen bestätigt. Darüber hinaus könnte sich herausstellen, dass Bergleute, die an Zweig A arbeiten, diesen früher erweitern werden. In diesem Fall stoppt die Arbeit an Zweig B schnell und wir haben wieder eine lineare Kette.

Unabhängig vom Ergebnis stellt dieser Prozess sicher, dass die Blockkette eine zeitlich ausgerichtete Reihenfolge von Transaktionsblöcken aufweist. In Bitcoin wird akzeptiert, dass eine Transaktion nicht als bestätigt betrachtet wird, bevor: (1) sie Teil eines Blocks in einer langen Verzweigung ist und (2) mindestens 5 Blöcke in der längsten Verzweigung darauf folgten. In diesem Fall sagen wir, dass die Transaktion "6 Bestätigungen" hat. Dies gibt dem Netzwerk Zeit, um zu einer konsistenten Blockreihenfolge zu gelangen. Wir werden diese Strategie auch für Infocoin verwenden.

Wir haben die Rationalisierung geklärt und überlegen, was passiert, wenn ein unehrlicher Benutzer versucht, zweimal Geld auszugeben. Angenommen, Alice versucht zweimal, einen Infocoin mit Bob und Charlie auszugeben. Ein möglicher Ansatz für sie besteht darin, den Block, der beide Transaktionen umfasst, unabhängig zu prüfen. Angenommen, sie hat ein Prozent der gesamten Rechenleistung, kann sie Glück haben und bestätigt die Blockade durch Lösen des mathematischen Proof-of-Work-Problems. Leider wird für Alice die Rückzahlung von anderen Personen im Ifnokoin-Netzwerk sofort bemerkt und abgelehnt, obwohl das Problem mit dem Nachweis der korrekten Funktionsweise gelöst wurde. Wir brauchen uns also keine Sorgen zu machen.

Ein schwerwiegenderes Problem ergibt sich, wenn sie zwei Transaktionen, bei denen sie dieselbe Information mit Bob bzw. Charlie ausführt, getrennt überträgt. Es kann beispielsweise eine Transaktion an eine Gruppe von Bergarbeitern und eine andere Transaktion an eine andere übertragen, in der Hoffnung, auf diese Weise die Genehmigung von Transaktionen zu erhalten. Glücklicherweise wird in diesem Fall, wie wir gesehen haben, das Netzwerk nur eine dieser Transaktionen bestätigen, aber nicht beide. So kann zum Beispiel Bobs Deal letztendlich bestätigt werden. In diesem Fall kann Bob ruhig sein. In der Zwischenzeit wird Charlie sehen, dass sein Deal nicht bestätigt wurde und er wird Alices Angebot ablehnen. Es gibt also kein Problem. Da Alice weiß, dass dies passieren wird, gibt es keinen besonderen Grund, dies zu versuchen.

Es gibt eine weitere wichtige Option für doppelte Ausgaben, wenn Alice = Bob, d. H. Alice versucht, Charlies Münze zu bezahlen, die sie auch für sich "ausgibt" (das heißt, sie gibt sich zurück). Es sieht so aus, als wäre es leicht zu bemerken und damit umzugehen, aber gleichzeitig ist es natürlich einfach, mehrere Benutzer einzurichten, die mit derselben Person oder Organisation im Netzwerk verbunden sind. Daher muss diese Möglichkeit berücksichtigt werden. In diesem Fall besteht Alices Strategie darin, zu warten, bis Charlie das Infocoin akzeptiert. Dies geschieht, nachdem die Transaktion in der längsten Kette sechsmal bestätigt wurde. Sie wird versuchen, die Kette vor der Transaktion mit Charlie aufzuteilen, indem sie einen Block hinzufügt, der eine Zahlungstransaktion für sich selbst enthält:

Bild

Leider fällt es Alice sehr schwer, den längeren Zweig einzuholen. Andere Bergleute wollen ihr nicht helfen, da sie an einem längeren Ast arbeiten werden. Und bis Alice den Beweis für den korrekten Betrieb lösen kann, zumindest so schnell wie alle anderen im Netzwerk zusammen - grob gesagt bedeutet dies, dass sie mehr als fünfzig Prozent der Rechenleistung kontrolliert -, wird sie einfach immer weiter zurückbleiben dahinter. Natürlich könnte sie Glück haben. Wir können uns zum Beispiel ein Szenario vorstellen, in dem Alice ein Prozent der Rechenleistung kontrolliert, aber das Glück passiert und sie sechs zusätzliche Blöcke hintereinander findet, bevor der Rest des Netzwerks einen neuen Block findet. In diesem Fall könnte sie weiterkommen und die Kontrolle über die Blockkette erlangen. Dieses spezielle Ereignis wird jedoch mit einer Wahrscheinlichkeit von 1 / (100 ^ 6) = 10 ^ -12 eintreten. Eine allgemeinere Analyse in diese Richtung zeigt, dass Alices Wahrscheinlichkeit, mit der längeren Verzweigung der Blöcke mitzuhalten, unendlich gering ist, wenn sie nicht in der Lage ist, den Beweis für den korrekten Betrieb bei einer Geschwindigkeit zu lösen, die allen anderen Bergleuten gemeinsam nahekommt.

Natürlich ist dies keine gründliche Sicherheitsanalyse, die zeigt, dass Alice keine wiederholten Ausgaben tätigen kann. Dies ist nur ein inoffizielles Argument der Glaubwürdigkeit. Der Originaltext, der Bitcoin darstellt, enthält in der Tat keine gründliche Analyse der Sicherheit, sondern nur informelle Argumente zu den von mir dargelegten Punkten. Die Community, die an Sicherheit interessiert ist, analysiert nach wie vor Bitcoin und versucht, mögliche Sicherheitslücken zu erkennen. Sie können einige dieser Studien hier sehen , und ich werde einige Probleme in „Probleme für den Autor“ unten erwähnen (siehe im Originaltest). Im Moment kann ich mit Recht sagen, dass die Jury immer noch nicht weiß, wie sicher Bitcoin ist.

Ideen für den Nachweis des ordnungsgemäßen Betriebs und des Abbaus werfen viele Fragen auf. Welche Belohnung wird benötigt, um Leute von mir zu überzeugen? Wie wirken sich Änderungen der Infocoin-Emissionen auf die Wirtschaft von Ifnocoin aus? Wird sich der Infocoin-Abbau letztendlich auf wenige oder viele konzentrieren? Wenn es nur wenige Bergleute gibt, gefährdet dies die Systemsicherheit? Vermutlich werden sich die Transaktionskosten im Laufe der Zeit ausgleichen - führt dies nicht zu einer unerwünschten Reibungsquelle und macht kleine Transaktionen nicht weniger wünschenswert? Dies sind alles große Fragen, die den Rahmen dieses Artikels sprengen. Ich kann in zukünftigen Veröffentlichungen auf diese Themen (im Zusammenhang mit Bitcoin) zurückkommen. Derzeit konzentrieren wir uns auf das Verständnis der Funktionsweise des Bitcoin-Protokolls.

Bitcoin


Gehen wir von Infocoin weg und beschreiben das aktuelle Bitcoin-Protokoll. Es gibt hier einige neue Ideen, aber mit einer Ausnahme (siehe unten), dass es sich im Grunde genommen um offensichtliche Modifikationen von Infocoin handelt.

Um Bitcoin in der Praxis nutzen zu können, installieren wir zunächst das Wallet-Programm auf Ihrem Computer. Um Ihnen eine Vorstellung davon zu geben, was dies bedeutet, finden Sie hier einen Screenshot aus einem Brieftaschenprogramm namens Multbit. Sie können den Kontostand der Bitcoins auf der linken Seite sehen - 0,06555555 Bitcoins oder ungefähr 70 US-Dollar zum Wechselkurs des Tages, an dem ich diesen Screenshot gemacht habe - und auf der rechten Seite sind zwei kürzlich getätigte Transaktionen, die 0,06555555 Bitcoins ergeben:

Bild

Angenommen, Sie sind ein Händler, der einen Online-Shop erstellt und sich dafür entschieden hat, die Bezahlung Ihrer Waren mit Bitcoin zuzulassen. Als erstes generieren Sie eine Bitcoin-Adresse im Programm. Als Antwort generiert er ein öffentliches / privates Schlüsselpaar und dann einen öffentlichen Schlüssel-Hash, um seine Bitcoin-Adresse zu bilden:

Bild

Dann senden Sie die Bitcoin-Adresse an die Person, die bei Ihnen einkaufen möchte. Sie können dies per E-Mail tun oder die Adresse sogar öffentlich auf einer Webseite platzieren. Dies ist sicher, da die Adresse nur ein Hash-Wert Ihres öffentlichen Schlüssels ist, der auf der ganzen Welt sicher bekannt sein kann. (Ich werde später auf die Frage zurückkommen, warum die Bitcoin-Adresse ein Hash und nicht nur ein öffentlicher Schlüssel ist.)

Die Person, die Sie bezahlen wird, generiert die Transaktion. Schauen wir uns die Daten einer echten Transaktion an, die 0,31900000 Bitcoins überträgt. Das Folgende zeigt fast Rohdaten. Sie werden auf drei Arten geändert: (1) Die Daten wurden von seriell nach parallel konvertiert (deserialisiert). (2) Zeilennummern, die zur Vereinfachung der Verwendung hinzugefügt wurden; und (3) Ich habe die verschiedenen Hashes und öffentlichen Schlüssel gekürzt, indem ich einfach die ersten sechs Hexadezimalziffern von jeder angezeigte, obwohl sie tatsächlich viel länger sind. Hier sind die Daten:

  1. {"Hash": "7c4025 ...",
  2. "Ver": 1,
  3. "Vin_sz": 1,
  4. "Vout_sz": 1,
  5. Lock_time: 0,
  6. "Größe": 224,
  7. "In": [
  8. {"Prev_out":
  9. {"Hash": "2007ae ...",
  10. "N": 0},
  11. "ScriptSig": "304502 ... 042b2d ..."}],
  12. "Out": [
  13. {"Wert": "0.31900000",
  14. "ScriptPubKey": "OP_DUP OP_HASH160 a7db6f OP_EQUALVERIFY OP_CHECKSIG"}]}


Gehen wir Zeile für Zeile.

Zeile 1 enthält den Hash der restlichen Transaktion, 7c4025 ..., ausgedrückt in Hexadezimalzahl. Dies wird als Transaktionskennung verwendet.

Zeile 2 sagt uns, dass dies ein Deal in Version 1 des Bitcoin-Protokolls ist.

In den Zeilen 3 und 4 wird angegeben, dass die Transaktion jeweils einen Eingang und einen Ausgang hat. Ich werde im Folgenden über Transaktionen mit einer großen Anzahl von Ein- und Ausgängen sprechen und warum dies nützlich ist.

Zeile 5 enthält den Wert von lock_time, mit dem gesteuert werden kann, wann die Transaktion abgeschlossen ist. Für die meisten Transaktionen wird Bitcoin today lock_time auf 0 gesetzt, was bedeutet, dass die Transaktion sofort abgeschlossen wird.

Zeile 6 gibt die Größe (in Bytes) der Transaktion an. Bitte beachten Sie, dass dies keine Überweisung ist! Darüber weiter.

Die Zeilen 7 bis 11 definieren die einleitenden Bitcoins für die Operation. Insbesondere geben die Zeilen 8 bis 10 an, dass die Eingabe von der Ausgabe der vorherigen Transaktion mit dem entsprechenden Hash-Betrag übernommen werden soll, der im hexadezimalen Format als 2007ae ausgedrückt wird ..... n = 0 gibt an, dass dies die erste Schlussfolgerung von sein wird diese Transaktion; Wir werden in naher Zukunft sehen, wie verschiedene Schlussfolgerungen (und Eingaben) in einer Transaktion funktionieren. Machen Sie sich also jetzt keine allzu großen Sorgen. Zeile 11 enthält die Unterschrift der Person, die das Geld überwiesen hat - 304502 ..., dann ein Leerzeichen und dann den entsprechenden öffentlichen Schlüssel -04b2d .... Wieder im hexadezimalen Format.

Das einzige, was bei der Eingabe beachtet werden muss, ist das Fehlen einer genauen Angabe, wie viele Bitcoins aus der vorherigen Transaktion für diese Transaktion ausgegeben werden sollen. Tatsächlich wurden alle Bitcoins von n = 0 der Ausgabe der vorherigen Transaktion ausgegeben. Wenn also zum Beispiel die Ausgabe von n = 0 der vorherigen Transaktion 2 Bitcoins war, werden 2 Bitcoins in dieser Transaktion ausgegeben. Dies scheint eine unangenehme Einschränkung zu sein - es ist dasselbe wie der Versuch, Brot mit einem 20-Dollar-Schein zu kaufen, und es ist nicht in der Lage, es in kleine Banknoten zu zerlegen. Die Lösung muss natürlich einen Mechanismus haben, um Veränderungen herbeizuführen. Dies kann mithilfe von Transaktionen mit mehreren Ein- und Ausgängen erfolgen, auf die im nächsten Abschnitt eingegangen wird.

Die Zeilen 12 bis 14 bestimmen die Auszahlung von Bitcoins aus der Transaktion. Insbesondere gibt Zeile 13 den Wert der Ausgabe an: 0,319 Bitcoins. Zeile 14 ist ein ziemlich komplizierter Vorgang. Es ist wichtig zu beachten, dass der Wert von a7db6f ... die Bitcoin-Adresse des vorgesehenen Empfängers ist (hexadezimal geschrieben). Tatsächlich ist Zeile 14 nichts anderes als eine Anzeige der Bitcoin-Skriptsprache. Ich werde diese Programmiersprache in diesem Hinweis nicht im Detail beschreiben. Wir sollten verstehen, dass a7db6f ... nur eine Bitcoin-Adresse ist.

Übrigens, jetzt können Sie sehen, wie Bitcoin nach einem Problem ruft, das ich im letzten Kapitel „verstaut“ habe: Woher kommen die Bitcoin-Seriennummern? Tatsächlich spielt die Hash-Summe der Transaktionen die Rolle der Seriennummer. In der obigen Transaktion erhält der Empfänger beispielsweise 0,319 Bitcoins, die von der ersten Ausgabe der vorherigen Operation mit der Hash-Summe 2007ae stammen (Zeile 9). Wenn Sie sich die Blockkette für diese Transaktion ansehen, werden Sie feststellen, dass die Ausgabe von einer noch früheren Transaktion stammt. Usw.

Bei der Verwendung von Transaktions-Hash-Beträgen anstelle von Seriennummern gibt es zwei clevere Dinge. Erstens gibt es in Bitcoin wirklich keine separaten, permanenten (virtuellen) „Münzen“. Es gibt einfach eine lange Reihe von Transaktionen in einer Kette von Blöcken. Es ist eine kluge Idee, zu verstehen, dass Sie keine Münzen benötigen und einfach ein Geschäftsbuch abschließen können. Wenn wir auf diese Weise arbeiten, brauchen wir zweitens keine zentrale Behörde, die Seriennummern vergibt. Stattdessen können Seriennummern nur durch Hashing der Transaktion automatisch generiert werden.

Tatsächlich können Sie die Kette von Transaktionen auch in der Vergangenheit verfolgen. Letztendlich sollte dieser Prozess abgeschlossen sein. Dies kann auf zwei Arten geschehen. Die erste Gelegenheit ergibt sich, wenn Sie zur allerersten Bitcoin-Transaktion kommen, die im sogenannten Genesis-Block enthalten ist . Dies ist eine spezielle Transaktion, die keine Eingaben hat, sondern nur einen Abschluss in 50 Bitcoins. Mit anderen Worten, diese Transaktion legt die anfängliche Geldmenge fest. Auf den ersten Block wird von Clients (Programmen) des Bitcoin-Netzwerks separat zugegriffen. Und ich werde jetzt nicht auf Details eingehen, obwohl dies dem oben beschriebenen Geschäft sehr ähnlich ist. Sie können die serialisierten zu parallelen Quelldaten hier sehen .

Die zweite Möglichkeit besteht darin, dass Sie, wenn Sie die Kette von Transaktionen in der Zeit zurückverfolgen, am Ende zu der sogenannten Basistransaktion (Coinbase-Transaktion) gelangen. Mit Ausnahme des Startblocks beginnt jeder Operationsblock in einer Blockkette mit einer speziellen zugrunde liegenden Transaktion. Dieser Deal ist eine Auszeichnung für den Bergmann, der diesen Betriebsblock überprüft. Es wird ein ähnliches, aber nicht identisches Transaktionsformat verwendet. Ich werde nicht näher auf das Format eingehen, und wenn Sie ein Beispiel sehen möchten, siehe hier . Sie können hier ein wenig mehr über grundlegende Angebote lesen .. In mancher Hinsicht war ich nicht richtig, nämlich dass es in Zeile 11 speziell digital signiert ist. Offensichtlich muss der Zahler die gesamte Transaktion signieren (mit Ausnahme des Hashs der Transaktion, die später generiert wird). Derzeit ist dies nicht der Fall - einige Teile der Transaktion werden weggelassen. Dies macht einige Teile der Transaktion änderbar , d. H. Sie können später geändert werden. Diese Plastizität ist jedoch nicht in dem von Absendern und Empfängern zu zahlenden Betrag enthalten, der später nicht mehr geändert werden kann. Ich muss zugeben, ich habe nicht in die Details gepasst. Soweit ich weiß, wird diese Plastizität in der Bitcoin-Entwicklergemeinschaft diskutiert, und es werden Anstrengungen unternommen, um diese Plastizität zu verringern oder zu beseitigen.

Operationen mit mehreren Ein- und Ausgängen


Im letzten Abschnitt habe ich beschrieben, wie ein Umgang mit einem Eingang und einem Ausgang funktioniert. In der Praxis ist es oft sehr praktisch, eine Bitcoin-Transaktion mit mehreren Eingaben oder mehreren Ausgaben zu erstellen. Ich werde später darüber sprechen, warum dies nützlich sein könnte. Aber zuerst werfen wir einen Blick auf die tatsächlichen Transaktionsdaten :

  1. . {"Hash": "993830 ...",
  2. "Ver": 1,
  3. Vin_sz: 3,
  4. "Vout_sz": 2,
  5. Lock_time: 0,
  6. "Größe": 552,
  7. "In": [
  8. {"Prev_out": {
  9. "Hash": "3beabc ...",
  10. "N": 0},
  11. "ScriptSig": "304402 ... 04c7d2 ..."},
  12. {"Prev_out": {
  13. "Hash": "fdae9b ...",
  14. "N": 0},
  15. "ScriptSig": "304502 ... 026e15 ..."},
  16. {"Prev_out": {
  17. "Hash": "20c86b ...",
  18. "N": 1},
  19. "ScriptSig": "304402 ... 038a52 ..."}],
  20. "Out": [
  21. {"Wert": "0,01068000",
  22. "ScriptPubKey": "OP_DUP OP_HASH160 e8c306 ... OP_EQUALVERIFY OP_CHECKSIG"},
  23. {"Wert": "4.00000000",
  24. "ScriptPubKey": "OP_DUP OP_HASH160 d644e3 ... OP_EQUALVERIFY OP_CHECKSIG"}]}


Gehen wir Zeile für Zeile. Dies ist einer Transaktion mit einer Eingabe und einer Ausgabe sehr ähnlich, daher mache ich das ziemlich schnell.

Zeile 1 enthält den Hash der restlichen Transaktion. Dies wird als Transaktionskennung verwendet.

Zeile 2 sagt uns, dass dies eine Transaktion von Version 1 des Bitcoin-Protokolls ist.

In den Zeilen 3 und 4 wird angegeben, dass die Transaktion drei Eingänge und zwei Ausgänge hat.

Zeile 5 enthält lock_time. Wie bei einem Eingang und einem Ausgang ist der Wert 0, was bedeutet, dass die Transaktion sofort abgeschlossen wird.

Zeile 6 gibt die Größe der Transaktion in Bytes an.

Die Zeilen 7 bis 19 definieren eine Liste von Einträgen für die Transaktion. Jedes entspricht einer Schlussfolgerung aus einer vorherigen Bitcoin-Transaktion.

Der erste Eintrag wird in den Zeilen 8 bis 11 definiert.

Insbesondere geben die Zeilen 8 bis 10 an, dass die Eingabe von der n = 0-Ausgabe der Transaktion mit einem Hash-Wert von 3beabc übernommen werden soll. Zeile 11 enthält eine Signatur, dann ein Leerzeichen und dann den öffentlichen Schlüssel des Bitcoin-Absenders.

Die Zeilen 12 bis 15 definieren die zweite Eingabe in einem Format ähnlich den Zeilen 8 bis 11. Die Zeilen 16 bis 19 definieren die dritte Eingabe.

Die Zeilen 20 bis 24 definieren eine Liste mit zwei Schlussfolgerungen aus der Transaktion.
Die erste Ausgabe wird in den Zeilen 21 und 22 definiert. Zeile 21 gibt den Ausgabewert von 0,01068000 Bitcoins an. Wie zuvor ist Zeile 22 ein Ausdruck der Bitcoin-Skriptsprache. Hier ist vor allem die Zeile e8c30622 zu beachten ... die Bitcoin-Adresse des vorgesehenen Geldempfängers.

Die zweite Schlussfolgerung wird in den Zeilen 23 und 24 in ähnlicher Form wie die erste Schlussfolgerung definiert.

Eine offensichtliche Kuriosität in dieser Beschreibung ist, dass, obwohl jeder Ausgang eine Angabe des Betrags in Bitcoin enthält, dieser nicht in den Eingängen enthalten ist. Selbstverständlich können die Werte der entsprechenden Einträge unter Bezugnahme auf die entsprechenden Schlussfolgerungen in früheren Transaktionen gefunden werden. Bei der Standard-Bitcoin-Operation muss die Summe aller Eingaben in einer Transaktion mindestens so groß sein wie die Summe aller Schlussfolgerungen. (Die einzigen Ausnahmen von diesem Prinzip sind die anfänglichen Block- und Grundtransaktionen (Coinbase), die beide ein neues Angebot im Bitcoin-Netzwerk bilden.) Wenn mehr Inputs als Outputs vorhanden sind, wird der Überschuss als Transaktionsgebühr verwendet. Dies wird dem Bergarbeiter für einen erfolgreich verifizierten Block ausgezahlt, in dem die aktuelle Transaktion enthalten ist.

Das sind Transaktionen mit zahlreichen Ein- und Ausgängen! Sie sind eine relativ einfache Transaktionsvariante mit einer Eingabe und einer Ausgabe.

Eine gute Verwendung solcher Transaktionen ist die Idee der Übergabe. Nehmen wir zum Beispiel an, ich möchte Ihnen 0,15 Bitcoins senden. Ich kann dies tun, indem ich Ihnen Geld von einer früheren Transaktion schicke, bei der ich 0,2 Bitcoins erhalten habe. Natürlich möchte ich Ihnen nicht alle 0,2-Bitcoins senden. Die Lösung sendet Ihnen 0,15 Bitcoins und 0,05 Bitcoins an Ihre Bitcoin-Adresse, die mir gehört. Diese 0,05 Bitcoins ergeben sich. Dies unterscheidet sich etwas vom Vorgang des Empfangs von Änderungen im Geschäft, da Änderungen in diesem Fall eine Gebühr für Sie sind. Aber die allgemeine Idee ist ähnlich.

Fazit


Dies schließt die grundlegende Beschreibung der Grundideen ab, die in der Bitcoin-Technologie liegen. Natürlich habe ich viele Details ausgelassen - wir haben keine technische Beschreibung gemacht. Aber ich habe die Grundideen für die häufigsten Fälle der Verwendung von Bitcoin beschrieben.

Obwohl die Regeln von Bitcoin einfach und leicht zu verstehen sind, bedeutet dies nicht, dass es einfach ist, alle Konsequenzen dieser Regeln zu verstehen. Zu Bitcoin gibt es noch viel mehr zu sagen, und ich werde einige dieser Probleme in Zukunft untersuchen.

Abschließend möchte ich einige kontroverse Punkte ansprechen.

Wie anonym ist Bitcoin? Viele Leute behaupten, dass Bitcoin anonym verwendet werden kann. Diese Aussage hat zur Bildung von Märkten wie der Seidenstraße geführt) und verschiedene auf illegale Waren spezialisierte Nachfolger. In der Zwischenzeit ist die Behauptung, Bitcoin sei anonym, ein Mythos. Die Blockkette ist öffentlich und offen, was bedeutet, dass jeder die Möglichkeit hat, jede Bitcoin-Transaktion jemals zu sehen. Obwohl Bitcoin-Adressen nicht unmittelbar mit realen Personen in Verbindung gebracht werden, haben Informatiker hervorragende Arbeit geleistet, um herauszufinden, wie sie anonymisieren können"Anonyme" soziale Netzwerke. Eine Blockkette ist ein ideales Ziel für diese Methoden. Ich werde sehr überrascht sein, wenn die große Mehrheit der Bitcoin-Benutzer in naher Zukunft nicht mit einem relativ hohen Maß an Vertrauen und Leichtigkeit identifiziert wird. Dieses Vertrauen wird nicht hoch genug sein, um ein Schuldbekenntnis zu erreichen, aber hoch genug, um wahrscheinliche Ziele zu identifizieren. Darüber hinaus erfolgt die Identifizierung nachträglich, was bedeutet, dass diejenigen, die 2011 auf dem Seidenstraßenmarkt Drogen gekauft haben, sich auch 2020 anhand der Blockkette identifizieren können. Diese De-Anonymisierungsmethoden sind Wissenschaftlern und vermutlich der National Security Agency (USA) bekannt. Es würde mich nicht wundern, wenn die NSA und andere Institutionen bereits viele Nutzer erkannt hätten. Paradoxerweise dass Bitcoin oft als anonym angepriesen wird. Es ist nicht so. Im Gegenteil, Bitcoin ist vielleicht das offenste und transparenteste Finanzinstrument, das die Welt noch nicht gesehen hat.

Können Sie mit Bitcoin reich werden? Na vielleicht. Tim O'Reilly hat einmal gesagt: „Geld ist wie Benzin in einem Auto - man muss aufpassen, sonst landet man am Straßenrand. aber ein gut gelebtes Leben ist keine Besichtigung der Tankstelle! »Das große Interesse an Bitcoin kommt von Menschen, deren Lebenssituation darauf abzielt, eine wirklich große Tankstelle zu finden. Ich muss zugeben, ich finde es rätselhaft. Meiner Meinung nach ist es viel interessanter und angenehmer, sich Bitcoin und andere Kryptowährungen als den Weg zu neuen Formen des kollektiven Verhaltens vorzustellen. Es ist intellektuell aufregend, bietet wunderbare Möglichkeiten für Kreativität, ist sozial wertvoll und Sie können auch Geld in eine Bank stecken. Aber wenn Geld in der Bank Ihre Hauptaufgabe ist, dann glaube ich, dass andere Strategien viel größere Erfolgschancen haben.

Ich habe die Details ausgelassen: Obwohl in diesem Beitrag die wichtigsten Ideen hinter Bitcoin beschrieben wurden, gibt es viele Details, die ich nicht erwähnt habe. Hier ist zum Beispiel das Größenerhaltungsmerkmal, das vom Protokoll verwendet wird und auf einem Datenstrukturierungsmodell basiert, das als Merkle-Baum bekannt ist . Dies ist ein Detail, aber ein großes Detail, und es lohnt sich, mehr darüber zu wissen, ob Datenstrukturen Ihre Sache sind. Sie können die Original- Bitcoin- Seiten herunterladen und durchsuchen. Zweitens habe ich bereits ein wenig über das Bitcoin-Netzwerk gesprochen - Fragen, wie das Netzwerk mit Denial-of-Service-Angriffen umgeht, wie die Knoten dem Netzwerk beitreten und dieses verlassen, usw. Dies ist ein faszinierendes Thema, aber es erfordert auch viele Details, so dass ich das weggelassen habe. Mehr dazu erfahren Sie unter den oben genannten Links.

Skriptsprache Bitcoin: In diesem Artikel habe ich Bitcoin als eine Form von digitalem Online-Geld erklärt. Dies ist jedoch nur ein kleiner Teil einer viel größeren und interessanteren Geschichte. Wie wir bereits gesehen haben, ist jede Bitcoin-Transaktion einem Skript in einer Programmiersprache Bitcoin zugeordnet. Die Szenarien , die wir in diesem Material gesehen haben , ist durch einen einfachen Vorgang beschrieben, wie „Alice gab Bob 10 Bitcoins“ . Die Skriptsprache kann aber auch verwendet werden, um komplexere Transaktionen auszudrücken. Mit anderen Worten, Bitcoin ist programmierbares Geld.. In späteren Veröffentlichungen werde ich das Skriptsystem erläutern und erläutern, wie Sie Bitcoin-Skripte als Plattform zum Experimentieren mit allen Arten von erstaunlichen Finanzinstrumenten verwenden können.

Übersetzung: Andrey Dubetskiy, Igor Korsakov

Jetzt auch beliebt: