This page has been robot translated, sorry for typos if any. Original content here.

Bitcoin was ist das?

Bitcoin. Как это работает

Ich habe erst vor kurzem von Bitcoin erfahren, aber er hat mich sofort mit seiner Idee von P2P bestochen. Je tiefer ich in ihrem Wiki vergraben bin, desto mehr wird diese Idee durchdrungen. Seine Umsetzung ist aus technischer Sicht schön und elegant.

Die Suche nach Bitcoin bietet eine Reihe von Themen. Laut den Kommentaren fällt auf, dass viele Menschen, insbesondere diejenigen, die Bitcoin nicht direkt kennen, viele Fragen zu den Prinzipien ihrer Arbeit haben. Es gibt auch viele Vermutungen, oft falsche. Um die Situation irgendwie zu klären, wurde beschlossen, diesen Artikel zu schreiben.

Echtes Geld?

Der erste Platz in der Liste der wichtigsten Missverständnisse über Bitcoin wird von der Vorstellung genommen, dass Bitcoin nur ein weiteres "Stück Papier" ist, sei es elektronisch, das nur "echtes" Geld darstellt, solche Schuldscheine. Hier entstehen die meisten anderen Missverständnisse: Da es sich um Papier handelt, sind sie nichts wert. Sie können nach Belieben gedruckt oder zerstört werden. sie können gefälscht sein; Sie können sie kopieren

Ich wiederhole - das alles ist nichts anderes als Wahnvorstellungen. Die Idee hinter Bitcoin basierte auf dem Wunsch, nicht nur „Papierstücke“ zu schaffen, die echtes Geld wie Gold darstellen, sondern ein Analogon von Gold. Nehmen Sie diese Eigenschaften von Gold, dank denen es ein ideales Geld ist, und erstellen Sie auf dieser Basis E-Währungen.

Schwierigkeit beim Bergbau

Gold kann nicht kopiert werden - es kann nur abgebaut werden. Dies ist jedoch sowohl zeitlich als auch hinsichtlich der Ressourcen ein sehr kostspieliger Prozess. Teilweise deshalb wird Gold so hoch bewertet. Um es klarer zu machen, betrachten wir ein Beispiel.

Angenommen, eine Person hat den ganzen Tag fleißig Gold abgebaut und schließlich 1 kg produziert. Für ihn ist der Wert des Goldes ein Tag harter Arbeit. Nach einem harten Arbeitstag beschloss er, eine Pause einzulegen und ins Kino zu gehen. Zum Glück gab der Kassierer Tickets gegen Gold. Warum Weil der Kassierer Gold mag, aber nicht gerne den ganzen Tag mit einer Spitzhacke arbeitet. Deshalb ist er bereit, einen Service anzubieten - ein Ticket zu verschenken - gegen 1 kg Gold. Tatsächlich tauscht er seinen Dienst für einen Tag harter Arbeit aus.

Stellen Sie sich jetzt eine andere Situation vor. Den Kopierer erfunden, der mit Gold arbeitet. Jede Person kann aus einem 1 kg Gold 10 kg pro Minute herstellen. In dieser Situation tauscht der Kassierer die Tickets nicht mehr gegen Gold ein, da er es selbst problemlos so viel drucken kann, wie er möchte. Gold hat keinen Wert mehr und kann nicht mehr als Geld verwendet werden.

In Bitcoin erfordert der Abbau von Münzen auch Ressourcen und Zeit. In diesem Fall handelt es sich jedoch nicht um Personalressourcen, sondern um Computerressourcen.

Bedingt begrenzte Ressource

Je länger Gold gefördert wird, desto schwieriger wird es (es wird teurer), es abzubauen. Dies stellt sicher, dass die Inflation unter Kontrolle ist.

In Bitcoin wird ein ähnliches Verhalten erreicht, indem eine Funktion der Gesamtmünzenrate eingeführt wird. Diese Funktion ist umgekehrt proportional, dh die Geschwindigkeit nimmt mit der Zeit ab und geht gegen Null. Wenn wir das Integral dieser Funktion über die Zeit nehmen, erhalten wir einen Exponenten. So etwas wie:

Bitcoin. Как это работает

Hier sehen Sie, dass die Gesamtzahl der Münzen 21.000.000 beträgt. Details der Arbeit von Bitcoin werden weiter besprochen. In der Zwischenzeit müssen Sie zwei Dinge wissen: Münzen erscheinen ungefähr alle 10 Minuten in Chargen, die Anzahl der Münzen in einer Packung beträgt 50 und alle 4 Jahre halbiert sich.

Wesentlichkeit

Diese Eigenschaft ist nicht so viel Gold wie jede nicht-elektronische Währung. Ein Goldbarren kann nicht zweimal gegen eine Dienstleistung oder ein Produkt ausgetauscht werden. Das heißt, zu einem bestimmten Zeitpunkt kann es entweder vom Verkäufer oder vom Käufer stammen.

Dieses Verhalten ist für die materielle Währung natürlich, nicht jedoch für elektronische. Um dieses Verhalten von virtuellem Geld zu erreichen, müssen Sie viel Einfallsreichtum schaffen. In Bitcoin wird dieses Verhalten vom Transaktionsmechanismus bereitgestellt. Alle Transaktionen werden in Ketten zusammengefasst. Jede Transaktion entnimmt Münzen aus einer oder mehreren bestehenden Transaktionen und gibt an, an wen sie gedacht sind. Daher können Sie immer die gesamte Kette auf Gültigkeit prüfen.

Die Komplexität des Bergbaus, begrenzte Ressourcen und Materialität - diese Eigenschaften sowie die Verwendung von Kryptografie für die Sicherheit ermöglichen es Ihnen, Bitcoin als Geld zu verwenden. Der Kern Bitcoin basiert auf ihnen. Dies ist nicht nur ein Arrangement. Alle sind vom Design her in das System integriert und funktionieren auf andere Weise nicht. Es ist Zeit, genau dieses Design zu betrachten.

Kette von Blöcken

Jedes elektronische Zahlungssystem muss Transaktionen irgendwo und irgendwie speichern. In Bitcoin werden alle Informationen in einer Blockkette gespeichert. Blöcke werden im JSON-Format übertragen. Jeder Block enthält einen Titel und eine Liste von Transaktionen. Der Header besteht aus mehreren Eigenschaften, darunter der Hash des vorherigen Blocks. Somit speichert die gesamte Blockkette alle Transaktionen für die gesamte Bitcoin-Operation.

In aktuellen Versionen des Bitcoin-Programms wird die Blockkette von jedem Client vollständig heruntergeladen, wodurch das System vollständig dezentralisiert wird. Die Daten werden nicht verschlüsselt und jeder kann alle Transaktionen manuell verfolgen. Es gibt sogar eine spezielle Site - Bitcoin Block Explorer, auf der Sie leicht alle Informationen zu Blöcken und Transaktionen sehen können.

Zum Zeitpunkt dieses Schreibens betrug die Anzahl der Blöcke in der Kette 110.968, und wie ich bereits sagte, erhöht sich diese Anzahl um etwa alle 10 Minuten, was bedeutet, dass einige Teilnehmer einen neuen Block erstellen konnten.

Es funktioniert wie folgt. Einer der Clients erstellt eine neue Transaktion und sendet sie an andere Clients, die damit beschäftigt sind, den Block zu generieren. Sie fügen diese Transaktion zu ihrem Block hinzu und setzen ihre Generierung fort. Früher oder später kann jemand einen Block erzeugen. Ein solcher Block wird versiegelt (es werden keine weiteren Transaktionen hinzugefügt) und über das Netzwerk gesendet. Als nächstes prüfen Kunden den Block und die darin enthaltenen Transaktionen auf Gültigkeit. Wenn es keine Probleme gibt, gelten die Transaktionen als genehmigt. Zu diesem Zeitpunkt hat bereits ein neuer Block jeden Kunden erreicht und wurde der Kette hinzugefügt. Danach wiederholt sich der Prozess - Kunden beginnen, den nächsten Block zu generieren und neue Transaktionen darin zu sammeln.

Blockieren

