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

BitCoin was ist das?

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

Ich habe vor relativ kurzer Zeit von Bitcoin erfahren, aber er hat mich sofort mit seiner Idee von P2P bestochen. Je tiefer ich in ihrem Wiki vergraben bin, desto durchdrungener ist diese Idee. Die Umsetzung ist technisch gesehen schön und elegant.

Die Suche nach Bitcoin bietet eine Reihe von Themen. Aus den Kommentaren geht hervor, dass viele Menschen, insbesondere diejenigen, die Bitcoin nicht direkt kennen, viele Fragen zu den Prinzipien seiner Arbeit haben. Es gibt auch viele Vermutungen, oftmals 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 ist der Gedanke, dass Bitcoin nur ein weiteres "Stück Papier" ist, sei es elektronisch, das nur "echtes" Geld darstellt, also solche Schuldscheindarlehen. Hier entstehen die meisten anderen Missverständnisse: Da es sich um Zettel handelt, sind sie nichts wert; Sie können nach Belieben gedruckt oder vernichtet werden. sie können gefälscht werden; Sie können sie kopieren

Ich wiederhole - das alles ist nichts weiter als Wahnvorstellungen. Die Idee hinter Bitcoin basierte auf dem Wunsch, nicht nur "Papierstücke" zu schaffen, die echtes Geld darstellen, wie Gold, sondern ein Analogon von Gold. Nehmen Sie die Eigenschaften von Gold, dank denen es ein ideales Geld ist, und machen Sie daraus eine E-Währung.

Bergbau-Schwierigkeit

Gold kann nicht kopiert werden - es kann nur abgebaut werden. Dies ist jedoch zeit- und ressourcenintensiv. Auch deshalb wird Gold so hoch geschätzt. Betrachten Sie das Beispiel, um es klarer zu machen.

Angenommen, eine Person hat den ganzen Tag fleißig Gold abgebaut und schließlich 1 kg produziert. Für ihn ist der Wert des abgebauten Goldes ein Tag harter Arbeit. Nach einem anstrengenden Arbeitstag beschloss er, eine Pause einzulegen und ins Kino zu gehen. Durch Zufall verschenkte die Kassiererin Tickets gegen Gold. Warum? Weil die Kassiererin Gold mag, aber nicht den ganzen Tag mit einer Spitzhacke arbeitet. Daher ist er bereit, einen Service - ein Ticket zu verschenken - gegen 1 kg Gold anzubieten. Tatsächlich tauscht er seinen Dienst gegen einen Tag harter Arbeit.

Stellen Sie sich jetzt eine andere Situation vor. Erfand einen Kopierer, der mit Gold arbeitet. Und jeder Mensch kann 10 kg pro Minute aus 1 kg Gold herstellen. In dieser Situation tauscht der Kassierer keine Tickets mehr gegen Gold ein, da er es nun selbst leicht ausdrucken kann, so viel er will. 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 abgebaut wird, desto schwieriger wird es (ressourcenintensiver), es abzubauen. Dies stellt sicher, dass die Inflation unter Kontrolle ist.

In Bitcoin wird ein ähnliches Verhalten erzielt, indem eine Funktion der Rate der insgesamt über die Zeit abgebauten Münzen 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 in der Art:

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

Hier können Sie sehen, dass die Gesamtzahl der Münzen 21.000.000 beträgt. Einzelheiten der Arbeit von Bitcoin werden weiter besprochen. In der Zwischenzeit müssen Sie zwei Dinge wissen: Die Münzen werden ungefähr alle 10 Minuten im Stapel angezeigt, die Anzahl der Münzen in einer Packung beträgt 50 und sie verringert sich alle 4 Jahre um die Hälfte.

Materialität

Diese Immobilie ist weniger Gold als irgendeine nicht elektronische Währung. Ein Goldbarren kann nicht zweimal gegen eine Dienstleistung oder ein Produkt eingetauscht werden. Das heißt, zu einem bestimmten Zeitpunkt kann es entweder vom Verkäufer oder vom Käufer stammen.

Dieses Verhalten ist natürlich für die Materialwährung, aber nicht für die Elektronik. Um dieses Verhalten von virtuellem Geld zu erreichen, muss man viel Einfallsreichtum besitzen. In Bitcoin wird dieses Verhalten vom Transaktionsmechanismus bereitgestellt. Alle Transaktionen werden zu Ketten zusammengeführt. Jede Transaktion nimmt Münzen von einer oder mehreren bestehenden Transaktionen und gibt an, für wen sie bestimmt sind. Sie können daher jederzeit die gesamte Kette auf Gültigkeit prüfen.

