比原項(xiàng)目倉(cāng)庫(kù):
Github地址:https://github.com/Bytom/bytom
Gitee地址:https://gitee.com/BytomBlockchain/bytom
背景知識(shí)
Bytom 使用的 密鑰類型為基于 ed25519 的 chainkd.XPub
- 代碼見
bytom/crypto/ed25519/chainkd
- 文檔見 https://chain.com/docs/1.2/protocol/specifications/chainkd`
預(yù)備
代碼修改
首先適當(dāng)修改代碼丐巫,添加一些打印輸出穷蛹,使得我們更好的進(jìn)行驗(yàn)證。 如果只是想看 xpub ,而不關(guān)心 xprv(對(duì)于驗(yàn)證導(dǎo)入導(dǎo)出助記詞功能來說已經(jīng)夠了)的話可以跳過這一步场绿,不必修改源碼 。
在 bytom/blockchain/pseudohsm/pseudohsm.go
中的
func (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error)
添加輸出打印 root XPub 對(duì)應(yīng)的 私鑰 和 公鑰
func (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error) {
// Generate a Bip32 HD wallet for the mnemonic and a user supplied password
seed := mnem.NewSeed(mnemonic, "")
xprv, xpub, err := chainkd.NewXKeys(bytes.NewBuffer(seed))
if err != nil {
return nil, err
}
fmt.Println(hex.EncodeToString(xprv[:])) // Add info printing
fmt.Println(hex.EncodeToString(xpub[:])) // Add info printing
id := uuid.NewRandom()
key := &XKey{
ID: id,
KeyType: "bytom_kd",
XPub: xpub,
XPrv: xprv,
Alias: alias,
}
file := h.keyStore.JoinPath(keyFileName(key.ID.String()))
if err := h.keyStore.StoreKey(file, key, auth); err != nil {
return nil, errors.Wrap(err, "storing keys")
}
return &XPub{XPub: xpub, Alias: alias, File: file}, nil
}
工具準(zhǔn)備
因?yàn)?bytomd 目前 dashboard 錢包圖形界面還沒有助記詞相關(guān)功能,我們需要準(zhǔn)備工具使用 POST 請(qǐng)求來使用。比如 curl 或者 postman 豁遭。
獲取密鑰對(duì)應(yīng)助記詞
dashboard 目前還沒有 從 密鑰導(dǎo)出助記詞的功能,現(xiàn)有只是在創(chuàng)建密鑰時(shí)有助記詞相應(yīng)輸出信息贺拣”托唬可以修改源碼在查看密鑰時(shí) 打印對(duì)應(yīng)助記詞。
因?yàn)橹皇菧y(cè)試譬涡,這里為了方便闪幽,直接查看在創(chuàng)建密鑰時(shí)返回的助記詞。
對(duì) bytomd 發(fā)起 post 請(qǐng)求 /create-key
{
"alias": "create_key_test",
"password": "createkeytest",
"language": "en"
}
可以看到 響應(yīng)中 顯示了 xpub 和 助記詞
由于修改了源碼涡匀,添加了打印信息盯腌,bytomd 命令行也打印出了相印的 xprv 和 xpub
步驟
如何通過導(dǎo)入助記詞恢復(fù)密鑰呢腕够?
假設(shè)目前 已經(jīng)有一個(gè) xprv
50db5bfe21b08462972eadbce08ec92d078a45fa7a280d175a823f9e457faf447d1f501b69f895b830138fabc6f91e2b3b3c8df26642a34be4af27886b9134dc
對(duì)應(yīng)的 助記詞為
pudding
room
business
river
pattern
box
snap
merit
unfold
speak
hat
task
發(fā)起 post 請(qǐng)求 /create-key
{
"alias": "nnemonic_test",
"password": "nnemonicnnemonic",
"nnemonic": "pudding room business river pattern box snap merit unfold speak hat task",
"language": "en"
}
返回相應(yīng):
bytomd 輸出
可以看到,恢復(fù)出來的 xprv 和 我們本來的 xprv 一致卡者,驗(yàn)證成功崇决。
dashaboard 中也能見到我們恢復(fù)的 密鑰。