EOS中的权限模型

EOS里的权限模型在白皮书中有描述,在wiki中也有描述,这里结合代码来解释一下。

EOS中的账户有两种,一种是用户使用的账户,另一种是用来部署智能合约的账户。一个智能合约账户只能部署一个智能合约。

在代码中,智能合约用变量code来表示,它的类型是account_name,实际是包装了uint64_t的数据结构。这个uint64_t用来存储一个base32编码的字符串,大致上最多可以存12字符长。

智能合约中有一些message,或者叫action,就是智能合约的接口供用户调用。比如一个叫ExchangeContract的智能合约,下面有两个接口,CreateOrderMessageCancelOrderMessage

在合约端,这些接口被组织成一个Permissions层级结构。下图中的TradeAuthority是个逻辑分组,合约的管理者可以加这样的逻辑分组,也可以不加。

ExchangeContract
    TradeAuthority
        CreateOrderMessage
        CancelOrderMessage

在用户的账户中,用户可以配置定义一个Authority Levels的层级结构。

Owner
    Active
        Trading

其中Owner 和Active是固定都有的,Active下可以由用户定义配置。这里的每个节点都是一个Authority的数据结构。这个结构里定义了一个阀值,以及一些key和对应的权重。下图中active这一authority level的阀值是1,key EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX的权重是1。所以用户只要能提供这个key,用户就有了active这个authority。如果这个key是别人的,就表示这个key的所有者可以代表bob来行使bob的active authority.

@bob account authorities

Permission Account Weight Threshold
owner 1
EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch 1
active 1
EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX 1
trading 1
EOS7Hnv4iBWo1pcEpP8JyFYCJLRUzYcXSqt... 1

那么bob的active authority可以做什么呢?这就需要在合约的Permission和用户的authority间建立一个映射。这个映射是在用户端配置的。这个映射的形式是:

 (code, message)-> authority

也就是说,用户定义哪些authority可以代表自己去调用合约code中的message。 例如,如果bob定义了下面的映射

(ExchangeContract, CreateOrderMessage)-> trading

那么拥有EOS7Hnv4iBWo1pcEpP8JyFYCJLRUzYcXSqt...的人(不一定是bob)就可以代表bob来调用CreateOrderMessage了。

在用户端的Authority Levels的层级结构中,子节点能做的事,父节点都可以做。拿上面的例子,Active是Trading的父节点,所有拥有EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX的人,更可以调用CreateOrderMessage了。

在EOS代码中,在libraries/chain/include/eosio/chain/permission_link_object.hpp有下面的类定义了这个映射关系。

class permission_link_object : public chainbase::object<permission_link_object_type, permission_link_object> {

 OBJECT_CTOR(permission_link_object)

 id_type id;     
 /// The account which is defining its permission requirements

 account_name account; 
 /// The contract which account requires @ref required_permission to invoke

 account_name code; /// TODO: rename to scope
 /// The message type which account requires @ref required_permission to invoke
 /// May be empty; if so, it sets a default @ref required_permission for all messages to @ref code

 action_name message_type;
 /// The permission level which @ref account requires for the specified message types

 permission_name required_permission;

 };

在上面的类中,account是用户账户名,例如bob。code是智能合约账户名,例如ExchangeContract。message_type 是接口名,例如CreateOrderMessage。这个类的实例都存储在EOS的内存数据库中。这也是chainbase这个命名空间的由来,代表了chain的内存数据库(base).

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • EOS.IO技术白皮书链接:EOSIO/Documentation 摘要 EOS.IO 软件引入一种新的区块链架构...
    yuyangray阅读 1,663评论 0 4
  • 1. 账户与钱包1.1 创造并管理钱包1.2 生成EOS Keys并导入1.3 备份您的钱包1.4 创建账户 2....
    cenkai88阅读 3,927评论 1 7
  • 30岁这年的春节,意外获得一段独处时间。 每一天的午后,难得拥有漫长的独处时间。 认真看阳光变夕阳,光影涣散。 仔...
    Elisecheng阅读 338评论 0 0
  • 记得之前听过一本书讲到复制经验的观点,现大多情况且大多人都深陷于从别人的经验里找到拯救自己的救命稻草,有时感觉不错...
    偲月喵喵阅读 738评论 0 0
  • 从古到今,从尼罗河畔到西子湖边, 从凡夫俗子到旷世奇才,大都追求自己的梦想,小到一顿美味佳肴,大到拯救苍生保家卫国...
    雅各布666阅读 417评论 8 10