Dies ist mein erster Beitrag zur Blockchain-bezogenen Programmierung, also entschuldigen Sie bitte meine Unwissenheit. Ich finde die Terminologie in den BIP32- und BIP39-Spezifikationen schwer verständlich, daher versuche ich hier, mein Verständnis zu bestätigen. Ich hoffe, jemand kann die Dinge für mich aufklären. Bitte korrigieren Sie mich, wenn ich das falsch verstehe. Hier geht.
Ich habe einen Trezor gekauft und meinen Seed mit dem Trezor generiert. Ich verstehe, dass dies eine Implementierung von BIP39 ist. Mein Verständnis ist, dass ich diesen Schlüssel auf einem Offline-Computer wie Tails Linux oder Bitkey.IO Live-CD generieren könnte, wenn ich Trezor nicht verwenden würde. Mein Verständnis ist, dass dies als Schlüssel für die Unterzeichnung von Transaktionen in der Zukunft dient. Dies erzeugt jedoch selbst keine Adressen in der Blockchain selbst.
Nachdem ich den Schlüssel erstellt hatte, generierte ich einige Adressen. Eine für Bitcoin, eine für Litecoin und so weiter. Auch hier wirkt sich das bloße Erstellen von Adressen in keiner Weise auf die Blockchain aus. Das einzige, was an diesen Adressen besonders ist, ist, dass die einzige Möglichkeit, diese Adressen zu erstellen, darin besteht, den Seed überhaupt zu haben. Ist dieses Verständnis richtig?
Danach kann Währung an die von mir erstellten Adressen gesendet werden. Das bedeutet, dass das Blockchain-Netzwerk akzeptieren muss, dass die Transaktionen getätigt wurden, und dann werden die Transaktionen mit allen anderen Knoten im Netzwerk synchronisiert, die schließlich für mich sichtbar sind, wenn ich die Adresse in der Software meines Trezors überprüfe.
Hier wird mein Verständnis etwas trübe. Es gibt auch einen sogenannten öffentlichen Schlüssel (xpub), mit dem ich die Details meiner Brieftasche und ihrer Transaktionen anzeigen kann, denke ich. Außerdem kann jeder, der die Adresse meiner Brieftasche hat, Transaktionen darin sehen, indem er die Blockchain abfragt.
Aber ohne den Seed kann niemand Münzen aus meinen Adressen transferieren. Der Seed wird dazu benötigt, um die Transaktionen zu signieren. Ist das richtig?
Nehmen wir an, mein Trezor ist verloren oder zerstört und alles, was ich noch habe, ist der Samen. Also kaufe ich einen neuen Trezor und stecke ihn ein. Ich möchte jetzt eine Wiederherstellung durchführen. Ich vermute also, dass es für die 24-Wort-Phrase wie ich sein wird. Rechts?
Was passiert an diesem Punkt? Ich habe keine Adressen oder XPUBs mehr aufgeschrieben, und ich brauche diese, um meine Salden zu sehen, bevor ich wieder Transaktionen unterzeichnen kann. Also, wie bekommt die Trezor-Software (oder andere deterministische Wallet-Software) meinen xpub und meine Adressen zurück?
Tun sie:
Edit: Ich lese das gerade durch. https://www.codeproject.com/Articles/784519/NBitcoin-How-to-scan-the-Blockchain . Es klingt so, als ob die Scanner-Klasse BIP37-Logik verwendet, um Daten aus der Blockkette herauszufiltern, um an die Adressen zu gelangen, die wahrscheinlich die Transaktionen enthalten, die ich sehen muss. Also, welche Eingaben braucht es, um dies zu tun? Kann ich etwas von meinem Seed ableiten, das sicher über eine API verwendet werden kann?
Von Mastering Bitcoin:
Erzeugen eines öffentlichen Schlüssels Ausgehend von einem privaten Schlüssel in Form einer zufällig generierten Zahl k multiplizieren wir ihn mit einem vorbestimmten Punkt auf der Kurve, dem sogenannten Generatorpunkt G, um einen anderen Punkt an einer anderen Stelle der Kurve zu erzeugen, der der entsprechende öffentliche Schlüssel ist K. Der Generatorpunkt wird als Teil des secp256k1-Standards spezifiziert und ist für alle Schlüssel in Bitcoin immer gleich.
K=k*G68
Dabei ist k der private Schlüssel, G der Generatorpunkt und K der resultierende öffentliche Schlüssel, ein Punkt auf der Kurve. Da der Erzeugerpunkt für alle Bitcoin-Nutzer immer gleich ist, ergibt ein privater Schlüssel k multipliziert mit G immer denselben öffentlichen Schlüssel K. Die Beziehung zwischen k und K ist fest, kann aber nur in eine Richtung berechnet werden, von k nach K. Deshalb kann eine Bitcoin-Adresse (abgeleitet von K) mit jedem geteilt werden und gibt den privaten Schlüssel des Benutzers (k) nicht preis.
Bedeutet dies also, dass mein Seed tatsächlich einen öffentlichen Schlüssel enthält? Und dieser Schlüssel ist der xpub? Mit anderen Worten, es ist also möglich, einen xpub aus dem Seed zu generieren? Ist das richtig?
Um die Frage auf den Punkt zu bringen: Wie ruft der Trezor oder eine andere Brieftasche angesichts meines Seeds alle zugehörigen Adressen, xpubs, öffentlichen Schlüssel, Transaktionen, Guthaben usw. ab, die aus dem Seed stammen?
Die verschiedenen privaten und öffentlichen Schlüssel werden alle von diesem Master-Seed abgeleitet.
Christian Findley
David Schwarz
Christian Findley
David Schwarz
Christian Findley
David Schwarz
Christian Findley
David Schwarz
Christian Findley
Christian Findley
David Schwarz
David Schwarz
Christian Findley
David Schwarz
Christian Findley
David Schwarz
Christian Findley