Die Komplexität des Bergbaus, die begrenzte Ressource, die Materialität - diese Eigenschaften sowie die Verwendung von Kryptografie für die Sicherheit ermöglichen es, Bitcoin als Geld zu verwenden. Das Kernbitcoin basiert auf ihnen. Dies ist nicht nur eine Vereinbarung. Alle von ihnen sind vom Design her in das System integriert, und auf andere Weise wird es nicht funktionieren. Es ist an der Zeit, genau diesen Entwurf in Betracht zu ziehen.

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 den aktuellen Versionen von Bitcoin wird die Blockkette vollständig von jedem Client heruntergeladen, wodurch das System vollständig dezentralisiert wird. Die Daten sind nicht verschlüsselt und jeder kann alle Transaktionen manuell verfolgen. Es gibt sogar eine spezielle Site - Bitcoin Block Explorer, auf der Sie alle Informationen zu Blöcken und Transaktionen auf einfache Weise anzeigen können.

Zum Zeitpunkt des Schreibens betrug die Anzahl der Blöcke in der Kette 110.968, und wie ich bereits sagte, erhöht sich diese Anzahl ungefähr alle 10 Minuten. Dies bedeutet, dass einige der Teilnehmer in der Lage waren, einen neuen Block zu erstellen.

Es funktioniert wie folgt. Einer der Clients erstellt eine neue Transaktion und sendet diese an andere Kunden, die gerade mit dem Generieren des Blocks beschäftigt sind. Sie fügen diese Transaktion ihrem Block hinzu und fahren mit der Generierung fort. Früher oder später kann jemand einen Block generieren. Ein solcher Block wird versiegelt (es werden keine weiteren Transaktionen hinzugefügt) und über das Netzwerk gesendet. Anschließend überprü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 Vorgang - Kunden beginnen, einen weiteren Block zu generieren und neue Transaktionen darin zu sammeln.

Block

Betrachten Sie den Inhalt des Blocks und den Prozess seiner Erzeugung genauer. Ein Beispiel für einen Block finden Sie im selben Bitcoin Block Explorer . Der Block besteht aus einem Header und einer Liste von Transaktionen. Der Header besteht aus folgenden Eigenschaften:

  • hash - SHA-256-Hash des Blockheaders. Solch ein Hash ist ziemlich zufällig und seine Berechnungszeit ist vorhersehbar. Ich möchte darauf hinweisen, dass nur der Header gehasht wird, ohne Transaktionen. Die Anzahl der Transaktionen hat also keinen großen Einfluss auf die Hash-Berechnungszeit.
  • ver - Blockschema-Version. Im Moment haben alle Einheiten eine Version - 1.
  • prev_block - Der Hash des vorherigen Blocks in der Kette. Aufgrund dieser Eigenschaft kann die Kette nicht gefälscht werden, indem einer der Blöcke in ihr ersetzt wird, 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 Transaktions-Hashes. Der Hash-Block muss notwendigerweise von Transaktionen abhängen, damit sie nicht gefälscht werden können. Die direkte Berechnung dauert jedoch lange, wenn die Anzahl der Transaktionen groß ist. Daher werden die Transaktionen selbst zuerst gehasht und dann werden ihre Hashes verwendet, um den Hash des gesamten Blocks zu berechnen.

Es mag absurd erscheinen - warum den Hash des Gleichen doppelt berechnen. Fakt ist jedoch, dass der Transaktions-Hash nur aktualisiert wird, wenn dem Block eine neue Transaktion hinzugefügt wird, und der Blockheader-Hash mehrere tausend Mal pro Sekunde neu berechnet wird. Je näher die Größe des Headers in einer Konstanten liegt, desto genauer können Sie den Zeitpunkt für die Berechnung des Hashs vorhersagen.

  • time - uint32_t repräsentiert die Blockerstellungszeit. Das maximal zulässige Jahr ist 2106.
  • Bits - Eine der wichtigsten Eigenschaften. Dies ist eine 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, einen Block zu erstellen. Je kleiner es ist, desto unwahrscheinlicher ist es, in einer Iteration einen geeigneten Hash zu finden. Diese Eigenschaft wird alle zwei Wochen aktualisiert.

Es passiert wie folgt. Die Anzahl der generierten 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, nimmt die Komplexität zu. Wenn die Blöcke zu klein sind - nimmt ab. Somit passt sich das System an die steigende Anzahl der Benutzer und damit an die Gesamtkapazität ihrer Computer an.

  • nonce - Eine Zahl, die ab Null nach jeder Iteration der Hash-Berechnung 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 mindestens eine der Block-Header-Eigenschaften unterschiedlich sein.

Zum Beispiel ändert sich die Version nie. Der Hash des vorherigen Blocks wird aktualisiert, wenn jemand vor uns steht 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 keine vorhanden ist.

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

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

Transaktionen

