1. 程式人生 > >EOSIO開發(六)- 賬戶之實戰篇

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_keyactive_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合約中的newaccountaction,引數是{...}

繼續建立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

至此,目標順利達成~

系列文章

參考資料

博文地址