- A+
目标
获取钱包子账号地址
获取钱包余额
索取BTC测试币
新建钱包子账号地址
导出子账号私钥
前言
在前面的内容我们已经获取了我的所有钱包,本章的内容就是对我的钱包进行操作,比如:获取钱包子账号地址、获取钱包余额获、新建钱包子账号地址、导出子账号私钥等功能。
一、获取钱包子账号地址
在每次交易时都会将余额转到一个新的子地址,通过新的子地址产生交易,这样做的目的就是为了提高账号的安全性。同样,在接受别人转账时,也最好提供新的子账号地址接受。那么我们先来获取钱包所拥有的子账号地址。
在bitcore-wallet-client库中获取子账号地址提供的API是getMainAddresses()方法,具体参数可以查看文档详情,这里我们可以不传参数,示例如下
输出如下
C8D7B051-47E4-402D-B053-2B7E512722CF
注意:在对钱包操作钱一定要用import()方法解锁钱包。
返回的数据addresses是一个数组,元素是账号地址对象,wallet1钱包当前只有一个字账号地址,路径“m/0/0”,地址是“moveF5KCAs5ZLwu9Cgwtw3Gh25CiC51KQz”。
二、获取钱包余额
在bitcore-wallet-client库中获取钱包余额提供的API是getBalance()方法,具体参数可以查看文档详情,这里我们可以不传参数,示例如下
输出如下
C0ED20DE-93C1-44F6-BD8F-15115E62E56B
返回的数据是一个对象,包含如下字断
totalAmount: 总的余额。
lockedAmount: 锁定余额。
totalConfirmedAmount: 所有的确认的余额。
lockedConfirmedAmount: 锁定的余额。
availableAmount: 可用余额。
availableConfirmedAmount: 可用的确认的余额。
byAddress:金额来源于哪个子地址,它是一个数组,元素是对象,包含的字断有
address:该地址拥有余额。
path:该地址的路径。
amount:该地址拥有余额的数量。
从输出可以看到余额为0,如何获取BTC余额呢?
在主网中可以通过如下方式获取BTC:
提供自己的任意一个子账号地址,通过别人转账获取。
在钱包应用程序中通过币币交易获取。
在交易所中通过BTC体现获取。
在测试网络中可以通过如下方式获取BTC:
提供自己的任意一个子账号地址,通过别人转账获取。
到coinfaucet网站索取BTC测试币。
下面介绍测试网中的第二种方式“到coinfaucet网站索取BTC测试币”,在下一章内容中介绍第一种方式。
三、索取BTC测试币
在开发过程中,必须拥有BTC余额才便于开发测试,在正式网络中进行测试,转账需要消费gas,另外速度慢,所以我们将在测试网络中进行开发和测试,调试成功后将网络类型字断替换为“livenet”即可切换到比特币正式网络中。
第一步:打开coinfaucet网站,如下图
76F1075F-FF34-4CF1-AFAE-75C49FCC9545
第二步:讲上面解锁的“wallet1”钱包的地址“moveF5KCAs5ZLwu9Cgwtw3Gh25CiC51KQz”粘贴到上图的输入框中。
8A461CF6-698F-4B7B-92F9-82C73387006E
第三步:通过验证码后会提示币已经转到了指定账号地址,然后提示本IP地址还需12小时才能再次索取BTC测试币。
B7B5D886-C952-473D-815B-CE5A10BB6082
第四步:我们再次运行代码获取钱包余额,输出如下。
3C9FFB67-7861-4D27-860D-FEBC8D3E3A59
可看到该账号“moveF5KCAs5ZLwu9Cgwtw3Gh25CiC51KQz”拥有可用余额12121737。
注意:代码中的比特币余额都是以Satoshi为单位进行计算和传递,所以我们前端在显示的时候需要将它转换为BTC单位,进位是10^8。因此该账号当前拥有的余额是0.12121737BTC。
四、新建钱包子账号地址
到此为止我们的钱包只有一个子账号地址,要获取更多的子账号地址,就是获取路径“m/0/1”、“m/0/2”......"m/0/2^31"的子地址,可以通过API调用createAddress()实现,它会根据路径按照0~2^31的顺序创建,它的用法很简单,在创建钱包的时候也都调用过。下面再看下它的完整实现。
输出如下
E79CB8B4-39AA-4ED8-97DD-4AB3DB718E2A
再次为“wallet1”钱包创建了子账号地址,因为该钱包只有路径“m/0/0”的地址被创建,所以现在创建的地址路径是“m/0/1”,地址是“mwtTPpQWGkQabUqgAwSN62SfhNYVV76BHZ”。
下面我们再来查看一下该钱包的子账号地址与余额。
可见该钱包的余额0.12121737BTC还是由第一个账号拥有,它的子账号地址则有了两个,分别是“m/0/0”与“m/0/1”。
验证二:使用助记词转换网站
再打开助记词转换网站验证wallet1钱包,它的助记词是“same subway develop fun fancy library sand rain hamster ship floor define”, 密码是“1234qwer”。
2BE72BA3-CBF4-46FC-A195-F51388EF8FC8
可见与代码中的结果一致。
五、导出子账号私钥
现在我们来导出“wallet1”钱包中“m/0/1”路径的私钥。需要通过credentials认证对象调用getDerivedXPrivKey()方法获取到derivedXPrivKey,derivedXPrivKey再通过路径获取到指定账号的keyPair,那么keyPair里面就有私钥了。
输出如下
40B18343-5B78-4A70-9CE8-F5C2E60B5782
根据输出可以看到成功获取到了“m/0/1”路径的私钥、公钥、地址数据,与助记词转换网站的数据也一致。
六、完整源码
1. controllers/wallet.js
编辑controllers文件夹下的wallet.js文件,实现获取钱包子账号地址、获取钱包余额获、新建钱包子账号地址、导出子账号私钥功能。
2. controllers/web.js
编辑controllers文件夹下的web.js文件,后端实现返回钱包账号详细页面。
七、项目运行效果
786E6166-FA63-4B85-9486-6ECE71C8CDC8
项目源码Github地址
版权声明:博客中的文章版权归博主所有,未经授权禁止转载,转载请联系作者(微信:lixu1770105)取得同意并注明出处。
未经授权禁止转载、改编,转载请注明出处!
- 我的微信
- 这是我的微信扫一扫
- 我的电报
- 这是我的电报扫一扫