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

BitCoin was ist das?

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

Ich habe vor kurzem über Bitcoin gelernt, aber er hat mich sofort mit seiner Idee von p2p bestochen. Je tiefer ich in ihr Wiki grabe, desto mehr bekam ich diese Idee. Seine Umsetzung ist aus technischer Sicht schön und elegant.

Die Suche nach Bitcoin gibt eine Reihe von Themen. Mit Kommentaren ist es spürbar, dass viele Menschen, vor allem diejenigen, die mit Bitcoin direkt vertraut sind, viele Fragen über die Prinzipien seiner Arbeit haben. 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 großen Missverständnisse über Bitcoin ist die Idee, dass Bitcoin ein weiteres "Stück Papier" ist, auch elektronische, die nur "echtes" Geld darstellen, sind solche Schuldbelege. Daher der Ursprung der meisten anderen Trugschlüsse: Wenn es sich um Papierstücke handelt, dann sind sie wertlos; Sie können gedruckt oder zerstört werden, so viele wie Sie möchten; Sie können gefälscht werden; Sie können kopiert werden

Ich wiederhole - das alles ist nichts weiter als Wahnvorstellungen. Im Mittelpunkt der Idee von Bitcoin lag der Wunsch, nicht nur ein weiteres "Stück Papier" zu schaffen, das echtes Geld, wie Gold, sondern ein Analogon von Gold selbst darstellt. Nehmen Sie diese Eigenschaften von Gold, durch die es das ideale Geld ist, und machen Sie eine elektronische Währung auf ihrer Basis.

Komplexität der Extraktion

Gold kann nicht kopiert werden - es kann nur erhalten werden. Aber das ist ein sehr kostspieliger Prozess sowohl in der Zeit als auch in den Ressourcen. Zum Teil deshalb wird Gold so hoch geschätzt. Um es klarer zu machen, schauen wir uns ein Beispiel an.

Angenommen, eine Person den ganzen Tag eifrig extrahiert Gold und extrahiert als Ergebnis 1 kg. Für ihn ist die Kosten für Gold abgebaut ein Tag der harten Arbeit. Nach einem anstrengenden Tag entschloss er sich, sich auszuruhen und ins Kino zu gehen. Durch glücklichen Zufall gab der Kassierer im Austausch für Gold Karten. Warum Weil die Kasse Gold mag, aber ich mag es nicht, mit einem Pick den ganzen Tag zu arbeiten. Deshalb ist er bereit, einen Dienst zu erbringen - um ein Ticket zu geben - im Austausch für 1 kg Gold. Tatsächlich tauscht er seinen Dienst für einen Tag harter Arbeit aus.

Nun stellen wir uns eine andere Situation vor. Erfunden einen Kopierer, der mit Gold arbeitet. Und jede Person kann 10 kg aus 1 kg Gold pro Minute machen. In dieser Situation wird der Kassierer nicht mehr Karten für Gold austauschen, da er jetzt leicht drucken kann, so viel wie er will. Gold wird aufhören, irgendeinen Wert zu haben, und es kann nicht mehr als Geld verwendet werden.

In Bitcoin erfordert 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

Das längere Gold wird abgebaut, desto schwieriger (kostspieliger durch Ressourcen) wird es, es zu extrahieren. Damit wird sichergestellt, dass die Inflation unter Kontrolle ist.

In Bitcoin wird ein ähnliches Verhalten durch die Einführung einer Funktion der Geschwindigkeit der insgesamt produzierten Münzen von Zeit zu Zeit erreicht. Diese Funktion ist umgekehrt proportional, dh die Geschwindigkeit nimmt mit der Zeit ab und neigt zu Null. Wenn wir das Integral dieser Funktion in Bezug auf die Zeit nehmen, erhalten wir eine exponentielle. Ungefähr das:

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

Es ist zu sehen, dass die Gesamtzahl der Münzen dazu neigt, 21.000.000 zu sein. Die Details von Bitcoins Arbeit werden weiter diskutiert. In der Zwischenzeit müssen Sie zwei Dinge kennen: Münzen erscheinen im System in Chargen etwa alle 10 Minuten, die Anzahl der Münzen in einem Bündel ist 50, und es sinkt zweimal alle 4 Jahre.

Wesentlichkeit

Dies ist bereits eine Eigenschaft nicht so viel von Gold wie von einer nicht-elektronischen Währung. Ein Goldbarren kann nicht zweimal um einen Dienst oder einen Gegenstand ausgetauscht werden. Das heißt, zu einem Zeitpunkt kann es entweder vom Verkäufer oder vom Käufer sein.

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

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

Kette von Blöcken

Jedes elektronische Zahlungssystem sollte irgendwo und irgendwie Geschäfte 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 einen Header und eine Liste von Transaktionen. Der Header besteht aus mehreren Eigenschaften, unter denen es einen Hash des vorherigen Blocks gibt. So speichert die gesamte Blockkette alle Transaktionen für die gesamte Zeit, in der Bitcoin läuft.

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

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

