EOS账户和钱包综合指南
注意:本教程适用于私有单节点测试网络,但只需稍作修改即可在公用测试网上使用。
介绍
教程受众
本教程适用于想了解钱包和账户管理,如何使用cleos来管理钱包和账户,以及钱包和EOSIO账户管理组件相互间如何进行交互的用户。 其他信息可以在《命令参考》中找到。
你会学到什么
您将学习如何创建和管理钱包及其密钥对,然后使用此钱包通过cleos与区块链进行交互。 然后您将学习如何使用cleos创建帐户。 本教程将向您介绍cleos,keosd和nodeos之间的一些交互,以便签名内容发布到区块链。
先决条件
- 在您的系统上构建并运行cleos和keosd的副本。
- 在您的系统上构建并准备好运行nodeos副本。
- 对命令行界面有基本的了解。
注意:在应用于docker安装时,说明需要稍作修改。
EOSIO帐户和钱包概念概述
下图提供了EOSIO中帐户和钱包的简单概念视图。 虽然还有其他支持的部署配置,但该视图与我们将用于本教程的部署配置相匹配。
钱包可以被认为是公私密钥对的存储库。 这些是需要用来签署在区块链上执行的操作。 钱包和他们的内容由keosd管理。 使用cleos访问钱包。
可以将帐户视为具有与其相关联的访问权限的链上标识符(即,安全主体)。 nodeos管理区块链上的帐户以及帐户相关操作的发布。 nodeos的帐户管理功能也可以使用cleos访问。
账户和钱包之间没有固有的关系。 帐户不知道钱包,反之亦然。 相应地,nodeos和keosd之间没有固有的关系。 它们的基本功能是根本不同的。 (话虽如此,部署配置模糊了区别,但该主题超出了本教程的范围。)
发生重叠的地方是需要签名的时候,例如签署交易。 通过将密钥本地存储在可被锁定的加密存储中,钱包便于以安全方式获得签名。 cleos有效地作为keosd密钥检索操作与需要使用这些密钥生成签名的nodeos帐户(以及其他)区块链操作之间的中介。
创建和管理钱包
打开您的终端并切换到EOSIO编译的目录。 这将使我们更容易与cleos进行交互,这是一个用于与nodeos和keosd进行交互的命令行界面。
请注意,cleos需要一个正在运行的keosd实例进行交互,并且它将在您第一次使用子命令运行时启动keosd实例。
$ cd /path_to_eos/build/programs/cleos
你需要做的第一件事是创建一个钱包; 使用cleo的wallet create 钱包创建命令
$ cleos wallet create
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内并已返回此钱包的master password (主密码)。 请务必将此密码保存在安全的地方。 此密码用于解锁(解密)您的钱包文件。
这个钱包的文件名为default.wallet。 默认情况下,keosd将钱包存储在〜/ eosio-wallet文件夹中。 可以使用--data-dir参数在命令行中指定钱包数据文件夹的位置。
管理多个钱包和钱包名称
cleos能够管理多个钱包。 每个个人钱包受不同的钱包master passwords(主密码)保护。 下面的示例创建了另一个钱包并演示如何使用-n参数对其命名。
$ cleos wallet create -n periwinkle
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"
现在确认钱包是用您选择的名字创建的。
$ cleos wallet list
Wallets: [
"default *",
"periwinkle *"
]
注意,在每个列出的钱包之后星号(*)是很重要的,这意味着相应的钱包是被解锁。 在使用create wallet创建钱包时,默认情况下钱包是解锁的,以方便您使用。
使用wallet lock锁定第二个钱包
$ cleos wallet lock -n periwinkle
Locked: 'periwinkle’
再次运行wallet list时,您会看到星号已经消失,这意味着钱包现在已被锁定。
$ cleos wallet list
Wallets: [
"default *",
"periwinkle"
]
解锁命名钱包需要使用wallet unlock 带-n参数来调用,然后输入钱包的名称,然后在密码提示中输入钱包的master password(主密码)(是的,您可以粘贴密码)。 继续操作,获取您创建的第二个钱包的master key(主密钥),执行下面的命令,当出现密码提示时,粘贴并按Enter键。 你会得到一个确认。
$ cleos wallet unlock -n periwinkle
cleos会让你知道钱包被解锁了
Unlocked: 'periwinkle'
注意:您也可以使用--password参数,后跟master password(主密码)来跳过提示,但这会导致master password(主密码)在控制台历史记录中可见
现在检查你的进度:
$ cleos wallet list
Wallets:
[
"default *",
"periwinkle *"
]
periwinkle钱包后面跟着一个星号,所以它现在已经解锁了。
注意:使用wallet命令与默认的default钱包交互不需要-n参数
现在停止keosd,然后返回到您调用cleos的位置并运行以下命令(记住,cleos将检查keosd是否正在运行,如果不是,则会启动它的实例)
$ cleos wallet list
Wallets:
[]
首先需要打开钱包才能操作,包括列出钱包。 关闭keosd时,钱包被锁定。 当keosd重新启动时,钱包未打开。 运行以下命令打开,然后列出默认钱包。
$ cleos wallet open
$ cleos wallet list
Wallets:
[
"default"
]
注意:如果你想打开一个命名钱包,类似地,你可以运行$ cleos wallet open -n periwinkle。
你会注意到在最后的回应中默认default钱包是锁定的。 现在解锁; 您将在后续步骤中使用它。
运行wallet unlock解锁命令,并当出现密码提示时,粘贴你的default(默认)钱包的master password(主密码)。
$ cleos wallet unlock
Unlocked: 'default’
检查钱包是否已解锁:
$ cleos wallet list
Wallets:
[
"default *”
]
钱包上附有星号,因此它已解锁。
您已经学会了如何创建多个钱包,并使用cleos与他们进行交互。 然而,一个空的钱包对你没有什么好处。 现在我们将学习如何将密钥对导入钱包。
生成和导入EOSIO密钥对
有几种方法可以生成EOSIO密钥对,但本教程将重点介绍cleos中的create key命令。
生成两个公钥/私钥对。 请注意密钥的一般格式。
$ cleos create key
Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Public key: EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$ cleos create key
Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Public key: EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
您现在有两个EOSIO密钥对。 在这一点上,这些只是任意的密钥对,并且本身没有authority(权限)。
如果您遵循了之前的所有步骤,那么你的default(默认)钱包应该是打开并解锁的。
在下一步中,我们将把私钥导入钱包。 为此,请执行wallet import两次,每次的private key(私钥)为先前生成的。
$ cleos wallet import ${private_key_1}
然后再用第二个私钥
$ cleos wallet import ${private_key_2}
如果成功,每次wallet import命令都使用与您的私钥相对应的公钥作为回应,您的控制台应该看起来像:
$ cleos wallet import 5Hvgh37WMCWAc4GuyRBiFrk4SArCnSQVMhNtEQVoszhBh6RgdWr
imported private key for: EOS84jJqXj5XBz3RqLreXZCMxXRKspUadXg3AVy8eb5J2axj8cywc
我们可以通过调用wallet keys (仅限公钥)或wallet private_keys (私钥和公钥)来检查加载了哪些密钥对
$ cleos wallet keys
[
"EOS6....",
"EOS3....”
]
$ cleos wallet private_keys --password ${your_wallet_password}
password:
[[
"EOS6....",
"5KQwr...”
],
[
"EOS3....",
"5Ks0e..."
]
]
钱包文件本身是被加密的,因此钱包在锁定时将保护这些密钥对。 访问锁定钱包中的密钥对时需要创建钱包时提供给您的master password(主密码)。
备份你的钱包
现在,您的钱包中包含密钥对,您最好养成备份钱包的习惯,例如,保存在闪存驱动器或其他介质上,以防止丢失钱包文件。 如果没有密码,钱包文件就会被高熵加密,而且对里面密钥的访问非常困难(不可能通过所有合理的措施)。
您可以在data-dir中找到您的钱包文件。 如果启动eos时未指定--data-dir参数,则您的钱包文件将存储在〜/ 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,我们将把keosd的端口改为8899。有两种方法可以做到这一点:
1.编辑keosd配置文件(〜/eosio-wallet/config.ini)并将http-server-address属性更改为:
http-server-address = 127.0.0.1:8899
2.使用命令行参数--http-server-address=localhost:8899启动keosd
使用命令行参数重新启动keosd :
$ pkill keosd
$ keosd --http-server-address=localhost:8899
解锁您的默认default钱包(当keosd重新启动时它被锁定)。 由于keosd在端口8899上开始监听,因此您需要使用--wallet-url命令行参数。
cleos --wallet-url=http://localhost:8899 wallet unlock
当提示输入密码时,请输入上一节在创建钱包时生成的钱包密码。
要启动nodeos ,请打开新的终端窗口,转到包含nodeos可执行文件的文件夹,然后运行以下命令:
$ cd eos/build/programs/nodeos
$ nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin
现在我们可以创建该帐户。 这是cleos create account命令的结构。
$ cleos create account ${authorizing_account} ${new_account} ${owner_key} ${active_key}
authorizing_account:是为账户创建提供资金的账户名称,并随后创建新帐户。
new_account:是您想要创建的帐户的名称
owner_key:是要分配为账户owner authority(所有者权限)的public key(公钥)。 (请参阅《帐户和权限》)
active_key:是要分配为账户active authority(活动权限)的公钥。 作为你的账户,第二个将被授权为你的账户的active authority(活动权限)。
在本教程中,eosio是authorizing account(授权帐户)。 在区块链上执行的操作必须使用与eosio帐户关联的密钥对进行签名。 eosio帐户是用于引导EOSIO节点的特殊帐户。 此帐户的密钥对可以在位于Linux平台上的〜/.local/shared/eosio/config/config.ini和MacOS上的〜/Libraries/Application Support/eosio/nodeos/config /config.ini配置文件中找到。
我们需要为我们的新帐户提供一个名称。 帐户名称必须符合以下准则:
必须少于13个字符
只能包含以下符号:.12345abcdefghijklmnopqrstuvwxyz
我们将为新帐户使用名称“myaccount”。
我们将使用您在上面生成并导入到钱包中的public keys(公钥)(回想公钥以EOS开头)。 直到您将它们分配给某个authority(权限)为止,否则这些密钥都是随意的。 但是,一旦分配,记住这些分配是很重要的。 您的owner key(所有者密钥)等同于您的帐户的完全控制权,而您的active key(活动密钥)等同于完全掌握您帐户中的资金。
使用 cleos create account 来创建你的账户:
$ cleos --wallet-url=http://localhost:8899 create account eosio myaccount ${public_key_1} ${public_key_2}
如果成功,您将看到类似于以下的输出。
executed transaction: 7f1c6b87cd6573365a7bb3c6aa12f8162c3373d57d148f63f2a2d3373ad2fd54 352 bytes 102400 cycles
# eosio <= eosio::newaccount {"creator":"eosio","name":"myaccount","owner":{"threshold":1,"keys":[{"key":"EOS5kkAs8HZ88m2N7iZWy4J...
欢迎收藏个人博客: http://www.derekchain.com/article/8
官方文档:https://developers.eos.io/eosio-nodeos/docs/learn-about-wallets-keys-and-accounts-with-cleos