帐户是存储在区块链中的人类可读标识符。每个交易都根据配置的帐户权限对其权限进行评估。每个命名的权限都有一个阈值,在满足该阈值的条件下才能触发易签名。事务通过加解锁钱包的客户端来签署。钱包是保护和利用你的密钥的软件。这些密钥可能会或可能不会被授予区块链上的账户权限。
钱包
钱包是存储密钥的客户,这些密钥可能与一个或多个帐户的权限相关或不相关。理想情况下,钱包具有受高阶密码保护的锁定(加密)和解锁(解密)状态。EOSIO / EOS存储库捆绑了一个名为cleos的命令行界面客户端,它与一个名为keosd的轻客户端进行交互。
账户
帐户是存储在区块链中的具有可读性的名称。它由个人或一组人拥有,具体取决于权限配置。需要账户才能在区块链上实现转账将交易或其他操作。
授权与权限
授权决定了某个操作是否被正确的赋予权限。每个账户都两个原生态的许可属性:
- 拥有者许可:拥有者许可代表着账户的所有权。虽然只有少数交易需要这种权限,但最值得注意的是对拥有者权限作出任何改变的行为。建议所有者保持冷备份并且不与任何人共享。所有者许可用来恢复和取代已被泄露的另一个权限。
- 活动许可:活动权限用于资金转账、投票给活动发起者并进行更高级别的账户更改。
除了原生态许可之外,帐户还可设置自定义许可从而扩展帐户管理。自定义权限非常灵活且地址空间巨大,从而实现非常多的可能的应用场景。这很大程度上取决于开发人员如何使用它们以及采用什么约定(如果有的话)。任何给定权限的权限可以分配给一个或多个公用密钥或有效的帐户名称。
组合使用
以下就是将上述概念组合在一起使用的案例。
默认账号配置(单一签名)
每个账户在创建之初就是默认的是唯一的键(key)可用来做拥有者许可和活动许可。这个键拥有1的权重以及阈值也为1.默认的配置可以通过单一签名来授权原生态的活动许可。
@bob 账号授权
许可 | 账号 | 权重 | 阈值 |
---|---|---|---|
拥有者 | 1 | ||
EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch | 1 | ||
活动 | 1 | ||
EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX | 1 |
在@bob账号的例子中,@bob的拥有者账号具有许可权重1,并且要求阈值达到1时才能发起一笔交易。
@bob只要使用拥有者许可的账号对该交易进行签名进行合法性授权,即可完成一笔交易。这个拥有者的许可账号被保存在钱包中,并通过cleos进行调用。
多人签名与自定义许可
下面这个例子使用了一个虚构叫做“@multisig”的账号名称。在这个场景中,两个用户被同时授予拥有者许可和活动许可不同的权值。
@multisig 账号授权
许可 | 账号 | 权重 | 阈值 |
---|---|---|---|
拥有者 | 2 | ||
@bob | 1 | ||
@stacy | 1 | ||
活动 | 1 | ||
@bob | 1 | ||
@stacy | 1 | ||
发布 | 2 | ||
@bob | 2 | ||
@stacy | 2 | ||
EOS7Hnv4iBWo1pcEpP8JyFYCJLRUzYcXSqt... | 1 |
在这个例子中,如果要对拥有者许可进行调整,需要达到阈值2以上。这就意味着拥有权重为1的参与者必须都参与签名才能使得让交易得到充分的授权。
当进行活动授权时,该阈值为1,这就意味着只需一个权重为1的参与方参与授权即可实现许可授权。
这里还有个称之为“发布”的自定义许可类型。在这个例子中,我们假设是在一个blog的DAPP应用中授权发布博客。发布许可的阈值为2,@bob和@stacy都拥有2的权重,还有一个公钥拥有1的权重。这就意味着@bob和@stacy无需其他额外的签名即可执行发布许可,而公钥必须取得其他人的共同签名才能执行发布许可。
上面的例子说明,@bob和@stacy作为拥有者,币普通的修改者拥有更高的优先权。尽管这个原始示例在可扩展性方面有特别的限制,并不一定是一个好的设计,但它充分证明了EOSIO权限系统的灵活性。
此外,请注意上表中的权限是可以同时使用帐户名称或公钥进行设置的。虽然看起来微不足道,但它确实提出了一些额外的灵活性。
附加说明
- @bob和@stacy可以显式注明定义为该账号的拥有者。
- 在没有@bob和@stacy授权的情况下,公钥是无法发起一个发布授权的。
- @bob或@stacy可以在没有其他账号附加授权的情况下,独立发起发布授权。