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

BitCoin was ist das?

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

Ich habe relativ kürzlich etwas über Bitcoin erfahren, aber er hat mich sofort mit seiner Idee von P2P bestochen. Je tiefer ich in ihr Wiki eingrabe, desto mehr habe ich diese Idee. Seine Umsetzung ist aus technischer Sicht wunderschön und elegant.

Die Suche nach Bitcoin gibt eine Reihe von Themen. Bei den Kommentaren fällt auf, dass viele Menschen, vor allem diejenigen, die mit Bitcoin nicht direkt vertraut sind, viele Fragen zu den Prinzipien seiner Arbeit aufwerfen. Es gibt auch viele Vermutungen, oft falsch. 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 ist die Idee, dass Bitcoin ein weiteres "Stück Papier" ist, sogar elektronische, die nur "echtes" Geld darstellen, sind solche Schuldenquittungen. Daher der Ursprung der meisten anderen Irrtümer: Wenn sie Papierstücke sind, dann sind sie wertlos; Sie können so oft gedruckt oder zerstört werden, wie Sie möchten; Sie können gefälscht sein; Sie können kopiert werden

Ich wiederhole - all das ist nichts als Wahnvorstellungen. Im Herzen der Idee von Bitcoin lag der Wunsch, nicht nur ein weiteres "Stück Papier" zu schaffen, das echtes Geld darstellt, wie Gold, sondern ein Analogon zu Gold selbst. Nimm diese Eigenschaften von Gold, durch die es das ideale Geld ist, und mache eine elektronische Währung basierend auf diesen.

Komplexität der Extraktion

Gold kann nicht kopiert werden - es kann nur erhalten werden. Dies ist jedoch ein sehr zeitaufwendiger Prozess, sowohl in Bezug auf Zeit als auch auf Ressourcen. Nicht zuletzt deshalb wird Gold so hoch bewertet. Um es klarer zu machen, schauen wir uns ein Beispiel an.

Angenommen, eine Person den ganzen Tag eifrig Gold gewonnen und extrahiert als Folge 1 kg. Für ihn sind die Kosten für Goldabbau ein Tag harter Arbeit. Nach einem anstrengenden Arbeitstag beschloss er, sich auszuruhen und ins Kino zu gehen. Durch glücklichen Zufall gab der Kassierer Tickets gegen Gold. Warum? Weil der Kassierer Gold mag, aber ich mag es nicht, den ganzen Tag mit einem Plektrum zu arbeiten. Deshalb ist er bereit, einen Dienst zu leisten - um ein Ticket zu geben - gegen 1 kg Gold. Tatsächlich tauscht er seinen Dienst gegen einen Tag harter Arbeit aus.

Stellen wir uns jetzt eine andere Situation vor. Erfand einen Kopierer, der mit Gold arbeitet. Und jede Person kann 10 kg aus 1 kg Gold pro Minute herstellen. In dieser Situation wird der Kassierer keine Tickets mehr gegen Gold eintauschen, da er ihn jetzt einfach so drucken kann, wie er möchte. Gold wird keinen Wert mehr haben und kann nicht mehr als Geld verwendet werden.

In Bitcoin benötigt der Prozess des Sammelns von Münzen auch Ressourcen und Zeit. Aber in diesem Fall sind es keine menschlichen Ressourcen, sondern Computerressourcen.

Bedingt begrenzte Ressource

Je länger Gold abgebaut wird, desto schwieriger (teurer in Bezug auf die Ressourcen), es zu extrahieren. Dies gewährleistet, dass die Inflation unter Kontrolle ist.

In Bitcoin wird ein ähnliches Verhalten erreicht, indem von Zeit zu Zeit die Funktion der Geschwindigkeit der gesamten produzierten Münzen eingeführt wird. Diese Funktion ist umgekehrt proportional, dh die Geschwindigkeit nimmt mit der Zeit ab und tendiert gegen Null. Wenn wir das Integral dieser Funktion in Bezug auf die Zeit betrachten, erhalten wir eine Exponentialfunktion. Ungefähr das:

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

