package main
import (
"fmt"
"log"
"github.com/ethereum/go-ethereum/crypto"
"github.com/tyler-smith/go-bip32"
"github.com/tyler-smith/go-bip39"
)
func RecoverWalletFromMnemonic(mnemonic string) (string, error) {
if !bip39.IsMnemonicValid(mnemonic) {
return "", fmt.Errorf("invalid mnemonic")
}
seed := bip39.NewSeed(mnemonic, "")
masterKey, err := bip32.NewMasterKey(seed)
if err != nil {
return "", fmt.Errorf("failed to generate master key: %v", err)
}
purposeKey, err := masterKey.NewChildKey(bip32.FirstHardenedChild + 44)
if err != nil {
return "", fmt.Errorf("failed to derive purpose key: %v", err)
}
coinTypeKey, err := purposeKey.NewChildKey(bip32.FirstHardenedChild + 60)
if err != nil {
return "", fmt.Errorf("failed to derive coin type key: %v", err)
}
accountKey, err := coinTypeKey.NewChildKey(bip32.FirstHardenedChild + 0)
if err != nil {
return "", fmt.Errorf("failed to derive account key: %v", err)
}
changeKey, err := accountKey.NewChildKey(0)
if err != nil {
return "", fmt.Errorf("failed to derive change key: %v", err)
}
addressKey, err := changeKey.NewChildKey(0)
if err != nil {
return "", fmt.Errorf("failed to derive address key: %v", err)
}
privateKey, err := crypto.ToECDSA(addressKey.Key)
if err != nil {
return "", fmt.Errorf("failed to convert to ECDSA: %v", err)
}
address := crypto.PubkeyToAddress(privateKey.PublicKey).Hex()
return address, nil
}
func USDT_ETH_ERC20_RecoverWalletFromMnemonic() {
mnemonic := "midnight hammer brother evoke child zebra obscure upon curve pride jelly lamp"
address, err := RecoverWalletFromMnemonic(mnemonic)
if err != nil {
log.Fatalf("Failed to recover wallet: %v", err)
}
fmt.Println("使用助记词来恢复 USDT_ETH_ERC20 钱包的地址 Recovered ETH Wallet Address:", address)
}