So erhalten Sie die richtige Adresse aus der mnemonischen Phrase von BTC in Python

Ich habe ein Problem, ich habe eine in Python geschriebene Krypto-Wallet, es gibt einen Code, der eine Wallet-Adresse aus einer mnemonischen Phrase erstellt (in diesem Fall BTC-Adresse). Aber wenn ich diese mnemonische Phrase in die mobile App Trust Wallet eingebe, erhalte ich eine völlig andere Bitcoin-Adresse. Warum? Wie man es repariert? Hier ist der Code:

from bipwallet import wallet
from bipwallet.utils import *

Seed = wallet.generate_mnemonic()

WalletBTC = wallet.create_wallet(network="BTC", seed=Seed, children=0)

AddressBTC = WalletBTC.get("address")

print("BTC Address: ", AddressBTC)
Der Ableitungspfad muss auch derselbe sein, nicht nur die Mnemonik

Antworten (2)

Ich gehe davon aus, dass sowohl die Python-Bibliothek als auch Trustwallet BIP32 implementieren, um hierarchische deterministische (HD) Wallets zu erstellen.

Die Adresse, die Sie erhalten, hängt vom Ableitungspfad ab . Wenn Ihre Python-Bibliothek und Trustwallet unterschiedliche Ableitungspfade verwenden, erhalten Sie unterschiedliche Adressen.

Eine HD-Brieftasche erzeugt mehrere Adressen, jedes Mal eine andere, wenn Sie eine Adresse anfordern. Sie müssen also darauf achten, nicht die 1. Adresse von einem Wallet mit der 2. Adresse von einem anderen zu vergleichen.

Danke schön. Ich habe unabhängig Bibliotheken gefunden, die dieselbe Adresse wie Trust Wallet generieren, sowie Cryptoneed (Mobile Apps). Wer braucht meinen Code, kopieren und für sich selbst anpassen:

from hdwallet import BIP44HDWallet
from hdwallet.utils import generate_mnemonic
from hdwallet.derivations import BIP44Derivation
from hdwallet.cryptocurrencies import BitcoinMainnet, EthereumMainnet
from bip_utils import Bip84, Bip84Coins, Bip44Changes, Bip39SeedGenerator


LanguageInMnemonic = "english"

Mnemonic = generate_mnemonic(language = LanguageInMnemonic, strength = 128)
    Seed = Bip39SeedGenerator(Mnemonic).Generate()

    print(Mnemonic)

    if IsCheckBTC == "+":
        if IsCheckBTCBip44 == "+":
            CheckedWalletBTCBip44 = BIP44HDWallet(cryptocurrency=BitcoinMainnet)
            CheckedWalletBTCBip44.from_mnemonic(mnemonic = Mnemonic, language = LanguageInMnemonic, passphrase = None)
            CheckedWalletBTCBip44.clean_derivation()
            CheckedWalletBTCBip44Derivation = BIP44Derivation(cryptocurrency = BitcoinMainnet, account = 0, change = False, address = 0)
            CheckedWalletBTCBip44.from_path(path = CheckedWalletBTCBip44Derivation)

            CheckedAddressBTCBip44 = CheckedWalletBTCBip44.address()
            print(CheckedAddressBTCBip44)

        if IsCheckBTCBip84 == "+":
            CheckedWalletBTCBip84 = Bip84.FromSeed(Seed, Bip84Coins.BITCOIN)
            CheckedWalletBTCBip84Step1 = (CheckedWalletBTCBip84.Purpose().Coin().Account(0)).Change(Bip44Changes.CHAIN_EXT)
            CheckedWalletBTCBip84Step2 = CheckedWalletBTCBip84Step1.AddressIndex(0)

            CheckedAddressBTCBip84 = CheckedWalletBTCBip84Step2.PublicKey().ToAddress()
            print(CheckedAddressBTCBip84)

    if IsCheckETH == "+":
        CheckedWalletETH = BIP44HDWallet(cryptocurrency = EthereumMainnet)
        CheckedWalletETH.from_mnemonic(mnemonic = Mnemonic, language = LanguageInMnemonic, passphrase = None)
        CheckedWalletETH.clean_derivation()
        CheckedWalletETHDerivation: BIP44Derivation = BIP44Derivation(cryptocurrency = EthereumMainnet, account = 0, change = False, address = 0)
        CheckedWalletETH.from_path(path=CheckedWalletETHDerivation)

        CheckedAddressETH = CheckedWalletETH.address()
        print(CheckedAddressETH)

(PS Ich habe Google Translate verwendet)

Warum ist die Definition von IsCheckBTC nicht in Ihrem Code-Snippet definiert???