如何变更EOS账号的active key和owner key?

如何变更EOS账号的active key和owner key?

## 1,摘要 **【本文目标】** 通过本文学习,可以通过EOS本地环境完成EOS注册账号的active key和owner key的变更。 在EOS账号是其他人代为注册时,私钥往往也被其他人知晓,存在泄漏风险,建议尽快完成变更。 **【前置条件】** 1)参考 [第8课 如何使用开发环境命令行注册EOS靓号?](https://learnblockchain.cn/2018/07/13/ef09a0ce4231) 文章,已完成了靓号的注册和环境搭建。 **【技术收获】** 1) cleos set account permission的使用; ## 2. 实践操作 承接上一课的故事,戈壁创投的徐晨总请辉哥注册个他们公司同名的EOS账号(例如:gobipartners)。 ![](https://img.learnblockchain.cn/2020/02/01_/35029916.jpeg) 近期,戈壁创投决定要投资某个优质区块链项目,准备往gobipartners账号打100万个EOS,作为区块链投资转账总出口账号。徐总突然想起,gobipartners账号的私钥也是辉哥创建的,他可能也保留着该账户的私钥记录,吓出了一身冷汗。 现在徐晨总也知道可以通过一些钱包生成密钥对,这个密钥对只有他自己知晓。 ### 2.1 通过TokenPocket钱包创建密钥对 通过 [TokenPocket官网](https://www.mytokenpocket.vip) 下载钱包版本。 安装后,通过 发现 > EOS助手 > 账号注册 > 密码生成器 完成密钥对的生成。 ![](https://img.learnblockchain.cn/2020/02/01_/464135182.jpg) ![](https://img.learnblockchain.cn/2020/02/01_/543042338.jpg) ![](https://img.learnblockchain.cn/2020/02/01_/601376123.jpg) ### 2.2 密钥导入 徐总来到辉哥的本地EOS环境,让辉哥背过身,亲自把私钥导入辉哥的duncanwang本地钱包。 【说明】此步操作可以在别的任意EOS开发环境完成导入工作。 > cleos wallet import -n duncanwang ### 2.3 权限变更 **1) 查看gobipartners账号信息** > cleos -u [https://node1.eoscannon.io](https://node1.eoscannon.io) get account gobipartners 输出结果表明 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权限为徐总公钥 假设徐总产生的公钥Public key如下: `EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V` 命令格式: > cleos set account permission active '{"threshold":1,"keys":[{"key":"","weight":1}]}' owner **输出结果:** ``` 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已发生变更:** ``` 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 owner '{"threshold":1,"keys":[{"key":"","weight":1}]}' -p @owner **输出结果:** ``` 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. ``` 初步估计是跟主网节点连接处理的时间不够,增加-x 120,把等待时间改为2分钟,就成功了。 **查询确认owner的KEY已发生变更:** ``` 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权限定义 ### 4.1 原生权限-owner和active权限 EOS中,每个账户创建时会自带两个原生权限:owner和active权限。这也是默认的账户权限配置。 **owner权限** owner即代表账户所有权,该权限可进行所有操作,包括更改owner权限,可由一对或多对EOS公私钥或另一账户的某权限实现权限控制。因此,代表着owner权限的EOS公私钥是最重要的,必须冷储藏保管好。 **active权限** active即活跃权限,能进行除更改owner权限以外的所有操作,也是通过一对或多对EOS公私钥或另一账户的某权限实现权限控制。 ### 4.2 自定义权限 除了两个原生权限以外,EOS还支持自定义权限。active权限可以看作是owner权限将除更改owner权限以外的所有权限都任命给了它,比如说转账、投票、购买ram等等。然后基于active权限,我们可以将active的部分权限,比如说投票权,任命给一个自定义权限voting。那么无须owner、active权限所对应的私钥对投票操作进行签名,单单通过voting权限所对应的私钥对投票操作进行签名便可完成投票操作。这就可以将EOS账户的部分操作权限分配给第三方进行,避免了直接给出active权限的私钥,从而实现极其灵活和安全的组织管理方式。 ### 4.3 权重和阈值 在多主体共同控制某一权限的情况下(如多对EOS公私钥共同控制owner权限),如何判定,或者说在何种条件下就拥有了该账户的某一权限?EOS是通过权重和阈值来实现的。账户可给每个主体(如每对EOS公私钥)分配不同的权重,以及拥有该权限的阈值,只有当某些人拥有的公私钥数量所对应的权重之和不低于该权限的阈值,才能拥有该权限,进行相应操作。以下列某账户的权限配置为例进行详细说明: ![](https://img.learnblockchain.cn/2020/02/01_/323293129.jpeg) 其中,该账户的owner权限由拥有【EOS2Ca4o...】和【EOS3Q3bx...】公钥所对应私钥的人共同控制,任何一方都不能单独拥有owner权限。因为双方的权重都为50,而owner权限的阈值为100,因此只有双方达成一致,一起对交易进行签名才能行使owner权限。 而active权限则可由【EOS94x3b...】和【EOS4x112...】任意一方单独行使。 对于自定义权限voting,拥有【EOS7Hn1p...】公钥所对应私钥的人可单独行使,而账户【testaccount1】则需和账户【testaccount2】通过各自的active权限结合起来才能共同行使该账户的voting权限。 ## 5,参考 1) [创建EOS主网账户](https://github.com/eoshackathon/eos_dapp_development_cn/blob/master/docs/create_account_on_mainnet.md) *本故事纯属虚构,辉哥还没有跟徐晨总建立联系。但是戈壁创投的EOS帐号已注册好了,如有需要可转让给徐总。*

