今天和大家分享下EOS账户权限相关的操作。
EOS账户默认具有owner和active权限。owner权限及账户所有权,active权限为owner的子权限,具有除更改owner权限、更改非active子孙权限以外的所有操作权限(网上很多文章说active具有除更改owner权限以外的所有权限,这一点并不准确,如果我新增一个owner的子权限(如hello),那么active权限并不具备修改hello权限及其子权限的能力)。关于权限的具体内容,这里我不做太多说明,网上有很多文章可以参考。接下来我们晒出命令,这里我们直接使用rpc命令(使用cleos),由于我把自己的节点撤了,所以没有截图:
查看账户权限结构:
cleos --url https://rpc.eosio.org get account testaccount1
修改active权限:(这里修改active权限,权限级别可以是owner或active,这里我使用了owner;如果修改owner权限,权限级别必须为owner)
cleos --url https://rpc.eosio.org set account permission testaccount1 active ‘{"threshold":1, "keys":[{"key":"EOS71LKEAFJqtgeX58G4iMx3k6aEYXQGiZmkC9pww2sgQpho89Wa1","weight":1}],"accounts":[]}‘ owner -p [email protected]
新增权限的命令和修改权限的命令类似,这里我们新增一个hello权限,它是owner的子权限:
cleos --url https://rpc.eosio.org set account permission testaccount1 hello ‘{"threshold":1, "keys":[{"key":"EOS71LKEAFJqtgeX58G4iMx3k6aEYXQGiZmkC9pww2sgQpho89Wa1","weight":1}],"accounts":[]}‘ owner -p [email protected]
当然修改私钥是最简单的,我们看一个稍微复杂点的:
cleos --url https://rpc.eosio.org set account permission testaccount1 active ‘{"threshold":2,"keys":[{"key":"EOS71LKEAFJqtgeX58G4iMx3k6aEYXQGiZmkC9pww2sgQpho89Wa1","weight":1}],"accounts":[{"permission":{"actor":"testaccount2","permission":"active"},"weight":1}]}‘ -p [email protected]
以上命令涉及权重和阈值的修改(关于权重和阈值不做说明,大概说明:权重之和大于阈值,则具有该权限),并使用其他账户(testaccount2的active权限)来控制该账户的active权限。
上面我们新建了一个hello权限,那么hello具有什么权限呢?
事实上,新建hello权限级别后,hello权限不具备任何操作权限(即使用该权限进行任何操作都将报错),我们需要对其绑定相关action,假如我们绑定eosio合约的voteproducer这个action。
接下来我们为hello权限绑定一个action:
cleos --url https://rpc.eosio.org set action permission testaccount1 eosio voteproducer hello -p [email protected]
这里操作非常简单,此时hello权限具有了为超级节点投票的能力,我们还能绑定其他action,大家可以自行体验。
我们想移除hello权限,那么可以执行命令:
cleos --url https://rpc.eosio.org set account permission testaccount1 hello ‘NULL‘ -p [email protected]
这里需要注意的是,我们此时直接执行以上命令是会报错的,因为该权限绑定了相关的action,我们要解绑该权限的所有action后才能删除该权限。
解绑hello权限绑定的action:
cluos --url https://rpc.eosio.org set action permission testaccount1 uosio voteproducer NULL -p [email protected]
此时我们便可以移除该权限了。
除了默认的owner、active权限,以及我们自定的权限外,EOS账户还具有一个很有意思的权限,那就是eosio.code权限。该权限主要的用于智能合约,使合约具有账户的active权限,这样合约便可以发起内联交易。
设置eosio.code权限:
cleos --url https://rpc.eosio.org set account permission testaccount1 active ‘{"threshold":1,"keys":[{"key":"EOS71LKEAFJqtgeX58G4iMx3k6aEYXQGiZmkC9pww2sgQpho89Wa1","weight":1}],"accounts":[{"permission":{"actor":"testaccount1","permission":"eosio.code"},"weight":1}]}‘ -p [email protected]
我们也可以设置其他账户的eosio.code权限,这样的话,其账户的合约便具有我的账户的active内联权限。请注意:这样做是非常危险的,因为你并不知道别人的合约做了什么,即使他的合约开源了,但是并不能保证部署在链上的合约没有进行修改,所以,轻易不要添加他人账户的eosio.code权限。
如果要去除掉eosio.code权限:
cleos --url https://rpc.eosio.org set account permission testaccount1 active ‘{"threshold":1,"keys":[{"key":"EOS71LKEAFJqtgeX58G4iMx3k6aEYXQGiZmkC9pww2sgQpho89Wa1","weight":1}],"accounts":[]}‘ -p [email protected]
以上便是我总结的一些内容,当然比较粗糙。接下来,我是想分享一些EOS合约开发相关的知识,希望和大家多多交流学习!
原文地址:https://www.cnblogs.com/tkblack/p/11249163.html