第9課 如何變更EOS賬號的active key和owner key?

1,摘要

【本文目標】
通過本文學(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ū)塊鏈項目,準備往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

查詢確認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分鐘,就成功了。

查詢確認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)限。這也是默認的賬戶權(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)限配置為例進行詳細說明:

其中,該賬戶的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,參考

1) 創(chuàng)建EOS主網(wǎng)賬戶

本故事純屬虛構(gòu),輝哥還沒有跟徐晨總建立聯(lián)系。但是戈壁創(chuàng)投的EOS帳號已注冊好了,如有需要可轉(zhuǎn)讓給徐總。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容