EOS基础全家桶(六)账号管理
简介
本篇我们会学习最基本的账号相关的操作,包括了创建账号和查询,关于账号资源的操作因为必须先部署系统合约,所以我们会留到后面单独写一篇来讲解。
账号介绍
EOS的设计与以往的其他区块链有很大的不同,传统区块链上使用的账号都是直接使用公钥,而EOS使用了最多13位长的简短账号名,并以此扩展出了账号权限的功能。
账号名介绍
传统的公钥账号,可以不用在链上创建账号而直接使用,匿名性也更强,使用起来更有科技感,可惜,缺点也很明显,完全无法靠大脑来记忆,账号只是单密钥对,所以无法扩展权限,只能借助智能合约。为了解决难记忆的问题,人们又设计出了助记词,可惜12个单词的组合,也不够人性。
EOS的账号设计很人性化,最长13位,可以使用24个小写字母和1-5的数字,特殊账号还可使用.
字符,你完全可以创建一个有特定意义的账号名。系统设计还增加了一个短号的竞拍市场,而短号又能创建出短号后缀的特殊靓号。这一系列设计都让账号的可玩性和收藏性增加了,同时更便于记忆。
账号的安全性同样是用了ECC的非对称加密产生的密钥对,默认有owner和active两个内置权限,owner是最高权限,active默认操作权限,在创建时可以配置不同的公钥,也就提升了账号的安全性,我们只让active的私钥触网,即使被盗,我们还可以使用owner权限将active的公钥替换了。传统的区块链账号,一旦私钥被盗,就意味着这个账号已经无法再正常使用了。
但是EOS的账号设计也有比较明显的问题,账号必须通过EOS链来创建,而你要上链,又必须有EOS账号,所以,新用户无法独自完成账号的创建。
资源介绍
EOS账号增加了CPU、NET和RAM的设定,这本身更符合EOS(Enterprise Operation System,企业级操作系统)的设定,这些资源的设定本身都是为了使系统可以维持健康,就像以太坊上有Gas费用,来防止链上的恶意交易并增加交易确认的及时性。EOS中的资源同样增加了恶意交易的代价,保证了全网良性的生态,同时赋予了EOS通证的概念,让持有EOS的人可以获得更大的权益和便利。
内存必须通过市场进行买卖,采用班科(Bancor)算法来保证内存价格符合市场需求。而CPU和Net则是通过EOS抵押,让全网资源的使用代价降低了,而抵押获得的CPU量随全网抵押而波动,符合全网运算能力的要求,3天的赎回期给予全网一定的缓冲期。CPU和Net是可再生资源,在一个窗口期内用完了没事,随着时间推移会慢慢恢复的。
这些设定都是很前卫的,但是仍然存在着无法预期的情况,EOS主网这两年出现过2次重大的CPU资源短缺问题,特别是2019年10月的这次,持续长达5个月的CPU短缺,只因一个交易挖矿的合约,面对这样突然的情况,EOS的主创b1采用了让市场自动调控。加之EOS价值的升高,都使得EOS主网的使用代价越来越高。
补充说明genesis.json
这里要补充一下前面启动节点没提到的一个文件genesis.json文件,这个是创世配置文件,里面的配置都是关于链的基本配置,chainid也是根据此文件生成的,所以这个文件不同,产生出来的就是不同的运行链。EOS程序默认有一套配置,所以你在启动节点时没有指定--genesis-json
同样可以启动成功。下面这个配置就是EOS主链的配置。
{
"initial_timestamp": "2018-06-08T08:08:08.888",
"initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",
"initial_configuration": {
"max_block_net_usage": 1048576,
"target_block_net_usage_pct": 1000,
"max_transaction_net_usage": 524288,
"base_per_transaction_net_usage": 12,
"net_usage_leeway": 500,
"context_free_discount_net_usage_num": 20,
"context_free_discount_net_usage_den": 100,
"max_block_cpu_usage": 200000,
"target_block_cpu_usage_pct": 1000,
"max_transaction_cpu_usage": 150000,
"min_transaction_cpu_usage": 100,
"max_transaction_lifetime": 3600,
"deferred_trx_expiration_window": 600,
"max_transaction_delay": 3888000,
"max_inline_action_size": 4096,
"max_inline_action_depth": 4,
"max_authority_depth": 6
}
}
注意到里面有个initial_key了吧,这个就是初始账号eosio的公钥,我们在启动节点时使用的配置文件中有个配置signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
这个就是默认的eosio的owner密钥对,开发环境我们都是使用这个密钥。
我们将启动节点中配置的这个eosio的私钥导入钱包,准备后续我们创建账号使用。
创建账号
EOS创建账号一定需要使用一个已存在的账号来创建,所以,你无论在哪个网络上创建账号,只能让有账号的人帮你创建或者支付一定的费用来帮你创建。EOS主网上目前提供了很多创建账号的渠道,也有很多三方提供了支付创建账号甚至免费创建账号的功能。
如果大家还没有EOS主网的账号,我建议你通过几个主流钱包来获得一个廉价且独特的个人账号,比如TokenPocket。当然,你也可以购买一个特别后缀的短号,当你有账号后,还可以进入EOS的账号市场中进行竞拍来获得靓号。
注意:因为EOS创建账号需要使用已有账号来创建,所以该操作是需要交易签名的,在调用命令前,需要解锁导入了用于创建账号的账号私钥的钱包。
创建系统级账号
在初始启动节点后,我们就可以使用内置的默认账号eosio来创建其他新的账号了,前面在补充说明genesis.json已经导入了eosio的私钥到钱包中。
我们现在可以使用cleos create account
命令来创建系统账号了,系统账号有一个很特别的特点,就是账号资源都是无限的,没有内存限制,CPU和Net都是-1(表示无限)。在开发阶段,这种账号其实非常好用,开发合约的过程中,会大量使用到内存等资源,所以创建系统账号可以很好的用于合约测试。
我们现在创建一个账号astaldo。
cleos create account eosio astaldo EOS6nbWS7ZReiPMdMABoEmVBYanyTMb3GYRQGsTRMCYx9vijWoaS3 EOS6nbWS7ZReiPMdMABoEmVBYanyTMb3GYRQGsTRMCYx9vijWoaS3
其中eosio是用于创建新账号时使用的账号,目前创建的是系统级账号,所以只能使用eosio账号来创建,后面的两个公钥分别是新账号的owner和active的公钥。
创建普通账号
创建普通账号需要先部署系统合约,也就是eosio.system合约,但是这需要很多的配置,并创建好所有系统账号……这块功能可以单独写一篇文章了,所以我会在后面单独写一篇《EOS部署系统合约的完全启动》。
这里我简单提一下如何通过cleos来创建普通账号。需要用到cleos system newaccount
命令,因为部署了系统合约,创建账号的功能会覆盖了程序默认账号创建入口,所以创建系统级账号的方法也就不能直接用了,要更换成这个新命令了。命令有很多参数,我先说明下核心参数,其他的大家可以使用--help
查看帮助。
#基础结构
cleos system newaccount [OPTIONS] creator name OwnerKey [ActiveKey]
creator 指定用于创建账号的EOS账号,也就是用于支付资源开销的账号
name 新账号的账号名
OwnerKey 指定新账号的Owner权限的公钥
ActiveKey 可选,默认和Owner的公钥一致,为了提升安全性,建议设置不同的公钥
OPTIONS 参数有很多,这里重点关注以下几个:—stake-net 创建时为新账号质押的NET
—stake-cpu 创建时为新账号质押的CPU
—buy-ram-kbytes 创建时为新账号购买的内存
—transfer 创建时抵押的资源是否转移给新账号,默认是为他人抵押,可被原账号收回
如果我要使用eosastaldo11创建一个eosastaldo12,可以使用以下命令,这里我使用了jungle网络的节点地址。
cleos -u "http://jungle2.cryptolions.io" system newaccount --stake-net '1 EOS' --stake-cpu '10 EOS' --buy-ram-kbytes 1000 eosastaldo11 eosastaldo22 EOS8h8YD7956jYf99BV6kBit5d9461xaxyTf9HPxmARcnTEnFivY8 EOS7DhW1StAhprCBwpAfgMpmHuN2H3V8t4B45tzQtEYckHRr5CASN
我们为eosastaldo12初始抵押了10EOS的CPU和1EOS的NET,购买了1MB的内存,使用了两个不同的公钥为别作为owner和active。可以看到,创建账号时发生了很多的内联交易,包括了内存的购买、CPU和Net的抵押。
查询账号
账号的基本信息是存在于链上系统表里的,而其他的账号信息,比如EOS余额都是在相应的合约表里的,所以查询的方式都是不同的。
查询账号基本信息
账号的基本信息包含了账号的创建时间、权限分配、资源使用和抵押情况。可以直接通过cleos get account
命令来查看。
我们现在来查询下eosio这个系统账号,cleos get account eosio
。
可以看到在系统级账号的memory是无限的(unlimited),Net和CPU也都是无限的。privileged为true说明了这个是个特权账号。
我们再来查询下EOS主网上的一个账号b1,这个就是大名鼎鼎的EOS创始人的账号。
cleos -u http://eospush.tokenpocket.pro get account b1
可以看到b1的内存太大了有将近32G呢,还有那Net和CPU的抵押,staked
表示抵押的EOS,delegated
他人为其抵押的EOS,used
表示已使用的资源数,available
是目前还可用的资源数,limit
是当前资源的上限。可以说b1的资源都近似于无限了。另外b1的权限下有多个key,这个我们会在权限管理的文章里面详细说明。
查询余额
查询账号余额是需要通过查询合约。EOS上为了更方便的发行Token,所以从EOS的发行就采用了合约的形式,这为所有的Token发行提供了一个官方模板,符合标准Token合约结构的都可以使用cleos的查询余额的命令。
- 标准查询命令
我们首先学习使用标准Token的余额查询命令cleos get currenty balance
,需要指定Token的合约名,账号名和Token的符号。
我们来查询下EOS的主网中b1的EOS余额吧。
cleos -u http://eospush.tokenpocket.pro get currency balance eosio.token b1 EOS
EOS的合约使用的是eosio.token,使用的Token符号就是EOS。我们从图上可以看到,b1的余额有650万还多的EOS,真的是有钱啊。
- 合约查询
合约查询是要以我们了解合约的表结构为前提,我们需要知道合约账号,需要知道表名和scope,还要知道Token的符号,如果不是标准的Token合约的话,我们就需要了解合约代码了,这个我们在后面合约学习的时候再细讲。我们使用合约表查询命令cleos get table
。
我们已知EOS的合约账号是eosio.token,余额存在于accounts表,scope就是账号名。
我们还是来查询EOS主网的b1的EOS余额。
cleos -u http://eospush.tokenpocket.pro get table eosio.token b1 accounts
可以看到返回的默认是json格式的表数据,rows就是数据行,一般只会有一条数据,而且只有一个字段,就是balance。
EOS基础全家桶(六)账号管理的更多相关文章
- EOS基础全家桶(五)钱包管理
简介 本篇我们将会学习EOS自带的命令行钱包的使用方法,我们将会使用cleos来控制keosd服务对本地钱包进行管理. 虽然现在市面上已经有很多支持EOS的钱包了,有Web钱包,有app钱包,还有浏览 ...
- EOS基础全家桶(七)合约表操作
简介 本篇我们开始来为后续合约开发做准备了,先来说说EOS内置的系统合约的功能吧,本篇将侧重于合约表数据的查询,这将有利于我们理解EOS的功能,并可以进行必要的数据查询. EOS基础全家桶(七)合约表 ...
- EOS基础全家桶(八)jungle测试网的使用
简介 前面我们已经学习了一些EOS的基础知识了,但是在EOS主网上的很多操作(比如:抵押.赎回.买卖内存)都是需要EOS链被正式激活后才可使用,而激活EOS链还需要很多的准备操作,我打算在单独的一篇文 ...
- EOS基础全家桶(十)交易Action操作
简介 区块链上的所有操作都是通过交易(Transaction)上链的,无论你是转账交易还是发起的智能合约的调用,而EOS和传统区块链不同的是EOS在一个交易里可以发起多个行为(Action),这使得E ...
- EOS基础全家桶(十四)智能合约进阶
简介 通过上一期的学习,大家应该能写一些简单的功能了,但是在实际生产中的功能需求往往要复杂很多,今天我就继续和大家分享下智能合约中的一些高级用法和功能. 使用docker编译 如果你需要使用不同版本的 ...
- EOS基础全家桶(十二)智能合约IDE-VSCode
简介 上一篇我们介绍了EOS的专用IDE工具EOS Studio,该工具的优势是简单,易上手,但是灵活性低,且对系统资源开销大,依赖多,容易出现功能异常.那么我们开发人员最容易使用的,可能还是深度定制 ...
- EOS基础全家桶(一)开篇
简介 从今天开始我会在FishoPark上与大家分享EOS的一些技术经验和基础,如果大家在看文章的过程中有任何问题,欢迎在网站下方的评论里留言,我会尽力为大家解答,如果发现我内容中所写有错,欢迎指正, ...
- EOS基础全家桶(十一)智能合约IDE-EOS_Studio
简介 我们马上要进入智能合约的开发了,以太坊最初提供了智能合约的功能,并宣告区块链进入2.0时代,而EOS的智能合约更进一步,提供了更多的便利性和可能性.为了进一步了解智能合约,并进行开发,我们需要先 ...
- EOS基础全家桶(十三)智能合约基础
简介 智能合约是现在区块链的一大特色,而不同的链使用的智能合约的虚拟机各不相同,编码语言也有很大差异.而今天我们开始学习EOS的智能合约,我也是从EOS初期一直开发合约至今,期间踩过无数坑,也在Sta ...
随机推荐
- koa进阶史(二)
之前想着放弃CAS的验证吧,但是又去请教了一个大牛,了解到sf公司的CAS验证校验的参数不是sessionId而是另外两个,后登陆sit环境偷了两个参数后,后台接口成功返回200.然后node层也就能 ...
- Flink系列之状态及检查点
Flink不同于其他实时计算的框架之处是它可以提供针对不同的状态进行编程和计算.本篇文章的主要思路如下,大家可以选择性阅读. 1. Flink的状态分类及不同点. 2. Flink针对不同的状态进行编 ...
- Oracle - 坏块修复(一)
一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...
- Mysql(Mariadb)慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析
慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析 参数介绍: long_query_ ...
- Flutter json 2 model with Built Value
Flutter json 2 model with Built Value Flutter中json转换model, 除了手动转之外, 就是利用第三方库做一些代码生成. 流行的库有: json_ser ...
- DataFrame简介(一)
1. DataFrame 本片将介绍Spark RDD的限制以及DataFrame(DF)如何克服这些限制,从如何创建DataFrame,到DF的各种特性,以及如何优化执行计划.最后还会介绍DF有哪些 ...
- 初识Flask、快速启动
目录 一.初识Flask 1.1 什么是flask? 1.2 为什么要有flask? 二.Flask快速启动 一.初识Flask 1.1 什么是flask? Flask 本是作者 Armin Rona ...
- 曹工说Spring Boot源码(23)-- ASM又立功了,Spring原来是这么递归获取注解的元注解的
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- PowerShell初探
Windows PowerShell是一种命令行外壳程序和脚本环境,它内置在每个受支持的Windows版本中(Windows 7/Windows 2008 R2和更高版本),使命令行用户和脚本编写者可 ...
- 读书笔记——商广明《Nmap渗透测试指南》
一 Nmap基础学习 1.简介及安装 Nmap是一款由C语言编写的.开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Ne ...