3.9 EOS权限、多重签名

3.9.1. 用户和权限

3.9.1.1.账户

帐户是存储在区块链中的可读标识符。它可能属于一个个人或者组织,这取决于账户的权限配置,需要账户才能将交易或将交易以其他方式推送到区块链。

3.9.1.2.授权和权限

每个账户有两个默认的权限名称:

  • owner 象征着一个账户的所有权。 只有少数交易需要这种权力,但最值得注意的是对owner权力作出任何改变的行为。 一般而言,建议所有者保持冷藏并且不与任何人共享。owner可用于恢复可能已被泄露的另一个权限。
  • active 用于转移资金,为生产者投票并进行其他高级账户更改。

3.9.1.3.单个签名

这是帐户在创建后的配置,它的owner和active权限只有一个key,两个key的权重都是1并且两个权限的阀值都是1。对于账户的默认权限配置只需要单个签名来授权操作。

权限 账户/key 权重 阀值
owner 1
EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch 1
active 1
EOSh61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX 1

3.9.1.4.多签名账户和自定义权限

以下示例是名为@multisig的虚构帐户的权限。 在这种情况下,两个用户被授权为虚构的@multisig帐户的owner和active,三个用户被授予权重不同的自定义publish权限。

权限 账户/key 权重 阀值
owner 2
@bob 1
@stacy 1
active 1
@bob 1
@stacy 1
publish 2
@bob 2
@stacy 2
EOS7Hnv4iBWo1pcEpP8JyFYCJLRUzYcXSqt.. 1

owner需要权重阈值2来更改所有者权限级别,这意味着由于所有方都具有权重1,因此所有用户都必须签署交易才能获得完全授权。要发送交易需要active权限,阈值设置为1.这意味着只需要1个签名即可授权来自帐户active权限的操作。还有一个名为publish的自定义命名权限。 发布权限的阈值为2,@bob和@stacy的权重均为2,公钥的权重为1.这意味着@bob和@stacy可以在没有额外签名的情况下发布,而公钥需要额外签名才能在公共许可下进行授权操作。

3.9.1.5.权限多级管理

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

3.9 EOS权限、多重签名

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

3.9.1.6.应用实例

给账户s1增加权限transfer,使s1的transfer权限只有转账权限
(1)设置transfer权限

./cleos set account permission s1 transfer '{"threshold": 1, "keys":[{"key":"EOS6u2pwUiUiyhLCe7kSNeBeCqQZZsbDT7w1MfTBkty6FVU8fbSFU","weight":1}],"accounts":[],"waits":[]}' active

3.9 EOS权限、多重签名

(2)查看用户权限发现已经新增transfer
3.9 EOS权限、多重签名

(3)给s1的transfer权限绑定转账权限

./cleos set action permission s1 eosio.token transfer transfer

3.9 EOS权限、多重签名

(4)用transfer权限进行转账,发现转账成功

./cleos push action eosio.token transfer '["s1","s2","10.0000 HHH","transfer"]' -p s1@transfer

3.9 EOS权限、多重签名

(5)删除特殊权限

./cleos set action permission s1 eosio.token transfer null

3.9 EOS权限、多重签名

(6)执行转账则操作失败
3.9 EOS权限、多重签名

3.9.2.msig多重用户认证

3.9.2.1.概述

msig多用户认证是一种仲裁机制,当用户没有执行某个具体操作的权限时,用户可以提出提议向仲裁机构申请该权限,当仲裁机构成员审批通过后,该用户就有执行该操作权限。

3.9.2.2.应用实例

s1要申请a1的权限,从a1向s2转账,需要提交申请,当审批通过后,就可执行转账操作

(1)创建账户

./cleos create account eosio eosio.msig EOS7Lt29QXj4cgYNjffi2kJy3pg38Lc1rmUbqCLo1efznLKhdohjJ
./cleos create account eosio eosio.token EOS7Lt29QXj4cgYNjffi2kJy3pg38Lc1rmUbqCLo1efznLKhdohjJ
./cleos create account eosio a1 EOS7Lt29QXj4cgYNjffi2kJy3pg38Lc1rmUbqCLo1efznLKhdohjJ
./cleos create account eosio s1 EOS7Lt29QXj4cgYNjffi2kJy3pg38Lc1rmUbqCLo1efznLKhdohjJ
./cleos create account eosio s2 EOS7Lt29QXj4cgYNjffi2kJy3pg38Lc1rmUbqCLo1efznLKhdohjJ

(2)加载相关合约发行系统token

./cleos set contract eosio.token ~/eos/build/contracts/eosio.token/
./cleos set contract eosio.msig ~/eos/build/contracts/eosio.msig/
./cleos push action eosio.token create '["eosio", "1000000000.0000 HHH"]' -p eosio.token
./cleos push action eosio.token issue '["eosio", "1000000000.0000 HHH", "memo"]' -p eosio
./cleos push action eosio.token transfer '[ "eosio", "a1", "10000.0000 HHH", "m" ]' -p eosio
./cleos set contract eosio ~/eos/build/contracts/eosio.system/ 
./cleos push action eosio setpriv '["eosio.msig", 1]' -p eosio@active

(3)提案获取a1的权限,需要s1,a1,s2进行审批

./cleos multisig propose payme '[{"actor": "s1", "permission": "active"},{"actor": "a1", "permission": "active"},{"actor": "s2", "permission": "active"}]' '[{"actor": "a1", "permission": "active"}]' eosio.token transfer '{"from":"a1", "to":"s2", "quantity":"20.0000 HHH", "memo":"Pay"}' -p s1@active

3.9 EOS权限、多重签名

(4)查看提案交易

./cleos multisig review s1 payme

3.9 EOS权限、多重签名

(5)查看提案审批情况,provided_approvals为空表示尚未审批,request_approvals表示需要哪些权限进行审批

./cleos get table eosio.msig s1 approvals

3.9 EOS权限、多重签名

(6)审批权限

./cleos multisig approve s1 payme '{"actor": "s1", "permission": "active"}'  -p s1@active

3.9 EOS权限、多重签名

./cleos multisig approve s1 payme '{"actor": "a1", "permission": "active"}'  -p a1@active

3.9 EOS权限、多重签名

./cleos multisig approve s1 payme '{"actor": "s2", "permission": "active"}'  -p s2@active

3.9 EOS权限、多重签名
(7)再次查看提案审批情况,权限已经审批

./cleos get table eosio.msig s1 approvals

3.9 EOS权限、多重签名

(8)执行转账

./cleos multisig exec s1 payme -p s1

3.9 EOS权限、多重签名

(9)查询执行结果,发现已经转账成功

./cleos get table eosio.token s2 accounts

3.9 EOS权限、多重签名

链接

星河公链

猜你喜欢

转载自blog.51cto.com/14267585/2399417
3.9