Skip to content

haoxuebing/go-ethereum-code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

用go做以太坊开发

Go Ethereum 书籍中文版

HD钱包

以太坊账户

交易

智能合约

事件日志

转账

签名

生成AK-SK

助记词推导到地址的步骤


1、借助以太坊源码包,通过BIP44定义的目录获取对应的钱包目录path。
2、借助bip39包,通过记助词生成种子seed
3、使用btcutil,将seed变成masterKey
4、借助btcutil,利用masterKey+path生成私钥privateKey。
5、使用ecdsa,通过私钥生成公钥。
6、利用以太坊源码将publicKey转换为地址。

链接:https://juejin.cn/post/7114309381134483487

公钥&私钥&地址关系

  1. 使用椭圆曲线算法ECDSA-secp256k1将私钥映射生成公钥,一个私钥只能映射出一个公钥。
  2. 使用hash算法Keccak-256对公钥进行hash,将公钥转化为32 byte,然后去最后的20 byte作为账户地址。
  3. 地址没办法直接推导出公钥,使用摘要和签名可以推导出公钥

生成过程

生成过程

以太坊中的私钥

它由一个密码和一个keyfile组成,这个密码就是你使用 ks.NewAccount("xxx")创建新账户时输入的那串“xxxx”字符串。而keyfile是你在创建账户后自动生成的json格式的文件,他一般保存在~/keystore/目录下

keyfile 示例

{
    "address": "55acb7320fce7d4b9d60da183a5415fe617b7799",
    "crypto": {
        "cipher": "aes-128-ctr",
        "ciphertext": "ea86238cc530fc82697cddf806420b46e367506c2612e77705cd49fc68e8abab",
        "cipherparams": {
            "iv": "a952274c8c23c776142858b7d4eb47ce"
        },
        "kdf": "scrypt",
        "kdfparams": {
            "dklen": 32,
            "n": 262144,
            "p": 1,
            "r": 8,
            "salt": "e500a379d2fc5aa08f6b3efd1d47c62ef005eb4193d487a7cf0314e872965782"
        },
        "mac": "a883b940d426e18d301225afe56088fecf668d27da5b39d5c802d1099a421ab1"
    },
    "id": "73d77f7d-40db-40ed-b3fe-92a3aec099c1",
    "version": 3
}

项目根目录下创建 .env 文件

PRIVATE_KEY=your_private_key
INFURA_PROJECT_ID=your_infura_project_id

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

golang 操作以太坊、智能合约

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published