简介
本文主要讲解在命令行下操作钱包和帐户管理,以及EOSIO组件如何相互交。
包括了如何创建和管理钱包及其密钥,然后使用cleos组件通过区块链进行交互。然后,将学习如何使用cleos创建帐户。后续将介绍一些cleos,keosd以及nodeos之间的相互作用及签署发布到blockchain等内容。
在这之前需要搭建好nodeos基本环境,构建并运行cleos和keosd的副本。对命令行界面的基本了解。
本文内容从官方:账户和钱包教程翻译修改所得。
EOSIO账户和钱包概念概述
钱包可以被认为是公钥-私钥对的加密存储库。这些是签名操作所必需的。钱包及其内容由keosd管理。钱包可以访问cleos。
帐户是存储在区块链中并由可读名称。它可以由个人或多个人授权拥有,具体取决于权限配置。区块链上任何有效交易或推送消息都依赖与一个帐户。
帐户和钱包之间没有固有的关系。帐户不知道钱包,反之亦然(从关系图中可以看到)。相应地,nodeos和keosd之间没有固有的关系。它们的基本功能完全不同。
账户和钱包产生交集的地方是需要签名时,例如签名一个交易。钱包会在本地用加密的方式存储密钥。cleos在keosd和nodeos之间充当一个中介服务,当需要使用钱包中的密钥生成签名时它便会做检索操作。
创建和管理钱包
cleos会自动启动keosd,最终可能会有多个keosd正在运行的实例。
创建钱包
在cleos下使用wallet create命令创建一个默认的钱包:
$ cd /data/eos/build/programs/cleos
$ cleos wallet create --to-console
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JWhCh94HffNNJKdb523QD8dz52LAN4LNHX8begZicCCprGXiHT"
现在里面有一个名为default的钱包,并返回了这个钱包的密码。
默认情况下,keosd模块将钱包存储在~/eosio-wallet
文件夹中,并生成对应的default.wallet
。可以使用--wallet-dir
参数在命令行上指定钱包数据文件夹的位置。
cleos能够管理多个钱包。每个钱包都受不同钱包密码的保护。使用-n创建一个自定义名称的钱包:
$ cleos wallet create -n nm1024 --to-console
Creating wallet: nm1024
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KC4AVeEspMmMQYYr3JNcejsWuBX5pnsSJtsQayGF9BkaeJLhRL"
钱包列表
查看现有钱包列表:
$ cleos wallet list
Wallets:
[
"default",
"nm1024 *"
]
这里注意看default账号后边没有*,nm1024后有。
这个*意味着相应的钱包已解锁。
钱包的锁定与解锁
锁定指定钱包:
$ cleos wallet lock -n nm1024
Locked: nm1024
$ cleos wallet list
Wallets:
[
"default",
"nm1024"
]
解锁一个已命名的钱包需要使用之前生成的密码:
$ cleos wallet unlock -n nm1024 --password PW5KC4AVeEspMmMQYYr3JNcejsWuBX5pnsSJtsQayGF9BkaeJLhRL
Unlocked: nm1024
$ cleos wallet list
Wallets:
[
"default",
"nm1024 *"
]
注意:使用wallet命令与'default'钱包交互不需要-n参数
当我们将keosd停止后:
$ pgrep keosd
2158
$ pkill keosd
$ cleos wallet list
Wallets:
[]
打开钱包
可以看到钱包列表了没有之前的两个钱包了。
钱包需要在操作之前打开,包括列出它们。当你关闭keosd时,钱包被锁定了。当keosd重新启动,钱包未打开。运行以下命令打开,然后列出默认钱包。(-n可以指定钱包)
$ cleos wallet open
Opened: default
$ cleos wallet list
Wallets:
[
"default"
]
$ cleos wallet open -n nm1024
Opened: nm1024
$ cleos wallet list
Wallets:
[
"default",
"nm1024"
]
open后的钱包是锁定状态,需要执行之前的unlock解锁。
生成和导入EOSIO密钥
注意:确保使用由cleos命令生成的实际私钥,而不是本教程中生成使用的值!
生成EOSIO密钥
有多种方法可以生成EOSIO密钥对,这里重点介绍该create key命令。
生成两个公钥/私钥对。请注意键的一般格式。
$ cleos create key --to-console
Private key: 5J9RKG4wskhXHt2mf4wwLxV2wC516iES6NMfbk3aph81DHjLhVz
Public key: EOS6hExEUcAJxUao76KDo8JHE6weQhd1jeoBdss48xi43vkq9uBjL
$ cleos create key --to-console
Private key: 5JiaCuvB5qEYARCnw9arZSBFjLxs7vJRKDFh4nw9imnd6Fp1QgH
Public key: EOS56eDHRpSPMHZfjUBxWeoVXCHMWmAQ3YaQLaZNeSmRyFLw45Eem
注意此处生成的公钥前均是EOS开头;使用--file filename
参数而不是--to-console
,可以将密钥写入本地文件。
这里生成的密钥对,仅仅是一对密钥不具备任何权限。
密钥导入至钱包
现在将私钥导入nnm1024钱包。对于之前生成的两个私钥分别执行一次。(这里需要解锁对应的钱包)
$ cleos wallet import -n nm1024 --private-key 5J9RKG4wskhXHt2mf4wwLxV2wC516iES6NMfbk3aph81DHjLhVz
imported private key for: EOS6hExEUcAJxUao76KDo8JHE6weQhd1jeoBdss48xi43vkq9uBjL
$ cleos wallet import -n nm1024 --private-key 5JiaCuvB5qEYARCnw9arZSBFjLxs7vJRKDFh4nw9imnd6Fp1QgH
imported private key for: EOS56eDHRpSPMHZfjUBxWeoVXCHMWmAQ3YaQLaZNeSmRyFLw45Eem
如果导入成功会在下边提示当前私钥对应的公钥。
通过调用wallet keys查看所有的公钥(不限钱包);wallet private_keys来查看指定的账户加载了哪些密钥,可以看到公钥与私钥(需要钱包密码)。
$ cleos wallet keys
[
"EOS56eDHRpSPMHZfjUBxWeoVXCHMWmAQ3YaQLaZNeSmRyFLw45Eem",
"EOS6hExEUcAJxUao76KDo8JHE6weQhd1jeoBdss48xi43vkq9uBjL"
]
$ cleos wallet private_keys -n nm1024 --password PW5KC4AVeEspMmMQYYr3JNcejsWuBX5pnsSJtsQayGF9BkaeJLhRL
[[
"EOS56eDHRpSPMHZfjUBxWeoVXCHMWmAQ3YaQLaZNeSmRyFLw45Eem",
"5JiaCuvB5qEYARCnw9arZSBFjLxs7vJRKDFh4nw9imnd6Fp1QgH"
],[
"EOS6hExEUcAJxUao76KDo8JHE6weQhd1jeoBdss48xi43vkq9uBjL",
"5J9RKG4wskhXHt2mf4wwLxV2wC516iES6NMfbk3aph81DHjLhVz"
]
]
钱包文件本身是加密的,因此钱包将在锁定时保护这些键。访问锁定钱包中的密钥需要在创建钱包期间提供给钱包密码。
如果--data-dir
在启动eos时未指定参数,则钱包文件将存储在该~/eosio-wallet
文件夹中。要养成备份钱包的习惯,防止丢失钱包文件。
在此~/eosio-wallet
文件夹中除了钱包文件外,还有keosd配置文件config.ini。
创建一个帐户
eos里边账户和密钥对之间并没有严格的对应关系,比如A账户完全可以和B账户使用相同的的密钥对。
对区块链执行操作需要使用帐户。我们用cleos来请求nodeos创建帐户并在区块链上发布。在这之前需要使用上一篇文章中的命令启动单个节点testnet。有关设置本地环境的更多信息,请参阅EOS单节点启动与配置说明。
在这一部分我们需要keosd和nodeos同时运行。目前,keosd和nodeos默认的端口相同(8888端口)。为了简化教程本部分的运行nodeos,我们将keosd端口更改为8899。 我们可以通过两种方式执行此操作(通过cleos连带启动的keosd默认端口为8900):
启动节点
- 编辑keosd配置文件
之前有提到keosd配置文件是~/eosio-wallet/config.ini
,打开并将http-server-address属性更改为:http-server-address = 127.0.0.1:8899
- 使用命令行参数
在执命令后加参数-http-server-address = 127.0.0.1:8899
来启动keosd。
$ pkill keosd
$ keosd --http-server-address=127.0.0.1:8899
启动nodeos组件:
# 在之前我们已经在config.ini中配置好了相关的参数(上篇文章)
$ nodeos
解锁钱包并导入密钥
在这之后我们需要起一个新的终端窗口(保持nodeos的运行,可以使用&),解锁要使用的钱包(当keosd重新启动时它会被锁定)。由于keosd开始侦听端口8899,因此您需要添加--wallet-url
命令行参数(如果在配置中修改的则不需要)。
$ cleos --wallet-url=http://127.0.0.1:8899 wallet open -n nm1024
Opened: nm1024
# 这一步需要输入nm1024对应的密码
$ cleos --wallet-url=http://127.0.0.1:8899 wallet unlock -n nm1024
password: Unlocked: nm1024
在本教程中,eosio是授权帐户(参考上篇文章的config.ini介绍)。必须使用与eosio帐户关联的密钥对区块链上执行的操作进行签名。该eosio帐户是用于引导EOSIO节点的特殊帐户。此帐户的密钥可以在nodeos配置文件/root/.local/share/eosio/nodeos/config/config.ini
中找到:
# Key=Value pairs in the form <public-key>=<provider-spec>
# Where:
# <public-key> is a string form of a vaild EOSIO public key
#
# <provider-spec> is a string in the form <provider-type>:<data>
#
# <provider-type> is KEY, or KEOSD
#
# KEY:<data> is a string form of a valid EOSIO private key which maps to the provided public key
#
# KEOSD:<data> is the URL where keosd is available and the approptiate wallet(s) are unlocked (eosio::producer_plugin)
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
signature-provider就对应了公私钥。
不仅仅是在文件里配置,必须使用命令将此私钥加入wallet中:
$ cleos --wallet-url=http://127.0.0.1:8899 wallet import -n nm1024 --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
创建账号
之后就可以开始创建帐户了。先看一下cleos create account命令的结构。
- authorizing_account(对应下面命令中的eosio) 是为帐户创建提供资金的帐户名称,随后可以换新帐户。
- new_account 要创建的帐户的名称
- owner_key 是分配给帐户完全控制权的公钥。(is a public key to be assigned to the owner authority of the account)
- active_key 是分配给帐户资金的完全访问权限的公钥。( is a public key to be assigned to the active authority of your account, and the second one will be permissioned for the active authority of your account.)
$ cleos create account eosio NEW_ACCOUNT OWNER_KEY ACTIVE_KEY
帐户名称必须符合以下规则:
- 必须少于13个字符
- 只能包含以下符号:.12345abcdefghijklmnopqrstuvwxyz
这里创建一个nmaccount账号,并使用在上面的小节生成并导入到钱包中的公钥。在将公钥分配使用之前,它是没有意义的。
拥有owner_key密钥等同于完全控制对应的帐户,而active_key密钥等同于帐户中资金的完全访问权限。
# 示例
$ cleos --wallet-url=http://127.0.0.1:8899 create account eosio nmaccount PUBLIC_KEY_1 PUBLIC_KEY_2
# 实际执行
$ cleos --wallet-url=http://127.0.0.1:8899 create account eosio nmaccount EOS6hExEUcAJxUao76KDo8JHE6weQhd1jeoBdss48xi43vkq9uBjL EOS56eDHRpSPMHZfjUBxWeoVXCHMWmAQ3YaQLaZNeSmRyFLw45Eem
# 将会得到如下的结果
executed transaction: f64421bba15b5b8a27c7736e698cbf4076869db855bdd53a40be595e85f3a346 200 bytes 516 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"nmaccount","owner":{"threshold":1,"keys":[{"key":"EOS6hExEUcAJxUao76KDo8J...
warning: transaction executed locally, but may not be confirmed by the network yet ]
出来一个警告,交易在本地执行,可能尚未由网络确认。暂时忽略。
eos系统中创建账号还有一种方式,就是使用eosio.system
合约中的newaccount
方法;当部署了eosio.system
合约,刚才讲解的这种方法便不能创建账号,会提示:
Error 3080001: Account using more than allotted RAM usage
Error Details:
account eosio.ramfee has insufficient ram; needs 2996 bytes has 0 bytes
就需要使用下边的方法将创建账号、购买RAM\CPU\NET放在一个事务种才可以实现:
$ cleos system newaccount eosio nm1024 --transfer EOS57zTJCWoA6viGYi6y8mUKjfatSFZHxwVFmLdWoXpKDEC2Rx9GR EOS57zTJCWoA6viGYi6y8mUKjfatSFZHxwVFmLdWoXpKDEC2Rx9GR --stake-net '50.00 CYB' --stake-cpu '50.00 CYB' --buy-ram '10.0000 CYB'
然而就算你使用了上边的方法可能还是会遇到一堆的问题,具体参见问题汇总。
下一篇将会涉及到发布代币、合约等相关内容。
.
.
.
.
.
.
.
【本文章出自NM1024.com,转载请注明作者出处。】
>>转载请注明原文链接地址:EOS账户和钱包