Betrachten Sie den Inhalt des Blocks und den Prozess seiner Generierung genauer. Ein Beispiel für einen Block befindet sich im selben Bitcoin Block Explorer . Der Block besteht aus einer Kopfzeile und einer Liste von Transaktionen. Die Kopfzeile besteht aus den folgenden Eigenschaften:

  • hash - SHA-256-Hash des Blockkopfes. Ein solcher Hash ist ziemlich zufällig und seine Berechnungszeit ist vorhersehbar. Ich möchte anmerken, dass nur der Header ohne Transaktionen gehasht wird. Die Anzahl der Transaktionen hat also keinen großen Einfluss auf die Hash-Berechnungszeit.
  • ver - Die Version des Blockschemas. Zur Zeit haben alle Geräte eine Version - 1.
  • prev_block - Der Hash des vorherigen Blocks in der Kette. Aufgrund dieser Eigenschaft kann die Kette nicht durch das Ersetzen eines der Blöcke in ihr gefälscht werden, da der Block-Hash immer vom Hash des vorherigen Blocks in der Kette abhängt. Wenn Sie einen der Blöcke ändern, müssen Sie alle nachfolgenden Blöcke neu erstellen.
  • mrkl_root - Merkle root - Liste der Transaktionshashes. Der Block-Hash muss notwendigerweise von Transaktionen abhängig sein, damit sie nicht gefälscht werden können. Bei einer großen Anzahl von Transaktionen dauert die direkte Berechnung jedoch lange. Daher werden zuerst die Transaktionen selbst gehasht, und dann werden ihre Hashes verwendet, um den Hash des gesamten Blocks zu berechnen.

Es mag absurd erscheinen - warum den Hash desselben doppelt berechnen. Tatsache ist jedoch, dass der Transaktionshash nur dann aktualisiert wird, wenn eine neue Transaktion zum Block hinzugefügt wird und der Blockheaderhash mehrere tausend Male pro Sekunde neu berechnet wird. Je näher die Größe des Headers in einer Konstanten liegt, desto genauer können Sie die Zeit für die Berechnung des Hashwerts vorhersagen.

  • time - uint32_t steht für die Blockerstellungszeit. Das maximal zulässige Jahr beträgt 2106.
  • Bits - Eine der wichtigsten Eigenschaften. Dies ist die abgekürzte Form des Ziel-Hashwerts. Ein Block gilt als generiert (gültig), wenn sein Hash unter diesem Zielwert liegt. Der Zielwert bestimmt die Schwierigkeit beim Erstellen eines Blocks. Je kleiner es ist, desto unwahrscheinlicher ist es, in einer Iteration einen geeigneten Hash zu finden. Diese Eigenschaft wird alle zwei Wochen aktualisiert.

Es geschieht wie folgt. Die Anzahl der erzeugten Blöcke für die letzten zwei Wochen wird berechnet und mit dem Standard verglichen (1 Block alle 10 Minuten). Wenn zu viele Blöcke vorhanden sind, steigt die Komplexität. Wenn die Blöcke zu klein sind - nimmt ab. Somit passt sich das System an die zunehmende Anzahl von Benutzern und folglich an die Gesamtkapazität ihrer Computer an.

  • nonce - Eine Zahl, die ab Null beginnend nach jeder Iteration der Hashberechnung inkrementiert wird. Tatsächlich läuft die Suche so lange ab, bis der Hash unter dem Zielwert liegt. Damit sich jeder neue Hash vom vorherigen unterscheidet, muss sich mindestens eine der Eigenschaften des Blockheaders unterscheiden.

Beispielsweise ändert sich die Version nie. Der Hash des vorherigen Blocks wird aktualisiert, wenn jemand vor uns kommt und einen neuen Block generiert. Merkle root wird aktualisiert, wenn eine Transaktion hinzugefügt wird. Zeit - alle paar Sekunden. Bits (Zielwert, Komplexität) - alle zwei Wochen. Das alles ist zu lang. Warten Sie nicht, bis eine der Eigenschaften aktualisiert wurde und nonce vorhanden ist.

