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

比原项目仓库:

Github地址:https://github.com/Bytom/bytom

Gitee地址:https://gitee.com/BytomBlockchain/bytom

背景知识

Bytom 使用的 密钥类型为基于 ed25519chainkd.XPub

预备

代码修改

首先适当修改代码,添加一些打印输出,使得我们更好的进行验证。 如果只是想看 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 中也能见到我们恢复的 密钥。

原文地址:https://www.cnblogs.com/bytom/p/9752908.html

时间: 2024-08-28 00:48:27

Bytomd 助记词恢复密钥体验指南的相关文章

php实现以太坊助记词

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力.下载地址:以太坊助记词php开发包 . 1.开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39标准的助记词 将BIP39助记词转换为符合BIP32标准的层级确定密钥 支持BIP44多币种层级确定性钱包规范 兼容imtoken.metamask等常见钱包的助记词与密钥/地址转换 以太坊助记词PHP开发包运行在Php 7.1+环境下,当前版本1.0.0,主要代码文件清单如下: <table cla

1.16. BIP39协议:使用助记词生成确定性钱包

以太坊系统学习教程: https://www.netkiller.cn/blockchain/bip39.html BIP:39 层:应用层 标题:使用助记词生成确定性钱包秘钥 作者:Marek Palatinus [email protected] Pavol Rusnak [email protected] Aaron Voisine [email protected] Sean Bowe [email protected] 状态:已经被提议 类型:标准化跟踪 创建日期:2013-09-10

助记词是什么,有什么用?

玩加密货币的朋友相信对助记词都不陌生,我们在使用钱包之前,会让你备份12个单词,在备份期间不允许截图操作,并且不断强调这12个单词非常重要,最好用物理方式备份,备份时身边不要有任何人. 对于普通用户来说,如果只是一味的向他们强调助记词重要性的结论,而不告诉背后的原因的话,是很难调动起人的底层动力的,很可能过几天就忘了助记词的重要性(小编已经看过不少在群里呼唤自己因为助记词丢失而导致破产的杯具). 助记词的英文是Mnemonic,在大部分人的印象中,助记词=私钥,是导入钱包的工具,其实准确的说,助

[转]简单科普私钥、地址、助记词、Keystore的区别

本文转自:https://www.jianshu.com/p/d0a4a44685d3 很多人保管不好自己的虚拟财产,发生丢币的情况,很多都是因为不清楚私钥的概念. 私钥(Private Key) 比特币的私钥是由64位十六进制的字符组成,长得像这样,比如:5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss. 私钥的生成方式是完全随机的,随机生成这样的字符串就会有16的64次方种可能,即:2的256次方,这个数字已经超过了宇宙中原子的个数,用“

如何开发一款以太坊(安卓)钱包系列1 - 通过助记词创建账号

上周我开源了一款钱包,反映很好,一周时间不到已经快到100 Star.接下来我会几篇系列文章把开发以太坊钱包的核心要点写出来,也算是对代码的一个解读. 写在前面 钱包是使用Android安卓平台编写,使用的是原生代码Java 语言编写, 是基于Java 1.8 版本,也使用了Java 1.8 中一些较新的语言特性,如 Lambda表达式等:另外还较多使用了ReactiveX/RxAndroid响应式编程用法. 在本系列文章中,重点是介绍以太坊钱包账号.交易等逻辑,有时可能会假定读者已经了解And

[币严BIZZAN区块链]Java生成ETH钱包助记词、私钥、地址

本文主要介绍在Java工程中如何生成ETH钱包的助记词.私钥.地址. 一.在之前创建的spring boot 项目中的 pom.xml文件中加入需要的依赖 <dependency> <groupId>org.bitcoinj</groupId> <artifactId>bitcoinj-core</artifactId> <version>0.14.7</version> </dependency> <d

BIP39助记词生成简单流程

其实,bip39之前有过一些了解,但是都没有过深入的探索,最近具体学习下,顺便记录下: 1.首先,随机生成一个长度为32倍数的128-256位的二进制类型,我们把它称之为熵: 2.对这个生成的熵做sha256计算,取结果的前8位:(这里说明下,虽然取了8位,但是不一定全部用上,具体使用的位数计算:n = 熵的位数/32) 3.用熵与上一步中前n位进行拼接(熵放前),获得一个大整型(我们一般称这n位为校验位): 这里也说明下,之前我看到网上有人说是将熵以32位分割,然后每段末尾插入1个校验位,于是

《C++运算符优先结合助记词》

===================================== (新手上路一原创,共20 +1句) 作用类名全: 点箭标调构: 后增减运明转: 前增减非位反,正负解尺址换,新删数组无异常: 成员指针解引用: 乘除模: 加和减: 左移右移: 小于大于: 等于不等: 位与: 位异: 位或: 逻与: 逻或: 条件: 赋值: 复赋值: 抛出异常: 逗. (注:)一三赋值复赋值,抛出异常右.

声母数字助记系统

声母数字助记系统 大部分人日常应用的数学大概就是加减乘除,但很多人应该都算不过菜市场的小贩.五元三斤的大葱你想买一斤半,他看似不经意地一抓准保给你抓一斤八两凑三块钱的.这是熟能生巧. 除了熟能生巧,心算肯定还有方法.阿瑟本杰明(Arthur Benjamin)是大学教授,也是个数学魔法师(Mathemagician).他的心算能力很强,我看过他在TED上的表演,他可以很快速心算3.4位数的乘法,5位数的乘方,公元某年某月某一天是星期几等.在他算现场随机给出的数字37691的平方时,他告诉了我们他