新手教程 EOS 权限管理之-权限的使用 (你绝对找不到的干货)

lome · 2018年06月08日 · 最后由 dnbstarz 回复于 2018年08月22日 · 15873 次阅读
本帖已被设为精华帖!

首先,跟大家说声抱歉,由于之前一直在准备EOS上线的一些工作,所以,很长时间没有更新内容。今天正好有时间,也想到了一些题材,就来说一下这个话题。本文完全是个人见解,如有不当之处,欢迎指出。

前提回顾:
相信看这篇教程的人,对我之前的一些账户操作已经进行了了解,如果不了解的,可以移步 https://eosfans.io/topics/372.

之前讲了单个账户的权限的增、删、改、查及一系列操作,并没有讲到权限的使用,那么如果我们增加一个权限,但是不会用它,那又有什么意义呢?
所以,今天就来学习一下权限的使用。

说明: 本教程,通过eosio.token合约的transfer来进行演示。

目录

  1. 创建eosio.token并发放eosio.token合约
  2. 创建测试账号eostea
  3. 测试账号eostea发放代币
  4. 测试账号转账给账号hello
  5. hello账号添加权限hello
  6. hello账号转账给eostea
  7. hello账号权限hello绑定action
  8. hello账户通过hello权限转账

钱包中中的密匙:

我所有钱包中的密匙如下:

创建测试账号

cleos create account eosio eosio.token EOS8Ar1fUGtZxcJ8Rdkh3rc55Vqg3ariR6fdBV8zxz4WgTW3nT73L EOS8Ar1fUGtZxcJ8Rdkh3rc55Vqg3ariR6fdBV8zxz4WgTW3nT73L
cleos create account eosio hello EOS5G13KtUHdsqbeuR2fcoRW4bUzJhigTcX37Aw39xKdy4NMQD9hZ EOS5G13KtUHdsqbeuR2fcoRW4bUzJhigTcX37Aw39xKdy4NMQD9hZ
cleos create account eosio eostea EOS8aQ3bgYKsipwsuPGzimnH5be9AkHr3N6Y7Knh6pSPoLAV2y6Ab EOS8aQ3bgYKsipwsuPGzimnH5be9AkHr3N6Y7Knh6pSPoLAV2y6Ab

下面我创建本文的所有测试账号,创建情况如下:

发布eosio.token合约

cleos set contract eosio.token eosio.token/

发放并转账代币

cleos push action eosio.token create '["eostea","10000000000.0000 TEA","create"]' -p eosio.token
cleos push action eosio.token issue '["eostea", "10000000000.0000 TEA","issue"]' -p eostea
cleos push action eosio.token transfer '["eostea","hello","100000000.0000 TEA","transfer"]' -p eostea

如图所示:


转账测试

cleos push action eosio.token transfer '["hello","eostea","100.0000 TEA","transfer"]' -p hello

可能大家看到这里还是一头雾水,别着急重点马上就来。

给账户hello添加hello权限

cleos set account permission hello hello '{"threshold": 1, "keys":[{"key":"EOS5dFqCCX8nhV5e2RZWTDGFtAw4mJcCjiQC9Fe6zquKwKky2aAEm","weight":1}],"accounts":[],"waits":[]}' active

新增权限hello绑定transfer动作

cleos set action permission hello eosio.token transfer hello

权限绑定action成功,那么有什么用呢?注意见证奇迹的时刻到了。

新增权限的使用

我们先来尝试用active权限转账,然后用hello权限转账:

cleos push action eosio.token transfer '["hello","eostea","100.0000 TEA","transfer"]' -p hello@active
cleos push action eosio.token transfer '["hello","eostea","100.0000 TEA","transfer"]' -p hello@hello

大家可以看到我们用hello权限也成功执行了转账操作。

可能一些小伙伴就要说,你的钱包里有active权限对应的密匙。好,那么我把钱包锁起来,只留hello权限的密匙。

大家可以看到,现在我的钱包里只剩下hello权限对应的密匙了。再次进行转账:

