深入理解eos账户体系 active和action
在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的更多相关文章
- 如何给EOS账户设置自定义权限
https://bihu.com/article/1508858 EOS从上线以后,不断有传出token被盗的消息,安全无小事,我们一定要重视,今天从EOS帐户自己定义权限的角度来谈谈如何做好账户的安 ...
- 第三方支付设计——账户体系
第三方支付架构设计之-帐户体系 一, 什么是第三方支付? 什么是第三方支付?相信很多人对这个名字很熟悉,不管是从各种媒体等都经常听到,可以说是耳熟能熟.但,如果非得给这个名词 ...
- 深入理解SVG坐标体系和transformations- viewport, viewBox,preserveAspectRatio
本文翻译自blog: https://www.sarasoueidan.com/blog/svg-coordinate-systems/ SVG元素不像其他HTML元素一样受css盒子模型所制约.这个 ...
- Java基础系列5:深入理解Java异常体系
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...
- Java——深入理解Java异常体系
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...
- Liferay7 BPM门户开发之19: 理解Service Builder体系
Service Builder是Liferay为业务开发而设计的模型驱动(model-driven)平台工具,提供一系列的实体类.数据持久化.服务相关的代码自动生成服务.支持Hibernate and ...
- (转)EOSIO开发(三)钱包、账户与账户权限之概念篇
这篇文章为大家介绍钱包(Wallet).账户(Accounts).账户权限(Account authorities)的概念. 钱包 Wallet 钱包是一个本地客户端软件,有下面两个作用: 保存私钥. ...
- EOS 理解
1.通过石墨烯技术来解决延迟和吞吐量. 2.账户体系:账户是可读的唯一标识符,不是地址.可包含多对公私钥.账户有权限规划.权限有阈值,公私钥有权重,公私钥的权重大于等于阀值才能拥有该权限进行相应操作. ...
- 【源码解读】EOS测试插件:txn_test_gen_plugin.cpp
本文内容本属于<[精解]EOS TPS 多维实测>的内容,但由于在编写时篇幅过长,所以我决定将这一部分单独成文撰写,以便于理解. 关键字:eos, txn_test_gen_plugin, ...
随机推荐
- dubbo配置注意
API接口的路径在provider和consumer端的路径要一致
- javascript 正则表达式之分组与前瞻匹配详解
本文主要讲解javascript 的正则表达式中的分组匹配与前瞻匹配的,需要对正则的有基本认识,本人一直对两种匹配模棱不清.所以在这里总结一下,如有不对,还望大神指点. 1.分组匹配: 1.1捕获性分 ...
- 红帽RHEL6.8离线环境下升级到RHEL7.3
Red Hat Enterprise Linux 7 (RHEL 7) 是第一个支持从前一个 RHEL 主发行版本(RHEL 6)进行原位(in-place)升级的 RHEL 主版本.原位升级(in- ...
- 登录验证码的生成Java代码
package example7; import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java. ...
- Robots协议(摘)
robots协议 Robots协议(也称为爬虫协议.机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓 ...
- Spark在实际项目中分配更多资源
Spark在实际项目中分配更多资源 Spark在实际项目中分配更多资源 性能调优概述 分配更多资源 性能调优问题 解决思路 为什么调节了资源以后,性能可以提升? 性能调优概述 分配更多资源 性能调优的 ...
- 【Storm一】Storm安装部署
storm安装部署 解压storm安装包 $ tar -zxvf apache-storm-1.1.0.tar.gz -C /usr/local/src 修改解压后的apache-storm-1.1. ...
- C语言与汇编语言相互调用原理以及实例
C语言与汇编语言相互调用原理以及实例 1.原理 其实不管是C语言还是汇编语言想要执行都是最终编译链接成为二进制文件. 这里一定要明确编译和链接是两个步骤,生成的文件格式也是不一样的. 编译生成的文件是 ...
- android stadio 编译报错:download fastutil-7.2.0.jar
在Ubuntu上面,新安装的stadio,第一次编译项目的时候, 一直开在下载 fastutil-7.2.0.jar 原因是需要FQ.那么改一下你的buil.gradle buildscript { ...
- MySQL高级-锁机制
一.概述 1.定义 2.锁的分类 ①从对数据操作的类型(读\写)分 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响. 写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁 ...