持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
区块链离线钱包开发之区块链钱包的核心原理
在区块链的以太坊开发中,以太坊的客户端geth本身就具有钱包的功能,它帮助账户去完成交易以及合约调用。区块链钱包按照联网情况、节点数据同步情况来看,可以分为:全节点钱包、冷钱包、热钱包、中心化钱包以及轻钱包。私钥一直处于区块链网络中的,因此属于热钱包。
钱包按照展现形式又可以分为手机钱包、网页钱包、硬件钱包、纸钱包、脑钱包等。纸钱包和脑钱包主要是指记录私钥的方式靠纸和大脑。
基于HD Wallt的特点,目录是这样定义的:
m/purpose'/coin_type'/account'/change/address_index
- Purpose:提案编号
- coin_type:币种
- account: 独立的逻辑性亚账户
- change:HD钱包两个亚树,在这一层,编号不同可以对应多个不同子账户。
Ganache就是一款有图像界面的钱包哦。
助记词的生成和验证
为了方便开发,我们可以使用bip39这个第三方库来进行助记词的生成和验证。
//引入"github.com/tyler-smith/go-bip39"
func create_mnemonic() (string, error) {
//1. entropy
b, err := bip39.NewEntropy(128)
if err != nil {
log.Panic("Failed to NewEntropy", err)
}
//2. mnemonic
return bip39.NewMnemonic(b)
}
在使用main函数内调一下,就有了助记词,就可以推导出种子,通过种子就可以获得私钥和账户地址。
助记词推导到地址的步骤
- 1、借助以太坊源码包,通过BIP44定义的目录获取对应的钱包目录path。
- 2、借助bip39包,通过记助词生成种子seed
- 3、使用btcutil,将seed变成masterKey
- 4、借助btcutil,利用masterKey+path生成私钥privateKey。
- 5、使用ecdsa,通过私钥生成公钥。
- 6、 利用以太坊源码将publicKey转换为地址。