Das funktioniert wie folgt. Einer der Kunden schafft eine neue Transaktion und sendet sie an andere Kunden, die damit beschäftigt sind, den Block zu erzeugen. Sie fügen diese Transaktion zu ihrem Block hinzu und erzeugen weiter. Früher oder später kann jemand einen Block erzeugen. Ein solcher Block ist versiegelt (es werden keine Transaktionen mehr hinzugefügt) und über das Netzwerk geschickt. Als nächstes überprüfen die Clients den Block und die Transaktionen in ihr für die Gültigkeit. Wenn es keine Probleme gibt, gelten die Transaktionen als genehmigt. Zu diesem Zeitpunkt hat der frische Block bereits jeden Kunden erreicht und der Kette hinzugefügt. Danach wird der Prozess wiederholt - die Kunden beginnen, den nächsten Block zu generieren und neue Transaktionen zu sammeln.

Blockieren

Betrachten Sie den Inhalt des Blocks und den Prozess der Generierung es genauer. Ein Beispielblock befindet sich auf demselben Bitcoin Block Explorer . 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 eher zufällig, und die Zeit der Berechnung ist vorhersehbar. Ich möchte beachten, dass nur der Header gehastet ist, ohne Transaktionen. Die Anzahl der Transaktionen wird also nicht wesentlich die Zeit der Berechnung des Hashs beeinflussen.
  • Ver - Die Version des Blockschemas. Im Moment haben alle Blöcke eine Version - 1.
  • Prev_block - Hash den vorherigen Block in der Kette. Aufgrund dieser Eigenschaft kann die Kette nicht durch das Ersetzen eines der Blöcke darin gefälscht werden, da der Hash des Blocks immer von dem Hash des vorherigen Blocks in der Kette abhängt. Wenn du einen der Blöcke änderst, musst du alle nachfolgenden neu erstellen.
  • Mrkl_root - Merkle root - Liste der Transaktionshashs. Der Block Hash muss unbedingt von Transaktionen abhängen, damit 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 gehastet, und dann werden ihre Hashes verwendet, um den Hash des gesamten Blocks zu berechnen.

Es mag absurd erscheinen - warum doppelt berechnen die Hash der gleichen. Aber die Tatsache ist, dass der Transaktionshash nur aktualisiert wird, wenn eine neue Transaktion dem Block hinzugefügt wird und der Hash des Blockheaders mehrere tausendmal pro Sekunde neu berechnet wird. Je näher die Größe des Headers in der Konstanten ist, desto genauer kann man die Zeit voraussagen, die es braucht, um seinen Hash zu berechnen.

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

Dies ist wie folgt. Die Anzahl der Blöcke, die in den letzten zwei Wochen erzeugt wurden, wird berechnet und mit dem Standard verglichen (1 Block alle 10 Minuten). Wenn es zu viele Blöcke gibt, dann erhöht sich die Komplexität. Wenn die Blöcke zu klein sind - sinkt. So passt sich das System an die Zunahme der Anzahl der Benutzer und damit an die Gesamtkapazität ihrer Rechner an.

  • Nonce - Eine Zahl, die ab Null beginnt, wird nach jeder Iteration der Hashberechnung inkrementiert. Tatsächlich ist dies der Fall, bis der Hash kleiner ist als der Zielwert. Damit jeder neue Hash sich von dem vorherigen unterscheidet, muss mindestens eine der Eigenschaften des Blockkopfes unterschiedlich sein.

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

Betrachten wir eine hypothetische Situation. Alle Nonce-Werte wurden geprüft und keiner von ihnen ist geeignet. Während dieser Zeit hat sich kein anderes Eigentum geändert. Es gibt einen Nonce-Überlauf und es fängt wieder von vorne an. Es stellt sich heraus, dass dann die Hashes wiederholt werden. Um solche Situationen zu vermeiden, ändert sich nach einem Nonce-Überlauf die besondere Eigenschaft einer der Transaktionen. Danach wird Merkle root aktualisiert und die Header der Blockheader-Hashes werden nicht wiederholt.

  • N_tx - Anzahl der Transaktionen in der Liste.
  • Größe - Die Blockgröße in Bytes.

Transaktionen

Transaktionen sind in Blöcken in Form einer Liste enthalten. Sie, wie Blöcke, richten sich in Ketten. Jede Transaktion muss angeben, wo es das Geld nimmt (von welcher vorhandenen Transaktion) und wo es leitet.

Um den Adressaten anzugeben, wird der öffentliche Schlüssel verwendet. Um den Empfänger könnte das Geld verwenden, muss er eine neue Transaktion, die Geld von der vorherigen nehmen und umleiten sie an eine andere Adresse zu schaffen. Um zu beweisen, dass eine Person sein Geld nutzt, anstatt jemand anderes zu übersetzen, muss er seine digitale Signatur in seiner Transaktion verlassen. Dann können Sie jederzeit sicherstellen, dass alle Transaktionen im System gültig sind.

