Bytomd 助記詞恢復金鑰體驗指南
比原專案倉庫:
Github地址:ofollow,noindex" target="_blank">https://github.com/Bytom/bytom
Gitee地址:https://gitee.com/BytomBlockc...
背景知識
Bytom 使用的 金鑰型別為基於ed25519
的chainkd.XPub
-
程式碼見
bytom/crypto/ed25519/chainkd
- 文件見https://chain.com/docs/1.2/pr... `
預備
程式碼修改
首先適當修改程式碼,新增一些列印輸出,使得我們更好的進行驗證。如果只是想看 xpub ,而不關心 xprv(對於驗證匯入匯出助記詞功能來說已經夠了)的話可以跳過這一步,不必修改原始碼 。
在bytom/blockchain/pseudohsm/pseudohsm.go
中的
func (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error)
新增輸出列印 root XPub 對應的 私鑰 和 公鑰
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 }
工具準備
因為 bytomd 目前 dashboard 錢包圖形介面還沒有助記詞相關功能,我們需要準備工具使用POST 請求來使用。比如curl 或者postman 。
獲取金鑰對應助記詞
dashboard 目前還沒有 從 金鑰匯出助記詞的功能,現有隻是在建立金鑰時有助記詞相應輸出資訊。可以修改原始碼在檢視金鑰時 列印對應助記詞。
因為只是測試,這裡為了方便,直接檢視在建立金鑰時返回的助記詞。
對 bytomd 發起 post 請求/create-key
{ "alias": "create_key_test", "password": "createkeytest", "language": "en" }
可以看到 響應中 顯示了 xpub 和 助記詞
由於修改了原始碼,添加了列印資訊,bytomd 命令列也打印出了相印的 xprv 和 xpub
步驟
如何通過匯入助記詞恢復金鑰呢?
假設目前 已經有一個 xprv
50db5bfe21b08462972eadbce08ec92d078a45fa7a280d175a823f9e457faf447d1f501b69f895b830138fabc6f91e2b3b3c8df26642a34be4af27886b9134dc
對應的 助記詞為
pudding room business river pattern box snap merit unfold speak hat task
發起 post 請求/create-key
{ "alias": "nnemonic_test", "password": "nnemonicnnemonic", "nnemonic": "pudding room business river pattern box snap merit unfold speak hat task", "language": "en" }
返回相應:
bytomd 輸出
可以看到,恢復出來的 xprv 和 我們本來的 xprv 一致,驗證成功。
dashaboard 中也能見到我們恢復的 金鑰。