EOS的账户授权和多重签名

EOS在它的技术白皮书中介绍了账户、授权、以及多重签名的技术概念,我们也可以从EOS的代码中一窥其中的奥秘,它与BTC、ETH的区块链实现有什么区别或者有更为先进的地方,那就需要先从概念入手细细体会。

钱包

钱包是一个存储账户Key、权限Key的客户端。它支持一个或者多个账户,通过高复杂度的密码来加锁、解锁钱包。EOS的代码中自带了一个轻量级的钱包-keosd。keosd通过调用cleos接口来与区块链建立连接。

在这一点上与BTC、ETH基本一致,由于BTC、ETH并没有多权限、授权的概念,这是EOS钱包中的一大特点,这对于后期的账户找回也会有略许的差别。

账户:

一个账户以人类可读的名字存储在区块链中,它按照权限配置从属于一个个人或者组织。在转账或者推送一笔交易到区块链的时候账户是必须要有的。

BTC简单说账户就是Address,它没有人类可读标记,就是一串Base58编码之后的字符,区分大小写;ETH的账户也是Address的概念,是一串公钥加工后的十六进制串,不区分大小写,但ENS的出现弥补了人类识读的短板,现有的很多钱包也支持ENS对Address的解析;EOS的原生支持,也算是在吸取前人之鉴对账户这一概念的增强。

授权、权限

授权方来决定是否将某个权限来授予某个行为。

每个账户都有两个固定命名的权限。

owner

如其所名,owner拥有整个账户的所有权。只有极少的交易需要这个授权,主要集中在对账户所有权变更的时候。强烈建议!!!将这项权限保存在离线存储中,不与任何人分享。owner权限可以用于恢复可能已被泄漏的其他权限。

active:

它主要用于转账、对块生产者投票、处理其他高级别的账户操作。

除了这两个固定命名的权限外,一个账户可以拥有一些自定义的权限来扩展账户的功能。自定义权限具有非常高的灵活性而且已经被地址化,权限如何被使用被约定,这完全取决于开发者社区如何使用它。

被授予权限的一方会被分配到一个、多个公钥或者一个账户名。

权限与签名

单签名(默认账户配置)

一个账户刚被创建时,有owner、active两个权限,它们都被地址化为一个key字符串,每个key的权重为1,每个权限的开启阈值为1。这项默认的配置就需要一个签名就可以授权来做某些行为。因为每个key的权重>=开启阈值。

@bob 账户授权

Permission Account Weight Threshold
owner 1
EOS5Ez…25Dch 1
active 1
EOS61c…TgmcX 1

上图的@bob账户中,@bob对onwer权限的权重为1,阈值为1,符合权限授予的最小要求就可以发起一笔交易。这笔交易就只需要@bob用它自己的owner key进行签名就可以了,签名之后将交易发给cleos来处理。

多重签名以及自定义权限

下图的例子虚构了一个账户@multisig,它对其他的两个账户@bob、@stacy授予了owner、active权限,同时它对@bob、@stacy、一个公开账户授予了publish权限也赋予了不同的权重。

@multisig 账户授权

Permission Account Weight Threshold
owner 2
@bob 1
@stacy 1
active 1
@bob 1
@stacy 1
publish 2
@bob 2
@stacy 2
EOS7Hnv4i…Sqt 1

在这个例子中,onwer权限的开启阈值为2,在这一权限级别的任何改变都需要权重大于等于2才可以,但@bob、@stacy各自的权重都为1,这就是需要两者共同签名才能获取完整的授权。

当需要active授权来发起一笔交易是,开启阈值被设置为1,@bob、@stacy的权重都为1,它们就可以独立签名完成授权。

还有一个自定义权限叫做publish。假设这个权限是用来发表博文到@multisig账户的博客Dapp的。这项权限的开启阈值为2,@bob、@stacy的权重都为2,一个公开账户的权重为1,根据上文的权重、阈值关系,@bob、@stacy都可以独立签名发表一篇博文,但那个公开账户则需要额外的签名来获取到publish权限,无论它是从@bob还是@stacy。

通过上面的这个例子我们可以看到@bob、@stacy作为一个账户的所有者利用权限的分配实现一个主编、编辑的角色,可能上面的例子并不是一个好的设计,但它充分证明了EOS权限体系的灵活性。同时我们也注意,权限可以授予给一个账户名,也可以是一个公开key,这样也增加了一些灵活性。

 

后记:

EOS的权限系统相比于BTC、ETH的有了很大的进步,也更加贴近了现实记账系统和其他软件系统的架构模型,也正是因为这样,也让EOS对于账户找回成为了可能,这套虽然不算复杂但对于普通用户还是略复杂的权限带来的是机会还是风险,这都要主网上线后去验证。

 

参考:

https://github.com/EOSIO/eos/wiki/Accounts%20%26%20Permissions#putting-it-all-together



Leave a Reply

Your email address will not be published.