Ich versuche, die Empfangsadressen neu zu generieren (und Adressen zu ändern, was das betrifft), die meine Myzel-Brieftasche generiert hat.
Bisher habe ich die BIP39-Implementierung von Trezor verwendet , um die Entropie aus den 12 Wörtern zu generieren, und eine BIP32-Implementierung , die ich zuvor verwendet habe (erfolgreich, um dieselben Adressen wie Bitcoin Core zu generieren, der ein anderes Unterschlüsselschema verwendet, aber aus einem tpub, nicht aus der Entropie), um die Schlüssel aus der Entropie zu erzeugen.
Hier ist der Code:
from bip32utils import BIP32Key
from bip32utils import BIP32_HARDEN
import bip39
wallet_generator = bip39.Mnemonic('english')
entropy = wallet_generator.to_entropy('12 words here')
key = BIP32Key.fromEntropy(entropy)
account_number = 0
i = 0
print key.ChildKey(44 + BIP32_HARDEN) \
.ChildKey(0 + BIP32_HARDEN) \
.ChildKey(account_number + BIP32_HARDEN) \
.ChildKey(0) \
.ChildKey(i) \
.Address()
Ich versuche, dem hier beschriebenen Schema von BIP44 zu folgen .
Ich erhalte einen Schlüssel, aber nicht den, der in meiner ersten Myzeltransaktion erscheint. Ich habe versucht, die ersten 100 i
mit account_number
0 bis 9 zu durchsuchen, ohne Erfolg. Die Verwendung bip32gen
von der Befehlszeile aus erzeugt auch nicht den richtigen Schlüssel:
echo YOUR_ENTROPY_IN_HEX_HERE | \
bip32gen -v \
-i entropy -f - -x \
-o addr -F - -X \
m/44h/0h/0h/0/0
With entropy
umgewandelt in Hex mitprint ''.join('{:02X}'.format(x) for x in entropy)
Was vermisse ich? Ist die Entropie mit BIP39 Teil falsch? Liefert diese BIP32-Bibliothek fehlerhafte Adressen? Welche Alternativen gibt es?
AKTUALISIEREN:
Dank dieser Seite habe ich gesehen, dass das aus den 12 Wörtern generierte xprv falsch ist. Also ist entweder das bip39 defekt oder die Art und Weise, wie ich es verwende.
Die Schwierigkeit liegt bei den schlecht benannten BIP32Key.fromEntropy
.
Um eine neue Brieftasche zu erstellen, gehen Sie normalerweise wie folgt vor:
BIP32Key.fromEntropy
hätte eigentlich heißen sollen BIP32Key.fromSeed
.
Hier ist ein Beispiel:
from bip32utils import BIP32Key
from bip32utils import BIP32_HARDEN
import os, bip39
strength_bits = 128
entropy = os.urandom(strength_bits // 8)
wallet_generator = bip39.Mnemonic('english')
mnemonic = wallet_generator.to_mnemonic(entropy)
assert wallet_generator.to_entropy(mnemonic) == entropy # see, bijective!
# Or specify the mnemonic directly if you prefer:
mnemonic = 'aware report movie exile buyer drum poverty supreme gym oppose float elegant'
print mnemonic
seed = bip39.Mnemonic.to_seed(mnemonic)
key = BIP32Key.fromEntropy(seed)
account_number = 0
i = 0
print key.ChildKey(44 + BIP32_HARDEN) \
.ChildKey(0 + BIP32_HARDEN) \
.ChildKey(account_number + BIP32_HARDEN) \
.ChildKey(0) \
.ChildKey(i) \
.Address()
Andreas Chow
m/44'/0'/0'/0/i
, versuchen Sie esm/44'/0'/0'/0'/i
.Gabriel
pebwindkraft