在系列九中已阐明了EOS帐号权限的关系,并用命令行的方式展示了具体的设置方法。在RPC调用的方式中,实质上是调用了“eosio”这个合约的"updateauth" action。套用 RPC方式向EOS提交transaction的交互步骤(系列十介绍的方法),从而达到通过RPC调用方式实现EOS权限设置。举例说明如下:
1、命令行下实现account0的帐号权限设置:
$ cleos set account permission account0 active '{
"threshold": 1,
"keys": [{"key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV","weight": 1}],
"accounts": [{"permission":{"actor":"account1","permission":"eosio.code"},"weight":1}]
}'
owner -p account0
2、对应地,以push action方式的命令行实现同样设置的命令为:
$ cleos push action eosio updateauth '{
"account":"account0",
"permission":"active",
"auth":{
"threshold": 1,
"keys": [{
"key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"weight": 1}],
"accounts": [{"permission":{
"actor":"account1",
"permission":"eosio.code"},
"weight":1}],
"waits":[]
},
"parent":"owner"
}'
owner -p account0
这里说明一下帐号权限的完整理解,权限(authority)的完整信息包括threshold、keys、accounts、waits四个字段。其中
(1)threshold代表阀值,当操作所签名的权重累计达到阀值时即可获得完全权限。
(2)keys是一个数组,其数组中的任何一个key有其对应的权重,当用这个key对某个操作进行签名时,则这个操作承认了这个key对应的权重,当所有的签名权重累加达到阀值之后,操作即获得了完全授权,当签名权重累计尚未达到操作阀值要求,则操作未获得完全授权而不能完成。
(3)accounts是一个数组,作用与keys相同,只不过将权重分配给帐号而已。
(4)waits是一个数组,表示每一个等待条件的满足就会增加对应的操作权重,这个需要在延迟执行的事务中可能会用到。具体格式例子 "waits":[{"wait_sec" : "3600" , "weight" : 1}],例子中表示这个操作在签名提交后,如果签名累计权重未达到阀值,则操作未能完成,但过3600秒之后签名累计权重就是增加1,这时累计权重就可能达到了阀值,从而取得完全权限,操作可以顺利完成。