在上一篇 EOS的命令行程序和工具超详细实战演习
<http://mp.weixin.qq.com/s?__biz=MzA5NDAxNzIzNg==&mid=2450004246&idx=1&sn=80efa6a734165742f2088799090c2dbe&chksm=87a9baadb0de33bb3f6a24d653d80344afab5026132f4e61723939ffdedf8902128a0d6f6265&scene=21#wechat_redirect>
中。我们学习了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
权限的权重与阈值
单签名账户 (默认权限配置的账户)
owner 和 active 权限分别有一个值为1的阈值。
owner 和* active 所绑定的 公钥* , 则分别有一个值为1的权重。
阈值和权重, 概念越来越多,怎么来理解呢。
举个例子来讲吧,把* owner* 这个权限比作一扇门,打开这扇门需要一把正确的钥匙。 而 owner 所绑定的那个公钥 对应的那把 私钥 就是正确的钥匙。
因此单签名账户 就是 权限的 阈值 和钥匙的 权重 都为1的一种账户类型。使用某个权限,只需要一把对应的私钥就行了。
画个表格理解一下:
多重签名账户
顾名思义,就是一个权限绑定了多个账户或公钥。
使用一个权限,可能需要不只一把钥匙的签名了。也可能是两把、三把、五把。
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
原文首发于币乎
以下是我们的社区介绍,欢迎各种合作、交流、学习:)
热门工具 换一换