资讯专栏INFORMATION COLUMN

【许晓笛】深入理解 EOS 账户权限映射

zacklee / 3400人阅读

摘要:为了解决这个问题,采取了三步用户账户自定义分级权限。用户权限与智能合约之间的映射。图中不难看出,权限是账户最高权限,可以执行权限。如果没有发现任何符合的映射,会直接检查本次执行是否满足了权限,若不足,会检查。

到底什么叫“智能合约”?

名词解释:本篇文章出现很多 “Action” 和 “Active”,Action (动作)为 EOS 中账户可以接受的动作,也就是别人可以对你做什么;Active 为 EOS 账户权限的一种。阅读本文前建议先阅读之前的文章:https://mp.weixin.qq.com/s/K6...

在 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 就是之前提到的操作智能合约权限。所有权限都是基于权重和阈值管理的。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。


相关文章和视频推荐

【许晓笛】EOS 上线前,先搞懂这两个基本概念

圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。

公开课地址:https://ke.qq.com/course/345101

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24434.html

相关文章

  • 晓笛EOS 上线前,先搞懂这两个基本概念

    摘要:的跟其他区块链项目是类似的,都是一个基本功能本地储存密钥,仅此而已。公网上线后,一定要将存有密钥的加密,并且将文件单独备份好。字面意思是账户,但我觉得有个概念更适合法人。代币就是由持有的。对于权限,则需要列表里至少两个账户的授权才能行使。 如果你曾经尝试在本地运行 EOS 测试节点,会发现编译、运行并不是特别复杂,但官方教程里两个概念很容易把人搞晕: Account(账户) 和 Wal...

    alogy 评论0 收藏0
  • 晓笛】重新理解EOS的系统架构

    摘要:所以想要实现真正实用的智能合约平台,就要脱离比特币系统的架构,寻找新的系统组织形式。比特币和以太坊之所以设计了手续费机制,就是防止大量垃圾交易使得系统拥堵。 区块链系统中,去中心化程度与效率之间天然地存在矛盾关系。 如果区块链智能合约系统想追求类似比特币的去中心化程度,理论上效率就会大打折扣。现实也是这样的:比特币每秒钟只能处理7笔左右的交易,每一笔交易要用至少30分钟才能确认,这种效...

    Alan 评论0 收藏0
  • 晓笛EOS 的世界里可能再也没有小偷了

    摘要:再配合转账延时,为用户找回被盗账户提供了时间上的可能。只能转移走所有资产并丢弃这个账户。总结使用通过独特的权限管理机制,结合延时加密和社会学手段,将账户被盗遗失的可能性将到了最低程度。 EOS 针对以下两种情况设计了应急措施: 账户被盗(私钥被盗或有权限的其他账户被盗) 账户遗失(私钥遗失或有权限的其他账户遗失) 1.账户被盗 EOS 有可能会强制要求所有账户的 Owner 权限必...

    douzifly 评论0 收藏0
  • 晓笛】开发第一个 EOS 智能合约

    摘要:所以最简单的智能合约只需实现文件。我们看到文件中已经声明了这个,并说明了这个的李嘉图合约,大概意思是本合约的输入为一串字符,本合约意图是打印输出,没有其他效果。 Hello World! 稍微了解 EOS 系统,你就会知道 EOS 的智能合约基于 WebAssembly(WASM) 技术,这种技术在性能和跨平台兼容性之间取得了很好的平衡,通过将原始代码编译成字节码,使得代码可以在多种平...

    Developer 评论0 收藏0
  • 晓笛】49行代码就能发币?而且EOS连例子都给你了

    摘要:相关文章和视频推荐许晓笛智能合约案例解析圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 Daniel Larimer 在他的博客介绍了EOS新的智能合约架构(EOS团队的开发速度实在是太吓人,根本追不上)。他给出了最简单的一个新币种的智能合约代码,仅有49行就能完成一个新币种的开发,一个新的爱息欧就诞生了。让我们一步一步实现吧。 首先实现私有成员,建立一个 account 结...

    Freeman 评论0 收藏0

发表评论

0条评论

zacklee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<