Man kann sehen, dass die Gesamtzahl der Münzen 21.000.000 beträgt.Die Details von Bitcoins Arbeit werden weiter besprochen. In der Zwischenzeit müssen Sie zwei Dinge wissen: Münzen erscheinen etwa alle 10 Minuten im System, die Anzahl der Münzen in einem Bündel beträgt 50 und sie nimmt alle 4 Jahre zweimal ab.

Materialität

Das ist schon eine Eigenschaft, nicht so viel Gold wie jede nicht-elektronische Währung. Ein Goldbarren kann nicht zweimal gegen eine Dienstleistung oder einen Gegenstand eingetauscht werden. Das heißt, zu einem Zeitpunkt kann es entweder vom Verkäufer oder vom Käufer sein.

Dieses Verhalten ist für eine materielle Währung natürlich, aber nicht für eine elektronische Währung. Um dieses Verhalten von virtuellem Geld zu erreichen, müssen Sie eine Menge Verstand haben. In Bitcoin wird dieses Verhalten vom Transaktionsmechanismus bereitgestellt. Alle Transaktionen werden in Ketten zusammengeführt. Jede Transaktion nimmt Münzen aus einer oder mehreren bestehenden Transaktionen und zeigt an, an wen sie gerichtet sind. Daher können Sie immer die gesamte Kette auf Gültigkeit prüfen.

Komplexität der Extraktion, beschränkte Ressourcen, Materialität - diese Eigenschaften und die Verwendung von Kryptographie für die Sicherheit ermöglichen Bitcoin als Geld zu verwenden. Sie basieren auf dem Kern von Bitcoin. Dies ist nicht nur eine Vereinbarung. Alle von ihnen sind durch das Design in das System integriert, und auf andere Weise wird es nicht funktionieren. Es ist Zeit, dieses Design zu berücksichtigen.

Kette von Blöcken

Jedes elektronische Zahlungssystem sollte irgendwo und irgendwie Transaktionen speichern. In Bitcoin werden alle Informationen in einer Blockkette gespeichert. Die Blöcke werden im JSON-Format übertragen. Jeder Block enthält eine Kopfzeile und eine Liste von Transaktionen. Der Header besteht aus mehreren Eigenschaften, unter denen sich ein Hash des vorherigen Blocks befindet. Somit speichert die gesamte Blockkette alle Transaktionen für die gesamte Zeit, die Bitcoin läuft.

In aktuellen Versionen des Bitcoin-Programms wird die Blockkette vollständig von jedem Client heruntergeladen, wodurch das System vollständig dezentralisiert wird. Daten werden in keiner Weise verschlüsselt und jeder kann alle Transaktionen manuell verfolgen. Es gibt sogar eine spezielle Website - Bitcoin Block Explorer, wo Sie alle Informationen über die Blöcke und Transaktionen leicht sehen können.

Zum Zeitpunkt dieses Schreibens war die Anzahl der Blöcke in der Kette 110 968, und wie ich bereits sagte, erhöht sich dieser Betrag alle 10 Minuten um etwa 1. Dies bedeutet, dass einer der Teilnehmer einen neuen Block erstellen konnte.

