2. 获取Steem的官方docker镜像
3. 用docker镜像方式运行 cli_wallet
4. 在 cli_wallet 中导入旧账号的密钥
5. 在 cli_wallet 中 生成密钥对
6. 在 cli_wallet 中 用密钥对的公钥生成新账号
7. 用密钥对的私钥,在steemit上登录新账号的在线钱包
8. 在steemit的官方在线钱包中,更换新号的密码
9. 可以正常用新号(记住密码,以备将来被盗号后的恢复)
附录:源码释疑
0. 目标
cli_wallet 是 Steem 的命令行钱包,可以直接和 Steem 节点交互,完成很多重要的钱包相关的操作,包括创建新号.
通过 cli_wallet 创建的新号,更安全,不受任何号码的控制(包括自己的旧号或steemit官方).
但cli_wallet需要Steem节点支持WebSocket RPC(ws/wss),暂时找到一个(也可以自己搭建):wss://steemd.privex.io
主要流程
1. 搭建本地的docker环境
2. 获取Steem的官方docker镜像
3. 用docker镜像方式运行 cli_wallet
4. 在 cli_wallet 中导入旧账号的密钥(负责支付创建账号的3STEEM费用)
5. 在 cli_wallet 中 生成密钥对
6. 在 cli_wallet 中 用密钥对的公钥生成新账号,新号各种密码都是这个密钥对
7. 用密钥对的私钥,在steemit上登录新账号的在线钱包
8. 在steemit的官方在线钱包中,更换新号的密码,让各种密码都不一样,方便分级管理
9. 可以正常用新号(记住密码,以备将来被盗号后的恢复).
1. 搭建本地的docker环境
ubuntu18.04 安装 docker
这里以ubuntu18.04为例,其他系统的docker安装,很容易google/baidu.
安装docker包:$ sudo apt update && sudo apt install git containerd docker.io -y
也可通过 get.docker.com 安装 docker:
$ curl -fsSL get.docker.com -o get-docker.sh
$ sh get-docker.sh
启动 docker 服务:$ service docker restart
查看 docker 状态(报错):$ systemctl status docker.service
或 $ journalctl -xn
添加专用系统账户 steemd
添加专用系统账户 steemd,并加入到 docker 组:
$ sudo adduser steemd
$ sudo usermod -aG sudo steemd
$ sudo usermod -aG docker steemd
$ sudo su - steemd
这样,steemd用户就可以直接运行docker,而不需要经常sudo操作了.
2. 获取Steem的官方docker镜像
使用官方 docker 镜像,便于灾备恢复或硬分叉时能快速操作,也可以自己从github上下载源码编译.
获取官方 docker 镜像:$ docker pull steemit/steem
查看获取情况 : $ docker images | grep steemit
steemit/steem latest 1325632326e0 5 weeks ago 2.24GB
如果无法访问官方 docker.com/docker.io ,可修改docker 镜像源:$ sudo vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}
其他可选:
- 中国科技大学:https://docker.mirrors.ustc.edu.cn
- Docker 官方中国区:https://registry.docker-cn.com
- 网易:http://hub-mirror.c.163.com
- 阿里云:https://pee6w651.mirror.aliyuncs.com
3. 用docker镜像方式运行 cli_wallet
以docker镜像方式运行 cli_wallet: $ docker run -it steemit/steem /usr/local/steemd-default/bin/cli_wallet -s wss://steemd.privex.io
Logging RPC to file: logs/rpc/rpc.log
Starting a new wallet
3104566ms main.cpp:169 main ] wdata.ws_server: wss://steemd.privex.io
Please use the set_password method to initialize a new wallet before continuing
new >>>
首次使用,需要为本地钱包设置密码:new >>> set_password yourpwd
new >>> set_password yourpwd
set_password yourpwd
null
locked >>>
此时钱包处于锁定状态,解锁钱包:locked >>> unlock yourpwd
locked >>> unlock yourpwd
unlock yourpwd
null
unlocked >>>
如果在使用过程中,出现没有反应,可能是 cli_wallet 断开了和steem节点之间的网络连接,需要ctrl+d退出,重新按之前的操作重做.
4. 在 cli_wallet 中导入旧账号的密钥
cli_wallet创建新号,需要向steem节点支付3steem费用,因此必须先有一个旧账号,里面至少有支付创建账号所需的3STEEM.
导入旧号的钱包密钥(active key):unlocked >>> import_key 5J-active-key
import_key 5J-active-key
3555971ms wallet.cpp:427 save_wallet_file ] saving wallet to file wallet.json
true
unlocked >>>
查看导入的账号资产:unlocked >>> list_my_accounts
unlocked >>> list_my_accounts
list_my_accounts
585041ms websocket_api.cpp:102 on_message ] message: {"jsonrpc":"2.0","result":[["acu.fund"]],"id":1}
585171ms websocket_api.cpp:102 on_message ] message: {"jsonrpc":"2.0","result":[{...}
olduser 102.164 STEEM 614866.009468 VESTS 0.499 SBD
-------------------------------------------------------------------------
TOTAL 102.164 STEEM 614866.009468 VESTS 0.499 SBD
5. 在 cli_wallet 中 生成密钥对
生成密钥对:unlocked >>> suggest_brain_key
suggest_brain_key
{
"brain_priv_key": "WACE other words COGNATE",
"wif_priv_key": "5JY-wif_priv_key-5iB",
"pub_key": "STM8QhX-pub_key-Dw1KB"
}
unlocked >>>
6. 在 cli_wallet 中 用密钥对的公钥生成新账号
用 suggest_brain_key 生产的 pub_key ,创建新号(旧号为olduser,新号为newuser):create_account_with_keys "olduser" "newuser" "" "STM8QhX-pub_key-Dw1KB" "STM8QhX-pub_key-Dw1KB" "STM8QhX-pub_key-Dw1KB" "STM8QhX-pub_key-Dw1KB" true
创建的新号,各种密码都是这个密钥对,返回信息显示,旧账号作为creator支付了 3 STEEM费用:
{
"ref_block_num": 62156,
"ref_block_prefix": 3768508021,
"expiration": "2019-10-12T14:18:15",
"operations": [[
"account_create",{
"fee": "3.000 STEEM",
"creator": "olduser",
"new_account_name": "newuser",
7. 用密钥对的私钥,在steemit上登录新账号的在线钱包
浏览器打开 https://steemitwallet.com , 用新用户名和密钥对的私钥(wif_priv_key)登录.
8. 在steemit的官方在线钱包中,更换新号的密码
新号的所有密码都是密钥对的私钥,不利于分级管理,因此登录官方在线钱包后,立即更改密码,让各种密码都不一样,方便分级管理 : https://steemitwallet.com/@newuser/password
9. 可以正常用新号(记住密码,以备将来被盗号后的恢复)
分别备份四个密码,在不同的场合,用不同的秘密:/post/Active/Owner/Memo
附录:源码释疑
为何这样创建账号,可以不受其他任何账号的控制,可以从源码和源码注释中,找到说明.
更多的 cli_wallet 操作,可以参考源码中的说明.