Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Bytomd 助记词恢复密钥体验指南

用香烟做的云
118 0 0
比原项目仓库:
( F8 D& ^2 n, I2 mGithub地址:https://github.com/Bytom/bytom
; R0 [1 e+ Z6 u7 Q+ HGitee地址:https://gitee.com/BytomBlockchain/bytom
, E% w( a: u9 ~* ?) o; `) M! ~* |背景知识: G8 Z  k. x$ b. M8 W8 Y
Bytom 使用的 密钥类型为基于 ed25519 的 chainkd.XPub
/ Z4 |4 O( ?6 K! y
  • 代码见 bytom/crypto/ed25519/chainkd
  • 文档见 https://chain.com/docs/1.2/protocol/specifications/chainkd`2 L2 a* p; I& c( j4 r

    & D) ^" r) _7 I  `7 ~; `预备
    4 h% Z" p  E6 D3 y6 D& g代码修改
    3 Z% e/ Q/ A- ?- l4 K首先适当修改代码,添加一些打印输出,使得我们更好的进行验证。 如果只是想看 xpub ,而不关心 xprv(对于验证导入导出助记词功能来说已经够了)的话可以跳过这一步,不必修改源码6 u+ ]) S0 r8 ?4 ?; o; ^
    在 bytom/blockchain/pseudohsm/pseudohsm.go 中的
    0 Q5 }6 @; B! Q$ l/ N3 w3 lfunc (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error)
    - C, b, M+ `" W/ Z+ G% b' v添加输出打印 root XPub 对应的 私钥 和 公钥
    $ A" }/ M/ l# x6 I, zfunc (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error) {
    - V3 i' H7 A2 s" k, V    // Generate a Bip32 HD wallet for the mnemonic and a user supplied password
    0 K0 q/ A4 }8 G: z    seed := mnem.NewSeed(mnemonic, "")
    , P  Y! @4 g9 A    xprv, xpub, err := chainkd.NewXKeys(bytes.NewBuffer(seed))5 x, ]7 f3 s2 d
        if err != nil {& A, }/ m- ?& C8 r; B9 b
            return nil, err' D! h9 K6 s; W4 r1 Y
        }
    7 J+ g# X3 @0 {. h8 V        ) k5 c+ I. W7 V4 v7 R
        fmt.Println(hex.EncodeToString(xprv[:])) // Add info printing
      y  Z7 t  \! o( S! G/ t& X& o2 M    fmt.Println(hex.EncodeToString(xpub[:])) // Add info printing; S6 E% t/ ^8 a/ U" b& j
        id := uuid.NewRandom()
    6 p. q, x  S5 s) Q    key := &XKey{
    $ ]* h" D" l' }4 c+ C$ P        ID:      id,
    7 v8 P; i2 j- t3 z* x/ {0 @        KeyType: "bytom_kd",
    2 u) o( w, Q; Q        XPub:    xpub,$ G) u( B1 `( b
            XPrv:    xprv,% D8 L1 K5 k; d0 z+ V" e5 U
            Alias:   alias,& b% a  _6 G8 ?1 ~2 o# e) Y
        }" J: Y! Z: @. R
        file := h.keyStore.JoinPath(keyFileName(key.ID.String()))- o5 p+ j) I: `8 A: V/ Q' e
        if err := h.keyStore.StoreKey(file, key, auth); err != nil {& f1 s+ H% V' B6 f* W
            return nil, errors.Wrap(err, "storing keys")
    0 M+ @8 l4 t$ Z" H5 K    }! D% f. C6 @+ Z
        return &XPub{XPub: xpub, Alias: alias, File: file}, nil
      {: D; i0 A9 ]9 O$ {: F4 ]}/ v' Y" t& B7 @( X+ i8 b& s% U
    工具准备
    9 l4 C: @- U0 L& t% t! E- Y因为 bytomd 目前 dashboard 钱包图形界面还没有助记词相关功能,我们需要准备工具使用 POST 请求来使用。比如 curl 或者 postman! L0 z: N$ y7 @/ }
    获取密钥对应助记词
    0 D2 p. j8 _4 [dashboard 目前还没有 从 密钥导出助记词的功能,现有只是在创建密钥时有助记词相应输出信息。可以修改源码在查看密钥时 打印对应助记词。
    : M; H% d' Z+ l" M. o因为只是测试,这里为了方便,直接查看在创建密钥时返回的助记词。' n+ B: S% \3 W2 A6 [
    对 bytomd 发起 post 请求 /create-key
    7 N- r) U; j8 M% N, z+ r{! P/ z7 Q3 C4 ]% S" p' d
      "alias": "create_key_test",
    6 [0 d0 b! f* I, j6 u+ S4 J  "password": "createkeytest",
    ! ?& k- G" J& e: I7 a) Q  "language": "en"
    * e+ ], E1 h+ l! _( e6 r}+ Z% k( [. c' M4 Y: X2 A

    : V# ?7 ~; m0 B可以看到 响应中 显示了 xpub 和 助记词
    - G8 t4 B+ _* |' o4 L6 b* f由于修改了源码,添加了打印信息,bytomd 命令行也打印出了相印的 xprv 和 xpub
    ( |: H5 M$ e  Q' T# P
    4 ]+ [" ]) x  D( n9 i. |步骤' @& M/ ]2 F0 ?9 d- ]5 Q
    如何通过导入助记词恢复密钥呢?2 X+ h8 s: h3 b3 Y0 y2 b) R* v
    假设目前 已经有一个 xprv
    ) l9 U4 O  r* Q5 W3 ~50db5bfe21b08462972eadbce08ec92d078a45fa7a280d175a823f9e457faf447d1f501b69f895b830138fabc6f91e2b3b3c8df26642a34be4af27886b9134dc, p" O/ T# }# R( v! p; ~
    对应的 助记词为
    ! w" j- T# F8 @; o4 Q2 ^, y4 Lpudding
    . w3 N5 N" ~( L0 e. @room
      q) E! O  I7 s! s0 f! Sbusiness5 C$ i7 Q8 E2 q; u' D
    river+ A! J7 A. m% S- V; g
    pattern+ M; d# ~6 [- D
    box3 A5 [5 o4 Y) r/ d) v+ ?+ `
    snap- U5 f4 L' Y0 E9 q1 r% J  x7 X8 D. @
    merit
    ! \2 A. p6 [1 `1 zunfold" T9 {% P( f! G3 ~" U+ S
    speak# Y4 B0 T) \0 A) p! j4 ~0 n
    hat6 a# P+ P3 g& O5 ?
    task
    7 ~/ W* s1 m) H3 R% }0 x/ F3 n8 I发起 post 请求 /create-key
    $ l2 K% v, [2 ]% `5 |  Z! J{; h' q/ X$ G2 H( a$ o9 c& ~
      "alias": "nnemonic_test",
    & g7 U+ _  a4 f1 F  "password": "nnemonicnnemonic",
    - \6 c8 W8 o* J2 R  "nnemonic": "pudding room business river pattern box snap merit unfold speak hat task",( [, ~1 S1 t3 ~; H
      "language": "en"
    4 `# [$ u; C% b6 k  z8 O; ?}
    % d( ]& @7 U6 o5 d/ i. j返回相应:
    ; T- v! H  \! H# ~9 Y5 P% z2 T" W; r4 `
    bytomd 输出
    . s  V5 h! x' L2 s5 \5 z, w& X) I$ s) d$ v. e& E  x% N: z
    可以看到,恢复出来的 xprv 和 我们本来的 xprv 一致,验证成功。  [( I( U0 o3 P* k
    dashaboard 中也能见到我们恢复的 密钥。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

    用香烟做的云 小学生
    • 粉丝

      0

    • 关注

      0

    • 主题

      2