博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ETH冷钱包实现思路
阅读量:6922 次
发布时间:2019-06-27

本文共 1034 字,大约阅读时间需要 3 分钟。

前言

区块链钱包分为两类:冷钱包和热钱包。通俗的讲冷钱包就是钱包存在本地,热钱包则是存在服务端。本文主要对冷钱包进行分析以及一些相关业务功能的介绍。相关插件:bip39(生成助记词),ethereumjs-wallet(生成钱包,导入,导出),ethereumjs-tx(转账签名),ethereumjs-util(ETH功能集成插件),cryptojs(加密)

正文

我们知道区块链钱包有几个概念:助记词、私钥、地址、keyStore

这几个关系如下:

  • 助记词(单向=>)私钥
  • 私钥(单向=>)地址
  • 密码+私钥( 双向<=>)keyStore

钱包业务功能

  • 创建钱包
  • 导入钱包(助记词导入,keyStore导入,私钥导入)
  • 钱包管理(导出私钥,导出keyStore,修改密码)
  • 转账和收款

业务功能分析

存在本地钱包加密前的数据格式

[{"wallet address": 加密私钥(私钥和密码进行加密)+其他钱包信息},...]
创建钱包
创建钱包流程: 生成随机助记词 => 通过助记词创建钱包=>钱包信息和加密明文(私钥和密码加密)AES加密存入localStorage

导入钱包

通过插件提供方法,根据助记词|keyStore|私钥,找到钱包信息(地址和私钥)=>钱包信息和加密明文(私钥和密码加密)AES加密存入localStorage

钱包管理

钱包管理需要密码验证,由于本地存的是私钥和密码加密后的加密私钥,解密需要私钥和原密码来解密,因此不能直接通过解密获取原密码。所以我们需要换一个思路来验证,由前文的关系可知私钥可以找到钱包地址,所以可以解密钱包的字符串,通过钱包地址获取加密的钱包信息,再通过用户输入的密码和加密私钥解密获取解密私钥,再通过私钥获取地址,判断用户输入的和原密码解密后的私钥获取的地址是否一致。

密码验证流程:解密钱包明文 => 得到所有加密钱包[{"wallet address": 加密私钥(钱包和密码)},...] => 地址获取当前加密钱包信息 => 通过用户输入的密码和加密私钥解密获取解密的私钥 => 通过解密私钥去获取地址 =>判断地址和当前地址是否一致

转账和收款

转账涉及到交易的签名,而ethereumjs-tx则提供相应的方法。转账还涉及到矿工费用的计算,矿工费用(gas) = gasPrice * gaslimit,gas和eth换算关系: 1eth = 1e9(gwei)
收款生成相应的地址二维码既可

转载地址:http://tfujl.baihongyu.com/

你可能感兴趣的文章
《企业云桌面实施》-小技巧-2017-10-29
查看>>
nodejs http 跨域返回解决办法
查看>>
C语言练习1_大数据的简单运算
查看>>
Javascript第三记--语法基础
查看>>
ubuntu使用笔记
查看>>
xshell使用密钥登录linux服务器
查看>>
学习Python第一天!(2)
查看>>
理不清的网络基础知识(00)
查看>>
在Oracle 11g中用看Oracle的共享内存段---------IPCS
查看>>
如何提高PUE值 数据中心能耗详解
查看>>
我的友情链接
查看>>
hibernateTemplate类的使用-总结
查看>>
PHP生成随机的HTML颜色代码
查看>>
python最简单的发邮件方式(不带附件)
查看>>
maven第二节-maven基础-依赖管理
查看>>
通过脚本加hosts.deny文件阻止防***
查看>>
javascript函数的3种定义方式
查看>>
ORA-12578: TNS:wallet open failed
查看>>
快收藏!高手Linux运维管理必备工具大全,你会吗?
查看>>
Linux下Redis服务安全加固
查看>>