eos主网上线在即,它之所以能受到各方青睐,主要是看中了它在未来商业应用落地的潜力。在这期间,完善的账户与权限系统是必要条件。
关键字:eos,账户,钱包,权限,多签名,eosio.msig,proposal,权重,阈值
概况账户:是存储在区块链上的人们可识别的ID。
权限:每个事务都有,它是由已配置许可的账户所评估的。
阈值:每个被命名的权限都有一个有效范围,必须满足是在许可下的一个签名事务,将被视为有效。
签名:事务的签名是通过利用一个客户端来执行,该客户端拥有一个已加载并已解锁的钱包。
钱包:可以保护及使用你的keys的一个软件。这些keys可能是也可能不是区块链授权的一个许可账户。
钱包钱包是一个客户端,用于存储keys,可能与也可能不与一个或多个账户进行关联。一个钱包会有锁定和解锁两种状态,理想状态下,它是被一个高熵密码所保护。EOSIO有一个命令行客户端cleos,与一个轻客户端keosd交互,它俩构成了eos钱包的这种模式。
账户一个私人个体或者一个组织都可以拥有账户,在交易或者其他push一个事务到区块链上的时候,账户是必须的。
Authorities(权限) 和 Permissions(许可)这两个概念特别容易搞混为一谈,这里给做一下区分。
Authorities决定了是否每一个给出的action都被正确授权。
每个账户都有两个与生俱来的权限命名:
owner,象征着一个账户的所有权。只有很少的事务会需要这种权限。但最值得注意的是,actions可以对owner的权限做出各种改变。所以一般来说,建议owner被冷藏存储,不告诉任何人。owner可以用来回复另一个可能已遭泄露的许可。
active,用于转移资金,投票生产者以及做其他高级账户的变更操作。唯一不同的是,它不能够改变owner。
除了这两个与生俱来的权限。一个账户也能拥有自定义命名的权限,它可以进一步扩展账户管理。自定义权限非常灵活并且提出了众多可能的用例实现。在开发者社区,这些问题已经被提了出来,包括他们是如何工作的,以及如果有的话是什么约定被采用了。许可对于任何给定的权限可以被分配到一个或多个公钥或者一个有效的账户名称。
综合实践下面是结合所有上述概念以及一些小例子,用来展示如何实际使用它们。
默认账户配置(单签名)这里主要讲述当一个账户被创建以后,它是如何配置的。它分别拥有owner和active权限,可独立设置key,两个keys都是权重为1,且许可的阈值也都是1。该账户在执行某个操作action时,需要通过默认的配置,单独签名授权一个本机权限。
创建账户演示 Usage: cleos create account [OPTIONS] creator name OwnerKey [ActiveKey](在eos正式版本中,activeKey已不强制,变为可选)在创建账户时,需要指定其owner和active两个权限的key,这里要使用公钥。所以,
liuwenbin@liuwenbin:~$ cleos create account eosio lllwwwbbb "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV" executed transaction: 7afb37faf4fadaf1b23bbf33a2ec316baf41fcd8e5587f4b2307db091c372829 200 bytes 209 us # eosio <= eosio::newaccount {"creator":"eosio","name":"lllwwwbbb","owner":{"threshold":1,"keys":[{"key":"EOS6MRyAjQq8ud7hVNYcfnV... warning: transaction executed locally, but may not be confirmed by the network yet这个版本只需要指定一个owner权限的key即可创建账户。active权限是小于owner的,所以显得不那么重要。
多签名账户上面单签名的内容很简单,之所以介绍它,是为了与本节多签名账户进行比较学习。
多签名账户,一个账户假设为Jack的owner和active权限分别被授权为其他两个账户Alice和Bob的许可。
**@Jack**
permission | account | weight | threshold
---|---|---|---
owner | | | 2
| |@Alice|1|
| |@Bob|1|
active| | | 1
||@Alice|1|
||@Bob|1|
首先,我们创建至少三对key:
liuwenbin@liuwenbin:~$ cleos wallet keys [ "EOS5WsMPtPqW8d3yxfCWP9WJcbkD3wDBWDfyV2CLagC7tWKT9wGkX", "EOS5nrEfZ4wcnmt2u2PGWDneZDNevQ6MoiF4RE3hpLKHk2rWpBB8x", "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV", "EOS6PTrfoaTYRHUhCedBf6b9CX3KDpJoWry6WQHe3WkpdFTMV2f78" ]然后,分别使用不同的public key创建三个账户:jack, alice和bob,创建成功以后,我们先来查看当前jack账户的permission内容:
liuwenbin@liuwenbin:~$ cleos get account jack permissions: owner 1: 1 EOS5WsMPtPqW8d3yxfCWP9WJcbkD3wDBWDfyV2CLagC7tWKT9wGkX active 1: 1 EOS5WsMPtPqW8d3yxfCWP9WJcbkD3wDBWDfyV2CLagC7tWKT9wGkX