愿码(ChainDesk.CN):EOS钱包开发 五使用cleos工具管理账号权限
在上一篇文章中,我們創(chuàng)建了一個(gè)新錢包并導(dǎo)入了一對(duì)公私鑰,但是該錢包中并沒有賬號(hào),在EOS區(qū)塊鏈中創(chuàng)建賬號(hào)是很扯蛋的事,必須使用已有的EOS賬號(hào)才能創(chuàng)建新的EOS賬號(hào),使創(chuàng)建賬號(hào)的時(shí)候便于扣費(fèi),因?yàn)閯?chuàng)建的賬號(hào)數(shù)據(jù)會(huì)占用區(qū)塊鏈生產(chǎn)節(jié)點(diǎn)的內(nèi)存資源,所以每創(chuàng)建一個(gè)EOS新賬號(hào)都需要其他EOS賬號(hào)消耗一定量的EOS來(lái)幫忙創(chuàng)建。那么我們找誰(shuí)來(lái)創(chuàng)建呢?誰(shuí)又有EOS賬號(hào)呢?
- EOS主網(wǎng)中,最初始的EOS賬號(hào)由EOS主網(wǎng)在映射階段創(chuàng)建完成。
- 在本地網(wǎng)絡(luò)中,最初始的EOS賬號(hào)在系統(tǒng)啟動(dòng)的時(shí)候就自動(dòng)被創(chuàng)建了一個(gè)超級(jí)用戶——eosio。
我們是在本地網(wǎng)絡(luò)中進(jìn)行開發(fā),所以我們將使用eosio超級(jí)賬號(hào)去創(chuàng)建新賬號(hào)。
一、創(chuàng)建賬號(hào)
下面我們將要?jiǎng)?chuàng)建賬號(hào)lixu。
我們錢包中是沒有eosio賬號(hào)的,但是可以通過命令行工具cleos去創(chuàng)建賬號(hào)。在環(huán)境搭建的一篇文章的我們?cè)赿efault錢包中已經(jīng)能夠使用eosio賬號(hào)了,創(chuàng)建的新賬號(hào)由錢包應(yīng)用程序中新建的mywallet1錢包中的私鑰對(duì)控制,公鑰為EOS8RPRLzktF2fHH14R3HDcsvVnq9m2XGQUiZ2EjvneqqkuFZdqDy,私鑰是5HrqHYGMPn36zk3mqNU1tmuQrD2SQHxCGdCMjBFBkJ815tjxmS2。
?
第一步:我們須解鎖eosio賬號(hào)所在的錢包。
?
?
第二步:查看創(chuàng)建賬號(hào)命令的說明cleos create account。
根據(jù)輸出可知:
- 創(chuàng)建賬號(hào)需要購(gòu)買ram、帶寬,在本地網(wǎng)絡(luò)中可以不用購(gòu)買,無(wú)限制的使用資源,在稍后我們驗(yàn)證這個(gè)說法。
- 創(chuàng)建賬號(hào)的完整命令是cleos create account [OPTIONS] creator name OwnerKey [ActiveKey]。
- 在Positionals結(jié)構(gòu)中包含四個(gè)字?jǐn)?#xff1a;
- creator TEXT(必填):創(chuàng)建者賬號(hào)的名稱。
- name TEXT(必填) :新賬號(hào)的名稱。
- OwnerKey TEXT(必填):新賬號(hào)的owner權(quán)限的公鑰。
- ActiveKey TEXT(可選):新賬號(hào)的active權(quán)限的公鑰,默認(rèn)與owner權(quán)限的公鑰一致。
- 在Options結(jié)構(gòu)中有很多可選參數(shù),介紹一下比較常用的幾個(gè):
- -d:是不廣播到網(wǎng)絡(luò)。
- -j:是返回為json格式的數(shù)據(jù)。
- -s:是交易數(shù)據(jù)不經(jīng)過簽名。
- -p:是指定簽名的賬號(hào)以及權(quán)限,默認(rèn)是active權(quán)限。
- -h:是幫助命令。
第三步:我們創(chuàng)建的第一個(gè)賬號(hào)的owner權(quán)限和active權(quán)限都使用前面的這一對(duì)公私鑰控制即可,新賬號(hào)名稱為lixu,所以創(chuàng)建賬號(hào)的完整命令如下:
?
?
二、新增權(quán)限
下面我們將要新增賬號(hào)lixu的voting權(quán)限。
現(xiàn)在賬號(hào)liux的有自帶的兩個(gè)原生權(quán)限:owner權(quán)限與active權(quán)限,owner擁有很多功能給的操作權(quán)限,如:轉(zhuǎn)賬、投票、購(gòu)買ram等等,我們可以將其中一個(gè)或多個(gè)功能,比如將投票權(quán)任命給一個(gè)自定義權(quán)限voting。那么無(wú)須owner、active權(quán)限所對(duì)應(yīng)的私鑰對(duì)投票操作進(jìn)行簽名,單單通過voting權(quán)限所對(duì)應(yīng)的私鑰對(duì)投票操作進(jìn)行簽名便可完成投票操作。
?
第一步:查看賬號(hào)lixu的權(quán)限分配,使用命令cleos get account lixu。
?
可知在本地網(wǎng)絡(luò)中可以無(wú)限制的使用資源,我們現(xiàn)在只關(guān)心“permissions”的內(nèi)容,在后面我們會(huì)切換到真實(shí)的測(cè)試網(wǎng)絡(luò)中開發(fā),然后重點(diǎn)介紹后面各項(xiàng)的含義與作用。
第二步:查看新增權(quán)限命令的說明cleos set account permission。
?
根據(jù)輸出可知:
- 創(chuàng)建賬號(hào)的完整命令是cleos set account permission [OPTIONS] account permission authority [parent]。
- 在Positionals結(jié)構(gòu)中包含四個(gè)字?jǐn)?#xff1a;
- account TEXT(必填):設(shè)置/刪除權(quán)限的帳戶。
- permission TEXT(必填) :設(shè)置/刪除權(quán)限的權(quán)限名稱。
- authority TEXT(必填):若刪除則是NULL、創(chuàng)建/更新則是公鑰、JSON字符串或者文件名。
- parent TEXT(可選):該權(quán)限的父權(quán)限的權(quán)限名,默認(rèn)為active。
- 在Options結(jié)構(gòu)中的可選參數(shù)與之前介紹的一樣,
第三步:新建一對(duì)公私鑰控制voting權(quán)限
?
第五步:新增權(quán)限后再次查看賬號(hào)lixu的權(quán)限分配。
到此我們已經(jīng)完成了給一個(gè)賬號(hào)新建權(quán)限并指定控制的公鑰的功能。
?
三、新增權(quán)限控制的主體
1. 如何新增權(quán)限控制的主體
新增權(quán)限控制的主體有三種方式:公私鑰對(duì)、賬號(hào)、延遲,這里我們只介紹常見的前面兩種。
下面我們新增賬號(hào)lixu的active權(quán)限控制的主體。
初始時(shí)每個(gè)權(quán)限只有一個(gè)主體(一對(duì)公私鑰),我們可以修改權(quán)限由多個(gè)主體控制,這樣做的目的在于讓多個(gè)主體共同控制一個(gè)權(quán)限的功能,即多簽,只有當(dāng)主體(一對(duì)公私鑰)的權(quán)重大于等于閥值才能擁有該權(quán)限進(jìn)行相應(yīng)操作。
修改權(quán)限控制的主體需要傳遞的是json字符串或者json文件,那么json字符串的數(shù)據(jù)結(jié)構(gòu)是怎么樣的呢?如下:
?
每個(gè)字?jǐn)嗟慕忉屓缦?#xff1a;
?
我們可以選擇性的設(shè)置權(quán)限的控制權(quán),但是必須要按照如下規(guī)則進(jìn)行修改:
- 嚴(yán)格按照上面的json數(shù)據(jù)結(jié)構(gòu)設(shè)置
- 修改的公鑰、賬號(hào)必須按照從小到大進(jìn)行排序,如:EOS67Z…需在EOS7dm簽名。
- 所有控制體的權(quán)重的和必須大于等于閥值。
2. 新增權(quán)限控制的主體:公私鑰對(duì)
第一步:新建一對(duì)公私鑰作為active權(quán)限的另一個(gè)主體。
?
第三步:新增權(quán)限控制的主體后再次查看賬號(hào)lixu的權(quán)限分配。
?
現(xiàn)在兩個(gè)主體都可以操作active權(quán)限的功能,因?yàn)樗鼈兊臋?quán)重等于閥值。
3. 新增權(quán)限控制的主體:賬號(hào)
使用tester的owner權(quán)限作為賬號(hào)lixu的active權(quán)限的一個(gè)主體,分配的權(quán)重仍為1,完整的命令如下
四、修改閥值
接下來(lái)我們通過修改賬號(hào)lixu的active權(quán)限的閥值為2,實(shí)現(xiàn)多簽的功能。
第一步:測(cè)試賬號(hào)lixu的active權(quán)限的
EOS8RPRLzktF2fHH14R3HDcsvVnq9m2XGQUiZ2EjvneqqkuFZdqDy主體是否擁有它的(active)功能。
?
因此,現(xiàn)在必須同時(shí)擁有active的兩個(gè)主體才能使用active權(quán)限的功能,因?yàn)閮蓚€(gè)主體的權(quán)重分別為1,加起來(lái)才等于acrive權(quán)限的閥值2。現(xiàn)在有哪些辦法可以使用active權(quán)限呢?
- 使用-p lixu@owner簽名。
- 修改改主體的權(quán)重大于等于active權(quán)限的閥值。
- 將另外個(gè)私鑰導(dǎo)入到該錢包。
?
五、修改權(quán)重
下面我們修改
EOS8RPRLzktF2fHH14R3HDcsvVnq9m2XGQUiZ2EjvneqqkuFZdqDy
主體的權(quán)重為2。
現(xiàn)在該主體的權(quán)重為1不能使用active的功能,所以將它的權(quán)重改為與active的閥值一樣,以使它能使用該權(quán)限。但是想要修改active的權(quán)限,需要active簽名,或者它的父權(quán)限owner簽名,那么只好使用owner簽名了,否則修改失敗。
完整的命令如下:
?
此時(shí)active的閥值為2,另外一個(gè)主體EOS7dmF...權(quán)重還是1,不能單獨(dú)使用active,必須與主體
EOS8RPR...共同簽名方可使用。
?
六、多重簽名
前面的步驟都是單簽名完成的操作,如何實(shí)現(xiàn)多簽名呢?就是使用多個(gè)私鑰一起對(duì)交易進(jìn)行簽名。那么下面我們重新配置一下該賬號(hào)的active權(quán)限。
現(xiàn)在active的三個(gè)主體的權(quán)重都小于閥值,不能單獨(dú)使用active權(quán)限。上面介紹了有三種辦法可以使用active權(quán)限,第一、二種已經(jīng)使用過了,并且不是沒有使用到多重簽名,接下來(lái)我們使用最后種方式——將另外個(gè)私鑰導(dǎo)入到該錢包來(lái)實(shí)現(xiàn)多重簽名。
需要導(dǎo)入tester的owner權(quán)限的私鑰到mywallet1錢包。現(xiàn)在mywallet1錢包就擁有權(quán)重為2的主體
EOS8RPR...,與權(quán)重為1的主體test的owner權(quán)限,主體權(quán)重就一共為3等于了active閥值,然后就可以使用多重簽名操作active權(quán)限了。
?
七、總結(jié)
每個(gè)權(quán)限都會(huì)有一個(gè)閥值,初始時(shí)為1。權(quán)限下的每對(duì)公私鑰都會(huì)有一個(gè)權(quán)重,初始時(shí)每個(gè)權(quán)限只有一對(duì)公私鑰且權(quán)重為1。后續(xù)賬戶可以修改權(quán)限的閥值,可以對(duì)每個(gè)主體(即每對(duì)EOS公私鑰或賬號(hào))分配不同的權(quán)重,還可以修改權(quán)限由多個(gè)主體管理。只有當(dāng)公私鑰的權(quán)重大于等于閥值才能擁有該權(quán)限進(jìn)行相應(yīng)操作。
版權(quán)聲明:博客中的文章版權(quán)歸博主所有,未經(jīng)授權(quán)禁止轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系作者(微信:lixu1770105)取得同意并注明出處。
本文地址:?https://chaindesk.cn/witbook/2/22
?
愿碼(ChainDesk.CN)——連接每個(gè)程序員的故事
“愿碼”以線上社區(qū)線下實(shí)戰(zhàn)型人才加速器相結(jié)合,立志打造全球最大的IT實(shí)戰(zhàn)型多元化復(fù)合型人才生態(tài)圈。
免費(fèi)技術(shù)交流群:263270946
技術(shù)提升、快速轉(zhuǎn)型請(qǐng)關(guān)注微信公眾號(hào):愿碼
?
總結(jié)
以上是生活随笔為你收集整理的愿码(ChainDesk.CN):EOS钱包开发 五使用cleos工具管理账号权限的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机语言之c语言
- 下一篇: ThinkPHP--自动验证