ETH冷錢包實現思路

前言

區塊鏈錢包分爲兩類:冷錢包和熱錢包。通俗的講冷錢包就是錢包存在本地,熱錢包則是存在服務端。本文主要對冷錢包進行分析以及一些相關業務功能的介紹。相關插件:bip39(生成助記詞),ethereumjs-wallet(生成錢包,導入,導出),ethereumjs-tx(轉帳簽名),ethereumjs-util(ETH功能集成插件),cryptojs(加密)區塊鏈

正文

咱們知道區塊鏈錢包有幾個概念:助記詞、私鑰、地址、keyStore加密

這幾個關係以下:

  • 助記詞(單向=>)私鑰
  • 私鑰(單向=>)地址
  • 密碼+私鑰( 雙向<=>)keyStore

錢包業務功能

  • 建立錢包
  • 導入錢包(助記詞導入,keyStore導入,私鑰導入)
  • 錢包管理(導出私鑰,導出keyStore,修改密碼)
  • 轉帳和收款

業務功能分析

存在本地錢包加密前的數據格式
[{"wallet address": 加密私鑰(私鑰和密碼進行加密)+其餘錢包信息},...]
建立錢包
建立錢包流程: 生成隨機助記詞 => 經過助記詞建立錢包=>錢包信息和加密明文(私鑰和密碼加密)AES加密存入localStorage插件

導入錢包
經過插件提供方法,根據助記詞|keyStore|私鑰,找到錢包信息(地址和私鑰)=>錢包信息和加密明文(私鑰和密碼加密)AES加密存入localStorageip

錢包管理
錢包管理須要密碼驗證,因爲本地存的是私鑰和密碼加密後的加密私鑰,解密須要私鑰和原密碼來解密,所以不能直接經過解密獲取原密碼。因此咱們須要換一個思路來驗證,由前文的關係可知私鑰能夠找到錢包地址,因此能夠解密錢包的字符串,經過錢包地址獲取加密的錢包信息,再經過用戶輸入的密碼和加密私鑰解密獲取解密私鑰,再經過私鑰獲取地址,判斷用戶輸入的和原密碼解密後的私鑰獲取的地址是否一致。字符串

密碼驗證流程:解密錢包明文 => 獲得全部加密錢包[{"wallet address": 加密私鑰(錢包和密碼)},...] => 地址獲取當前加密錢包信息 => 經過用戶輸入的密碼和加密私鑰解密獲取解密的私鑰 => 經過解密私鑰去獲取地址 =>判斷地址和當前地址是否一致it

轉帳和收款
轉帳涉及到交易的簽名,而ethereumjs-tx則提供相應的方法。轉帳還涉及到礦工費用的計算,礦工費用(gas) = gasPrice * gaslimit,gas和eth換算關係: 1eth = 1e9(gwei)
收款生成相應的地址二維碼既可二維碼

相關文章
相關標籤/搜索