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 =
  • 停止

停止钱包服务比较简单,有多种方式:

  1. 如果你使用的是直接前台启动的话,你只要ctrl+c终止进程就行了,或者直接关闭启动了keosd的命令行。
  2. 如果你是后台启动的,你直接杀掉keosd进程就行了,或者在开发环境可以直接killall keosd
  3. 你也可以使用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_allcleos 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文件就可以了。

原文链接

原文地址:https://www.cnblogs.com/fishopark/p/12652505.html

时间: 2024-07-30 22:19:30

EOS基础全家桶(五)钱包管理的相关文章

【转】Spring全家桶

Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶.它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案. 很多研发人员把spring看作心目中最好的java项目,没有之一. 所以这是重点也是难点,工作中必须会,面试时肯定考. 那么,今天花费20分钟,梳理Spring框架相关知识. Spring系列包含非常多的项目,可以满足java开发中的方方面面. 先来看常用框架的知识点汇总,如图: Ⅰ

[转]vue全面介绍--全家桶、项目实例

慢慢了解vue及其全家桶的过程 原文http://blog.csdn.net/zhenghao35791/article/details/67639415 简介 “简单却不失优雅,小巧而不乏大匠”. 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和React.js的优点,并剔除了它们的缺点”.授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You). Vue.js 是一个J

vue全面介绍--全家桶、项目实例

简介 "简单却不失优雅,小巧而不乏大匠". 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,"vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点".授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You). Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计.

Spring全家桶带来云时代的软件开发变革

快速发展和变化的业务需求所带来的挑战正在驱动现代企业数字化转型,云原生应用系统的构建是其中最为重要环节之一. 目前,云原生应用开发框架Spring(包括Spring MVC.Spring Boot.Spring Cloud.Spring Cloud Dataflow)已经占据Java软件开发框架的统治地位.在Snyk最新的2018 JVM生态调查中表明:40%被调研的开发者正在使用Spring Boot,36%被调研的开发者正在使用Spring MVC:2018年也是Spring Boot首次超

前端工程师晋升课程 Vue全家桶+SSR+Koa2全栈开发美团网

第1章 课程导学这门课主讲以Vue SSR+Koa2全栈技术为目标,最终实现美团网项目.本章节旨在告诉大家我们会用到哪些技能.教学方法.课程内容分布.学习方法等.备注:我们会涉及Vue2.5.Nuxt.Koa2.element-ui.Mongodb等 1-1 课程导学第2章 Vue基础知识整个SSR部分都是用的Vue框架,需要给初级用户讲解Vue的基础语法,不会让他们在学习实战的时候感到迷茫,这个章节会通过vue-cli搭建一个简单的demo,让大家快速的掌握Vue的基础应用,即使他没有学习过.

开发微信全家桶项目 Vue Node MongoDB高级技术栈全覆盖

开发微信全家桶项目 Vue Node MongoDB高级技术栈全覆盖链接:https://pan.baidu.com/s/15-9Ne3vFEFPzJA0wyltxrg 提取码:加Q:1642261812 V信:SH66668888QH 获取 第1章 本地与服务器环境准备介绍微信公众号/小程序/域名/服务器的申请选购流程,在本地与线上服务器分别对项目的运行环境进行搭建部署,如 Node.js/Vue/Yarn/PM2/Nginx/MongoDB 等等,同时会来简单介绍下从本地通过 PM2 利用

mac设计师系列 Adobe “全家桶” 15款设计软件 值得收藏!

文章素材来源:风云社区.简书 文章收录于:风云社区 www.scoee.com,提供1700多款mac软件下载 Adobe Creative Cloud 全线产品均可开放下载(简称Adobe CC 全家桶),Adobe Creative Cloud 为多国语言版本,支持:中文,英文,韩文,日本等多国语言, 在安装的时候可以选择自己需要的语言安装. 下面,给大家简单介绍一下adobe全家桶. 1.Photoshop Adobe Photoshop,简称“PS”,是一个由Adobe Systems开

C++开发EOS基础指南:迭代器和Lambda表达式

让我们来谈谈迭代器,它是一个非常有用的工具,在整个EOS代码库中大量使用.如果您来自JavaScript背景,您可能已经熟悉迭代器,就像它们用于循环一样.迭代器的关键概念是提供一种更好的方法来遍历项集合.额外的好处是您可以为任何自定义类实现迭代器接口,使迭代器成为遍历数据的通用方法. // @url: https://repl.it/@MrToph/CPPBasics-Iterators #include <iostream> #include <vector> using nam

vue 全家桶介绍

Vue有著名的全家桶系列,包含了vue-router(http://router.vuejs.org),vuex(http://vuex.vuejs.org), vue-resource(https://github.com/pagekit/vue-resource).再加上构建工具vue-cli,sass样式,就是一个完整的vue项目的核心构成. 概括起来就是:.1.项目构建工具.2.路由.3.状态管理.4.http请求工具. 下面单独介绍 前言:Vue两大核心思想:组件化和数据驱动.组件化: