有幸参与钱包项目,此文仅写思路和一些简略的方法,作为个人开发或迭代钱包项目的参考
需要使用三个包bip39
、ethereumjs-wallet/hdkey
、ethereumjs-util,
安装和引入还有介绍参考另一篇博文记录:
bip39 ethereumjs-wallet ethereumjs-util 的API 和引入 介绍_百撕可乐的博客-CSDN博客
第一次进入 生成助记词
在有设置好密码的条件下,生成助记词,并放在缓存内
const mnemonic = bip39.generateMnemonic();
uni.setStorageSync('mnemonic', mnemonic);
一般情况下助记词常用的是12个单词,每两个单词之间有空格分隔开,so...
在需要验证正确的时候,可以根据长度来判断验证
this.mnemonic_list = mnemonic.split(" ");
if(this.mnemonic_list.length!=12){
uni.showModal({
title: 'Error',
content: "找不到啦",
showCancel:false
});
return;
}
//一些其余操作
uni.navigateTo({
url: '跳转到你想去的页面'
});
//将助记词转成seedBuffer
let seedBuffer = bip39.mnemonicToSeedSync(this.mnemonic,"");
//通过hdkey将seedBuffer生成HDWallet
let hdWallet = hdkey.fromMasterSeed(seedBuffer);
//生成钱包中在m/44'/60'/0'/0/0路径的keypair
let key = hdWallet.derivePath("m/44'/60'/0'/0/0");
//从keypair中获取私钥
let privateKey = util.bufferToHex(key._hdkey._privateKey);
//从keypair中获取公钥
let publicKey = util.bufferToHex(key._hdkey._publicKey);
//使用keypair中的公钥生成地址
let address = util.pubToAddress(key._hdkey._publicKey, true);
address = util.toChecksumAddress("0x"+address.toString('hex'));
* 返回:1.address: address
* 2.privateKey: privateKey
* 3.publicKey: publicKey
* 4.keystore: keystore
let user=[{"privateKey":privateKey,"publicKey":publicKey,"address":address,"message": 'Success'}];
创建一个 web3 的实例,设置一个 provider,关于web3可看:
web3.js基础知识简单汇总_百撕可乐的博客-CSDN博客
//此处地址可设为全局后再调用,演示暂时写死
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
使用指定的私钥创建一个账户对象
web3.eth.accounts.privateKeyToAccount(privateKey);