1,摘要

【本文目标】 通过本文学习,可以通过EOS本地环境完成EOS注册账号的active key和owner key的变更。 在EOS账号是其他人代为注册时,私钥往往也被其他人知晓,存在泄漏风险,建议尽快完成变更。

【前置条件】 1)参考 第8课 如何使用开发环境命令行注册EOS靓号? 文章,已完成了靓号的注册和环境搭建。

【技术收获】 1) cleos set account permission的使用;

2. 实践操作

承接上一课的故事,戈壁创投的徐晨总请辉哥注册个他们公司同名的EOS账号(例如:gobipartners)。

近期,戈壁创投决定要投资某个优质区块链项目,准备往gobipartners账号打100万个EOS,作为区块链投资转账总出口账号。徐总突然想起,gobipartners账号的私钥也是辉哥创建的,他可能也保留着该账户的私钥记录,吓出了一身冷汗。 现在徐晨总也知道可以通过一些钱包生成密钥对,这个密钥对只有他自己知晓。

2.1 通过TokenPocket钱包创建密钥对

通过 TokenPocket官网 下载钱包版本。 安装后,通过 发现 > EOS助手 > 账号注册 > 密码生成器 完成密钥对的生成。

2.2 密钥导入

徐总来到辉哥的本地EOS环境,让辉哥背过身,亲自把私钥导入辉哥的duncanwang本地钱包。 【说明】此步操作可以在别的任意EOS开发环境完成导入工作。

cleos wallet import -n duncanwang

2.3 权限变更

1) 查看gobipartners账号信息

cleos -u https://node1.eoscannon.io get account gobipartners

输出结果表明 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权限为徐总公钥

假设徐总产生的公钥Public key如下: EOS7Rq86JcZLgPXwZKRGPYUnLayBy7NcBV7FBE7gSNCW3HmGApK9V 命令格式:

cleos set account permission active '{"threshold":1,"keys":[{"key":"","weight":1}]}' owner

输出结果:

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 &lt;= 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已发生变更:

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 owner '{"threshold":1,"keys":[{"key":"","weight":1}]}' -p @owner

输出结果:

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 &lt;= 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.

初步估计是跟主网节点连接处理的时间不够,增加-x 120,把等待时间改为2分钟,就成功了。

查询确认owner的KEY已发生变更:

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权限定义

4.1 原生权限-owner和active权限

EOS中,每个账户创建时会自带两个原生权限:owner和active权限。这也是默认的账户权限配置。 owner权限 owner即代表账户所有权,该权限可进行所有操作,包括更改owner权限,可由一对或多对EOS公私钥或另一账户的某权限实现权限控制。因此,代表着owner权限的EOS公私钥是最重要的,必须冷储藏保管好。 active权限 active即活跃权限,能进行除更改owner权限以外的所有操作,也是通过一对或多对EOS公私钥或另一账户的某权限实现权限控制。

4.2 自定义权限

除了两个原生权限以外,EOS还支持自定义权限。active权限可以看作是owner权限将除更改owner权限以外的所有权限都任命给了它,比如说转账、投票、购买ram等等。然后基于active权限,我们可以将active的部分权限,比如说投票权,任命给一个自定义权限voting。那么无须owner、active权限所对应的私钥对投票操作进行签名,单单通过voting权限所对应的私钥对投票操作进行签名便可完成投票操作。这就可以将EOS账户的部分操作权限分配给第三方进行,避免了直接给出active权限的私钥,从而实现极其灵活和安全的组织管理方式。

4.3 权重和阈值

在多主体共同控制某一权限的情况下(如多对EOS公私钥共同控制owner权限),如何判定,或者说在何种条件下就拥有了该账户的某一权限?EOS是通过权重和阈值来实现的。账户可给每个主体(如每对EOS公私钥)分配不同的权重,以及拥有该权限的阈值,只有当某些人拥有的公私钥数量所对应的权重之和不低于该权限的阈值,才能拥有该权限,进行相应操作。以下列某账户的权限配置为例进行详细说明:

其中,该账户的owner权限由拥有【EOS2Ca4o...】和【EOS3Q3bx...】公钥所对应私钥的人共同控制,任何一方都不能单独拥有owner权限。因为双方的权重都为50,而owner权限的阈值为100,因此只有双方达成一致,一起对交易进行签名才能行使owner权限。 而active权限则可由【EOS94x3b...】和【EOS4x112...】任意一方单独行使。 对于自定义权限voting,拥有【EOS7Hn1p...】公钥所对应私钥的人可单独行使,而账户【testaccount1】则需和账户【testaccount2】通过各自的active权限结合起来才能共同行使该账户的voting权限。

5,参考

1) 创建EOS主网账户

本故事纯属虚构,辉哥还没有跟徐晨总建立联系。但是戈壁创投的EOS帐号已注册好了,如有需要可转让给徐总。

  • 发表于 2018-07-16 18:15
  • 阅读 ( 2562 )
  • 学分 ( 5 )
  • 分类:EOS

评论