简介

本篇我们会学习最基本的账号相关的操作,包括了创建账号和查询,关于账号资源的操作因为必须先部署系统合约,所以我们会留到后面单独写一篇来讲解。

账号介绍

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基础全家桶(六)账号管理的更多相关文章

  1. EOS基础全家桶(五)钱包管理

    简介 本篇我们将会学习EOS自带的命令行钱包的使用方法,我们将会使用cleos来控制keosd服务对本地钱包进行管理. 虽然现在市面上已经有很多支持EOS的钱包了,有Web钱包,有app钱包,还有浏览 ...

  2. EOS基础全家桶(七)合约表操作

    简介 本篇我们开始来为后续合约开发做准备了,先来说说EOS内置的系统合约的功能吧,本篇将侧重于合约表数据的查询,这将有利于我们理解EOS的功能,并可以进行必要的数据查询. EOS基础全家桶(七)合约表 ...

  3. EOS基础全家桶(八)jungle测试网的使用

    简介 前面我们已经学习了一些EOS的基础知识了,但是在EOS主网上的很多操作(比如:抵押.赎回.买卖内存)都是需要EOS链被正式激活后才可使用,而激活EOS链还需要很多的准备操作,我打算在单独的一篇文 ...

  4. EOS基础全家桶(十)交易Action操作

    简介 区块链上的所有操作都是通过交易(Transaction)上链的,无论你是转账交易还是发起的智能合约的调用,而EOS和传统区块链不同的是EOS在一个交易里可以发起多个行为(Action),这使得E ...

  5. EOS基础全家桶(十四)智能合约进阶

    简介 通过上一期的学习,大家应该能写一些简单的功能了,但是在实际生产中的功能需求往往要复杂很多,今天我就继续和大家分享下智能合约中的一些高级用法和功能. 使用docker编译 如果你需要使用不同版本的 ...

  6. EOS基础全家桶(十二)智能合约IDE-VSCode

    简介 上一篇我们介绍了EOS的专用IDE工具EOS Studio,该工具的优势是简单,易上手,但是灵活性低,且对系统资源开销大,依赖多,容易出现功能异常.那么我们开发人员最容易使用的,可能还是深度定制 ...

  7. EOS基础全家桶(一)开篇

    简介 从今天开始我会在FishoPark上与大家分享EOS的一些技术经验和基础,如果大家在看文章的过程中有任何问题,欢迎在网站下方的评论里留言,我会尽力为大家解答,如果发现我内容中所写有错,欢迎指正, ...

  8. EOS基础全家桶(十一)智能合约IDE-EOS_Studio

    简介 我们马上要进入智能合约的开发了,以太坊最初提供了智能合约的功能,并宣告区块链进入2.0时代,而EOS的智能合约更进一步,提供了更多的便利性和可能性.为了进一步了解智能合约,并进行开发,我们需要先 ...

  9. EOS基础全家桶(十三)智能合约基础

    简介 智能合约是现在区块链的一大特色,而不同的链使用的智能合约的虚拟机各不相同,编码语言也有很大差异.而今天我们开始学习EOS的智能合约,我也是从EOS初期一直开发合约至今,期间踩过无数坑,也在Sta ...

随机推荐

  1. SpringCloud第二代实战系列:一文搞定Nacos实现服务注册与发现

    一.背景:SpringCloud 生态圈 在正式开始本篇文章之前我们先岔开来讲一下SpringCloud的生态圈. SpringCloud大家都比较熟悉了,它制定了分布式系统的标准规范,做了高度抽象和 ...

  2. Web Scraper 高级用法——利用正则表达式筛选文本信息 | 简易数据分析 17

    这是简易数据分析系列的第 17 篇文章. 学习了这么多课,我想大家已经发现了,web scraper 主要是用来爬取文本信息的. 在爬取的过程中,我们经常会遇到一个问题:网页上的数据比较脏,我们只需要 ...

  3. js String方法总结

    字符方法(3) charAt(pos: number): string; // 返回特定位置的字符. charCodeAt(index: number): number; // 返回表示给定索引的字符 ...

  4. 【Weiss】【第03章】练习3.4、3.5:有序链表求交、并

    [练习3.4] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∩L2的过程. [练习3.5] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∪L2的过程. 思路比较简单,测 ...

  5. 我的MacbookPro进水了!维修过程记录

    电脑进水与解决方案 如果事情有变坏的可能,不管这种可能性有多小,它总会发生.---墨菲定律 进水过程 2020年03月21日日下午3点左右,不小心把水杯碰倒了,水通过电脑右侧的键盘处进入了大概有10毫 ...

  6. 爬虫 | cnblog文章收藏排行榜(“热门文摘”)

    目录 需要用的module 单页测试 批量抓取 数据保存 背景说明 因为加入cnblog不久,发现上面有很多优秀的文章. 无意中发现cnblog有整理文章的收藏排行榜,也就是热门文摘. 不过有点坑的是 ...

  7. Vue + element从零打造一个H5页面可视化编辑器——pl-drag-template

    pl-drag-template Github地址:https://github.com/livelyPeng/pl-drag-template 前言 想必你一定使用过易企秀或百度H5等微场景生成工具 ...

  8. [剑指offer]10.斐波那契数列+青蛙跳台阶问题

    10- I. 斐波那契数列 方法一 Top-down 用递归实现 def fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...

  9. Effective python(五):内置模块

    1,考虑使用contextlib和with语句改写可复用的try/finally代码 with lock:print('lock is held')相当于try:print('lock is held ...

  10. 从ISTIO熔断说起-轻舟网关熔断

    最近大家经常被熔断洗脑,股市的动荡,让熔断再次出现在大家眼前.微服务中的熔断即服务提供方在一定时间内,因为访问压力太大或依赖异常等原因,而出现异常返回或慢响应,熔断即停止该服务的访问,防止发生雪崩效应 ...