当前位置: 主页 > 比特币 >

【转载】EOS权限模型机制分析



  cleos涉及account和contract的命令都会产生一个action,进而生成一个transaction,所有的action都需要指定permission权限

  权限验证流程图如下:

  主要分为三个部分:

  permission声明:1~3

  permission授权证明:4~9

  权限检测:10~14,其中本地节点的nodeos和miner节点的nodeos都会执行权限检测,10~11(本地节点)和12~14(外部矿工节点)的工作内容是一样

  权限声明 所有action相关命令都是通过通过-p/--permission声明permission参数,permission参数有几种表达形式:account, account@permission, publickey, account等价于account@active

  cleos create account -j eosio testaccount -p eosio@owner cleos set account permission testaccount active -p eosio@active cleos push action contractaccount method 'data' -p account@publish cleos push action contractaccount method1 'data' -p publickey

  如果用户没有输入该参数,cleos会自动添加默认permission,各种action的默认permission是不一样的

  create account命令的默认permission是creator@active

  set account permission命令的默认permission是account@active

  push actioncontractaccount命令的默认permission是contractaccount@active

  如果-p 后面只有account信息(-p account),则默认为account@active

  权限授权证明

  用户在执行cleos相关命令时通过-p声明了permission,这个permission只是一个字符串,谁都可以伪造的,因而需要提交真实可验证的证据,这个证据就是permission的授权(authority)信息。一个permission的authority可以是public key,也可以是子permission(另一个账号的permission, anotheraccount@permission), 这样就形成了一颗树, 叶子节点是public key, 只有该叶子节点的public key才有该权限。

  所以提交授权证明的过程由两部分构成

  收集权限permission的public key 搜集permission生成的授权树的叶子节点的public key,即找出哪些public key被授予该权限。

  比如上图的account@publish权限展开后得到如下叶子节点public key集合【key1, key10, key11, key20, key21, key60, key61】,只要用户拥有这些key集合中的一个public key对应的私钥就可以证明该用户可以以该account@publish权限提交action.

  这个过程由时序图中的get_required_key(8)函数执行

  通过私钥签名提供授权证明 搜索上一步收集到的public key,检测是否含有本用户的key,如果存在,则用相应的private key 签名交易,这样就可以证明该交易具备account@publish这一permission权限。

  这个过程由时序图中的sign_transaction(9)函数执行。

  节点验证权限授权证明 用权限permission授权的私钥签名(授权证明)的交易发布到网络后,矿工收到该交易后,会调用push_transaction函数然后解释授权签名是否正确,对于系统action,会立马验证声明的权限是否满足action的最低权限要求,而对于contract函数执行类型的action, 权限检测由contract代码激发,比如下面的例子

  void hi( account_name user ) { require_auth( user ); print( "Hello, ", name{user} ); }

  'require_auth(user)'就会激发对‘user@active’权限的检测, 更详细的解读我将在下一章节【智能合约】展开。

  关于EOShenzhen的详细介绍可见:

  We are EOShenzhen

  不同入口如何投票:

  imToken钱包

  火币

  portal

  更多内容,加入我们的知识星球吧~

【版权声明】该文章由本站整理于网络的相关信息,本站不拥有所有权,不承担相关法律责任。


相关资讯

站长统计