前言
EOS的账户和权限系统设计的比较复杂,但扩展性相当好。与比特币或以太坊不同,最明显的特点就是支持自定义账户权限和多签名机制。有必要单独用篇文章进行说明。
本篇内容大部分翻译自官方文档
官方文档:
https://developers.eos.io/eosio-nodeos/docs/accounts-and-permissions
关于
wallet
和key
的说明见这篇文章
EOS开发(三)在私链创建管理钱包、生成导入密钥对、创建账户,本篇着重说明account
和Permissions
概述
账户是储存在区块链上的一个人类可读的标识。每个账户都有两个默认权限,称为owner
和active
。开发者们也可以提出自定义名称的权限。每个权限的使用都有一个门槛,必须和其签署交易要求的最低签署人数相匹配(这句话不好理解,后面会有例子说明)。
授权和权限
每个账户自带两个默认权限
-
owner
表示对一个账户的所有权。只有很少的交易需要用到此权限,一般只会在修改账户权限的时候用到。建议将此权限的私钥放入冷钱包储存。此权限可以重置其他权限。 -
active
权限用来进行转账,为节点投票,以及其他高级别的账户修改
简单来说,owner
权限可以执行所有的操作,而active
权限则可以执行除了更改owner
权限对应的密钥对以外的全部操作。
每一个权限都有一个父权限。父权限拥有改变所有子权限的能力。
除了自带的权限外,每一个账户可以拥有自定义的权限,以便账户的扩展性管理。自定义权限不可思议的灵活,在执行时可以产生出许多可能的用例。大多数情况下由开发者社区决定如何使用,以及哪种会议决定是否使用。
自定义权限是随意且无效的,直到它们被关联到某个行为上。
权限可以由给定的授权,指定为一个或多个公钥或者一个有效的账户名组成
组合使用
下面的例子是对上面内容的一些典型使用
默认账户配置(单签名)
下面是一个刚创建的账号的配置信息,它的owner
和active
权限都各有一个key
,每个key
的权限权重都为1
,门槛也是1
。所以默认配置下,授权签署一个行为只需要一个key
进行签署。
@bob
的账户授权示例
Permission | Account | Weight | Threshold |
---|---|---|---|
owner | EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch | 1 | 1 |
active | EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX | 1 | 1 |
在此账户中,由于每个权限的授权门槛都为1
,且每个key
的权重也为1
,所以当签署某个交易时,只需要对应的key
进行签署即可。
多签名账户和自定义权限
下面的例子虚构了一个名为@multisig
的账户。此方案中,两个用户拥有此账户的owner
和active
权限。此外,还有一个名为publish
的权限,此权限由三个用户拥有。
@multisig
的账户授权示例
由于owner
权限的门槛为2
,而@bob
和@stacy
的权重仅为1
,所以如果要签署owner
权限级别的交易,需要二者都要进行签署。
active
权限的门槛为1
,@bob
和@stacy
的权重也为1
,所以如果要签署active
权限级别的交易,需要其中一人进行签署即可。
此账户还有一个名为publish
的自定义权限。这里我们假设此权限的作用是通过某个博客的DApp
,通过@multisig
账户发布文章。此权限的门槛为2
,而@bob
和@stacy
的权重为2
,而另一个公钥的权重为1
。所以@bob
和@stacy
都可以分别单独签署此交易,而另一个公钥需要加上@bob
或@stacy
其中一人,才可共同签署此交易。
因此,上面的权限表暗示@bob
和@stacy
,作为帐户的所有者,具有类似于主人或编辑者的高级权限。虽然这个原始示例在可伸缩性方面存在限制,并且不一定是一个好的设计,但是它充分展示了EOSIO
权限系统的灵活特性。
此外,注意在上述表格中,权限可以同时使用帐户名和密钥进行设置。乍一看,这似乎微不足道,但它确实提出了一些灵活性的附加维度。
其他
我们在使用以太坊或者比特币时,生成密钥对,公钥就是地址,表示账户。币存放在公钥中,知道了你的私钥就可以操作你的账户,把币转走。一个账户只有一个实际控制人,谁掌握着私钥谁就有所有权限。
而在eosio
中,账户由一个人类可读的字符串组成,就像其他用户名一样。每个账户中有不同的权限,每个权限由一个或多个账户或者密钥对组成。要使用某个权限,需要该权限下一个或多个账户或者密钥对进行签署(取决于权重和门槛)。
将上面的例子简化一下,我们可以为我们的账户,自定义一个发布博客文章的权限,并生成一个密钥对。我们可以将此密钥对中的私钥交给某个人,让他帮我们发布文章。但他也只能用此账号发布文章,并不能操作账户中的代币,因为他没有转账权限的私钥。
网友评论