重要的提示
本课程适用于私有单节点testnet(如Docker快速入门),但可以在公共网络上进行微小修改。
介绍
课程观众
本课程适用于想要了解钱包和帐户管理,如何使用cleos
管理钱包和帐户以及钱包和帐户管理EOSIO组件如何相互交互的开发人员。有关清除的更多信息,请参阅Cleos Command Reference
你将学到什么
您将学习如何创建和管理钱包及其密钥,然后使用此钱包通过区块链进行交互cleos
。然后,您将学习如何使用创建帐户cleos
。本教程将介绍一些之间的相互作用cleos
,keosd
以及nodeos
签署发布到blockchain内容。
先决条件
EOSIO账户和钱包概念概述
下图提供了EOSIO中帐户和钱包的简单概念视图。虽然还有其他受支持的部署配置,但此视图与我们将在本教程中使用的视图相匹配。
钱包可以被认为是公钥 - 私钥对的加密存储库。这些是签署区块链上执行的操作所必需的。钱包及其内容由管理keosd
。钱包可以使用cleos
。
可以将帐户视为具有与其关联的访问权限的链上标识符(即,安全主体)。 nodeos
管理区块链上的帐户和帐户相关操作的发布。nodeos
还可以使用帐户管理功能cleos
。
帐户和钱包之间没有固有的关系。帐户不知道钱包,反之亦然。相应地,nodeos
和之间没有固有的关系keosd
。它们的基本功能根本不同。(尽管如此,有部署配置模糊了这种区别。但是,该主题超出了本教程的范围。)
发生重叠的地方是需要签名时,例如签署交易。钱包通过将密钥本地存储在可以锁定的加密存储中,有助于以安全的方式获得签名。 cleos
有效地充当keosd
密钥检索操作和nodeos
需要使用这些密钥生成的签名的帐户(和其他)区块链动作之间的中介。
创建和管理钱包
打开终端并切换到构建EOSIO的目录。这将使我们更容易进行交互cleos
,这是与互动的命令行界面nodeos
和keosd
。
请注意,cleos
需要一个正在运行的实例keosd
进行交互,它将keosd
在第一次使用子命令运行它时启动一个实例。
- shell
cd /path_to_eos/build/programs/cleos
你需要做的第一件事就是创造一个钱包; 使用wallet create
命令cleos
。
- shell
$ 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.
"A MASTER PASSWORD"
现在里面有一个名为default的钱包keosd
,它已经返回了这个钱包的主密码。请务必将此密码保存在安全的地方。此密码用于解锁(解密)您的钱包文件。
此钱包的文件已命名default.wallet
。默认情况下,keosd
将钱包存储在~/eosio-wallet
文件夹中。可以使用--wallet-dir
参数在命令行上指定钱包数据文件夹的位置。
管理多个钱包和钱包名称
cleos
能够管理多个钱包。每个钱包都受不同钱包主密码的保护。下面的示例创建了另一个钱包,并演示了如何使用该-n
参数对其进行命名。
- shell
$ cleos wallet create -n periwinkle --to-console
Creating wallet: periwinkle
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"A MASTER PASSWORD"
现在确认钱包是使用您选择的名称创建的。
- shell
$ cleos wallet list
Wallets:
[
"default *",
"periwinkle *"
]
在每个列出的钱包之后注意星号(*)很重要,这意味着相应的钱包已解锁。使用create wallet
结果钱包时,默认情况下会解锁以方便您使用。
锁定第二个钱包使用 wallet lock
- shell
$ cleos wallet lock -n periwinkle
Locked: 'periwinkle'
wallet list
再次运行时,您将看到星号已消失,这意味着钱包现已锁定。
$ cleos wallet list
Wallets:
[
"default *",
"periwinkle"
]
解锁已命名的钱包需要wallet unlock
使用-n
参数后跟钱包名称进行呼叫,然后在密码提示中输入钱包的主密码(是的,您可以粘贴密码)。继续抓住您创建的第二个钱包的主密钥,执行以下命令,当出现密码提示时,粘贴并按回车键。您将收到确认。
- shell
$ cleos wallet unlock -n periwinkle
cleos会告诉你钱包已解锁
- shell
Unlocked: 'periwinkle'
注意:您还可以使用--password
参数后跟主密码来跳过提示,但这会导致主密码在控制台历史记录中可见
现在检查你的进度:
- shell
$ cleos wallet list
Wallets:
[
"default *",
"periwinkle *"
]
在periwinkle
钱包后跟一个星号,所以它现在解锁。
注意:使用wallet命令与'default'钱包交互不需要-n
参数
现在停止keosd
,然后返回到您调用的位置cleos
并运行以下命令(请记住,cleos
将检查它keosd
是否正在运行,如果不是,则将启动它的实例)。
- shell
$ cleos wallet list
Wallets:
[]
钱包首先需要在可以操作之前打开,包括列出它们。当你关闭时,钱包被锁定了keosd
。当keosd
重新启动,钱包未打开。运行以下命令打开,然后列出默认钱包。
- shell
$ cleos wallet open
$ cleos wallet list
Wallets:
[
"default"
]
注意:如果要打开命名钱包,则可以运行$ cleos wallet open -n periwinkle
。
您将在上一个响应中注意到默认情况下默认钱包已被锁定。现在解锁; 你将在后续步骤中使用它。
出现密码提示时,运行该wallet unlock
命令并粘贴默认钱包的主密码。
- shell
$ cleos wallet unlock
Unlocked: 'default'
检查钱包是否已解锁:
- shell
$ cleos wallet list
Wallets:
[
"default *"
]
钱包附有星号,因此它已解锁。
您已经学会了如何创建多个钱包,并与它们进行交互cleos
。但是,一个空的钱包对你没什么好处。我们现在将学习将密钥导入钱包。
生成和导入EOSIO密钥
有几种方法可以生成EOSIO密钥对,但本教程将重点介绍该create key
命令cleos
。
生成两个公钥/私钥对。请注意键的一般格式。
- shell
$ cleos create key --to-console
Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Public key: EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$ cleos create key --to-console
Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Public key: EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
通过添加--file filename
标志而不是--to-console,可以将密钥写入本地文件。
您现在有两个EOSIO密钥对。在这一点上,这些只是任意的密钥对,而且它们本身没有权限。
如果您按照上述所有步骤操作,则应打开并解锁默认钱包。
在下一步中,我们将私钥导入钱包。为此wallet import
,对于之前生成的每个私钥执行两次,一次。
- shell
$ cleos wallet import --private-key PRIVATE_KEY_1
然后再用第二个私钥
- shell
$ cleos wallet import --private-key PRIVATE_KEY_2
如果成功,每次wallet import
命令都使用与您的私钥对应的公钥进行响应,您的控制台应如下所示:
- shell
$ cleos wallet --private-key import 5Hvgh37WMCWAc4GuyRBiFrk4SArCnSQVMhNtEQVoszhBh6RgdWr
imported private key for: EOS84jJqXj5XBz3RqLreXZCMxXRKspUadXg3AVy8eb5J2axj8cywc
我们可以通过调用wallet keys
(仅限公钥)或wallet private_keys
(私钥和公钥)来检查加载了哪些密钥
- shell
$ cleos wallet keys
[
"EOS6....",
"EOS3...."
]
$ cleos wallet private_keys --password YOUR WALLET PASSWORD
password:
[[
"EOS6....",
"5KQwr..."
],
[
"EOS3....",
"5Ks0e..."
]
]
钱包文件本身是加密的,因此钱包将在锁定时保护这些键。访问锁定钱包中的密钥需要在创建钱包期间提供给您的主密码。
备份你的钱包
现在您的钱包中包含密钥,最好养成将钱包备份的习惯,例如闪存驱动器或其他媒体,以防止丢失钱包文件。如果没有密码,钱包文件将以高熵加密,并且内部的密钥难以访问(通过所有合理的措施不可能)。
您可以在中找到您的钱包文件data-dir
。如果--data-dir
在启动eos时未指定参数,则钱包文件将存储在该~/eosio-wallet
文件夹中。
$ cd ~/eosio-wallet && ls
blockchain blocks config.ini default.wallet periwinkle.wallet
如果您一直按照本教程的步骤操作,您将看到两个文件,default.wallet
以及periwinkle.wallet
。将这些文件保存在安全的位置。
创建一个帐户
对区块链执行操作需要使用帐户。我们cleos
用来请求nodeos
创建帐户并在区块链上发布。在我们的教程中,我们需要开始nodeos
。以下命令将启动单个节点testnet。有关设置本地环境的更多信息,请参阅创建和启动单个节点Testnet。
对于本教程的这一部分,我们需要keosd和nodeos同时运行。目前,在默认端口keosd
和nodeos
相同(8888端口)。为了简化教程本部分的运行nodeos,我们将
端口更改为8899. keosd
我们可以通过两种方式执行此操作:
-
编辑
keosd
配置文件(~/eosio-wallet/config.ini
)并将http-server-address属性更改为:http-server-address = 127.0.0.1:8899
-
使用命令行参数-http-server-address = localhost:8899启动keosd
使用comand line参数重新启动keosd:
$ pkill keosd
$ keosd --http-server-address=localhost:8899
解锁您的默认钱包(当keosd重新启动时它被锁定)。由于keosd开始侦听端口8899,因此您需要使用--wallet-url命令行参数进行清除。
cleos --wallet-url=http://localhost:8899 wallet unlock
提示输入密码时,请输入创建钱包时在上一部分中生成的钱包密码。
首先nodeos
,打开一个新的终端窗口,转到包含nodeos
可执行文件的文件夹,然后运行以下命令:
- sehll
$ cd eos/build/programs/nodeos
$ nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
在本教程中,eosio
是授权帐户。必须使用与eosio
帐户关联的密钥对区块链上执行的操作进行签名。该eosio
帐户是用于引导EOSIO节点的特殊帐户。此帐户的密钥可以在nodeos
配置文件中找到,位于~/.local/share/eosio/nodeos/config/config.ini
Linux平台和~/Libraries/Application Support/eosio/nodeos/config/config.ini
MacOS上。
或者您可以使用以下命令
$ cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
现在我们可以创建帐户了。这是cleos create account
命令的结构。
$ cleos create account eosio NEW_ACCOUNT OWNER_KEY ACTIVE_KEY
authorizing_account
是为帐户创建提供资金的帐户的名称,以及随后的新帐户。new_account
是您要创建的帐户的名称owner_key
是分配给帐户所有者权限的公钥。(参见帐户和权限)active_key
是分配给您帐户的有效权限的公钥,第二个将被授予您帐户的有效权限。
我们需要一个新帐户的名称。帐户名称必须符合以下准则:
- 必须少于13个字符
- 只能包含以下符号:.12345abcdefghijklmnopqrstuvwxyz
我们将使用名称“myaccount”作为新帐户。
我们将使用您在上面生成并导入到钱包中的公钥(回想一下公钥开头EOS
)。在将权限分配给权限之前,密钥是任意的。但是,一旦分配,记住分配很重要。您的所有者密钥等同于完全控制您的帐户,而您的有效密钥等同于您帐户中资金的完全访问权限。
使用cleos create account
创建帐户:
- shell
$ cleos --wallet-url=http://localhost:8899 create account eosio myaccount PUBLIC_KEY_1 PUBLIC_KEY_2
如果成功,您将看到类似于以下内容的输出。
- shell
executed transaction: 7f1c6b87cd6573365a7bb3c6aa12f8162c3373d57d148f63f2a2d3373ad2fd54 352 bytes 102400 cycles
# eosio <= eosio::newaccount {"creator":"eosio","name":"myaccount","owner":{"threshold":1,"keys":[{"key":"EOS5kkAs8HZ88m2N7iZWy4J...