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

BitCoin Was ist das?

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

Ich habe relativ wenig über Bitcoin erfahren, aber er hat mich sofort mit seiner Idee von p2p bestochen. Je tiefer ich in ihr Wiki grabe, 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. Durch Kommentare merkt man, dass viele Leute, besonders diejenigen, die Bitcoin nicht direkt kennen, viele Fragen über die 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, auch 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 beliebig gedruckt oder zerstört werden; Sie können gefälscht werden; sie können kopiert werden

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

Komplexität der Extraktion

Gold kann nicht kopiert werden - es kann nur erhalten werden. Dies ist jedoch ein sehr zeitaufwendiger Prozess sowohl in Zeit als auch in Ressourcen. Aus diesem Grund wird Gold so hoch geschätzt. Um es klarer zu machen, schauen wir uns ein Beispiel an.

Nehmen Sie an, eine Person den ganzen Tag eifrig Gold gefördert und als Ergebnis 1 kg extrahiert. Für ihn sind die Kosten für Goldminen ein Tag harter Arbeit. Nach einem harten 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 Pick 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 nun eine andere Situation vor. Erfand einen Kopierer, der mit Gold arbeitet. Und jede Person kann 10 kg aus 1 kg Gold pro Minute machen. In dieser Situation tauscht der Kassierer keine Tickets mehr für Gold aus, da er ihn jetzt so einfach ausdrucken kann, wie er möchte. Gold wird keinen Wert mehr haben und kann nicht mehr als Geld verwendet werden.

Der Vorgang des Sammelns von Münzen erfordert auch in Bitcoin Ressourcen und Zeit. Aber in diesem Fall sind es keine menschlichen Ressourcen, sondern Computerressourcen.

Bedingt begrenzte Ressource

Je länger Gold abgebaut wird, desto härter (teurer durch Ressourcen) wird es extrahiert. 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 insgesamt erzeugten Münzen eingeführt wird. Diese Funktion ist umgekehrt proportional, dh die Geschwindigkeit nimmt mit der Zeit ab und tendiert zu Null. Wenn wir das Integral dieser Funktion in Bezug auf die Zeit nehmen, erhalten wir eine Exponentialfunktion. Ungefähr das:

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

Man kann sehen, dass die Gesamtanzahl der Münzen 21.000.000 beträgt. Die Details der Arbeit von Bitcoin werden weiter diskutiert. In der Zwischenzeit müssen Sie zwei Dinge wissen: Münzen erscheinen ungefähr alle 10 Minuten in Paketen, die Anzahl der Münzen in einem Bündel ist 50 und sie nimmt alle 4 Jahre zweimal ab.

Materialität

Dies ist bereits eine Eigenschaft, nicht so viel Gold wie jede nicht-elektronische Währung. Ein Goldbarren kann nicht zweimal gegen einen Service oder einen Gegenstand ausgetauscht werden. Das heißt, zu einem bestimmten 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 die elektronische Währung. Um dieses Verhalten des virtuellen Geldes zu erreichen, müssen Sie viel Witz machen. Dieses Verhalten wird in Bitcoin vom Transaktionsmechanismus bereitgestellt. Alle Transaktionen werden in Ketten zusammengeführt. Jede Transaktion nimmt Münzen aus einer oder mehreren bestehenden Transaktionen entgegen und zeigt an, von wem sie betroffen sind. Sie können daher immer die gesamte Kette auf Gültigkeit prüfen.

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

Kette von Blöcken

Jedes elektronische Zahlungssystem sollte irgendwo und irgendwie Transaktionen speichern. In Bitcoin werden alle Informationen in einer Kette von Blöcken 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 Block-Kette 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. Die Daten sind in keiner Weise verschlüsselt und jeder kann manuell alle Transaktionen verfolgen. Es gibt sogar eine spezielle Seite - Bitcoin Block Explorer, wo Sie leicht alle Informationen über die Blöcke und Transaktionen sehen können.

Zum Zeitpunkt dieses Schreibens war die Anzahl der Blöcke in der Kette gleich 110 968, und wie gesagt, steigt diese Menge alle 10 Minuten um etwa 1. Dies bedeutet, dass einer der Teilnehmer in der Lage war, einen neuen Block zu erstellen.