In der Praxis wird das alles mit Hilfe der folgenden Eigenschaften realisiert:

  • Hash - Der Hash der gesamten Transaktion. Es stellt sich heraus, dass die Transaktionen zweimal gehauen werden. Das erste Mal während der Berechnung der Transaktion Hash. Das zweite Mal während der Berechnung des Blockhashs. 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 du die Transaktion änderst und irgendwie auf wundersame Weise, wird ihr Hash nicht brechen, dann werden alle anderen Hashes brechen und die veränderte Kette von Blöcken wird von allen Clients abgelehnt.
  • Ver - Die Version des Transaktionsschemas. Bisher hat es sich nie verändert, also ist es überall gleich 1.
  • Vin_sz - Die Anzahl der bisherigen Transaktionen, aus denen Geld auf neue Adressen übertragen wird. Eine oder mehrere.
  • Vout_sz - Anzahl der Adressen, an die Geld übertragen wird. Eine oder mehrere.
  • Lock_time - Noch nicht verwendet und überall gleich 0. Die Idee ist, anstehende Transaktionen zu erstellen, so dass sie nicht zum aktuell generierten Block hinzugefügt werden, sondern zum Beispiel zum nächsten. Es wird davon ausgegangen, dass diese Eigenschaft die Anzahl der Blöcke angibt, die die Transaktion vor dem Hinzufügen überspringen soll. Dies ermöglicht Ihnen, die Transaktion zu ändern und es für einige Zeit neu zu signieren.
  • Größe - Die Größe der Transaktion in Bytes. Die Größe der Transaktion im JSON-Format ist impliziert.
  • In - Enthält eine Liste der Transaktionseingaben (Quellen). Die Eingänge sind die Ausgänge der bisherigen Transaktionen (prev_out). Jeder Ausgang hat folgende Eigenschaften:
    • Hash - Der Hash der vorherigen Transaktion.
    • N - Da eine Transaktion mehrere Ausgänge haben kann, müssen Sie angeben, welche von ihnen das Geld genommen wird. 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 hat, nicht jemand anderes. Um dies zu tun, gibt 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 es ECDSA zur Unterschrift der gleichen Transaktion hinzu, die durch seinen privaten Schlüssel gemacht wird. Das beweist, daß er von seinem Geld und nicht von Fremden verfügt.

Nach der Liste der Eingaben der Transaktion (in) wird eine Liste von Ausgängen (out), d.h. Adressen, angezeigt. Jeder Ausgang hat folgende Eigenschaften:

  • Wert - Enthält den Geldbetrag, der auf die neue Adresse übertragen wird. Sie werden aus früheren Transaktionen entnommen. Daher sollte diese Zahl ihren Betrag nicht überschreiten. Zum Beispiel wollen wir 10 Münzen aus einer Transaktion und 20 von einem anderen und senden 25 an eine neue Adresse. Dass die restlichen 5 Münzen nicht verloren sind, schicken wir sie uns als eine Veränderung. So werden in unserer Transaktion zwei Empfänger, von denen wir selbst sind. Der Wert wird immer in Nanomonetten angegeben, um Bruchzahlen zu vermeiden.
  • ScriptPubKey - Diese Eigenschaft, zusammen mit scriptSig, bildet ein Skript auf dem modifizierten

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

Für meinen Geschmack ist die Frage des Geldes einfach und elegant. In jedem Block ist die erste Transaktion in der Liste eine spezielle Transaktion. Es hat immer einen Eingang, der 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 laufen lassen. Während ihre Mehrheit, Bitcoin nichts bedroht.

Schlussfolgerung

Nachweis der Arbeit (Nachweis der Arbeit) ist das Ergebnis einer Arbeit, die schwer zu erreichen ist, aber leicht zu überprüfen ist. Die Arbeit des Bitcoin-Netzes basiert auf diesem Prinzip. Überprüfe den Hash (das Ergebnis der Arbeit) in einem Bruchteil einer Sekunde. Und um es abzuholen, braucht es viel Arbeit.

Hier kann man sich an die Analogie mit Gold erinnern, deren Extraktion viel Zeit und Ressourcen braucht. Aber um das zu verstehen, bevor du Gold bist, kannst du fast sofort. In diesem Sinne hat Bitcoin auch seinen Wert. Aber du brauchst das nicht als Preis in Dollar oder in Stromrechnungen zu verstehen, die der Computer bei der Auswahl eines Hashs benutzt hat.

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

Der ursprüngliche Goldwert wurde ausschließlich von denen bestimmt, die ihn extrahierten. Für das Gold abgebaut, fragte er so sehr, 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 Vertrauensniveau des Systems bestimmt. Je mehr Menschen vertrauen, desto mehr Bitcoin wird gekauft, desto mehr Dollar werden in sie investiert und infolgedessen wird die mehr Bitcoin sein.

Bevor die Leute Bitcoin 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, das ich am Anfang aufgeführt habe. Lernen Sie dies sicher, dass Sie sich nur in den Prinzipien von Bitcoin zerlegen können.

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