天天看点

EOS账户和钱包综合指南EOS账户和钱包综合指南

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

现在确认钱包是用您选择的名字创建的。

$ cleos wallet list

Wallets: [

 "default *",

 "periwinkle *"

]

注意,在每个列出的钱包之后星号(*)是很重要的,这意味着相应的钱包是被解锁。 在使用create wallet创建钱包时,默认情况下钱包是解锁的,以方便您使用。

使用wallet lock锁定第二个钱包

$ cleos wallet lock -n periwinkle

Locked: 'periwinkle’

再次运行wallet list时,您会看到星号已经消失,这意味着钱包现在已被锁定。

 "periwinkle"

解锁命名钱包需要使用wallet unlock 带-n参数来调用,然后输入钱包的名称,然后在密码提示中输入钱包的master password(主密码)(是的,您可以粘贴密码)。 继续操作,获取您创建的第二个钱包的master key(主密钥),执行下面的命令,当出现密码提示时,粘贴并按Enter键。 你会得到一个确认。

$ cleos wallet unlock -n periwinkle

cleos会让你知道钱包被解锁了

Unlocked: 'periwinkle'

注意:您也可以使用--password参数,后跟master password(主密码)来跳过提示,但这会导致master password(主密码)在控制台历史记录中可见

现在检查你的进度:

Wallets:

[

periwinkle钱包后面跟着一个星号,所以它现在已经解锁了。

注意:使用wallet命令与默认的default钱包交互不需要-n参数

现在停止keosd,然后返回到您调用cleos的位置并运行以下命令(记住,cleos将检查keosd是否正在运行,如果不是,则会启动它的实例)

[]

首先需要打开钱包才能操作,包括列出钱包。 关闭keosd时,钱包被锁定。 当keosd重新启动时,钱包未打开。 运行以下命令打开,然后列出默认钱包。

$ cleos wallet open

 "default"

注意:如果你想打开一个命名钱包,类似地,你可以运行$ cleos wallet open -n periwinkle。

你会注意到在最后的回应中默认default钱包是锁定的。 现在解锁; 您将在后续步骤中使用它。

运行wallet unlock解锁命令,并当出现密码提示时,粘贴你的default(默认)钱包的master password(主密码)。

$ cleos wallet unlock

Unlocked: 'default’

检查钱包是否已解锁:

 "default *”

钱包上附有星号,因此它已解锁。

您已经学会了如何创建多个钱包,并使用cleos与他们进行交互。 然而,一个空的钱包对你没有什么好处。 现在我们将学习如何将密钥对导入钱包。

生成和导入EOSIO密钥对

有几种方法可以生成EOSIO密钥对,但本教程将重点介绍cleos中的create key命令。

生成两个公钥/私钥对。 请注意密钥的一般格式。

$ 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

继续阅读