Es funktioniert so. Einer der Clients erstellt eine neue Transaktion und sendet sie an andere Kunden, die gerade den Block generieren. Sie fügen diese Transaktion zu ihrem Block hinzu und generieren weiter. Früher oder später wird jemand in der Lage sein, einen Block zu erzeugen. Ein solcher Block wird versiegelt (es werden ihm 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 der frische Block bereits jeden Kunden erreicht und wird der Kette hinzugefügt. Danach wird der Prozess wiederholt - die Kunden beginnen, den nächsten Block zu generieren und neue Transaktionen einzusammeln.

Blockieren

Betrachten Sie den Inhalt des Blocks und den Prozess seiner Erzeugung genauer. Ein Beispielblock kann im selben Bitcoin Block Explorer gefunden werden . Der Block besteht aus einem Kopf und einer Liste von Transaktionen. Der Header besteht aus folgenden Eigenschaften:

  • Hash - SHA-256-Header-Hash des Blocks. Solch ein Hash ist ziemlich zufällig und die Zeit seiner Berechnung ist vorhersagbar. Ich möchte darauf hinweisen, dass nur der Header ohne Transaktionen gehashed wird. Daher wird die Anzahl der Transaktionen die Zeit der Berechnung des Hash nicht stark beeinflussen.
  • ver - Die Version des Blockschemas. Im Moment haben alle Einheiten eine Version - 1.
  • prev_block - Hash den vorherigen Block in der Kette. Aufgrund dieser Eigenschaft kann die Kette nicht gefälscht werden, indem einer der Blöcke darin ersetzt wird, da der Hash des Blocks immer vom Hash des vorherigen Blocks in der Kette abhängt. Wenn Sie einen der Blöcke ändern, müssen Sie alle folgenden Blöcke neu erstellen.
  • mrkl_root - Merkle root - Liste der Transaktions-Hashes. Der Block-Hash muss notwendigerweise von Transaktionen abhängen, so dass sie nicht gefälscht werden können. Aber um es direkt zu berechnen, wird es lang sein, wenn die Anzahl der Transaktionen groß ist. Daher werden die Transaktionen selbst zuerst gehashed und dann werden ihre Hashwerte verwendet, um den Hash des gesamten Blocks zu berechnen.

Es mag absurd erscheinen - warum man den Hash desselben gleich doppelt berechnet. Tatsache ist jedoch, dass der Transaktions-Hash nur dann aktualisiert wird, wenn dem Block eine neue Transaktion hinzugefügt wird und der Hash des Block-Headers mehrere tausend Mal pro Sekunde neu berechnet wird. Je näher die Header-Größe an einer Konstante liegt, desto genauer können Sie die Zeit vorhersagen, die für die Berechnung des Hashwerts benötigt wird.

  • time - uint32_t repräsentiert die Zeit, zu der der Block erstellt wurde. Das maximal zulässige Jahr ist 2106.
  • Bits - Eine der wichtigsten Eigenschaften. Es ist eine verkürzte Form des Ziel-Hash-Wertes. Ein Block gilt als generiert (gültig), wenn sein Hash-Wert kleiner als dieser Zielwert ist. Der Zielwert bestimmt die Komplexität der Erstellung des Blocks. Je kleiner es ist, desto unwahrscheinlicher ist es, einen geeigneten Hash in einer Iteration auszuwählen. Diese Eigenschaft wird alle zwei Wochen aktualisiert.

Es gibt es wie folgt. Die Anzahl der in den letzten zwei Wochen erzeugten Blöcke wird berechnet und mit dem Standard verglichen (1 Block alle 10 Minuten). Wenn es zu viele Blöcke gibt, erhöht sich die Komplexität. Wenn die Blöcke zu klein sind, nimmt sie ab. Somit passt sich das System der steigenden Anzahl von Benutzern und damit der Gesamtleistung ihrer Computer an.

  • nonce - Eine Zahl, die beginnend mit Null nach jeder Iteration der Hash-Berechnung inkrementiert wird. Eigentlich ist dies der Fall, bis der Hash-Wert kleiner als der Zielwert ist. Damit sich jeder neue Hash vom vorherigen unterscheidet, muss mindestens eine der Eigenschaften des Blockheaders unterschiedlich sein.

Zum Beispiel ändert sich die Version niemals. Der Hash des vorherigen Blocks wird aktualisiert, wenn jemand uns überschreibt und einen neuen Block generiert. Merkle-Stamm wird aktualisiert, wenn die Transaktion hinzugefügt wird. Die Zeit ist alle paar Sekunden. Bits (Zielwert, Komplexität) - alle zwei Wochen. Es ist alles zu lang. Warten Sie nicht, bis eine der Eigenschaften aktualisiert ist und eine Nonce vorliegt.

Betrachten wir eine hypothetische Situation. Alle Nonce-Werte wurden überprüft und keiner von ihnen ist geeignet. Während dieser Zeit hat sich keine andere Eigenschaft geändert. Es gibt einen Nonce-Überlauf und es beginnt wieder von vorne. Es stellt sich heraus, dass dann die Hashes wiederholt werden. Um solche Situationen zu vermeiden, ändert sich nach einem Nonce-Überlauf die spezielle Eigenschaft einer der Transaktionen. Danach wird der Merkle-Stamm aktualisiert und die Header der Blockheader-Hashes werden nicht mehr wiederholt.

  • n_tx - Anzahl der Transaktionen in der Liste.
  • Größe - Die Größe des Blocks in Bytes.

Transaktionen

Transaktionen sind in Blöcken in Form einer Liste enthalten. Sie stehen wie Blöcke in Ketten. Jede Transaktion muss angeben, wo sie Geld benötigt (von welcher bestehenden Transaktion) und wohin sie geht.

Um den Adressaten anzugeben, wird sein öffentlicher Schlüssel verwendet. Damit der Empfänger das empfangene Geld verwenden kann, muss er eine neue Transaktion erstellen, die Geld von der vorherigen nimmt und sie an eine andere Adresse umleitet. Um zu beweisen, dass eine Person ihr Geld anstelle von jemand anderem zum Übersetzen verwendet, muss er seine digitale Signatur in seiner Transaktion hinterlassen. Dann können Sie jederzeit sicherstellen, dass alle Transaktionen im System gültig sind.

In der Praxis wird all dies mit Hilfe der folgenden Eigenschaften realisiert:

  • Hash - Der Hash der gesamten Transaktion. Es stellt sich heraus, dass Transaktionen doppelt gehackt werden. Das erste Mal während der Berechnung des Transaktions-Hash. Das zweite Mal während der Berechnung des Block-Hash. Darüber hinaus bezieht sich jeder Block auf den Hash des vorherigen Blocks und jede Transaktion auf den Hash der vorherigen Transaktion (oder Transaktionen). Wenn Sie die Transaktion ändern und ihr Hash durch ein Wunder nicht bricht, werden alle anderen Hashes unterbrochen und die geänderte Blockkette wird von allen Clients zurückgewiesen.
  • ver - Die Version des Transaktionsschemas. Während es sich nie geändert hat, so ist es überall gleich 1.
  • vin_sz - Die Anzahl der vorherigen Transaktionen, von denen Geld an neue Adressen übertragen wird. Ein oder mehrere.
  • vout_sz - Anzahl der Adressen, an die Geld überwiesen wird. Ein oder mehrere.
  • lock_time - Noch nicht verwendet und überall gleich 0. Die Idee besteht darin, ausstehende Transaktionen so zu erstellen, dass sie nicht zum aktuell generierten Block, sondern beispielsweise zum Forwarder hinzugefügt werden. Es versteht sich, dass diese Eigenschaft die Anzahl der Blöcke angibt, die die Transaktion vor dem Hinzufügen überspringen sollte. Dadurch können Sie die Transaktion ändern und für einige Zeit neu signieren.
  • Größe - Die Größe der Transaktion in Bytes. Die Transaktionsgröße im JSON-Format ist impliziert.
  • in - Enthält eine Liste von Transaktionseingaben (Quellen). Die Eingaben sind die Ausgaben der vorherigen Transaktionen (prev_out). Jede Ausgabe hat die folgenden Eigenschaften:
    • Hash - Der Hash der vorherigen Transaktion.
    • n - Da die Transaktion mehrere Ausgaben haben kann, müssen Sie angeben, von wem das Geld stammt. Dafür gibt es diese Eigenschaft. Es enthält die Sequenznummer der Ausgabe der vorherigen Transaktion, beginnend mit 0.
    • scriptSig - In dieser Eigenschaft muss der Absender beweisen, dass er sein eigenes Geld übersetzt, nicht das eines anderen. Um dies zu tun, spezifiziert es den öffentlichen Schlüssel des Empfängers der vorherigen Transaktion, d. H. Seinen eigenen Schlüssel, da es der Empfänger sein muss. Darüber hinaus fügt es ECDSA der Signatur derselben Transaktion hinzu, die durch seinen privaten Schlüssel erfolgt. Dies beweist, dass er über sein Geld verfügt und nicht über Fremde.

Nach der Liste der Transaktionseingaben (in) wird eine Liste von Ausgaben (out), d. H. Adressen, angezeigt. Jede Ausgabe hat die folgenden Eigenschaften:

  • Wert - Enthält den Geldbetrag, der an die neue Adresse übertragen wird. Sie stammen aus früheren Transaktionen. Daher sollte diese Anzahl ihren Betrag nicht überschreiten. Zum Beispiel wollen wir 10 Münzen von einer Transaktion und 20 von einer anderen Transaktion nehmen und 25 an eine neue Adresse senden. Dass die restlichen 5 Münzen nicht verloren gehen, senden wir als Wechselgeld an uns. In unserer Transaktion wird es also zwei Empfänger geben, von denen einer uns selbst ist. Der Wert wird immer in den Nanomonetzen angegeben, um Bruchzahlen zu vermeiden.
  • scriptPubKey - Diese Eigenschaft bildet zusammen mit scriptSig ein Skript für das modifizierte Skript

Der Gesamtbetrag am Eingang der Transaktion ist immer gleich dem Gesamtbetrag am Ausgang. Ansonsten entstand entweder Geld aus der Luft oder verschwand aus dem Verkehr. Aber am Anfang gab es eine Grafik, die zeigt, dass die Geldmenge exponentiell wächst. Woher kommt das neue Geld?

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

Die Stabilität des Systems basiert auf der Anzahl der Benutzer, die einen offiziellen Client ausführen. Während ihre Mehrheit, bittet Bitcoin nichts.

Fazit

Der Arbeitsnachweis (Arbeitsnachweis) ist das Ergebnis einer Arbeit, die schwer zu erreichen, aber leicht nachzuweisen ist. Die Arbeit des Bitcoin-Netzwerks basiert auf diesem Prinzip. Sie können den Hash (Ergebnis der Arbeit) in einem Bruchteil einer Sekunde überprüfen. Und um es aufzuheben, braucht es viel Arbeit.

Hier können Sie sich an die Analogie zu Gold erinnern, deren Gewinnung viel Zeit und Ressourcen in Anspruch nimmt. Aber um das vor dir Gold zu verstehen, kannst du das fast sofort. In diesem Sinne hat Bitcoin auch seinen Wert. Aber Sie müssen dies nicht als Preis in Dollars oder in Stromrechnungen verstehen, die der Computer während der Hash-Auswahl verwendet.

Der Preis in Dollar ist ein bisschen anders. Es ist nicht in Bitcoin eingebettet und wird ausschließlich vom Markt bestimmt. Schließlich garantiert Gold selbst Ihnen keinen bestimmten Preis in Dollars. Es wird nur von einer Person garantiert, die Gold gegen Dollar eintauschen möchte.

Der ursprüngliche Wert von Gold wurde ausschließlich von denen bestimmt, die es extrahiert haben. Für das gewonnene Gold verlangte er so viel, dass es möglich war, den Aufwand für die Gewinnung zu kompensieren. Und erst danach beginnt der Markt den Goldpreis zu beeinflussen.

Sobald Bitcoin auf dem Markt ist, wird sein Wert allein durch das Vertrauen in das System bestimmt. Je mehr Leute vertrauen, desto mehr Bitcoin wird gekauft, desto mehr Dollars werden in sie investiert und als Konsequenz wird der teurere Bitcoin sein.

Bevor Leute Bitcoins vertrauen können, müssen sie herausfinden, ob dieses System ein ausreichendes Maß an Sicherheit hat und ob es als Geld verwendet werden kann, dh ob es die Eigenschaften von Geld hat, die ich zu Beginn aufgelistet habe. Erfahren Sie dies sicher, Sie können nur in den Prinzipien von Bitcoin zerlegen.

Ich hoffe, dass nach diesem Artikel mit Habarhabar das Vertrauen in Bitcoin zumindest ein wenig wachsen wird.