Betrachten Sie eine hypothetische Situation. Alle Nonce-Werte wurden geprüft und keiner passt. In dieser Zeit hat sich keine andere Eigenschaft geändert. Ein Nonce-Überlauf tritt auf und es beginnt wieder von vorne. Es stellt sich heraus, dass weitere Hashes wiederholt werden. Um solche Situationen zu vermeiden, ändert sich nach dem Überlauf der Nonce die besondere Eigenschaft einer der Transaktionen. Danach wird der Merkle-Stamm aktualisiert, und die Hash-Hashwerte für Blockheader werden nicht mehr wiederholt.

  • n_tx - Die Anzahl der Transaktionen in der Liste.
  • size - Die Blockgröße in Bytes.

Transaktionen

Transaktionen sind in Blöcken als Liste enthalten. Sie sind wie Blöcke in Ketten aufgereiht. Jede Transaktion muss angeben, woher sie kommt (von welcher bestehenden Transaktion) und wohin sie geht.

Um den Empfänger anzuzeigen, wird sein öffentlicher Schlüssel verwendet. Damit der Empfänger das eingegangene Geld verwenden kann, muss er eine neue Transaktion erstellen, bei der das Geld vom vorherigen Konto abgerufen und an eine andere Adresse umgeleitet wird. Um zu beweisen, dass eine Person ihr Geld für die Überweisung verwendet und nicht für Fremde, muss sie ihre digitale Signatur bei der Transaktion hinterlegen. Sie können dann jederzeit sicherstellen, dass alle Transaktionen im System gültig sind.

In der Praxis wird all dies mit den folgenden Eigenschaften implementiert:

  • hash - Hash die gesamte Transaktion. Es stellt sich heraus, dass Transaktionen zweimal gehasht werden. Das erste Mal während der Berechnung des Transaktionshashs. Zweite Zeit während der Block-Hash-Berechnung. Außerdem bezieht sich jeder Block auf den Hash des vorherigen Blocks, und jede Transaktion bezieht sich auf den Hash der vorherigen Transaktion (oder Transaktionen). Wenn Sie eine Transaktion ändern und durch ein Wunder der Hash nicht brechen kann, werden alle anderen Hashes brechen und die modifizierte Blockkette wird von allen Clients abgelehnt.
  • ver - Version des Transaktionsschemas. Bisher hat es sich nie geändert, so dass es überall gleich 1 ist.
  • vin_sz - Die Anzahl der vorherigen Transaktionen, aus denen Geld an neue Adressen übertragen wird. Eins oder mehr
  • vout_sz - Die Anzahl der Adressen, an die Geld überwiesen wird. Eins oder mehr
  • lock_time - Wird nicht verwendet und ist überall gleich 0. Die Idee ist, ausstehende Transaktionen so zu erstellen, dass sie nicht zum aktuell generierten Block hinzugefügt werden, sondern beispielsweise zum folgenden. Es wird impliziert, dass diese Eigenschaft die Anzahl der Blöcke angibt, die eine Transaktion vor dem Hinzufügen überspringen sollte. Dadurch ist es möglich, die Transaktion für einige Zeit zu ändern und erneut zu signieren.
  • size - Transaktionsgröße in Bytes. Die implizierte Transaktionsgröße hat das JSON-Format.
  • in - Enthält die Liste der Eingaben (Quellen) der Transaktion. Als Eingaben werden die Ausgaben vorheriger Transaktionen (prev_out) verwendet. Jede Ausgabe hat die folgenden Eigenschaften:
    • hash - Der Hash der vorherigen Transaktion.
    • n - Da eine Transaktion mehrere Exits haben kann, müssen Sie angeben, von wem das Geld genommen wird. Dafür und da gibt es diese Eigenschaft. Es enthält die Folgenummer der Ausgabe der vorherigen Transaktion, beginnend mit 0.
    • scriptSig - In dieser Eigenschaft muss der Absender nachweisen, dass er genau sein Geld überweist und keine Fremden. Dazu gibt es den öffentlichen Schlüssel des Empfängers der vorherigen Transaktion an, d. H. Seinen Schlüssel, da er der Empfänger sein muss. Außerdem fügt er die ECDSA- Signatur derselben Transaktion hinzu, die zu seinem privaten Schlüssel gemacht wird. Dies beweist, dass er sein Geld verwaltet, keine Fremden.

