Hallo, wie man durch die Seed-Phrase mittels einer Wallet wieder an seine BTCs kommt hab ich verstanden.
Mich würde aber interessieren wie das auf technischer Ebene (Logisch, Programmtechnisch) gelöst ist.
BTCRecovery (btcrecover/btcrecover at master · 3rdIteration/btcrecover · GitHub) bietet z.B. die Möglichkeit via einer aus der Blockchain erstellten Adressdatenbank. Indem ansch. mittels des Seeds, systematisch Adressen erzeugt werden, um diese gegen die DB abzugleichen und somit die entsprechenden BTCs der damit verbundenen Transaktionen zu ermitteln und aufzurechnen. (Wie man anhand dieses Vorgehens alle Adressen erwischen will ist mir nicht klar)
Ist das die einzige Möglichkeit und wird das so in den unterschiedlichen Wallets gemacht ? Oder bestehen noch andere Herangehensweisen/Techniken ?
Links zu entsprechenden Erklärungen/Projekten/Code wären sehr hilfreich.
Wäre schön wenn sich hier jemand findet, der Licht ins Dunkel bringen könnte. Danke.
Das läuft letztlich ganz genau so, wie wenn du deine Wallet erstmals aufsetzt.
Dein Wallet exportiert ein paar Adressen an die Software, die mit dem Wallet kommuniziert. Das kann irgendeine Applikation eines Wallet Anbieters sein, oder ein Desktop Wallet, oder eine Kommandozeile, etc.
Die Software hat eine Verbindung zu einer Node und überprüft mit Hilfe der Node, ob Transaktionen zu einer dieser Adressen bekannt sind.
Schon klar, was aber, wenn du NUR die Seed-Phrase hast, keine Adressen.
Da wird es dann spannend. Aus der Seed-Phrase kann man ja sämtliche Master-Keys und Child-Keys und die entsprechenden Adressen generieren. Diese werden dann auch von der Wallet vorgehalten.
Wenn aber all das weg ist und man nur noch seinen Seed hat. Was passiert da technisch, z.B. in einer komplett neuen, leeren Wallet, um wieder seine BTCs zu ermitllen.
Das Vorgehen um aus der Seedphrase die Keys und Adressen abzuleiten ist in BIP39 und BIP32 standardisiert. Jede Standard Software Wallet kennt also nach Eingabe der Wörter all deine Keys und Adressen.
Bei einer Hardware Wallet kennt nur das Gerät deine Seedphrase, exportiert aber den xpub des verwendeten Accounts an die verwendete Wallet Software.
Jede Wallet Software muss zur Ermittlung deiner Balance, oder zum Übermitteln von Transaktionen, mit einer Node des Bitcoin Netzwerks verbunden sein.
Die Software fragt also nun der Reihe nach, beginnend beim Adress-Index 0, die Adressen deines Bitcoin Accounts bei der Node ab.
Die Node führt neben der Blockchain eine Datenbank aller aktuell verfügbaren Bitcoin (UTXO Set). Für jede angefragte Adresse prüft sie ob ein „Guthaben“ darauf verfügbar ist, also entsprechende UTXOs vorhanden sind, und liefert diese zurück zur Wallet Software.
Wie diese Node genau sucht und welche Datenbanken sie pflegt hängt evtl. auch vom Betreiber und der zusätzlich verwendeten Software ab (z.B. Electrum Server). Ich kann mir vorstellen, dass größere Firmen da auch eigene Speziallösungen haben.
Sobald die Wallet Software irgendwann für jede weitere Adresse keine UTXOs mehr übermittelt bekommt, hört sie auf weiter anzufragen. Sie geht dann davon aus, dass die Adressen ab diesen Indizes nicht mehr verwendet wurden.
Soweit ich weiß gibt es weitere Feinheiten und Unterschiede, z.B. zu Privacy Zwecken. Aber im Groben ist es das.
Also ist es tatsächlich so, wie das auch BTCRecovery macht, indem erzeugte Adressen durchgegangen werden.
Der entscheidende Punkt, den ich noch nicht so ganz verstanden hatte war letztlich das Abbruchkriterium der Suche. Verstanden habe ich aus deiner Antwort, das a.) die Systematik (Start bei Adressindex 0) und b.) keine weitere Adresse liefert mehr was zurück, als Abbruchkriterium, die Suche abbrechen.
Bleibt nur noch die Frage, was bei eine „Lücke“ von zwar erzeugten, aber nicht verwendeten Adressen, passiert, denn Adressen kann ich ja ständig generieren und wenn die Erzeugung nach den Standards (PIP 39, 32 44) abläuft, wird entsprechend die nächste Adresse einfach ausgegeben. Nach meinem Verständnis können somit unbenutzte Adressen entstehen und somit eine „Lücke“ erzeugen, bei der diese Adressen nichts zurück liefern und somit die Suche abbrechen würde.
Kennt jemand eine guten Open-Source-Wallet ? Dann kann ich mir das im Code ja mal ansehen, wie das dort gemacht wird.
Dort nach „gap limit“ suchen, vielleicht findest du die passende Funktion. Das Gap Limit ist die Anzahl leerer Adressen, nach der die Suche abgebrochen wird.
Ansonsten hilft vielleicht @stadicus weiter, einer der Bitbox Entwickler.
So einen Fall hatten wir erst neulich hier. Die Wallet zeigt die Coins, die weiter hinten liegen, dann nicht an, weil sie nach einer Lücke vorher schon abgebrochen hat (Thread).