2019独角兽企业重金招聘Python工程师标准>>>

以太坊HD wallet 的创建、导入、导出如下:

const bip39 = require('bip39');
const hdkey = require('ethereumjs-wallet/hdkey');
const util = require('ethereumjs-util');
const Wallet = require('ethereumjs-wallet');/***生成钱包**/
let mnemonic = bip39.generateMnemonic();
mnemonic = "eyebrow tube verify supreme abandon theme blast harsh jungle believe much economy";
console.log("mnemonic ====== ",mnemonic);let seed = bip39.mnemonicToSeed(mnemonic);console.log("seed ====== ",seed.toString('hex'));let hdWallet = hdkey.fromMasterSeed(seed);//产生 Wallet中第一个帐户的第一组 keypair
let key1 = hdWallet.derivePath("m/44'/60'/0'/0/0");
let wallet1 = key1.getWallet();
let address1 = util.bufferToHex(util.pubToAddress(wallet1.getPublicKey(), true));
let private1 = wallet1.getPrivateKey().toString('hex');
let keystore1 = wallet1.toV3String("123456");//也可以使用下面的方式获取address、private key。
/*
let address1 = util.bufferToHex(util.pubToAddress(key1._hdkey._publicKey, true));let private1 = key1._hdkey._privateKey.toString('hex');*/console.log("address1 ====== ",address1);
console.log("private1 ====== ",private1);
console.log("keystore1 ====== ",keystore1);/***导入钱包(助记词导入)*/mnemonic = "eyebrow tube verify supreme abandon theme blast harsh jungle believe much economy";seed = bip39.mnemonicToSeed(mnemonic);hdWallet = hdkey.fromMasterSeed(seed);key1 = hdWallet.derivePath("m/44'/60'/0'/0/0");address1 = util.bufferToHex(util.pubToAddress(key1._hdkey._publicKey, true));
private1 = key1._hdkey._privateKey.toString('hex');
console.log("address1 ====== ",address1,"private1 ====== ",private1);/*** 私钥导入 a9612725853b27f0063696d55f700bbcaa44118a0a5e8627ca8c65c2da4232f1*/
let fixturePrivateKeyStr =  "a9612725853b27f0063696d55f700bbcaa44118a0a5e8627ca8c65c2da4232f1"
let fixturePrivateKeyBuffer = Buffer.from(fixturePrivateKeyStr, 'hex')
let fixtureWallet = Wallet.fromPrivateKey(fixturePrivateKeyBuffer);let fixturePrivateKey = fixtureWallet.getPrivateKey().toString('hex');
let fixturePublicKey = util.bufferToHex(util.pubToAddress(fixtureWallet.getPublicKey(), true));console.log("fixturePublicKey ====== ",fixturePublicKey);
console.log("fixturePrivateKey ====== ",fixturePrivateKey);/***生成keystore json*/
let fixtureKeystore = fixtureWallet.toV3String("123456");
//{"version":3,"id":"0ee81400-c4f9-4d60-8a4e-d56505ba1695","address":"267bc50356a652b70269100392ab93d286a6d076","crypto":{"ciphertext":"5e94f7acae76acd4042f749f697248cf54f3e120e4d4e3ed3b9288ff1faacf70","cipherparams":{"iv":"36016c4b0f6d8642115b0a8f2014d2b6"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"e646df09e1e86e6c5b96b21f3710f0b96aafd950398f172f72fb247d70ebfcd8","n":262144,"r":8,"p":1},"mac":"17ce2293f06405f3abf5ee3aa164796644ce3d26a475d8aa2adf30b492a926ed"}}
console.log("fixtureKeystore ====== ",fixtureKeystore);/***从keystore json 还原Wallet*/
let restoreWallet =  Wallet.fromV3(fixtureKeystore, "123456");
let restorePrivateKey = restoreWallet.getPrivateKey().toString('hex');
let restorePublicKey = util.bufferToHex(util.pubToAddress(restoreWallet.getPublicKey(), true));console.log("restorePrivateKey ====== ",restorePrivateKey);
console.log("restorePublicKey ====== ",restorePublicKey);/***store.js 在浏览器端存储数据。* https://github.com/marcuswestin/store.js* https://segmentfault.com/a/1190000007539338* https://gist.github.com/reygreen1/7226325*/

整理之后可以写成下面的工具类。

const bip39 = require('bip39');
const hdkey = require('ethereumjs-wallet/hdkey');
const util = require('ethereumjs-util');
const Wallet = require('ethereumjs-wallet');let generateMnemonic = ()=>{return bip39.generateMnemonic();
}let generateAccount = (mnemonic,password) =>{let seed = bip39.mnemonicToSeed(mnemonic);let hdWallet = hdkey.fromMasterSeed(seed);let key1 = hdWallet.derivePath("m/44'/60'/0'/0/0");let wallet1 = key1.getWallet();return getWalletInfo(wallet1,password);}
let getWalletInfo = (walletInstance,password)=>{let address1 = util.bufferToHex(util.pubToAddress(walletInstance.getPublicKey(), true));let private1 = walletInstance.getPrivateKey().toString('hex');let keystore1 = walletInstance.toV3String(password);return {address:address1,private:private1,keystore:keystore1}
}let restoreFromPrivateKey = (privateKey,password) =>{let keyBuffer = Buffer.from(privateKey, 'hex')let keyWallet = Wallet.fromPrivateKey(keyBuffer);return getWalletInfo(keyWallet,password);
}let restoreFromKeystore = (keystore,password) =>{let restoreWallet =  Wallet.fromV3(keystore,password);return getWalletInfo(restoreWallet,password);
}module.exports  = {generateMnemonic,generateAccount,restoreFromPrivateKey,restoreFromKeystore
};

转载于:https://my.oschina.net/kunBlog/blog/2876581

HD wallet的创建、导入相关推荐

  1. 分层确定性钱包 HD Wallet 介绍

    分层确定性钱包 HD Wallet 介绍 文章来源:ConsenLabs 以太坊,区块链(Blockchain), 2017/10/20 14:06 3296 钱包是用于发送和接受代币的客户端,就像我 ...

  2. 《统一沟通-微软-实战》-3-部署-Exchange 2010-3-证书-创建-导入-分配

    参照: http://technet.microsoft.com/zh-cn/library/gg502577.aspx 在 Exchange 2010 中,数字证书用于以下方面的身份验证和加密: 传 ...

  3. flutter创建/导入区块链钱包,获取余额

    flutter创建/导入区块链钱包,获取余额 作为区块链行业小白刚接触区块链钱包几天,来开发钱包还是需要付出很多努力的.下面记录一下flutter框架下创建/导入区块链钱包,并获取余额 一.创建钱包: ...

  4. 【Visual Studio 2019】创建 导入 CMake 项目

    文章目录 I . 创建 CMake 项目 II . 导入 CMake 项目 III 打开新项目 生成解决方案 出错 首先按照上一篇博客 [Visual Studio]Visual Studio 201 ...

  5. 【IntelliJ IDEA】创建 导入 Java 项目

    文章目录 I. IntelliJ IDEA 创建 Java 项目流程 II. IntelliJ IDEA 导入 Java 项目流程 I. IntelliJ IDEA 创建 Java 项目流程 1. 进 ...

  6. phpmyadmin 导出mysql_PhpMyAdmin创建/导入/导出MySQL数据库教程[图文]

    内容提要 PhpMyAdmin是网站管理员必须懂得使用的程序,很多新手都不会操作,笔者将图文演示使用PhpMyAdmin创建.导入.导出MySQL数据库的全过程. 一.创建MySQL用户及数据库 注: ...

  7. sqoop建表_使用Sqoop创建/导入配置单元表

    当我使用下面的import命令时,它允许我创建表并从mysql导入数据到Hive,我可以在Hive中看到表"小部件" . sqoop import --connect jdbc:m ...

  8. oracle数据库导入表空间,oracle数据库表空间创建导入导出

    1.表空间创建 --删除表空间 drop tablespace EVPBDMGIS including contents and datafiles; --删除用户 drop user EVPBDMG ...

  9. phpmyadmin创建/导入/导出mysql数据库教程_PhpMyAdmin创建/导入/导出MySQL数据库教程[图文]...

    内容提要 PhpMyAdmin是网站管理员必须懂得使用的程序,很多新手都不会操作,笔者将图文演示使用PhpMyAdmin创建.导入.导出MySQL数据库的全过程. 一.创建MySQL用户及数据库注:一 ...

最新文章

  1. tightvnc viewer 传文件_TightVNC中文版下载_TightVNC viewer(远程控制软件)简体中文版下载【32位|64位】-华军软件园...
  2. python知识:*args 和**kwargs
  3. 对象在JVM中的表示: OOP-Klass模型
  4. RHEL6入门系列之二十七,源码安装及软件安装综合实例
  5. write up社工进阶
  6. php return直接输出,PHP中return用法详细解读
  7. 史上最强DIY,手工制作一只会说话的机器狗
  8. dmb显示服务器断开连接,dmb联网信息发布系统操作手册企业加强版.docx
  9. Java中变量的初始化以及变量的初始化顺序,已经加入个人的简单理解
  10. 计算机硬件和系统重装,重装系统对电脑有什么影响【图文】
  11. Prometheus监控报警系统
  12. 实践论:论认识和实践的关系
  13. 组织的目的是使平凡的人做出不平凡的事 --- 彼得.德鲁克 《卓有成效的管理者》
  14. 5 款常用的 C++ 在线编译器推荐
  15. 2018-7-5,Python练习
  16. html img 拉伸,图片因img标签拉伸的处理办法
  17. 《口袋侦探》闪退、打不开、玩不了的解决方式。
  18. 怎么从安卓设备转移数据到苹果_如何将数据从安卓手机转移到苹果手机
  19. 香蕉派 BPI-P2 Zero 四核开源物联网开发板,支持PoE网络供电
  20. QIIME 2 使用总结

热门文章

  1. 2017省市区最新编码(依据国家统计局最新数据)
  2. 一个有意思的分钱模拟问题
  3. 三角形填充算法(C实现)
  4. 解决OneNote“未安装桌面体验功能”问题
  5. mybatis-plus:根据日期或时间范围查询数据的3种方式
  6. 在linux操作系统下,将文件打包成ISO
  7. uPaste : 一款实用又好用的剪贴板工具
  8. python读取svg文件_Python lxml解析svg文件
  9. 无法加载 DLL“halcon”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
  10. bat批处理删除文件