本篇我们将会学习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 :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。