在eos中,账户是一个非常重要的概念。 账户分为两部分组成 一种是active 一种是action. 智能合约本质上来讲就是一个action加上一个回馈脚本程序。任何智能合约都有这俩个部分组成。

那么有一个问题出现了: 对不同账户所做的事情不同, 有一些敏感的操作就要求最高权限才能使用。

用户账户可以自定义分级 :创建账户eos默认分为owner和active 。不过为了方便起见,一般设置两个相同。 active就是之前说的操作智能合约的权限。权限是基于权重管理的。
在这个权限下面的action可以做任何事情。权限区分使用/ 区分或者.来进行区分。

智能合约账户分级和分组:这里需要主要如果用户拥有了某种权限。 就可以执行当前所在组的所有操作。

权限和账户action的映射关系: 账户 active action 权限

合约即账户 账户及合约。 action active 即权限和动作两部分组成。

原文:名词解释:本篇文章出现很多 “Action” 和 “Active”,Action (动作)为 EOS 中账户可以接受的动作,也就是别人可以对你做什么;Active 为 EOS 账户权限的一种。

在 EOS 里,不论是真人用户还是智能合约,本质上都是一个账户(Account)。或者说,真人账户也是一个智能合约,都可以对外声明别人可以对他做什么动作(比如社交合约里的发帖),EOS 官方称之为 “Action”。比如某个账户可以声明一个叫 “SayHi” 的 Action,别的账户就可以使用 Active 权限(这里可以参考之前的文章)对他执行 SayHi 动作。账户还可以声明对 Action 的回应方式,比如别人对他 SayHi 后可以回送一个金币什么的。所以 EOS 里 “智能合约” 的定义就是:账户定义的 Action,以及对 Action 的回应脚本(程序)。任何智能合约都是由这两个要素组成的。

这种架构自然而然引发了一个问题:对于复杂的智能合约账户,有些 Action 功能比较简单,比如就是一个查询,安全性要求不高,便利性要求高。还有些 Action 非常敏感,比如提现,便利性要求不高,安全性要非常高。用户账户使用自己的 Active 权限就可以执行所有智能合约的 Action,显然是不合理的。EOS 为了解决这个问题,采取了三步:1.(用户)账户自定义分级权限。2.(智能合约)账户 Action 分级。3.用户权限与智能合约 Action 之间的映射(mapping)。再次强调,这里只是为了表达方便,将账户分为“用户”与“智能合约”,其实这二者在 EOS 里没有区别。用户本身就是智能合约,智能合约也是其他智能合约的“用户”。

(用户)账户自定义分级权限
EOS 里,账户默认会有两种权限:Owner 和 Active。Owner 是最高权限,Active 就是之前提到的操作智能合约权限。所有权限都是基于权重和阈值管理的(详见之前的文章 URL)。EOS 在此基础上,增加了分级并分组的自定义权限,如下图所示。

途中箭头方向就是指向“母权限”或者更高级权限。图中不难看出,Owner 权限是账户最高权限,可以执行 Active 权限。Active 权限可以执行 Family 权限和 Lawyer 权限。 Family 权限可以执行 Friends 权限。反过来,低级权限不能代替执行更高级的权限。不同级别的权限用 "/" 或"." 分隔,比如图中的 Friends 权限就可以表示为 “@User.Active.Family.Friends”。

(智能合约)账户 Action 分级
与权限分级类似,账户 Action 也可以分级并分组,如下图所示(图中的 Message 也就是 Action)。

这个智能合约账户叫“@Exchange.Contract”,首先定义了 Withdraw(提现) Action,接下来是一组 Action 名叫 “Trade(交易)组”,组里有三个 Action:Buy(买入)、Sell(卖出)、Cancel(取消)。Action 同样遵循“向下兼容”,也就是如果某用户账户的某权限拥有“Trade组”的映射,就可以执行“Trade组”的所有 Action。不同级别的 Action 用 "/" 或"." 分隔,比如图中的 Buy Action 就可以表示为 “@Exchange.Contract/Trade/Buy”。

权限与 Action 之间的映射
最后一步,我们要将前两步连接起来,也就决定什么权限能执行什么 Action,如下如的左下部分。

首先看映射1,我们将 @Exchange.Contract 合约的所有 Action 映射到了 Family 权限,也就是使用 @User 用户的 Family 权限(或者更高权限)可以执行 @Exchange.Contract 合约的所有 Action。映射2表示将 @Exchange.Contract 合约的 Withdraw(提现)Action 映射到了 Lawyer 权限,所以 Lawyer 权限可以执行 Withdraw Action。但无法执行其他 Action。3 表示 Trade 组并没有特殊映射,不过因为 @Exchange.Contract 合约的所有 Action 都映射到了 Family 权限,可以直接通过 Family 权限执行,或者使用更高级的 Active 甚至 Owner 权限。

如果 @User 账户想执行 @Exchange.Contract/Trade/Buy 这个 Action,系统会检查 @User 账户是否定义了 @Exchange.Contract/Trade/Buy 映射,没有的话会检查 @Exchange.Contract/Trade 映射,接着会检查 @Exchange.Contract 映射,发现 @Exchange.Contract 映射到了 Family 权限,就会检查本次执行是否满足了 @User.Family 权限(达到阈值),若 Family 权限不足会检查 @User.Active,接着会检查 @User.Owner。

如果没有发现任何符合的映射,会直接检查本次执行是否满足了 @User.Active 权限,若不足,会检查 @User.Owner。

作者:许小笛

沟通交流:1354439

深入理解eos账户体系 active和action的更多相关文章

  1. 如何给EOS账户设置自定义权限

    https://bihu.com/article/1508858 EOS从上线以后,不断有传出token被盗的消息,安全无小事,我们一定要重视,今天从EOS帐户自己定义权限的角度来谈谈如何做好账户的安 ...

  2. 第三方支付设计——账户体系

    第三方支付架构设计之-帐户体系 一,      什么是第三方支付?         什么是第三方支付?相信很多人对这个名字很熟悉,不管是从各种媒体等都经常听到,可以说是耳熟能熟.但,如果非得给这个名词 ...

  3. 深入理解SVG坐标体系和transformations- viewport, viewBox,preserveAspectRatio

    本文翻译自blog: https://www.sarasoueidan.com/blog/svg-coordinate-systems/ SVG元素不像其他HTML元素一样受css盒子模型所制约.这个 ...

  4. Java基础系列5:深入理解Java异常体系

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...

  5. Java——深入理解Java异常体系

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...

  6. Liferay7 BPM门户开发之19: 理解Service Builder体系

    Service Builder是Liferay为业务开发而设计的模型驱动(model-driven)平台工具,提供一系列的实体类.数据持久化.服务相关的代码自动生成服务.支持Hibernate and ...

  7. (转)EOSIO开发(三)钱包、账户与账户权限之概念篇

    这篇文章为大家介绍钱包(Wallet).账户(Accounts).账户权限(Account authorities)的概念. 钱包 Wallet 钱包是一个本地客户端软件,有下面两个作用: 保存私钥. ...

  8. EOS 理解

    1.通过石墨烯技术来解决延迟和吞吐量. 2.账户体系:账户是可读的唯一标识符,不是地址.可包含多对公私钥.账户有权限规划.权限有阈值,公私钥有权重,公私钥的权重大于等于阀值才能拥有该权限进行相应操作. ...

  9. 【源码解读】EOS测试插件:txn_test_gen_plugin.cpp

    本文内容本属于<[精解]EOS TPS 多维实测>的内容,但由于在编写时篇幅过长,所以我决定将这一部分单独成文撰写,以便于理解. 关键字:eos, txn_test_gen_plugin, ...

随机推荐

  1. [ZJOI2009]假期的宿舍(二分图匹配)

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...

  2. 竞赛题解 - Ikki's Story IV-Panda's Trick

    Ikki's Story IV-Panda's Trick - 竞赛题解 也算是2-sat学习的一个节点吧 终于能够自己解决一道2-sat的题了 ·题目 一个圆上有n个点按顺时针编号为 0~n-1 , ...

  3. 解决IDEA右键 new 没有新建class/Interface等等选项

    1.File->Project Structure 2.选择Modules-->右边Sources中选择所需目录 然后点击 Sources-->Apply-->OK 3.再在左 ...

  4. Elasticsearch 数据操作

    一.新增数据 1.1 随机生成id 语法: POST /索引库名/类型名 { "key1": "value1", "key2": " ...

  5. Mac下PHP的环境搭建

    * 前段时间手欠 ... 入手了一个二手的Macbook pro ! 配置挺高的 16款13寸的基本顶配了 ... 只差 硬盘不是1T的 ... 可以脑补一下配置了* 话说 不是所有程序猿都说 每个程 ...

  6. 中国大学MOOC-C程序设计(浙大翁恺)—— 时间换算

    时间换算(10分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小 ...

  7. 爬取 StackOverFlow 上有关于 Python 的问题

    给定起始页面以及爬取页数,要求得到每一个问题的标题.票数.回答数.查看数 stackflow <- function(page){ url <- "http://stackove ...

  8. vue cli3超详细创建多页面配置

    1.首先按照vue cli3 给的入门文档下载个vue cli3 如果之前下载了vue cli2的要先卸载之前的 2.检查安装是否成功 3.ok,现在环境搭建好了,新建项目 vue create he ...

  9. html5新特性与用法大全了解一下

    有好多小伙伴私聊我问我html5新特性 和用法,下面我给大家具体介绍一下html5都新加了哪些新特性,下面我给大家总结一下. 1)新的语义标签 footer header 等等2)增强型表单 表单2. ...

  10. DevExpress TreeList用法总结

    http://blog.itpub.net/29251214/viewspace-774395/ http://blog.csdn.net/czp_huster/article/details/501 ...