以太坊HD钱包开发 一 —— 钱包概念介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bondsui/article/details/85780452

以太坊HD钱包开发 一 —— 钱包概念介绍
https://blog.csdn.net/bondsui/article/details/85780452

以太坊HD钱包开发 二 —— BIP协议介绍
https://blog.csdn.net/bondsui/article/details/85780675

以太坊HD钱包开发 三 —— 代码实现
https://blog.csdn.net/bondsui/article/details/85780940

ETH Web钱包


项目技术栈准备:

  • 公钥、私钥、钱包概念

  • HD钱包、BIP32、BIP39、BIP44协议

  • nodejs

  • html 、css、react

  • semantic-react

  • ether.js

  • golang

环境支持

  • ganache客户端
  • ganache-cli 命令行客户端 (会通过助记词导入即可)
  • geth 可选用truffle 控制台也可以 (会获取账户列表、余额即可)

1、功能预览

  • 网页钱包
  • 通过私钥、助记词、创建账户
  • 通过私钥,助记词,keyStore导入账户
  • 显示钱包信息(地址、余额、交易次数等)
  • 钱包转账
  • 钱包备份

2、钱包概念

钱包:容器,管理账号私钥的工具

私钥公钥:一个随机数字进行密码学运算得到私钥,公钥

地址:数字字母组成的字符串,由公钥推导而来

3、地址创建过程

图片来源于精通比特币,原理一样,下面是使用go语言实现的钱包代码

// go比特币中的钱包
type WalletKeyPair struct {
	PrivateKey *ecdsa.PrivateKey
	PublicKey  []byte
}

func newWalletKeyPair() *WalletKeyPair {
	// 椭圆曲线函数得到私钥
	privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
	if err != nil {
		panic(err)
	}
	// 私钥得到公钥
	publicKey := append(privateKey.X.Bytes(), privateKey.Y.Bytes()...)

	return &WalletKeyPair{PrivateKey: privateKey, PublicKey: publicKey}
}

// 通过公钥得到地址
func (w *WalletKeyPair) getAddress() string {
	publicHash := HashPublicKey(w.PublicKey)

	// 1字节版本号
	version := 0x00

	// 得到21字节的数据
	payload := append([]byte{byte(version)}, publicHash...)

	// 4字节校验码
	checksum := CheckSum(payload)

	//25字节
	payload = append(payload, checksum...)

	address := base58.Encode(payload)
	return address
}

//ripemd160 进行hash运算
func HashPublicKey(pubKey []byte) []byte {
	hash := sha256.Sum256(pubKey)

	//创建一个hash160对象,向hash160中write数据
	//做哈希运算

	rip160Haher := ripemd160.New()
	_, err := rip160Haher.Write(hash[:])

	if err != nil {
		log.Panic(err)
	}

	publicHash := rip160Haher.Sum(nil)
	return publicHash
}

// 获取校验码
func CheckSum(payload []byte) []byte {
	first := sha256.Sum256(payload)
	second := sha256.Sum256(first[:])
	checksum := second[0:4]
	return checksum
}

猜你喜欢

转载自blog.csdn.net/bondsui/article/details/85780452