EOS账户和钱包综合指南

简介: EOS账户和钱包综合指南 注意:本教程适用于私有单节点测试网络,但只需稍作修改即可在公用测试网上使用。 介绍 教程受众 本教程适用于想了解钱包和账户管理,如何使用cleos来管理钱包和账户,以及钱包和EOSIO账户管理组件相互间如何进行交互的用户。 其他信息可以在《命令参考》中找到。 你会学到什么 您将学习如何创建和管理钱包及其密钥对,然后使用此钱包通过cleos与区块链进行

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

目录
相关文章
|
5月前
|
存储 安全 区块链
DAPP链上质押NFT挖矿系统开发详情方案
 所有区块链网络中的每一台计算机都有一个相同的账本,并且是完全公开透明的,任何人都可以进行记账。每当区块链核准一批交易时,交易就会被记录到每一个人的账本上。
|
区块链
DEFi借贷理财挖矿系统DAPP开发合约代码详情
constructor(uint256 initialBorrows, uint256 initialLends, uint256 minAPR) { _tokenIds = Counters.newCounter(initialBorrows + initialLends);
|
缓存 安全 网络安全
Vpay钱包项目系统开发|Vpay钱包代币质押系统开发逻辑详情
 数据库技术在区块链交易中安全是一个区块链交易所的最重要的问题之一
|
7月前
|
存储 安全 分布式数据库
BSC链DAPP质押合约代币系统开发|详情需求|指南方案
区块链的核心思想是将数据分散存储在多个节点上,通过加密算法和共识机制保证数据的安全性和可信度
|
供应链 安全 区块链
区块链钱包合约代币质押系统开发(模式详情)
一组条件在时间的推移中不可能一直正确的,而智能合约是不可变的,更新当前的预编程条件几乎是不可能的
|
存储 安全 区块链
DAPP钱包OP链合约代币质押系统开发方案与详情
实现智能合约交易所的关键在于如何确保交易的安全性和有效性
|
前端开发 安全 区块链
DeFi智能合约代币兑换系统开发指南与方案
另一个重要的方面是去中心化应用的体系结构。通常,这些应用程序被分为前端、后端和智能合约层
|
区块链 Python
虚拟数字货币合约交易系统开发——现货跟单交易合约源代码详情
class SpotFollower: def __init__(self, symbol, amount): self.symbol = symbol self.amount = amount
|
区块链
币安交易所的NFT资产充值和提现逻辑开发智能合约源代码详情
function rechargeNFT(uint256 amount) public returns (uint256 remainingAmount) { // 检查 NFT 资产合约是否有足够的数量供充值
|
JSON 算法 API
币安交易所币本位合约开发代码部署详情
if data['status'] == 'OK': print(f"订单已成功下单,订单号为 {data['result']['orderId']}") else: print(data['msg'])