EOSIO開發(六)- 賬戶之實戰篇
本文將介紹如何建立賬戶,以及定義賬戶許可權。
涉及的操作有:
- 建立賬戶
- 修改賬戶許可權
- 修改賬戶許可權
目標是建立一個myaccount賬戶,同時將賬戶許可權定義為下面的形式:
myaccount account authorities
![螢幕快照 2018-05-05 下午12.44.15](https://wangtao-1256981172.cos.ap-guangzhou.myqcloud.com/螢幕快照 2018-05-05 下午12.44.15.png)
注:ac1、ac2是另外兩個賬戶。
環境準備
以下操作基於Docker,非Docker環境請參考eos wiki本地啟動方法。
# 下載映象,已有則跳過 docker pull eosio/eos ## keosd # 啟動keosd docker run --name keosd -t eosio/eos /opt/eosio/bin/keosd docker exec -it keosd /bin/bash # 建立錢包 cleos wallet create # 生成金鑰對,私鑰用於匯入錢包,公鑰用於生成賬戶 cleos create key # 匯入私鑰 cleos wallet import <private-key> ## nodeos # 啟動nodeos docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos /opt/eosio/bin/nodeosd.sh docker exec -it nodeos /bin/bash
建立賬戶
語法分析
建立賬戶的語法定義如下:
$ cleos create account ${authorizing_account} ${new_account} ${owner_key} ${active_key}
authorizing_account
是為建立賬戶這個動作提供資金的賬戶。在EOS中,建立賬戶時需要付出一點成本,這個成本由authorizing_account
來承擔,在本文中使用預設的eosio賬戶。new_account
被建立的賬戶。owner_key
擁有new_account
賬戶owner許可權的公鑰。active_key
擁有new_account
賬戶active許可權的公鑰。
實際操作
接下來要在keosd遠端連線nodes節點建立賬戶,為什麼要這麼做呢?有下面兩個原因:
1、keosd只是一個錢包客戶端,並不具備建立賬戶的能力。
2、owner_key
與active_key
必須與匯入錢包的私鑰相對應,否則後續賬戶所有需要簽名的動作都無法通過許可權驗證。而錢包資訊是儲存在keosd的,nodes無法獲取,因此不應該直接在nodes上建立賬戶。
keosd可以通過cleos -u ip:port
命令遠端連線到nodos節點。
進入keosd終端操作介面,執行下面的命令:
# 遠端連線到nodeos節點,建立myaccount賬戶 cleos -u http://192.168.1.101:8888 create account eosio myaccount <public-key> <public-key>
注意結果中的eosio <= eosio::newaccount {...}
,這一段的意思是執行了通過eosio
賬戶部署的eosio
合約中的newaccount
action,引數是{...}
。
繼續建立ac1和ac2賬戶。
# 遠端連線到nodeos節點,建立ac1賬戶
cleos -u http://192.168.1.101:8888 create account eosio ac1 <public-key> <public-key>
# 遠端連線到nodeos節點,建立ac2賬戶
cleos -u http://192.168.1.101:8888 create account eosio ac2 <public-key> <public-key>
修改賬戶許可權
語法分析
修改賬戶許可權的語法定義如下:
$ cleos set account permission ${account} ${permission} ${authority} ${parent}
account
被修改許可權的賬戶permission
被修改的許可權,如果存在則修改,不存在則新增。authority
賬戶許可權資訊,定義許可權擁有者(key、account)、權重(weight)、閾值(threshold)。
以JSON格式表示,示例:
{
"threshold": "uint32_t",
"keys": [{
"key": "public_key",
"weight": "uint16_t"
}],
"accounts": [{
"permission": {
"actor": "account_name",
"permission": "permission_name"
},
"weight": "uint16_t"
}]
}
parent``````permission
的父許可權,可選項,預設active。
實際操作
先檢視myaccount賬戶目前的賬戶許可權資訊。
cleos -u http://192.168.1.101:8888 get account myaccount
可以看到myaccount賬戶在被建立後,預設分配了active和owner兩個許可權。
![螢幕快照 2018-05-05 下午12.16.03](https://wangtao-1256981172.cos.ap-guangzhou.myqcloud.com/螢幕快照 2018-05-05 下午12.16.03.png)
還記得文章開頭的目標麼,接下來我們要建立一個自定義許可權cutome,以及修改active許可權。
建立自定義許可權cutome
cleos -u http://192.168.1.101:8888 set account permission myaccount custom '{"threshold" : 2, "keys" : [{"key": "EOS8EZ2yoiDvk1QsFrjtneesMM23Nk9u3v2uzxZz9iUEN7eVj2P8p","weight": "1"}], "accounts" : [{"permission":{"actor":"ac2","permission":"active"},"weight":1}]}' active
執行成功後再次檢視賬戶資訊
cleos -u http://192.168.1.101:8888 get account myaccount
修改active許可權
cleos -u http://192.168.1.101:8888 set account permission myaccount active '{"threshold" : 2, "keys" : [{"key": "EOS8EZ2yoiDvk1QsFrjtneesMM23Nk9u3v2uzxZz9iUEN7eVj2P8p","weight": "1"}], "accounts" : [{"permission":{"actor":"ac1","permission":"active"},"weight":1}]}' owner
至此,目標順利達成~