Es funktioniert so. Einer der Clients erstellt eine neue Transaktion und sendet sie an andere Kunden, die gerade mit der Generierung des Blocks beschäftigt sind. Sie fügen diese Transaktion zu ihrem Block hinzu und erzeugen weiterhin. Früher oder später kann jemand einen Block erzeugen. Ein solcher Block ist versiegelt (es werden keine weiteren Transaktionen hinzugefügt) und über das Netzwerk gesendet. Als nächstes überprüfen Kunden den Block und die darin enthaltenen Transaktionen auf Gültigkeit. Wenn keine Probleme auftreten, gelten die Transaktionen als genehmigt. Zu diesem Zeitpunkt hat der frische Block bereits jeden Kunden erreicht und wird zur Kette hinzugefügt. Danach wird der Vorgang wiederholt - die Kunden beginnen, den nächsten Block zu generieren und neue Transaktionen zu sammeln.

Block

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 Header und einer Liste von Transaktionen. Der Header besteht aus folgenden Eigenschaften:

  • Hash - SHA-256-Header-Hash des Blocks. Ein solcher Hash ist ziemlich zufällig und der Zeitpunkt seiner Berechnung ist vorhersagbar. Ich möchte beachten, dass nur die Kopfzeile ohne Transaktionen gehasht wird. Die Anzahl der Transaktionen wird daher die Berechnungszeit des Hash nicht wesentlich 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 nachfolgenden neu erstellen.
  • mrkl_root - Merkle root - Liste der Transaktionshashes. 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 lange dauern, wenn die Anzahl der Transaktionen groß ist. Daher werden die Transaktionen selbst zuerst gehasht und dann werden ihre Hashwerte verwendet, um den Hash des gesamten Blocks zu berechnen.

Es mag absurd erscheinen - warum berechnen Sie den Hash desselben. Tatsache ist jedoch, dass der Transaktions-Hash nur 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 genauer die Header-Größe einer Konstanten entspricht, desto genauer können Sie die Zeit vorhersagen, die benötigt wird, um den Hash zu berechnen.

  • 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-Werts. Ein Block gilt als generiert (gültig), wenn sein Hashwert kleiner ist als dieser Zielwert. Der Zielwert bestimmt die Komplexität der Erstellung des Blocks. Je kleiner es ist, desto weniger wahrscheinlich ist es, einen geeigneten Hash in einer Iteration auszuwählen. Diese Eigenschaft wird alle zwei Wochen aktualisiert.

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

  • nonce - Eine Zahl, die von Null an beginnt und nach jeder Iteration der Hash-Berechnung inkrementiert wird. Tatsächlich ist dies der Fall, bis der Hash unter dem Zielwert liegt. Damit sich jeder neue Hash von dem vorherigen unterscheidet, muss mindestens eine der Eigenschaften des Blockheader unterschiedlich sein.

Beispielsweise ändert sich die Version nie. Der Hash des vorherigen Blocks wird aktualisiert, wenn jemand uns überschreibt und einen neuen Block erzeugt. Die Merkle-Wurzel 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 wurde und es eine Nonce gibt.

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 Immobilie geändert. Es ist ein Nonce Overflow 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 die Merkle-Wurzel aktualisiert und die Header der Blockheader werden nicht mehr wiederholt.

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

Transaktionen

Transaktionen sind in Form von Listen in Blöcken enthalten. Sie stehen wie Blöcke in Ketten. Jede Transaktion muss angeben, wo Geld (von welcher existierenden Transaktion) und von wo aus es geleitet wird.

