EOS开发(二)账户和权限说明

前言

EOS的账户和权限系统设计的比较复杂,但扩展性相当好。与比特币或以太坊不同,最明显的特点就是支持自定义账户权限和多签名机制。有必要单独用篇文章进行说明。

本篇内容大部分翻译自官方文档

官方文档:
https://developers.eos.io/eosio-nodeos/docs/accounts-and-permissions

关于walletkey的说明见这篇文章
EOS开发(三)在私链创建管理钱包、生成导入密钥对、创建账户,本篇着重说明accountPermissions

概述

账户是储存在区块链上的一个人类可读的标识。每个账户都有两个默认权限,称为owneractive。开发者们也可以提出自定义名称的权限。每个权限的使用都有一个门槛,必须和其签署交易要求的最低签署人数相匹配(这句话不好理解,后面会有例子说明)。

授权和权限

每个账户自带两个默认权限

  • owner 表示对一个账户的所有权。只有很少的交易需要用到此权限,一般只会在修改账户权限的时候用到。建议将此权限的私钥放入冷钱包储存。此权限可以重置其他权限。

  • active 权限用来进行转账,为节点投票,以及其他高级别的账户修改

简单来说,owner权限可以执行所有的操作,而active权限则可以执行除了更改owner权限对应的密钥对以外的全部操作。

每一个权限都有一个父权限。父权限拥有改变所有子权限的能力。

除了自带的权限外,每一个账户可以拥有自定义的权限,以便账户的扩展性管理。自定义权限不可思议的灵活,在执行时可以产生出许多可能的用例。大多数情况下由开发者社区决定如何使用,以及哪种会议决定是否使用。

自定义权限是随意且无效的,直到它们被关联到某个行为上。

权限可以由给定的授权,指定为一个或多个公钥或者一个有效的账户名组成

组合使用

下面的例子是对上面内容的一些典型使用

默认账户配置(单签名)

下面是一个刚创建的账号的配置信息,它的owneractive权限都各有一个key,每个key的权限权重都为1,门槛也是1。所以默认配置下,授权签署一个行为只需要一个key进行签署。

@bob的账户授权示例

Permission Account Weight Threshold
owner EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch 1 1
active EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX 1 1

在此账户中,由于每个权限的授权门槛都为1,且每个key的权重也为1,所以当签署某个交易时,只需要对应的key进行签署即可。

多签名账户和自定义权限

下面的例子虚构了一个名为@multisig的账户。此方案中,两个用户拥有此账户的owneractive权限。此外,还有一个名为publish的权限,此权限由三个用户拥有。

@multisig的账户授权示例

EOS开发(二)账户和权限说明_第1张图片

由于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中,账户由一个人类可读的字符串组成,就像其他用户名一样。每个账户中有不同的权限,每个权限由一个或多个账户或者密钥对组成。要使用某个权限,需要该权限下一个或多个账户或者密钥对进行签署(取决于权重和门槛)。

将上面的例子简化一下,我们可以为我们的账户,自定义一个发布博客文章的权限,并生成一个密钥对。我们可以将此密钥对中的私钥交给某个人,让他帮我们发布文章。但他也只能用此账号发布文章,并不能操作账户中的代币,因为他没有转账权限的私钥。

你可能感兴趣的:(EOS开发(二)账户和权限说明)