简介

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

账号介绍

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. js之重写原型对象

    “实例中的指针仅指向原型,而不是指向构造函数”. “重写原型对象切断了现有原型与任何之前已经存在的对象实例之间的关系:它们引用的仍然是最初的原型”.——前记 var fun = function(){ ...

  2. GPS轨迹发生模拟器介绍

    GPS轨迹发生模拟器介绍 GPS信号模拟器能够模拟卫星信号运动轨迹,模拟GPS卫星导航系统的导航信号.GPS轨迹发生器可以模拟导航系统确定位置点如日期.时间.经度.纬度.海拔信息.速度等.GPS轨迹模 ...

  3. 单列集合List

    1.Vector和ArrayList以及LinkedList区别和联系.应用场景 线程安全: Vector:如果创建Vector时没有指定容量,则默认容量为10,底层基于数组实现,线程是安全的,底层采 ...

  4. django models中的class meta

    Django models中的meta选项 通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model ...

  5. Flask HTTP请求与响应

    设置请求 POST GET 设置post和get,在route中设置methods参数,除了post,get,还有put ,delete 等 @app.route('/http_test', meth ...

  6. Qt5小Demo之猜数字游戏

    玩法:设定时间进行猜数字,所猜数字为一个四位数,输入自己的数字,系统会提示是大了还是小了,依据条件逐步逼近正确结果.在规定时间里猜对即获胜,否则即失败. 平台支持:Win10下测试正常. 源码地址: ...

  7. 五分钟学Java:如何学习Java面试必考的网络编程

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 简介 Java作为一门后端语言,对于网络编程的支持是必不可少的,但是,作为一个经常CRUD的Java工程师,很多时候都不 ...

  8. 0919-The Standard of Code Review

    The primary purpose of code review is to make sure that the overall code health of Google’s code bas ...

  9. OO课程的完结,软件工程学习的开始

    目录 UML小结 阅读学习 大象:Thinking in UML UML精粹 UML和模式应用 本单元作业的架构设计 四个单元中架构设计及OO方法的演进 四个单元中测试与实践的演进 课程收获 三个具体 ...

  10. LeetCode-使数组唯一的最小增量

    题目描述: 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例: 输入:[1,2,2] 输出:1 解释:经过一次 mo ...