Nach der Liste der Eingaben der Transaktion (In) wird die Liste der Ausgaben (Out), d. H. Der Adressaten, angezeigt. Jede Ausgabe hat die folgenden Eigenschaften:

  • value - Enthält den Geldbetrag, der an die neue Adresse übertragen wird. Sie werden aus vorherigen Transaktionen übernommen. Daher sollte diese Anzahl ihre Summe nicht überschreiten. Zum Beispiel möchten wir 10 Münzen aus einer Transaktion und 20 aus einer anderen Transaktion nehmen und 25 an eine neue Adresse senden. Um die restlichen 5 Münzen nicht zu verlieren, schicken wir sie uns zur Abwechslung. Bei unserer Transaktion wird es also zwei Adressaten geben, von denen einer wir selbst ist. Der Wert wird immer in Nanomonet angegeben, um Bruchzahlen zu vermeiden.
  • scriptPubKey - Diese Eigenschaft bildet zusammen mit scriptSig das Skript für die Änderung

Der Gesamtbetrag am Eingang der Transaktion entspricht immer dem Gesamtbetrag am Ausgang. Ansonsten entstand das Geld entweder aus der Luft oder verschwand aus dem Verkehr. Aber ganz am Anfang gab es eine Grafik, nach der klar ist, dass die Geldmenge exponentiell wächst. Woher kommt also neues Geld im System?

Für meinen Geschmack ist das Thema Geld einfach und elegant. In jedem Block ist die erste Transaktion in der Liste eine Sondertransaktion. Es hat immer eine Eingabe, die die Eigenschaft coinbase anstelle der Eigenschaft scriptSig hat . Diese Eigenschaft kann alles enthalten.

Die Stabilität des Systems hängt von der Anzahl der Benutzer ab, auf denen ein offizieller Client ausgeführt wird. Während die meisten von ihnen Bitcoin nichts bedroht.

Fazit

Arbeitsnachweis - das Ergebnis einer Arbeit, die schwer zu erreichen ist, aber leicht zu überprüfen ist. Das Bitcoin-Netzwerk basiert auf diesem Prinzip. Sie können den Hash (das Ergebnis der Arbeit) im Bruchteil einer Sekunde überprüfen. Und um es abzuholen, ist viel Arbeit nötig.

Hier können Sie sich an die Analogie mit Gold erinnern, deren Gewinnung viel Zeit und Ressourcen erfordert. Aber Sie können verstehen, dass Gold fast sofort vor Ihnen liegt. In diesem Sinne hat auch Bitcoin seinen Wert. Aber verstehen Sie dies nicht als Preis in Dollar oder in den Stromrechnungen, die der Computer bei der Auswahl des Hashs verwendet hat.

Der Dollarpreis ist etwas anders. Es ist nicht in Bitcoin integriert und wird ausschließlich vom Markt bestimmt. Gold selbst garantiert Ihnen keinen bestimmten Preis in Dollar. Es wird nur von einer Person garantiert, die Gold in Dollar umtauschen möchte.

Der Anfangswert von Gold wurde ausschließlich von denjenigen bestimmt, die es abgebaut haben. Für das gewonnene Gold hat er so viel verlangt, dass die Bemühungen, es zu fördern, kompensiert werden konnten. Danach beginnt der Markt den Goldpreis zu beeinflussen.

Sobald Bitcoin den Markt erreicht hat, wird der Wert ausschließlich vom Vertrauen des Systems bestimmt. Je mehr Menschen vertrauen, desto mehr Bitcoin wird einkaufen, desto mehr Dollar werden sie investieren und desto teurer wird Bitcoin.

Bevor die Menschen Bitcoin vertrauen können, müssen sie herausfinden, ob dieses System ausreichend sicher ist und ob es als Geld verwendet werden kann, das heißt, es hat die Eigenschaften von Geld, die ich anfangs aufgeführt habe. Um dies sicher zu wissen, können Sie nur verstehen, wie Bitcoin funktioniert.

Ich hoffe, dass das Vertrauen in Bitcoin nach diesem Artikel mit Habarhabar zumindest etwas ansteigt.