EOS賬戶權限修改及操作(action)綁定


本文原創,轉載請注明:https://www.cnblogs.com/tkblack/p/11249163.html 

今天和大家分享下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 testaccount1@owner

新增權限的命令和修改權限的命令類似,這里我們新增一個hello權限,它是owner的子權限:

cleos --url https://rpc.eosio.org set account permission testaccount1 hello '{"threshold":1, "keys":[{"key":"EOS71LKEAFJqtgeX58G4iMx3k6aEYXQGiZmkC9pww2sgQpho89Wa1","weight":1}],"accounts":[]}' owner -p testaccount1@owner

當然修改私鑰是最簡單的,我們看一個稍微復雜點的:

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 testaccount1@active

以上命令涉及權重和閾值的修改(關於權重和閾值不做說明,大概說明:權重之和大於閾值,則具有該權限),並使用其他賬戶(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 testaccount1@owner

這里操作非常簡單,此時hello權限具有了為超級節點投票的能力,我們還能綁定其他action,大家可以自行體驗。

我們想移除hello權限,那么可以執行命令:

cleos --url https://rpc.eosio.org set account permission testaccount1 hello 'NULL' -p testaccount1@owner

這里需要注意的是,我們此時直接執行以上命令是會報錯的,因為該權限綁定了相關的action,我們要解綁該權限的所有action后才能刪除該權限。

解綁hello權限綁定的action:

cleos  --url https://rpc.eosio.org set action permission testaccount1 uosio voteproducer NULL  -p testaccount1@owner

此時我們便可以移除該權限了。

 

除了默認的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 testaccount1@active

我們也可以設置其他賬戶的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 testaccount1@active

以上便是我總結的一些內容,當然比較粗糙。接下來,我是想分享一些EOS合約開發相關的知識,希望和大家多多交流學習!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM