子贤的独立博客 子贤的独立博客
  • 首页
  • 编程
  • 视频
    • 哔哩哔哩
    • 斗鱼TV
    • VLOG
  • 社交媒体
    • 新浪微博
  • 专题
首页 › 编程 › 尝试码个属于自己的以太坊钱包

尝试码个属于自己的以太坊钱包

James
6年前编程阅读 1,052

前言

最近尝试自己制作一个属于自己的以太坊钱包,记录下自己摸索Ethereum钱包的点点滴滴,加油呀~!

Ethers.js

一个实现以太坊大部分api的javascript库

web可以直接引入库

<script src="https://cdn.ethers.io/scripts/ethers-v3.min.js" charset="utf-8" type="text/javascript"></script>

//npm
npm install --save ethers

Bip39

一个生成密钥相关的助记词生成库(ethers.js也能实现生成助记词,但是貌似只能生成英文词语)

npm i bip39

简单实现生成ETH钱包

使用bip39生成助记词:

1.生成指定位数的助记词,也可不传递参数,默认为128位长度,即12个助记词,可传递128~256长度,最长为24个助记词.

bip39.generateMnemonic(length)

2.默认生成为英文助记词,生成中文可以传递语言表参数,如下第一个参数为长度,第二个参数是rng,传null就行(我也不知道这个参数干啥的),第三个为字符表参数:

let str = bip39.generateMnemonic(160,null,bip39.wordlists.chinese_simplified); //生成中文简体

3.通用字符表参数

wordlists: {
    EN: ENGLISH_WORDLIST,
    JA: JAPANESE_WORDLIST,

    chinese_simplified: CHINESE_SIMPLIFIED_WORDLIST,
    chinese_traditional: CHINESE_TRADITIONAL_WORDLIST,
    english: ENGLISH_WORDLIST,
    french: FRENCH_WORDLIST,
    italian: ITALIAN_WORDLIST,
    japanese: JAPANESE_WORDLIST,
    korean: KOREAN_WORDLIST,
    spanish: SPANISH_WORDLIST
  }

4.把助记词(如果有设置密码)转成种子,传入助记词和密码(如果有的话):

let password = 'james';
let send = bip39.mnemonicToSeed(str, password);

5.使用ethers将种子生成root主节点:

let root = ethers.HDNode.fromSeed(seed);

6.从主节点生成第一个eth钱包节点:

var key1 = root.derivePath("m/44'/60'/0'/0/0");  // 推荐路径
console.log(key1);
let privateKey = key1.privateKey;  // 私钥

7.使用ethers将私钥生成ETH钱包并获得地址:

let wallet = new ethers.Wallet(privateKey);
console.log("Address: "+ wallet.address);

至此已生成一个eth钱包账户.

如果只记得助记词和密码(如果有),怎么找回账户呢?(好问题滑稽脸)

1.还是使用bip39传入助记词和密码生成种子:

let words = "衡 穿 格 已 央 食 守 郑 驱 馏 卸 而";
let send = bip39.mnemonicToSeed(words,'james');

2.在ethers使用钱包种子生成root主节点:

let root = ethers.HDNode.fromSeed(send);
let privateKey = root.privateKey; //得到私钥

3.利用root生成任意钱包节点:

var key1 = root.derivePath("m/44'/60'/0'/0/0");
console.log(key1);
let privateKey = key1.privateKey;

4.用ethers将私钥生成钱包并获得地址:

let wallet = new ethers.Wallet(privateKey);
console.log("Address: " + wallet.address)

成功找回钱包啦,注意如果在创建钱包时使用了口令,那么找回时就必须要助记词+密码,缺一不可,短短几行代码让我越发对区块链及虚拟货币感兴趣!~

查阅资料:

  • 分层确定性钱包 HD Wallet 介绍
  • 数字货币钱包详解(译)
  • 数字货币钱包详解(原文)

总结

本次只是总结了下摸索Ethereum钱包创建的过程,萌新能力有限,希望能帮到有需要的人!溜了溜了~

ETH
赞赏 赞(0)
聊聊Css盒子模型的那些事
上一篇
实现以太坊钱包备份及导入功能
下一篇
再想想
暂无评论

Recent Posts

  • React Native 多语言国际化
  • React Native 设置文件路径别名
  • 不要笑大挑战 | 两个憨憨 | 达达倾情出演
  • 黄埔古港 | “哥哥影你啊” | 随剪短片
  • 参观省博物馆 | 展品片段随剪

Recent Comments

  1. SuperMan发表在React Native 多语言国际化
React Native 多语言国际化
5年前
7,378 1 10
React Native 设置文件路径别名
5年前
3,245 0 1
解决charles模拟localhost请求无效问题
6年前
3,587 0 0
Cordova构建IOS应用适配iPhone X
6年前
2,598 0 0
  • 0
  • 0
Copyright © 2019-2025 子贤的独立博客. Designed by nicetheme.
粤ICP备19162060号
  • 首页
  • 编程
  • 视频
    • 哔哩哔哩
    • 斗鱼TV
    • VLOG
  • 社交媒体
    • 新浪微博
  • 专题
# Vlog # # Cordova # # ETH # # Css # # Android #
James
32
文章
0
评论
35
喜欢