一起学习EOS|深入理解EOS的账户及其权限机制(附代码)

image

在上一篇 EOS的命令行程序和工具超详细实战演习 中。我们学习了EOS钱包的工作原理。学会了如何自己创建私钥公钥,以及如何用钱包管理私钥。

今天,继续引入EOS中一个非常重要的概念:账户。最终,我们会把这些元素放在一起理解。EOS钱包 、 私钥公钥 、 账户, 三者组合起来究竟是如何保护我们账户中资产的安全的。

1

钱 包

在讲账户之前,先来回顾下上篇的钱包

  • 钱包是一个用来存储私钥的地方。

  • 使用钱包之前,需要先打开钱包 cleos wallet open -n wallet-name

  • 打开之后的钱包,有两种状态: 解锁状态锁定状态

  • 钱包,是一个超高强度加密的文件。失去钱包密码的话,意味着你丢失了钱包中的私钥。

2

账 户

账户 , 你可以把它当作用户名,代表你身份的唯一表示。账户 有以下几个特点:

  • 是一个人类可读的字符串,创建之后,存储在区块链中。

  • 最多12个字符

  • 由账户创建者自己选择命名。

账户 是用来干嘛的呢?

简单来说吧,账户 用来授权 事务 的执行 (transaction这词 思来想去 若翻译为交易不太对,翻译为事务准确一点)。

3

事 务

事务(transaction) 这个术语,我想先好好解释下, * transaction*是一个区块链当中非常常见的术语,如果在比特币里,transaction 理解为交易,一点毛病都没有,因为比特币具有比较单纯的数字货币属性,每一条transaction(事务)其实就是仅仅是记账。所以事务即交易,交易即事务,没有其他的歧义。

到了区块链2.0时代,比如说我们的以太坊,区块链之上出现了 智能合约。 自从有了智能合约,区块链就不再仅仅是为数字货币记账了。记账的时候,还能够执行* 智能合约* 中定义的具有逻辑的代码,代码的执行成果,决定了最终如何“记账” 。 此时* transaction 若翻译为交易,还准确么? 明显不准确了, 此时的 transaction* ,应该是一个事务。

比方说,我向一个名为 打豆豆* 智能合约* 发一个请求,打豆豆 智能合约 收到请求之后,执行合约代码,会随机出现两种结果, 打了豆豆被豆豆打 ,若执行结果是 打了豆豆 则奖励10个 “豆币”,反正如果结果是 被豆豆打 ,则扣除5 “豆币”。合约执行完,生成的结果,广播给区块链,被区块链上的矿工们打包确认。这个transaction(事务) 便算是完成了。

这样的一个流程, 在区块链中,就称之为 事务

4

回归正题

回到账户 的正题上面。讲完了事务 之后。账户 是用来授权* 事务* 的执行的。 这样说可以理解了吧。 如果还有点模糊不清,没关系,正题还没开始,下面继续深入探讨:

账户 在EOS的设计里,允许被分配给个人或团体。也即一个账户 它可能属于某个人,也可能属于 某个组织下的一群人 。 这个是取决于 权限配置 的。权限严格定义了谁拥有资格使用这个账户做什么事。所以说,一个账户的重要组成部分,是它的权限部分。下面就来讲权限如何配置

5

权限配置

首先当一个账户创建的时候,具备了两种基本权限。每个权限绑定到一个公钥上(单签名账户)或多个公钥上(多签名账户),除了绑定公钥也可以绑定到另一个有效的账户上:

  • owner : 账号主权限, 声明的这个账号的归属。只有极少数事务需要使用到 owner权限。 建议把拥有这个权限的私钥进行冷存储。不要分享给任何人。 owner 可以用来恢复其他权限。

  • active: 活动权限,顾名思议,这个权限 ,一般用来做一些转账、投票、发起事务等常规操作。

除了以上两种默认权限,还可以对账户自定义新的权限(计划在未来的账户管理软件中加入支持)。 这种权限的可扩展性,非常灵活,给软件开发者提供了很多可能的使用场景。

6

权限的权重与阈值

单签名账户 (默认权限配置的账户)

owneractive 权限分别有一个值为1的阈值

owner* active 所绑定的 公钥* , 则分别有一个值为1的权重

阈值权重, 概念越来越多,怎么来理解呢。

举个例子来讲吧,把* owner* 这个权限比作一扇门,打开这扇门需要一把正确的钥匙。 而 owner 所绑定的那个公钥 对应的那把 私钥 就是正确的钥匙。

因此单签名账户 就是 权限的 阈值 和钥匙的 权重 都为1的一种账户类型。使用某个权限,只需要一把对应的私钥就行了。

画个表格理解一下:
1.jpg

多重签名账户

顾名思义,就是一个权限绑定了多个账户或公钥。

使用一个权限,可能需要不只一把钥匙的签名了。也可能是两把、三把、五把。

2.jpg

owner权限 被绑到两个*上,分别是@bob 和 @alice, 此时 owner权限* 的阈值 是2 , 而@bob 和 @alice 的权重都只有1,意味着,想使用 owner权限 需要@bob和@alice合力一起签名。权重之和才能等于owner权限阈值。才能使用这个权限。

场景理解

有一个藏有巨大机密的保险柜,想打开它,需要两个掌管钥匙的重要人物的,两个人同时来开,缺一不可。

owner权限 被绑到两个账户上,分别是@bob 和 @alice, 此时* owner权限 阈值* 是1 ,而@bob 和 @alice 的权重也是1,意味着,这意味着,无论是@bob还是@alice,都可以单独使用这个权限。

场景理解

有一个藏有小型保险柜,里面装了些钱,想打开它,只要一把钥匙就行了,@bob持有钥匙,@bob一个人也能打开这小保险柜,不需要经过@alice同意。@alice也持有另一把有效钥匙,@alice一个人也能打开这小保险柜,不需要经过@bob同意。

public权限 这是个自定义权限,绑定到了3个账户上,分别是@bob 和 @alice,@stacy 。 public权限阈值 是2 。

所有谁有资格使用权限呢? 显然,权重为2的@bob可以使用,权重为2的@stacy也可以使用。

@alice**权重只有1,怎么办? 意味着不可以使用单独使用,因为权重小于阈值,@alice此时可以请求@bob批准,@bob同意的话,那么@bob的权重2加进来,权重之和为3 大于 阈值2** 了。 事务得以执行。

7

总 结

向EOS区块链发起一些事务 比如说转账。需要得到 账户 的授权。

账户 的授权是如何授权的? 看上面的讲解我们知道了,账户的权限里 有一个阈值属性,当你的解锁状态的钱包中的有一把私钥能对应到那个权限所绑定的公钥上,而且权重刚好大于等于阈值时,那么就能成功签名,向区块链发送事务。

本文内容作者:HiBlock区块链社区“一起写笔记”小伙伴——jc1991

原文首发于币乎

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

image

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值