cleos push action eosio.token transfer '["hello","eostea","100.0000 TEA","transfer"]' -p hello@hello

大家可以看到,这次转账也是成功的。

可能有些同学又要找茬了,那说不定hello这个权限本来就能转账呢?

那么,我们现在解除hellotransfer绑定关系(注意这里是需要active权限来接触绑定关系),再次转账

cleos set action permission hello eosio.token transfer NULL
cleos push action eosio.token transfer '["hello","eostea","100.0000 TEA","transfer"]' -p hello@hello

大家可以看到,没有绑定权限,是操作不成功的。

应用场景

权限和action的绑定关系,极大的增加了eos网络权限的灵活性,通过单个权限的绑定,我们可以将一个账户的权限分层管理,甚至一个公司的所有人都可以使用一个EOS账户来进行权限分分离。

下面我拿hello账号举个例子:

  1. owner: 公司的所有者,或者股东,根据权限分配给每个股东相应的权限。
  2. active: 管理阶层,可添加部门如active,转账,等除拥有者以外的所有操作。
  3. hello:财务部门,具有转账权限。
  4. oo: 部门小组,可以有相应的转账权限
  5. o: 员工,权限不详。

这样成功的将整个公司所有成员的账户都容纳进一个账户,足见EOS账户权限的灵活性。

好了!今天就到这里!!
如需转载请联系作者!!谢谢!!!

共收到 56 条回复
strahe 将本帖设为了精华贴 06月09日 10:30

受教了

把hello权限改为从属于owner,再试试active能不能转账

Redpill 回复

为什么我这里不能改为从属于owner?打印是这样的:

root@realeos:/data/eos/build# cleos set account permission user1 hello '{"threshold": 1, "keys":[{"key":"EOS6wbUECJik9tgNF27qAJ2VNZuCKDKPorLySZs94va8NHnHm22HE","weight":1}],"accounts":[],"waits":[]}' owner
Error 3090005: irrelevant authority included
Please remove the unnecessary authority from your action!
Error Details:
updateauth action declares irrelevant authority '{"actor":"user1","permission":"active"}'; minimum authority is {"actor":"user1","permission":"owner"}
ray_ 回复

原来是没有添加owner授权,现在可以了。hello权限仍然不能转账除非明确授权给它,active依旧可以转账。

可以给某个权限设置转账限额吗?比如财务部门每天只能转账10万,需要更多就需要 active 账户授权了?

yanxi 回复

这个似乎没有这个功能,可以下一个合约实现。

cleos set contract eosio.token eosio.token/

这句话一直没搞明白是怎么回事,这个 eosio.token/ 目录从哪里来的?如果需要我准备的话应该怎么做?

@lome 请问账户的owner权限能修改吗,例如
[eos@eos_Jungle chain2]$ ./cleos.sh get account qqqqqqqqqqqq
permissions:
owner 1: 1 EOS7kFMUq273Jj225Q9xNC3YemmwGXFF9ZLYUXmeAYFnTuRqL4rzC
active 1: 1 EOS7kFMUq273Jj225Q9xNC3YemmwGXFF9ZLYUXmeAYFnTuRqL4rzC

./cleos.sh set account permission qqqqqqqqqqqq owner '{"threshold":1,"keys":[{"key":"EOS5YCbPBQqYoaMZKHkK2FhoNDSYFekqXSpYeWiCGDHCxU9w2U6mr","weight":1}],"accounts":[],"waits":[]}' owner

我只过之后好像不行

ray_ 回复

你好,怎样增加owner授权呢?我看您写的没有问题啊

lome 执行合约遇到的权限问题 中提及了此贴 07月07日 09:50
fsword 回复

Ubuntu中在:home/eos/build/contracts/eosio.token

你好,我想问下,现实中主网的eosio.token、eosio.ram等这些系统账户也是要导入私钥吗?那这些私钥由谁保管,这些账户的权限属于谁?

icotide 回复

这些系统账户的权限属于eosio,而eosio的权限属于21个产块bp

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册