1. 程式人生 > >以太坊HD錢包開發 一 —— 錢包概念介紹

以太坊HD錢包開發 一 —— 錢包概念介紹

以太坊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 }