ELI5: Was ist Base58Check-Codierung?

Ich habe Beiträge darüber gesehen, wie es geht, und ich habe das Wiki darüber gelesen, was es ist , aber diese Erklärungen sind zu komplex. Kann jemand erklären, was es ist und warum es Base58Check-Codierung heißt? Sind Adressen, die generiert wurden, ohne diese Schritte zu durchlaufen, in Bitcoin noch gültig?

Dies ist die Erklärung des ursprünglichen Bitcoin-Clients in base58.h

// Why base-58 instead of standard base-64 encoding?
// - Don't want 0OIl characters that look the same in some fonts and
//      could be used to create visually identical looking account numbers.
// - A string with non-alphanumeric characters is not as easily accepted as an account number.
// - E-mail usually won't line-break if there's no punctuation to break at.
// - Doubleclicking selects the whole number as one word if it's all alphanumeric.

Um diese Frage zu vertiefen, was machen npm-Pakete wie bs58check genau? Die Beschreibung ist so

Eine geradlinige Implementierung von base58check, die auf bs58 erweitert wird.

Base58check = Prüfsumme + base58

Antworten (3)

Kann jemand erklären, was es ist und warum es Base58Check-Codierung heißt?

Der Name „Base58Check“ besteht aus zwei Teilen. Der erste Teil ist „ Base58 “. Dies ist ziemlich selbsterklärend, die Codierung verwendet Base 58. Dies bedeutet, dass es 58 Ziffern gibt, die durch 58 Zeichen dargestellt werden. Eine Ziffer ist eine Zahl zwischen 0 und 57, genau wie wir im Dezimalsystem (oder zur Basis 10) eine Zahl zwischen 0 und 9 haben. Da jede Ziffer ein Zeichen sein soll, brauchen wir ein anderes " Alphabet" für jede Ziffer. Für die Basis 58 verwenden wir das Alphabet, 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzwobei die Zahl 0 durch das Zeichen 1und die Zahl 57 durch das Zeichen dargestellt wird z. Zum Vergleich wird das Dezimalalphabet 0123456789mit der Zahl 0 durch das Zeichen 0und die Zahl 9 durch das Zeichen dargestellt 9.

Der zweite Teil des Namens ist „ Check “. Dies bezieht sich auf eine Prüfsumme. Das SHA256-Double der Daten, die wir codieren möchten, wird berechnet, und die ersten vier Bytes dieses Hashs werden als Prüfsumme verwendet. Dies ist eine Fehlererkennungsmethode, um sicherzustellen, dass die von uns erhaltenen Daten korrekt und nicht beschädigt sind. Diese vier Bytes werden an die Daten angehängt, die wir codieren, bevor wir eine Basiskonvertierung durchführen, um die Zeichenfolge zur Basis 58 zu generieren.

Wie bei allen Daten in einem Computer kann die gesamte Pre-Base58-Bytefolge als sehr große Ganzzahl interpretiert werden. Von dort aus ist es einfach, eine Basisumwandlung in die Basis 58 durchzuführen und somit die endgültige Zeichenfolge zur Basis 58 zu erzeugen.

Sind Adressen, die generiert wurden, ohne diese Schritte zu durchlaufen, in Bitcoin noch gültig?

Sie können keine Adresse generieren, ohne diese Schritte zu durchlaufen, daher ist es unmöglich, diese Schritte nicht zu durchlaufen, um eine Adresse zu erstellen.

Um diese Frage zu vertiefen, was machen npm-Pakete wie bs58check genau? Die Beschreibung ist so

Sie implementieren die gesamte Konvertierung von Bytes in Base58Check-codierte Zeichenfolgen.

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzhat 61Zeichen, oder?
@ user218867 Nein, es ist nicht das Alphabet, es fehlen Buchstaben.
Gut anzumerken ist, dass der base58check Tippfehler reduziert, da die Zeichen im Alphabet, die zur Codierung verwendet werden, bestimmte Zeichen wie Symbole sowie ähnlich aussehende Fehler wie lI (Kleinbuchstabe „L“, Großbuchstabe „I“) entfernen.

Kann jemand erklären, was es ist und warum es Base58Check-Codierung heißt?

Aufgrund des Namens hatte die Funktion in der ursprünglichen Bitcoin-Codebasis.

„Base58“ bezieht sich auf die Tatsache, dass es sich um ein Basis-58-Format handelt (es verwendet 58 verschiedene Zeichen zur Codierung der Daten), und „Check“ bezieht sich auf die Tatsache, dass den codierten Daten eine Prüfsumme hinzugefügt wird.

Sind Adressen, die generiert wurden, ohne diese Schritte zu durchlaufen, in Bitcoin noch gültig?

Es ist kompliziert.

Base58Check ist einfach eine Möglichkeit, eine Reihe von Datenbytes in eine Zeichenfolge zu codieren. Wenn Sie einen anderen Weg finden, eine Zeichenfolge zu konstruieren, die vom Base58Check-Decoder in etwas mit der richtigen Länge und dem richtigen Versionsbyte decodiert werden kann, ist das Ergebnis theoretisch tatsächlich eine gültige Adresse.

Ich erwarte, dass die Antwort auf Ihre Frage nein ist. Sie müssen etwas verwenden, das einem Base58Check-Encoder zumindest vage ähnlich ist, um eine gültige Adresse zu erhalten.

Um diese Frage zu vertiefen, was machen npm-Pakete wie bs58check genau?

Es implementiert eine Möglichkeit, Bytes in Base58Check-Strings zu konvertieren, und eine Möglichkeit, solche Strings wieder in Bytes zu konvertieren.

Eine Bitcoin-Adresse ist eine Reihe von Bits (in ihrer einfacheren Form ist es nur ein öffentlicher Schlüssel).

Um es für Menschen "lesbar" zu machen, wird es in eine Reihe von Buchstaben umgewandelt.

Base64 ist ein bekannter früherer Algorithmus dafür, aber es wurde entschieden, dass Zeichen wie O, I, 1, l, +, / zu Verwirrung führen könnten (sie ähneln anderen visuell oder sind keine Buchstaben), also 6 raus 64 Zeichen wurden entfernt: davon der Base58- Name.

Vor der Konvertierung werden Prüfsummenbits angehängt. Dadurch wird sichergestellt, dass nach der Konvertierung in Base58 jeder Fehler beim Transkribieren eines Buchstabens zu einer ungültigen Adresse führen würde, wenn er erneut in Bits konvertiert und die Prüfsumme überprüft wird. Daraus der Check von Base58Check .

Da Base58Check nur eine Darstellung des ursprünglichen Bitwerts ist, dienen diese letzteren Bits auch als Adresse (z. B. für Sicherungszwecke). Es geht eher darum, ob die von Ihnen verwendete App Bare Bits als Adressen akzeptiert.

npm bs58 konvertiert nur Bits in Base58, ohne die Prüfsumme zu berechnen oder zu überprüfen. npm bs58check hängt die Prüfsumme beim Konvertieren von Bits an und überprüft sie beim Zurücksetzen von Base58 auf Bits.