開發谷歌插件(三)

經過了兩天的摸索,基本的一些功能和需要的前期準備工作已經ok

那麼就開始創建錢包吧:

首先要引入三個npm包:
const bip39 = require('bip39')
const {hdkey} = require('ethereumjs-wallet')
const util = require('ethereumjs-util')
那麼引入以後就開始下面8步操作
// 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包轉碼豈不是也可以?

 試了下,發現還真可以,我把生成的地址放到小狐狸上面是可以用的,而且使用生成的私鑰在小狐狸上面轉換的地址和這個插件生成的是一樣的。

const eip55 = require('eip55')
address = eip55.encode(address.toString('hex'));

  又是忙碌的一天啊!

參考大佬的作品:

https://www.jianshu.com/p/02879235c084

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章