深刻理解eos帐户体系 active和action

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

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

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

智能合约帐户分级和分组:这里须要主要若是用户拥有了某种权限。 就能够执行当前所在组的全部操做。it

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

合约即帐户 帐户及合约。 action active 即权限和动做两部分组成。基础

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

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

这种架构天然而然引起了一个问题:对于复杂的智能合约帐户,有些 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

相关文章
相关标签/搜索