Um den Empfänger anzugeben, wird dessen öffentlicher Schlüssel verwendet. Der Empfänger könnte das erhaltene Geld verwenden, er muss eine neue Transaktion erstellen, die das Geld von dem vorherigen Geld übernimmt und sie an eine andere Adresse weiterleitet. Um zu beweisen, dass eine Person sein Geld verwendet, anstatt zu übersetzen, muss er seine digitale Unterschrift in seiner Transaktion hinterlassen. Dann können Sie jederzeit sicherstellen, dass alle Transaktionen im System gültig sind.

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

  • Hash - Der Hash der gesamten Transaktion. Es stellt sich heraus, dass Transaktionen zweimal gehasht werden. Das erste Mal während der Berechnung des Transaktions-Hash. Das zweite Mal während der Berechnung des Block-Hash. Außerdem 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 nach einem Wunder, dass der Hash nicht unterbrochen wird, brechen alle anderen Hashes und die geänderte Kette von Blöcken wird von allen Clients zurückgewiesen.
  • ver - Die Version des Transaktionsschemas. Während es sich nie geändert hat, 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 übertragen wird. Ein oder mehrere.
  • lock_time - Noch nicht verwendet und überall gleich 0. Die Idee ist, ausstehende Transaktionen so zu erstellen, dass sie nicht zum aktuell generierten Block, sondern zum Forwarder hinzugefügt werden. Es versteht sich, dass diese Eigenschaft die Anzahl der Blöcke angibt, die die Transaktion vor dem Hinzufügen überspringt. Dies ermöglicht es Ihnen, die Transaktion zu ändern und sie für einige Zeit erneut zu signieren.
  • size - Die Größe der Transaktion in Byte. Die Transaktionsgröße im JSON-Format ist angedeutet.
  • 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 welchem ​​Geld das Geld stammt. Dafür gibt es diese Eigenschaft. Sie 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. Zu diesem Zweck spezifiziert es den öffentlichen Schlüssel des Empfängers der vorherigen Transaktion, d. H. Seinen eigenen Schlüssel, da er der Empfänger sein muss. Darüber hinaus fügt ECDSA die Signatur der gleichen Transaktion hinzu, die mit ihrem privaten Schlüssel erstellt wird. Das beweist, dass er sein Geld, und nicht von Fremden, zur Verfügung hat.

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. Diese Zahl sollte daher nicht über ihren Betrag hinausgehen. Zum Beispiel möchten wir 10 Münzen von einer Transaktion und 20 von einer anderen annehmen und 25 an eine neue Adresse senden. Dass die verbleibenden 5 Münzen nicht verloren gehen, senden wir sie als Abwechslung an uns selbst. In unserer Transaktion gibt es also zwei Empfänger, von denen einer uns selbst ist. In den Nanomonets wird immer ein Wert angegeben, um gebrochene Zahlen zu vermeiden.
  • scriptPubKey - Diese Eigenschaft bildet zusammen mit scriptSig ein Skript für die modifizierten

Der Gesamtbetrag am Eingang der Transaktion entspricht immer dem Gesamtbetrag am Ausgang. Ansonsten entstand Geld entweder 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 also das neue Geld?

Für mich 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 Eigenschaft scriptSig eine coinbase- Eigenschaft hat. Diese Eigenschaft kann nichts enthalten.

Die Stabilität des Systems basiert auf der Anzahl der Benutzer, auf denen ein offizieller Client ausgeführt wird. Während ihrer Mehrheit bedroht Bitcoin nichts.

Fazit

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

Hier können Sie sich an die Analogie mit Gold erinnern, deren Extraktion viel Zeit und Ressourcen erfordert. Aber das zu verstehen, bevor Sie Gold, können Sie fast sofort. In diesem Sinne hat Bitcoin auch seinen Wert. Sie müssen dies jedoch nicht als Preis in Dollar oder in Stromrechnungen verstehen, die der Computer während der Hash-Auswahl verwendet hat.

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

Der ursprüngliche Wert des Goldes wurde ausschließlich von denjenigen bestimmt, die es extrahierten. Er verlangte für das extrahierte Gold so viel, dass es möglich war, die Anstrengung zu kompensieren, um es zu extrahieren. Und erst danach beginnt der Markt, den Goldpreis zu beeinflussen.

Sobald Bitcoin auf dem Markt ist, wird sein Wert ausschließlich durch das Vertrauen in das System bestimmt. Je mehr Leute vertrauen, desto mehr Bitcoin wird gekauft, desto mehr Dollar werden investiert und infolgedessen wird der teurere Bitcoin sein.

Bevor Leute Bitcoin vertrauen können, sollten sie herausfinden, ob dieses System über ein ausreichendes Maß an Sicherheit verfügt und ob es als Geld verwendet werden kann, dh ob es die Eigenschaften des Geldes hat, die ich am Anfang aufgeführt habe. Lernen Sie dies sicher, Sie können nur in den Grundsätzen von Bitcoin disassemblieren.

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