Wallet-Wiederherstellung mit Bip39 Seed

Gibt es eine Möglichkeit, eine Brieftasche wiederherzustellen, wenn man eine Liste mit bip39-Seeds hat? Insbesondere habe ich eine Liste mit ~100 Samen – von denen einer mir gehört – und brauche einen automatisierten Weg, um herauszufinden, welcher gültig ist und meine Mittel enthält. Danke

Antworten (1)

Hier gibt es einiges zu beachten.

Kennen Sie zunächst den Weg der HD-Wallet? Sie können herausfinden, welche Art von Pfadstruktur Ihr Wallet verwendet, und wenn die Adresse mit den nicht ausgegebenen Transaktionen die allererste war, dann wäre es zum Beispiel Konto 0.

Siehe dies auf BIP44-Pfaden ...

Wenn Sie die Pfadstruktur kennen und die genaue Adresse kennen, nach der Sie in einem bestimmten Pfad suchen, können Sie mit bitcoinjs-lib so etwas tun:

const bip39 = require("bip39")
const bitcoin = require("bitcoinjs-lib")

const network = bitcoin.networks.bitcoin

for (const phrase of phrases) {
    const seed = await bip39.mnemonicToSeed(phrase)
    const root = bitcoin.bip32.fromSeed(seed, network)
    const path = "m/44'/0'/0'/0"
    const child = root.derivePath(path)
    const { address } = bitcoin.payments.p2sh({
        redeem: bitcoin.payments.p2wpkh({
            pubkey: child.publicKey,
            network
        }),
        network
    })

    if (address === '3...') {
        //this is yours
    }
}

Beachten Sie, dass dieses Beispiel für umschlossene P2WPKH-Adressen gilt (Präfix 3). Sie müssten dies je nach Art der Adresse, die Sie abgleichen möchten, ein wenig ändern.

Hallo Michael, leider habe ich den Pfad der HD Wallet nicht. Ich habe eine Liste von Seeds (und kann daher den öffentlichen Master-Schlüssel ableiten) und dachte daran, die Blockchain (blockchain.com) mit dem öffentlichen Master-Schlüssel zu scannen, um die Gelder in der Brieftasche zu sehen. Ich weiß, wie viele Bitcoins ich auf diesem Konto habe. Haben Sie weitere Vorschläge, wie Sie dies ohne den Pfad tun können? Ich kann immer Adressen ableiten, aber das wird sehr lange dauern.
@SameerLal in der Tat! Sie können die xpubs aus der Liste Ihrer Seeds erhalten, indem Sie sie wie oben gezeigt durchlaufen und dann auf blockchain.com/btc/xpub/<xpub_address > nachsehen, ob Sie Ihre Übereinstimmung gefunden haben.
Danke! Das funktioniert gut. Entschuldigen Sie die vielen Fragen, aber kennen Sie zufällig ein Python-Modul oder einen Code, der es mir ermöglicht, die xpub-Adresse von bip39-Seed abzuleiten, ohne dass ich mich schwer tun muss? versuche nur zeit zu sparen.
Sicher kein Problem. Ist Python Ihre Präferenz? Das Snippet, das ich oben gepostet habe, verwendet bitcoinjs-lib, das ziemlich gut gepflegt und einfach zu verwenden ist, aber wenn Node/JavaScript nicht Ihr Ding ist, kann ich Ihnen dabei helfen, dies auch mit einer Python-Bibliothek zu erreichen.
Ja, ich würde Python bevorzugen, weil ich bereits ein (ziemlich langes) Skript habe, das ich für andere Teile in Python geschrieben habe. Wenn Sie keine anderen Alternativen kennen, keine Sorge, ich kann einige Zeit damit verbringen, den von Ihnen geschriebenen Code zu pythonisieren.
Das sieht vielversprechend aus: github.com/ranaroussi/pywallet/blob/master/README.rst , außer dass Sie in Ihrem Fall Ihre Mnemonik aus einer Liste bereitstellen möchten, anstatt die Methode generate() zu verwenden.
das sieht interessant aus, außer ich denke, dass in der Readme eine Brieftasche erstellt wird, die von der Phrase abgeleitet ist. Der xpub-Schlüssel im json unterscheidet sich von dem, den ich auf Ians Website sehe: iancoleman.io/bip39 . Ich bin mir eigentlich nicht sicher, warum das so ist, irgendwelche Ideen?
Ich denke an so etwas: for seed in checksum_candidates: w = wallet.create_wallet(network="BTC", seed=seed) xpubkey = w['xpublic_key'] url = f'https://blockchain.info/multiaddr?active={xpubkey}' time.sleep(1) r = requests.get(url = url, verify=False) response_dict = json.loads(r.text) print(response_dict['wallet']['final_balance']) Aber ich mache mir Sorgen, dass diese Methode aus irgendeinem Grund nicht funktionieren könnte, da ich für alle meine Kandidatensamen einen Saldo von 0 bekomme (falsche Negative?)
Es scheint, dass die Python-Bibliothek den Pfad verwendet, m/44'/0'/0'/während Ians Website m/44'/0'/0/ohne das letzte verwendet . Der Pfad würde sich jedoch nur auf die abgeleiteten Adressen auswirken, nicht auf den Root-xpub. Verwenden Sie das Root-XPUB, um die Transaktionsverläufe abzufragen?