经过了两天的摸索,基本的一些功能和需要的前期准备工作已经ok
那么就开始创建钱包吧:
首先要引入三个npm包:
// 1.生成助记词 let mnemonic = bip39.generateMnemonic(); //2.将助记词转成seed let seed = bip39.mnemonicToSeedSync(mnemonic); //3.通过hdkey将seed生成HD Wallet let hdWallet = hdkey.fromMasterSeed(seed); //4.生成钱包中在m/44'/60'/0'/0/0路径的keypair; let key = hdWallet.derivePath("m/44'/60'/0'/0/0"); //5.从keypair中获取私钥 let privateKey = util.bufferToHex(key._hdkey._privateKey); console.log('钱包私钥',privateKey); //6.从keypair中获取公钥 let publicKey = util.bufferToHex(key._hdkey._publicKey); //7.使用keypair中的公钥生成地址 let address = util.pubToAddress(key._hdkey._publicKey, true);
看到这里我们实现了前面的7步操作,控制台打印后你会发现钱包地址和我们正常的‘0x’开头的地址是不一样的,不能说不一样,只能说完全不一样
这个时候我们需要把地址转换一下:
address = address.toString('hex')
这样你再次打印就会发现多少有点相似了,但是还不是0x开头,这个时候我已经怀疑我是不是操作错误了。
其实并不是我们有问题,而是通用的钱包地址都是用eip55这个东西转码过了的,ethereumjs-util里面给我们提供了一个方法:toChecksumAddress
address = util.toChecksumAddress(address.toString('hex'))
可是很可惜,我用这个方法的时候一直被阻断,既不报错,也不给返回值,掉了大把头发。
突然想到,既然原理都是使用eip55转码,我使用eip55的npm包转码岂不是也可以?
试了下,发现还真可以,我把生成的地址放到小狐狸上面是可以用的,而且使用生成的私钥在小狐狸上面转换的地址和这个插件生成的是一样的。
又是忙碌的一天啊!
参考大佬的作品: