Golang生成bip39助记词、eth地址和密钥对

本文作者:陈进坚
个人博客:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
简书:https://www.jianshu.com/u/8ba9ac5706b6

本文主要用到两个包

生成助记词:github.com/tyler-smith/go-bip39

生成eth地址和公私密钥对:github.com/miguelmota/go-ethereum-hdwallet

通过本文代码生成的助记词、地址和密钥对完全能导入其他平台并正常使用,列如通过助记词或私钥导入imTokenAPP,或者导入在线钱包网站MyEtherWallet | MEW等

完整代码:

package main

import (
    "fmt"
    "github.com/miguelmota/go-ethereum-hdwallet"
    "github.com/tyler-smith/go-bip39"
    "log"
)

func main() {
    entropy, err := bip39.NewEntropy(128)
    if err != nil {
        log.Fatal(err)
    }

    mnemonic, _ := bip39.NewMnemonic(entropy)
    //var mnemonic = "pepper hair process town say voyage exhibit over carry property follow define"
    fmt.Println("mnemonic:", mnemonic)
    seed := bip39.NewSeed(mnemonic, "") //这里可以选择传入指定密码或者空字符串,不同密码生成的助记词不同

    wallet, err := hdwallet.NewFromSeed(seed)
    if err != nil {
        log.Fatal(err)
    }

    path := hdwallet.MustParseDerivationPath("m/44 /60 /0 /0/0") //最后一位是同一个助记词的地址id,从0开始,一样助记词可以生产无限个地址
    account, err := wallet.Derive(path, false)
    if err != nil {
        log.Fatal(err)
    }

    address := account.Address.Hex()
    privateKey, _ := wallet.PrivateKeyHex(account)
    publicKey, _ := wallet.PublicKeyHex(account)

    fmt.Println("address0:", address)       // id为0的钱包地址
    fmt.Println("privateKey:", privateKey)  // 私钥
    fmt.Println("publicKey:", publicKey)    // 公钥

    path = hdwallet.MustParseDerivationPath("m/44 /60 /0 /0/1") //生成id为1的钱包地址
    account, err = wallet.Derive(path, false)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("address1:", account.Address.Hex())
}

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
黑婕HE的头像 - 宋马
评论 抢沙发

请登录后发表评论

    暂无评论内容