EOS基础全家桶(五)钱包管理
简介
本篇我们将会学习EOS自带的命令行钱包的使用方法,我们将会使用cleos来控制keosd服务对本地钱包进行管理。
虽然现在市面上已经有很多支持EOS的钱包了,有Web钱包,有app钱包,还有浏览器插件钱包,著名有scatter钱包、TokenPocket钱包还有MeetOne钱包等。但是基于服务器上的钱包管理我们还是必须要学会使用keosd的功能,而且,从安全性来说,三方的终究没有官方的更让人放心吧,我的同事就遇到过被三方sdk盗号的情况,所以作为开发人员,熟练使用keosd的功能,对我们管理EOS节点和管理私钥都至关重要,更何况我们后续的学习都还要基于它呢。
前置条件
要使用钱包的功能,我们至少要安装好了EOS,包括cleos和keosd,如果使用docker安装的,我们需要借助docker容器内环境来操作,所以建议直接通过docker的exec命令进入到容器内部。
keosd与cleos
在前面EOS基础全家桶(四)启动节点中我们介绍了,cleos是一个命令行工具,可以通过rpc接口管理nodeos和keosd,而keosd则是一个钱包和私钥文件的管理服务,本身提供了sockets、http及https的接口,支持访问控制和webauth的配置。本文只会介绍基本的功能。
特别说明:
下面的文章中使用的截图中cleos命令大部分都会带上—wallet-url参数,改参数并非必须,只是为了使用特定钱包目录和服务而加上。
启动/停止钱包服务
默认启停钱包服务
- 启动
默认当我们使用cleos的wallet命令操作时会自动判断是否已启动了keosd服务,如果没有启动就会使用默认配置启动keosd。
比如我们使用命令cleos wallet list
时,可以看到命令行中出现了一行keosd launched的提示,就表示默认钱包服务已经启动了。
- 停止
最简单的方式就是使用命令cleos wallet stop
,当然你也可以直接杀掉keosd的进程。
手动启停钱包服务
- 启动
我们可以手动启动keosd,可以指定它的启动端口、文件目录和解锁时间等。钱包的默认路径为用户目录下的eosio-wallet文件夹(~/eosio-wallet/)。下面的命令我们制定了socket的入口文件,解锁时间和钱包目录。
keosd --unlock-timeout 100 \
--unix-socket-path ~/study/eosio-wallet/keosd.sock \
--wallet-dir ~/study/eosio-wallet
执行后如果看到如图所示,就表示启动成功了。
启动后钱包目录下会产生socket通信文件和钱包文件wallet.lock。
这种启动方式的优点是可以更方便的设定钱包启动参数,包括端口、目录这些可能需要特例化的设置参数。
缺点是不够简单方便,程序是前台程序,启动后不能退出,需要使用nohup或者pm2等程序托管启动。
另外我们可以使用config.ini文件来配置启动参数,只需创建config.ini文件,并放置在wallet目录下。文件内容可参考默认配置,如下:
# The filename (relative to data-dir) to create a unix socket for HTTP RPC; set blank to disable. (eosio::http_plugin)
# unix-socket-path = kaccd.sock
# The local IP and port to listen for incoming http connections; leave blank to disable. (eosio::http_plugin)
# http-server-address =
# The local IP and port to listen for incoming https connections; leave blank to disable. (eosio::http_plugin)
# https-server-address =
# Filename with the certificate chain to present on https connections. PEM format. Required for https. (eosio::http_plugin)
# https-certificate-chain-file =
# Filename with https private key in PEM format. Required for https (eosio::http_plugin)
# https-private-key-file =
# Configure https ECDH curve to use: secp384r1 or prime256v1 (eosio::http_plugin)
# https-ecdh-curve = secp384r1
# Specify the Access-Control-Allow-Origin to be returned on each request. (eosio::http_plugin)
# access-control-allow-origin =
# Specify the Access-Control-Allow-Headers to be returned on each request. (eosio::http_plugin)
# access-control-allow-headers =
# Specify the Access-Control-Max-Age to be returned on each request. (eosio::http_plugin)
# access-control-max-age =
# Specify if Access-Control-Allow-Credentials: true should be returned on each request. (eosio::http_plugin)
# access-control-allow-credentials = false
# The maximum body size in bytes allowed for incoming RPC requests (eosio::http_plugin)
# max-body-size = 1048576
# Maximum size in megabytes http_plugin should use for processing http requests. 503 error response when exceeded. (eosio::http_plugin)
# http-max-bytes-in-flight-mb = 500
# Append the error log to HTTP responses (eosio::http_plugin)
# verbose-http-errors = false
# If set to false, then any incoming "Host" header is considered valid (eosio::http_plugin)
# http-validate-host = true
# Additionaly acceptable values for the "Host" header of incoming HTTP requests, can be specified multiple times. Includes http/s_server_address by default. (eosio::http_plugin)
# http-alias =
# Number of worker threads in http thread pool (eosio::http_plugin)
# http-threads = 2
# The path of the wallet files (absolute path or relative to application data dir) (eosio::wallet_plugin)
# wallet-dir = "."
# Timeout for unlocked wallet in seconds (default 900 (15 minutes)). Wallets will automatically lock after specified number of seconds of inactivity. Activity is defined as any wallet command e.g. list-wallets. (eosio::wallet_plugin)
# unlock-timeout = 900
# Override default URL of http://localhost:12345 for connecting to yubihsm-connector (eosio::wallet_plugin)
# yubihsm-url =
# Enables YubiHSM support using given Authkey (eosio::wallet_plugin)
# yubihsm-authkey =
# Plugin(s) to enable, may be specified multiple times
# plugin =
- 停止
停止钱包服务比较简单,有多种方式:
- 如果你使用的是直接前台启动的话,你只要
ctrl+c
终止进程就行了,或者直接关闭启动了keosd的命令行。 - 如果你是后台启动的,你直接杀掉keosd进程就行了,或者在开发环境可以直接
killall keosd
。 - 你也可以使用cleos来关闭,如果你使用的是默认钱包文件路径,可以直接使用
cleos wallet stop
,否则你需要指定钱包socket文件参数—wallet-url,如下:
cleos --wallet-url unix:///Users/astaldo/study/eosio-wallet/keosd.sock \
wallet stop
创建钱包
我们已经启动钱包服务了,要创建一个新钱包,我们只需要使用cleos wallet create
命令即可,create命令有几个参数。
-n 指定钱包名字
-f 指定输出钱包密码的文件,未指定—to-console时为必须参数
—to-console 指定钱包密码输出到控制台中,优先级高于-f
我们创建一个名字为dev的钱包吧。
cleos wallet create -n dev --to-console
红框部分就是钱包的密码啦,每个钱包的密码都是随机生成的。如果使用-f参数指定了一个文件,密码就会保存到文件中,而不会显示在控制台。
新创建的钱包默认是解锁状态,解锁时间由keosd的配置决定,默认是15分钟,如需修改解锁时间请参考手动启停钱包服务。
生成私钥对
创建私钥对是非常实用的功能,你新建账号,新建权限都需要配置公钥,网络上有很多生成私钥对的开放工具,但是对于开发者而言,本地生成无疑是最佳选择,相对安全性要高很多。
直接生成
使用cleos的cleos create key
命令就可以方便的生成,命令有几个参数。
—r1 指定使用R1曲线算法,默认使用的是K1曲线算法
-f 指定输出的文件,未指定—to-console时为必须参数
—to-console 指定输出到控制台中,优先级高于-f
—r1参数只在特定的场景下需要使用,默认不需要指定。
我们生成一个新的私钥对到控制台。
cleos create key --to-console
Private key就是私钥,Public key就是公钥了。如果使用-f参数指定了一个文件,密码就会保存到文件中,而不会显示在控制台。
生成到钱包
我们还可以直接生成到钱包里,使用cleos wallet create_key
命令即可,命令有几个参数。
-n 指定钱包名字
key_type 指定使用R1还是K1曲线算法,默认K1
我们生成一个新的私钥对到钱包dev中。
cleos wallet create_key -n dev
注意:钱包必须处于解锁状态。 解锁钱包可以看解锁。
可以看到,该方法最大的好处就是直接可以把私钥导入钱包中,且不会直接暴露私钥。如果要查看该公钥对应的私钥,我们在查看当前已导入key会讲解。
导入私钥
钱包的功能就是用来安全管理公私钥,且在后续我们需要签名的操作时提供私钥签名。所以导入私钥是非常常用的功能。
使用cleos wallet import
命令可以将私钥导入钱包,命令有几个参数。
-n 指定钱包名字
—private-key WIF格式的私钥
我们通常情况肯定是不推荐使用—private-key参数的,这会把私钥明文显示在命令中。
Private key: 5J4TCnyXzbPLXuXTC4gnPWno1gye2RE1LXzTgXRSPRizHASq89e
Public key: EOS7K78LBkRQD4WA2LUbG6P2KhtKMqhCrbMsxEEYd7dbACqXZytTk
我们尝试导入上面这组私钥到dev钱包中。
cleos wallet import -n dev
输入命令后就会提示输入private key,此时是安全输入,不会显示在屏幕上,你只需粘贴或者输入私钥后按回车即可。
导入成功后我们可以核对一个公钥是否一致。
锁定与解锁
钱包解锁后在超过锁定时间时,会自动锁定钱包,这是为了增加安全性,在开发环境我们可以调大锁定时间,请参考手动启停钱包服务。
解锁
使用命令cleos wallet unlock
即可解锁,命令有几个参数。
-n 指定钱包名字
—password 钱包密码
同样的,我们并不建议使用—password参数,这会把钱包密码暴露在命令中。
我们来解锁dev钱包试试。
cleos wallet unlock -n dev
输入命令后就会提示输入password,此时是安全输入,不会显示在屏幕上,你只需粘贴或者输入密码后按回车即可。
看到Unlocked就表示已经解锁了。如果钱包已经解锁,再尝试解锁时会报错。
锁定
在使用完钱包功能后,或者需要切换别的钱包时,处于安全考虑,我们可能需要手动锁定指定钱包,不然你只有等自动锁定了。
锁定钱包有两个命令可用,cleos wallet lock_all
和cleos wallet lock
,前者是直接锁定所有已解锁的钱包,后者则需要指定需要锁定的钱包名。
这里只说明一下锁定特定钱包的命令,命令只有一个参数-n指定钱包名。我们锁定dev钱包。
cleos wallet lock -n dev
移除私钥
某个私钥不需要保存在钱包中了,我们就需要删除这个私钥,操作也很简单,首先还是要确保钱包已解锁,然后使用命令cleos wallet remove_key
即可,命令有几个参数。
-n 指定钱包名字
—password 钱包密码
key 公钥(必填)
即使你的钱包已经解锁了,在执行时仍要带上钱包密码或者输入钱包密码,这是为了二次确认,毕竟私钥一旦删除就没了。
我们删除dev钱包中的EOS7mAKAfpgX4uBsSV9rmDYJCK9GjYGSpRLZ7tz5E9W1nR5Uw7pHH这个公钥。
cleos wallet remove_key -n dev \
EOS7mAKAfpgX4uBsSV9rmDYJCK9GjYGSpRLZ7tz5E9W1nR5Uw7pHH
查看
我们需要关注钱包的解锁状态,钱包内已经导入了哪些私钥对,导入的私有又是什么……所以钱包肯定要提供查看的功能。
查看当前已导入key
我们如果需要查看当前解锁的钱包中都有哪些可用的key,只需输入cleos wallet keys
。
注意:这会列出所有已解锁钱包里的key。
查看钱包状态
如果你有多个钱包,而你又需要同时解锁多个钱包,你可能会需要查看当前个钱包的解锁状态。只要使用命令cleos wallet list
即可。
可以看到,这里会列出所有的钱包,其中钱包名后面有个星号(*)表示这个钱包当前处于解锁状态。
查看钱包中的私钥
我们要将私钥导出或者导入到其他的钱包应用里,那么我们就需要查看这个公钥的私钥是什么了。我们仍然需要确保钱包已经解锁,然后使用命令cleos wallet private_keys
即可,命令有几个参数。
-n 指定钱包名字
—password 钱包密码
即使你的钱包已经解锁了,你在执行命令时还是需要带上钱包密码或者输入钱包密码,同样是为了安全考虑的二次验证。
我们查看dev钱包的所有私钥对。
cleos wallet private_keys -n dev
删除钱包
如果你需要直接删除整个钱包里的内容,最快的方式就是直接找到钱包文件目录,然后删除与钱包名同名的文件。比如你要删除dev的钱包文件,你就直接删除dev.wallet文件就可以了。
EOS基础全家桶(五)钱包管理的更多相关文章
- EOS基础全家桶(七)合约表操作
简介 本篇我们开始来为后续合约开发做准备了,先来说说EOS内置的系统合约的功能吧,本篇将侧重于合约表数据的查询,这将有利于我们理解EOS的功能,并可以进行必要的数据查询. EOS基础全家桶(七)合约表 ...
- EOS基础全家桶(八)jungle测试网的使用
简介 前面我们已经学习了一些EOS的基础知识了,但是在EOS主网上的很多操作(比如:抵押.赎回.买卖内存)都是需要EOS链被正式激活后才可使用,而激活EOS链还需要很多的准备操作,我打算在单独的一篇文 ...
- EOS基础全家桶(十)交易Action操作
简介 区块链上的所有操作都是通过交易(Transaction)上链的,无论你是转账交易还是发起的智能合约的调用,而EOS和传统区块链不同的是EOS在一个交易里可以发起多个行为(Action),这使得E ...
- EOS基础全家桶(十二)智能合约IDE-VSCode
简介 上一篇我们介绍了EOS的专用IDE工具EOS Studio,该工具的优势是简单,易上手,但是灵活性低,且对系统资源开销大,依赖多,容易出现功能异常.那么我们开发人员最容易使用的,可能还是深度定制 ...
- EOS基础全家桶(十四)智能合约进阶
简介 通过上一期的学习,大家应该能写一些简单的功能了,但是在实际生产中的功能需求往往要复杂很多,今天我就继续和大家分享下智能合约中的一些高级用法和功能. 使用docker编译 如果你需要使用不同版本的 ...
- EOS基础全家桶(六)账号管理
简介 本篇我们会学习最基本的账号相关的操作,包括了创建账号和查询,关于账号资源的操作因为必须先部署系统合约,所以我们会留到后面单独写一篇来讲解. 6-EOS基础全家桶(六)账号管理 简介 账号介绍 账 ...
- EOS基础全家桶(十五)智能合约进阶2
简介 今天我们继续补充智能合约的进阶使用技巧,这次的主题是交易,合约内我们除了可以发起内联action的调用,很多使用还需要直接调用其他的合约action或者以交易的形式调用自身的action. 发起 ...
- EOS基础全家桶(一)开篇
简介 从今天开始我会在FishoPark上与大家分享EOS的一些技术经验和基础,如果大家在看文章的过程中有任何问题,欢迎在网站下方的评论里留言,我会尽力为大家解答,如果发现我内容中所写有错,欢迎指正, ...
- EOS基础全家桶(十一)智能合约IDE-EOS_Studio
简介 我们马上要进入智能合约的开发了,以太坊最初提供了智能合约的功能,并宣告区块链进入2.0时代,而EOS的智能合约更进一步,提供了更多的便利性和可能性.为了进一步了解智能合约,并进行开发,我们需要先 ...
随机推荐
- FC及BFC
1.什么是FC 2.BFC块级格式化上下文(Block formatting context) Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的.元素的类 ...
- 使用python3编写程序,生成10个随机数,每个元素的值介于1到100之间,并计算所有元素的和、平均值。
代码如下: import random n = 0 sum = 0 while n < 10: num = random.randint(1, 100) sum = sum + num n += ...
- python学习-练习题兔子生长问题巩固
有一对兔子,一个月之后成熟,成熟之后每个月会生出一对兔子,理想状态下兔子不会死,请问n个月后有多少兔子? 分析:第一个月:1 第二个月:1 第三个月:2 第四个月:3 第五个月:5 第六个月:8 从前 ...
- Logitech k480 蓝牙键盘连接 ubuntu 系统
k480 能同时连接三台蓝牙设备,支持 Windows.Android.Chrome.Mac OS X 和 iOS 系统.奈何官方并不支持 Ubuntu. 有压迫就有反抗,呃...,不对,总是有办法在 ...
- postgresql自增字段初始值的设定
在实际开发中会有这样的需求,想要自己设置表中自增字段的初始值. 比如:有一个your_table表中有一个自增字段id,我们知道,插入数据后,默认是从1开始自增的. 但是假如现在有一个需求,是要求id ...
- MySQL基础篇(06):事务管理,锁机制案例详解
本文源码:GitHub·点这里 || GitEE·点这里 一.锁概念简介 1.基础描述 锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题.锁机制是一个非常大的模块,贯彻MyS ...
- (转)解决windows live writer的段首缩进问题
原文地址:http://blog.csdn.net/xiao_wanpeng/article/details/6381799 Windows live writer 默认是没有段首缩进的,并且不能修改 ...
- 在Centos系统中基于PowerDNS和Poweradmin自建域名解析服务器替代DnsPod
本文讲述了我在Centos 7系统(其他版本的Centos未尝试)中基于PowerDNS和poweradmin自建域名解析服务器替代DnsPod的过程.通过本文所述方法,可以建立权威域名解析服务器的m ...
- 写了个python脚本,循环执行某一个目录下的jmeter脚本————解决的问题,每次回归时,都得一个个拉取
import os import time #需要你改的就这3个参数 #path是放你jmx脚本的文件夹路径 path="D:\\桌面\\每次都是从共享上考最新的\\" #jtl_ ...
- SCF(SenparcCoreFramework) 系列教程(一):项目介绍及快速搭建
2020年3月25日的“盛派周三分享”活动首次使用直播的方式与大家见面,共有 500 多人参与了活动,得到了众多开发者的好评,并强烈要求我分享 PPT,这点要求当然必须满足啦! 除此以外,还有许多开发 ...