比特币钱包开发:通过助记词导入钱包与导出钱包助记

目标

获取钱包列表

通过助记词导入钱包

导出钱包助记词

前言

在上一章的内容中介绍了创建钱包,这一章会介绍通过助记词创建钱包,也叫做通过助记词恢复钱包或通过助记词导入钱包。首先我们来介绍的内容是,如何将我的钱包显示出来。

一、获取钱包列表

我们将创建的钱包文件储存到了static/wallet_file文件夹中,那么遍历该文件夹并判断子文件的名称是否以钱包文件的“.dat”结尾即可获取到我的钱包,然后再截掉后缀就是钱包名称,实现如下。

点击此处添加图片说明文字

​输出如下

C4EC5431-7AF0-4F0C-8C61-E2090A389A59

stringWithSubstrEnd()方法在myUtils包中实现了判断字符串是否以某个字符串结尾的功能。

二、通过助记词导入钱包

创建新钱包的时候我们采用的是调用seedFromRandomWithMnemonic()方法通过随机助记词生成种子去创建的,那么我们在创建钱包的时候指定助记词即可实现通过助记词导入钱包,这就需要使用到另外一个方法seedFromMnemonic(),它的API定义如下:

点击此处添加图片说明文字

根据API的定义可知,必传参数有如下两个,注意它没有回调。

BIP39: String, 助记词。

opts: 可选参数,它是一个对象,包含的字断如下:

opts.network: string, 钱包连接的网络类型,支持正式网络和测试网络,分别表示为:livenet、testnet。

opts.passphrase: 助记词的密码,通过助记词+密码共同生成种子,所以密码不一样种子就不一样,导致无法找回账号。

opts.account: Number, 账号序号,默认为0。

opts.derivationStrategy: String, 使用的BIP协议,默认为BIP44。

因此通过助记词导入钱包的代码实现如下:

点击此处添加图片说明文字

输出如下:

F6CA929D-C18F-440E-B25B-E2EC53AE3992

使用的助记词是“eternal list thank chaos trick paper sniff ridge make govern invest abandon"密码是"lixu1234qwer”,生成的地址为“mm16s7xsf8Wjwxhprc6YzLW9gVncqZNGBR”,路径是“m/0/0”,公钥是“031cf3493c5fcb4eabdfaa4191a02cc30429539ea6b80f5590bc4a8b6222f0d3ba”,这些数据与第二章中我们验证的数据一致。

三、导出钱包助记词

既然能通过导入助记词恢复钱包,那也能导出钱包助记词,这个数据在上一章中我们创建钱包后已经能够获取到助记词字断了,但是它需要解锁后才能获取,即通过import()方法解锁。

点击此处添加图片说明文字

​输出如下:

947B884D-53FF-4C0D-AFF3-F0B7B2F13087

可获取到“wallet1”钱包的助记词是“same subway develop fun fancy library sand rain hamster ship floor define”。

四、完整源码

1. controllers/wallet.js

编辑controllers文件夹下的wallet.js文件,实现获取钱包列表、通过助记词导入钱包、导出钱包助记词功能。

点击此处添加图片说明文字

2. controllers/web.js

在controllers文件夹下新建web.js文件,后端实现返回每个前端页面。

点击此处添加图片说明文字

3. router/router.js

将获取钱包列表、通过助记词导入钱包、导出钱包助记词功能的接口绑定到路由。

点击此处添加图片说明文字

4. static/js/wallet.js

在文档加载完成后处理获取钱包列表、通过助记词导入钱包、导出钱包助记词等的网络请求。

点击此处添加图片说明文字

5. views/wallet.html

前端显示的钱包列表页面。

点击此处添加图片说明文字

​五、项目运行效果

B2539C4C-AD17-4805-8670-61218498F309

项目源码Github地址

版权声明:博客中的文章版权归博主所有,未经授权禁止转载,转载请联系作者取得同意并注明出处。

未经授权禁止转载、改编,转载请注明出处!

本文来源: BTCsos 速援财经 · 为快不破 文章作者: 佚名

    下一篇