Transaktionen sind in Form einer Liste in Blöcken enthalten. Sie reihen sich wie Blöcke in Ketten aneinander. Bei jeder Transaktion sollte angegeben werden, wohin das Geld fließt (von welcher bestehenden Transaktion) und wohin es gesendet wird.

Um den Adressaten anzuzeigen, wird sein öffentlicher Schlüssel verwendet. Damit der Adressat das erhaltene Geld verwenden kann, muss er eine neue Transaktion erstellen, bei der das Geld von der vorherigen Transaktion abgenommen und an eine andere Adresse umgeleitet wird. Um zu beweisen, dass eine Person ihr Geld für die Überweisung verwendet und nicht das eines anderen, muss sie ihre digitale Signatur in ihrer Transaktion belassen. Dann können Sie 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. Erstmalige Berechnung des Transaktionshashs. Das zweite Mal während der Berechnung des Block-Hashs. 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 unterbrochen wird, werden alle anderen Hashes unterbrochen und die geänderte Blockkette wird von allen Clients zurückgewiesen.
  • ver - Transaktionsschemaversion. Bisher hat es sich nie geändert, daher ist es überall gleich 1.
  • vin_sz - Die Anzahl der vorherigen Transaktionen, von denen Geld an neue Adressen überwiesen wird. Ein oder mehrere.
  • vout_sz - Die Anzahl der Adressen, an die Geld überwiesen wird. Ein oder mehrere.
  • 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, sondern beispielsweise zum folgenden hinzugefügt werden. Diese Eigenschaft gibt an, wie viele Blöcke die Transaktion vor dem Hinzufügen überspringen soll. Dadurch ist es für einige Zeit möglich, die Transaktion zu ändern und erneut zu signieren.
  • size - Transaktionsgröße in Bytes. Implizierte Transaktionsgröße im JSON-Format.
  • in - Enthält die Liste der Eingaben (Quellen) der Transaktion. Als Eingaben werden die Ausgaben vorheriger Transaktionen (prev_out) verwendet. Jeder Ausgang hat folgende Eigenschaften:
    • Hash - Der Hash der vorherigen Transaktion.
    • n - Da eine Transaktion mehrere Ausgänge haben kann, müssen Sie angeben, von welchen das Geld entnommen wird. Dafür und dafür gibt es diese Eigenschaft. Es enthält die laufende Nummer 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, dh 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. Jeder Ausgang hat folgende Eigenschaften:

  • value - Enthält den Geldbetrag, der an die neue Adresse überwiesen wird. Sie stammen aus früheren Transaktionen. Daher sollte diese Anzahl ihre Summe nicht überschreiten. Zum Beispiel möchten wir 10 Münzen von einer Transaktion und 20 von einer anderen nehmen und 25 an eine neue Adresse senden. Um die restlichen 5 Münzen nicht zu verlieren, senden wir sie uns als Wechselgeld zu. Bei unserer Transaktion gibt es also zwei Adressaten, von denen einer wir selbst sind. Der Wert wird immer in Nanomonet angegeben, um Bruchzahlen zu vermeiden.
  • scriptPubKey - Diese Eigenschaft bildet zusammen mit scriptSig das Skript für die geänderte

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, der zufolge die Zahl der Gelder exponentiell wächst. Woher kommt also neues Geld im System?

Nach meinem 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 die Eigenschaft coinbase anstelle der Eigenschaft scriptSig hat . Diese Eigenschaft kann alles enthalten.

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

Fazit

Arbeitsnachweis - das Ergebnis einer Arbeit, die schwer zu erreichen, aber leicht zu überprüfen ist. Das Bitcoin-Netzwerk basiert auf diesem Prinzip. Sie können den Hash (das Ergebnis der Arbeit) in Sekundenbruchteilen überprüfen. Und um es aufzuheben, ist viel Arbeit erforderlich.

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

Der Dollar-Preis ist ein bisschen anders. Es ist nicht in Bitcoin integriert und wird ausschließlich vom Markt bestimmt. Denn Gold an sich garantiert Ihnen auch 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 abgebaute Gold verlangte er so viel, dass die Bemühungen, es abzubauen, kompensiert werden konnten. Danach beginnt der Markt, den Goldpreis zu beeinflussen.

Sobald Bitcoin auf den Markt gekommen ist, wird sein Wert ausschließlich durch das Vertrauen in das System bestimmt. Je mehr Menschen vertrauen, desto mehr Bitcoin wird gekauft, desto mehr Dollar werden sie investieren und desto teurer wird Bitcoin.

Bevor Menschen Bitcoin vertrauen können, müssen sie herausfinden, ob dieses System ein ausreichendes Maß an Sicherheit bietet und ob es als Geld verwendet werden kann, dh die Eigenschaften von Geld aufweist, die ich am Anfang aufgelistet habe. Um dies sicher zu wissen, können Sie nur die Prinzipien von Bitcoin verstehen.

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