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

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 <= 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公私钥)分配不同的权重,以及拥有该权限的阈值,只有当某些人拥有的公私钥数量所对应的权重之和不低于该权限的阈值,才能拥有该权限,进行相应操作。以下列某账户的权限配置为例进行详细说明:

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

5,参考

1) 创建EOS主网账户

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

JAVA实现的支付宝扫描二维码支付

前期酝酿准备 最近项目中要上线支付功能、前段时间刚开发完微信的扫码支付、不得不说微信开发团队的文档真是一个烂。但总算是对照着API把功能交付上线了。 前几天公...

60460
来自专栏Java帮帮-微信公众号-技术文章全总结

JAVA实现的支付宝扫描二维码支付

最近项目中要上线支付功能、前段时间刚开发完微信的扫码支付、不得不说微信开发团队的文档真是一个烂。但总算是对照着API把功能交付上线了。

1.3K10
来自专栏FreeBuf

“奇幻熊”(APT28)组织最新攻击

近日腾讯御见威胁情报中心在监测Fancy Bear“奇幻熊”组织的攻击活动过程中,发现了其使用的最新攻击样本。下文将详细披露该组织的攻击手法,和各企业一起共同抵...

30580
来自专栏FreeBuf

WannaCry勒索病毒详细解读

2017年5月12日,WannaCry蠕虫通过MS17-010漏洞在全球范围大爆发,感染了大量的计算机,该蠕虫感染计算机后会向计算机中植入敲诈者病毒,导致电脑大...

683100
来自专栏NetCore

微信公众平台快速开发框架 For Core 2.0 beta –JCSoft.WX.Core 5.2.0 beta发布

写在前面 最近比较忙,都没有好好维护博客,今天拿个半成品来交代吧。 记不清上次关于微信公众号快速开发框架(简称JCWX)的更新是什么时候了,自从更新到支持.Ne...

30580
来自专栏区块链入门

第8课 如何使用开发环境命令行注册EOS靓号?

【本文目标】 通过本文学习,程序员可以在EOS本地环境完成主网心意的12位EOS账号注册。 不愿意折腾的其他人员可参考文档《第2课 不懂技术,如何抢注热门E...

15420
来自专栏FreeBuf

技术剖析:海莲花OceanLotus Encryptor样本分析

前言 上周,360发布了海莲花的报告,数据收集,分析,解释,加工方面很能让人折服,但是看了其对所谓OceanLotus Encryptor样本的分析,和我自己观...

23570
来自专栏FreeBuf

ATBroker.exe:一个被病毒利用的微软进程

一般情况下,病毒会利用添加启动项、计划任务、服务的方式来实现开机启动,达到留存和活跃的目的。然而,利用atbroker.exe系统进程,实现病毒开机启动的方式并...

18130
来自专栏玄魂工作室

CTF实战23 木马攻击技术

值得注意的是,木马屠城记并非于古希腊诗人荷马的两部著作伊利亚特与奥德赛里记载,而是在罗马帝国时期的诗人维吉尔所写的史诗《埃涅阿斯纪》中, 才第一次被记载

17120
来自专栏跟着阿笨一起玩NET

推荐+1置顶+1(分享、讨论、实现) 通用软件注册功能之建立有效的软件保护机制

         众所周知,一些共享软件往往提供给使用者的是一个功能不受限制的限时使用版,在试用期内使用者可以无限制的使用软件的全部功能(只是可能会出现提示使用...

11310

扫码关注云+社区

领取腾讯云代金券