以太坊BIP39助记词到公钥地址的原理与细节

Posted FeelTouch Labs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊BIP39助记词到公钥地址的原理与细节相关的知识,希望对你有一定的参考价值。

以太坊基础—你真的懂吗

以太坊私钥

eg:
fad9c8855b740a0b7ed4c221dbad0f33a83a49cad6b3fe8d5817ac83d38b6a19

由256位;不考虑0x前缀,由32个字节,64个字符构成。

以太坊公共地址

eg:
0x20F8D42FB0F667F2E53930fed426f225752453b3

由160位组成;不考虑0x前缀,由20个字节,40个字符构成。

以太坊公钥与公共地址是一回事吗

一句话,公共地址是公钥的Keccak-256哈希。

具体在以太坊中,用keccak哈希算法来计算公钥的256位哈希,再截取这256位哈希的后160位哈希作为地址值。

所以,在以太坊中它俩个不是一回事。

以太坊地址的大小写—有没有区别

一个现象是我们用Wallet的时候,比如ImToken/Metamask/交易所,Wallet地址都是大小写混杂的,但是在etherscan和opensea上查看交易信息和NFT信息时却可以不区分大小写的正确进行查询,这是为什么呢?

这还得从以太坊历史说起,起初以太坊内部实际并不区分大小写的,但是用户在Wallet的实际使用过程中发现,由于缺乏类似比特币的自带地址校验机制,使用以太坊的公开地址转账时,经常因为误输入字符而转错了账号&#

以太坊 助记词提取 账户 公钥 私钥 最新实现可用。

step 1 装依赖的包(npm/yarn 自己选一个):

yarn add bip39 ethereumjs-wallet ethereumjs-util 

npm install bip39 ethereumjs-wallet ethereumjs-util

step 2 演示代码:

const bip39 = require(‘bip39‘)
const {hdkey} = require(‘ethereumjs-wallet‘)
const util = require(‘ethereumjs-util‘)

//1 生成助记词 ;1.1 和 1.2 自己按需。

// 1.1 生成助记词 ;这里用生成的.
// let mnemonic = bip39.generateMnemonic() 

// 1.2 生成助记词 ;这里用写死的.
let mnemonic = "hold scale hybrid tank dilemma bullet ship language attitude rug tennis host"
console.log(mnemonic)

//2.将助记词转成seed
getSeed = async ()=>{
    let seed = await bip39.mnemonicToSeed(mnemonic)
    console.log("seed:" + util.bufferToHex(seed))
    return seed
}
//3.提取私钥,公钥,账户
obtainAccount = async ()=>{
    let seed = await getSeed()
    //3.通过hdkey将seed生成HD Wallet
    let hdWallet = await hdkey.fromMasterSeed(seed)

    for (let i = 0; i < 10; i++) {
        //4.生成钱包中在m/44‘/60‘/0‘/0/i路径的keypair
        let key = await hdWallet.derivePath("m/44‘/60‘/0‘/0/" + i)
        //5.从keypair中获取私钥
        console.log("私钥:" + util.bufferToHex(key._hdkey._privateKey))
        //6.从keypair中获取公钥
        console.log("公钥:" + util.bufferToHex(key._hdkey._publicKey))
        //7.使用keypair中的公钥生成地址
        let address = await util.pubToAddress(key._hdkey._publicKey, true)
        //编码地址
        console.log(‘account‘,i+1,‘0x‘+address.toString(‘hex‘))

//分割线        console.log("__________________________________________________________")
    }
}
obtainAccount()

step 3 运行结果截图:

技术图片

 

以上是关于以太坊BIP39助记词到公钥地址的原理与细节的主要内容,如果未能解决你的问题,请参考以下文章

通过代码生成以太坊助记词,私钥,公钥

1.16. BIP39协议:使用助记词生成确定性钱包

BIP39:助记词

如果我知道地址和私钥,如何在 web3 中导入以太坊帐户?

从 BIP39(助记符)到 BIP32(公钥/私钥)

分成确定性钱包开发的代码实现(HD钱包服务)