1,摘要
【本文目標(biāo)】
通過本文學(xué)習(xí)朋沮,可以通過EOS本地環(huán)境完成EOS注冊賬號的active key和owner key的變更荆虱。
在EOS賬號是其他人代為注冊時,私鑰往往也被其他人知曉朽们,存在泄漏風(fēng)險,建議盡快完成變更诉位。
【前置條件】
1)參考第8課 如何使用開發(fā)環(huán)境命令行注冊EOS靚號骑脱?文章,已完成了靚號的注冊和環(huán)境搭建苍糠。
【技術(shù)收獲】
1) cleos set account permission的使用叁丧;
2. 實踐操作
承接上一課的故事,戈壁創(chuàng)投的徐晨總請輝哥注冊個他們公司同名的EOS賬號(例如:gobipartners)岳瞭。近期拥娄,戈壁創(chuàng)投決定要投資某個優(yōu)質(zhì)區(qū)塊鏈項目,準(zhǔn)備往gobipartners賬號打100萬個EOS瞳筏,作為區(qū)塊鏈投資轉(zhuǎn)賬總出口賬號稚瘾。徐總突然想起,gobipartners賬號的私鑰也是輝哥創(chuàng)建的姚炕,他可能也保留著該賬戶的私鑰記錄摊欠,嚇出了一身冷汗。
現(xiàn)在徐晨總也知道可以通過一些錢包生成密鑰對柱宦,這個密鑰對只有他自己知曉些椒。
2.1 通過TokenPocket錢包創(chuàng)建密鑰對
通過TokenPocket官網(wǎng)下載錢包版本。
安裝后掸刊,通過 發(fā)現(xiàn) > EOS助手 > 賬號注冊 > 密碼生成器 完成密鑰對的生成免糕。
2.2 密鑰導(dǎo)入
徐總來到輝哥的本地EOS環(huán)境,讓輝哥背過身忧侧,親自把私鑰導(dǎo)入輝哥的duncanwang本地錢包石窑。
【說明】此步操作可以在別的任意EOS開發(fā)環(huán)境完成導(dǎo)入工作。
cleos wallet import <新的私鑰> -n duncanwang
2.3 權(quán)限變更
1) 查看gobipartners賬號信息
cleos -u https://node1.eoscannon.io get account gobipartners
輸出結(jié)果表明 owner key 和 active key還是輝哥的密鑰對苍柏。
duncanwang@duncanwang:~$ cleos -u https://node1.eoscannon.io get account gobipartners
permissions:
owner 1: 1 EOS8gaYL4uHyAiZjviwNJ8CdY31xikYtQfexyUfkNUnDqhNpnYXQR
active 1: 1 EOS8gaYL4uHyAiZjviwNJ8CdY31xikYtQfexyUfkNUnDqhNpnYXQR
memory:
quota: 7.959 KiB used: 2.926 KiB
net bandwidth:
delegated: 0.1000 EOS (total staked delegated to account from others)
used: 0 bytes
available: 55.92 KiB
limit: 55.92 KiB
cpu bandwidth:
delegated: 0.1000 EOS (total staked delegated to account from others)
used: 0 us
available: 10.9 ms
limit: 10.9 ms
2.4 變更賬戶active權(quán)限為徐總公鑰
假設(shè)徐總產(chǎn)生的公鑰Public key如下:EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V
命令格式:
cleos set account permission <轉(zhuǎn)讓賬戶名> active '{"threshold":1,"keys":[{"key":"<對方公鑰>","weight":1}]}' owner
輸出結(jié)果:
duncanwang@duncanwang:~$ cleos -u https://node1.eoscannon.io set account permission gobipartners active '{"threshold":1,"keys":[{"key":"EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V","weight":1}]}' owner
executed transaction: 0b7ab9fe92413e6b4b5d25578afdef81438c73adac015972ce56f59c570034e9 160 bytes 1317 us
# eosio <= eosio::updateauth {"account":"gobipartners","permission":"active","parent":"owner","auth":{"threshold":1,"keys":[{"key...
warning: transaction executed locally, but may not be confirmed by the network yet
查詢確認(rèn)active的KEY已發(fā)生變更:
duncanwang@duncanwang:~$ cleos -u https://node1.eoscannon.io get account gobipartners
permissions:
owner 1: 1 EOS8gaYL4uHyAiZjviwNJ8CdY31xikYtQfexyUfkNUnDqhNpnYXQR
active 1: 1 EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V
memory:
quota: 7.959 KiB used: 2.926 KiB
net bandwidth:
delegated: 0.1000 EOS (total staked delegated to account from others)
used: 161 bytes
available: 55.76 KiB
limit: 55.92 KiB
cpu bandwidth:
delegated: 0.1000 EOS (total staked delegated to account from others)
used: 1.122 ms
available: 9.779 ms
limit: 10.9 ms
2.5 變更賬戶owner為徐總公鑰
命令格式:
cleos set account permission <轉(zhuǎn)讓賬戶名> owner '{"threshold":1,"keys":[{"key":"<對方公鑰>","weight":1}]}' -p <轉(zhuǎn)讓賬戶名>@owner
輸出結(jié)果:
duncanwang@duncanwang:~$ cleos -u https://node1.eoscannon.io set account permission -x 120 gobipartners owner '{"threshold":1,"keys":[{"key":"EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V","weight":1}]}' -p gobipartners@owner
executed transaction: ed1593fee153baa7b02e1e3e1155e732c3e7db4fbb3fd50ff73b0de1a04d5831 160 bytes 1186 us
# eosio <= eosio::updateauth {"account":"gobipartners","permission":"owner","parent":"","auth":{"threshold":1,"keys":[{"key":"EOS...
warning: transaction executed locally, but may not be confirmed by the network yet
【問題】
輸入命令提示錯誤尼斧,信息如下:
duncanwang@duncanwang:~$ cleos set account permission gobipartners owner '{"threshold":1,"keys":[{"key":"EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V","weight":1}]}' -p gobipartners@owner
Error 3090003: provided keys, permissions, and delays do not satisfy declared authorizations
Ensure that you have the related private keys inside your wallet and your wallet is unlocked.
初步估計是跟主網(wǎng)節(jié)點連接處理的時間不夠,增加-x 120试吁,把等待時間改為2分鐘棺棵,就成功了楼咳。
查詢確認(rèn)owner的KEY已發(fā)生變更:
duncanwang@duncanwang:~$ cleos -u https://node1.eoscannon.io get account gobipartners
permissions:
owner 1: 1 EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V
active 1: 1 EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V
memory:
quota: 7.959 KiB used: 2.926 KiB
net bandwidth:
delegated: 0.1000 EOS (total staked delegated to account from others)
used: 318 bytes
available: 55.61 KiB
limit: 55.92 KiB
cpu bandwidth:
delegated: 0.1000 EOS (total staked delegated to account from others)
used: 1.628 ms
available: 9.273 ms
limit: 10.9 ms
4, 賬戶owner和active權(quán)限定義
4.1 原生權(quán)限-owner和active權(quán)限
EOS中烛恤,每個賬戶創(chuàng)建時會自帶兩個原生權(quán)限:owner和active權(quán)限母怜。這也是默認(rèn)的賬戶權(quán)限配置。
owner權(quán)限
owner即代表賬戶所有權(quán)缚柏,該權(quán)限可進行所有操作苹熏,包括更改owner權(quán)限,可由一對或多對EOS公私鑰或另一賬戶的某權(quán)限實現(xiàn)權(quán)限控制币喧。因此轨域,代表著owner權(quán)限的EOS公私鑰是最重要的,必須冷儲藏保管好杀餐。
active權(quán)限
active即活躍權(quán)限干发,能進行除更改owner權(quán)限以外的所有操作,也是通過一對或多對EOS公私鑰或另一賬戶的某權(quán)限實現(xiàn)權(quán)限控制史翘。
4.2 自定義權(quán)限
除了兩個原生權(quán)限以外枉长,EOS還支持自定義權(quán)限。active權(quán)限可以看作是owner權(quán)限將除更改owner權(quán)限以外的所有權(quán)限都任命給了它琼讽,比如說轉(zhuǎn)賬必峰、投票、購買ram等等钻蹬。然后基于active權(quán)限吼蚁,我們可以將active的部分權(quán)限,比如說投票權(quán)问欠,任命給一個自定義權(quán)限voting桂敛。那么無須owner、active權(quán)限所對應(yīng)的私鑰對投票操作進行簽名溅潜,單單通過voting權(quán)限所對應(yīng)的私鑰對投票操作進行簽名便可完成投票操作术唬。這就可以將EOS賬戶的部分操作權(quán)限分配給第三方進行,避免了直接給出active權(quán)限的私鑰滚澜,從而實現(xiàn)極其靈活和安全的組織管理方式粗仓。
4.3 權(quán)重和閾值
在多主體共同控制某一權(quán)限的情況下(如多對EOS公私鑰共同控制owner權(quán)限),如何判定设捐,或者說在何種條件下就擁有了該賬戶的某一權(quán)限借浊?EOS是通過權(quán)重和閾值來實現(xiàn)的。賬戶可給每個主體(如每對EOS公私鑰)分配不同的權(quán)重萝招,以及擁有該權(quán)限的閾值蚂斤,只有當(dāng)某些人擁有的公私鑰數(shù)量所對應(yīng)的權(quán)重之和不低于該權(quán)限的閾值,才能擁有該權(quán)限槐沼,進行相應(yīng)操作曙蒸。以下列某賬戶的權(quán)限配置為例進行詳細(xì)說明:
其中捌治,該賬戶的owner權(quán)限由擁有【EOS2Ca4o...】和【EOS3Q3bx...】公鑰所對應(yīng)私鑰的人共同控制,任何一方都不能單獨擁有owner權(quán)限纽窟。因為雙方的權(quán)重都為50肖油,而owner權(quán)限的閾值為100,因此只有雙方達成一致臂港,一起對交易進行簽名才能行使owner權(quán)限森枪。
而active權(quán)限則可由【EOS94x3b...】和【EOS4x112...】任意一方單獨行使。
對于自定義權(quán)限voting审孽,擁有【EOS7Hn1p...】公鑰所對應(yīng)私鑰的人可單獨行使县袱,而賬戶【testaccount1】則需和賬戶【testaccount2】通過各自的active權(quán)限結(jié)合起來才能共同行使該賬戶的voting權(quán)限。
5佑力,參考
本故事純屬虛構(gòu)显拳,輝哥還沒有跟徐晨總建立聯(lián)系。但是戈壁創(chuàng)投的EOS帳號已注冊好了搓萧,如有需要可轉(zhuǎn)讓給徐總。