EOS从入门到精通-账户体系(文字稿)

时间:2022-04-18 19:58:17

大家好,非常感谢参加《EOS从入门到精通》系列课程,我是王巨,今天是EOS技术白皮书解读的第二讲。今天的课程原本计划讲两部分内容,账户系统和并行执行。但是一天的备课下来,我发现账户系统的内容特别多,而且理解EOS的账号体系对于将来进行智能合约的开发非常有帮助,因此我决定在本次课程中详细给大家讲解一下EOS的账户体系。并行执行这部分放到下一讲跟TOKEN模型放到一起。

另外,上次有同学说没有ppt的问题,我今天也会在讲课的过程中穿插加入ppt。


EOS从入门到精通-账户体系(文字稿)
EOS账户系统.png

大家可以先看一下上面这个思维导图,这就是本节课要讲解的大纲。主要分了5个章节,简介、消息和处理程序、基于角色的权限管理、带有强制延时性的消息、恢复被盗窃的密钥。其中今天会重点讲解基于角色的权限管理。

好的,我们开始讲解EOS的权限系统

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.001.jpeg

EOS相对于比特币和以太坊只有私钥和地址的概念,EOS的账户体系是相当完备的,从这点来看,比特币和以太坊在可用性上差了EOS一大截。比如说比特币和以太坊没法自定义账户地址,只能用一堆人类没法理解的字符串做地址和私钥。而EOS可以使用一个人类可以阅读的2-32个字符来创建账户。另外在白皮书上强调,创建一个账号需要付出额外的一点点成本,来覆盖账户的存储成本,这一般是由开发者也就是应用提供方来承担。最后,EOS的账户还支持域的概念,比如说:
@domain这个账号的拥有者是唯一能创建@user.domain的人。

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.002.jpeg

好我们继续讲消息和处理程序,讲账户为什么要讲消息和处理程序呢?这是因为账户和消息是EOS只能合约的两个不可或缺的组成部分,而且他们之间有着密切的关联,单独讲哪一个也没法讲清楚他们的本质。我们看看EOS的消息机制就明白了,所谓的消息就是账户与账户之间的沟通语言,每个账户都可以发送结构化的消息给任意其他账户,每个账户都可以定义处理消息的脚本,每个账户还有自己的私有数据库,消息处理脚本也可以给其他账户发消息,最终 消息和消息处理脚本组成了EOS的智能合约。
我来进一步解释一下,发消息很容易理解,消息处理脚本就是在一个账户收到了消息之后怎么处理消息。这个处理脚本本身还可以发消息给其他账户。这个怎么理解呢?我的理解是有些消息是人手工发的,比如说a给b转账50eos,有些消息是可以由处理消息的脚本来发的,比如说b在收到50eos这个消息后有个消息处理脚本会自动向c发送25个eos。这其实就是一个非常简单的合约了。

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.003.jpeg

好的,我们来讲一下今天的重点基于角色的权限管理,这也是BM系区块链的一个特色,权限管理在BTS和Steamit上已经比较完善了,在EOS上还会做更多的优化。我们先来看看权限管理的简介:判断一条消息是否被授权最简单的方式是包含一个签名,当然验证这个签名的前提是要知道这个签名是谁的。一般来说权限是与个体或群组绑定在一起,理论上不会有一种权限跟个体或群组没关系,因为这样是没有意义的。EOS提供了细粒度和高级别的权限控制,可以控制到谁在什么时候做什么事情。认证和权限管理必须标准化,并且与应用程序的业务逻辑分开,这样可以用通用的方式来管理权限,并且为性能优化提供可能。EOS还支持多账户的控制机制,能对账户的安全性提供保障,减少被黑客攻击而造成的资金损失风险。EOS甚至还允许定义什么密钥或账户可以发送特定的消息类型给另一个账户。
举个例子:一个用户的社交媒体账户可以使用一个密钥,而另一个密钥可以用于访问交易所,甚至可以授权其他账户来代表本账户而不是分配一个密钥。

下面我们就详细讲一下EOS的权限管理方案:

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.004.jpeg

首先EOS为权限级别进行了命名比如说Owner、Active、Friend。这些命名可以是系统默认的比如Owner和Active,有些是可以自定义的比如Friend的。我们来看Steamit里面的权限实例:它是硬编码了三个权限级别:Owner、Active、Posting。其中Posting权限只能进行发帖操作投票等社交操作,Active权限可以做除了修改Owner以外的所有事情。Owner可以作为冷备份而存在。EOS本身也囊括了这些概念,而且允许自定义权限的层次结构和分组。

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.005.jpeg

在设计了权限级别之后,EOS还设计了命名的消息处理群组,这个命名的消息处理群组可以在其他帐户配置他们权限级别时被引用。上面有一个简单的例子,在账户名下有一个分组A,分组A下面有个子分组b,它下面有消息类型。一个交易所的交易合约 在这种模式下就可以将订单的创建和取消 分开存取,通过交易合约进行分组 可以方便 交易所用户。

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.006.jpeg

权限级别和消息处理群组,这两个概念之间就可以做映射了。就是说可以将某个消息处理群组分配到某个权限级别上,或者反过来说,可以在某个权限级别上定义很多消息处理群组。举个例子:一个帐户所有者可以将自己社交媒体应用与自己的“朋友”权限群组建立映射。 有了这个映射,任何朋友可以以这一帐户的身份在这一帐户的社交媒体上发帖。 尽管他们将以帐户所有者的身份发帖,他们仍然使用自己的密钥来签名消息。 这意味着总是可以辨识出是哪一个朋友在以何种方式使用帐户。

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.007.jpeg

如何进行权限评估,简单的来讲就是从小到大进行逐级匹配,比如:当 @alice 以 "Action" 类型发送一条消息给 @bob 时,首先会检查 @alice 是否为 @bob.groupa.subgroup.Action 定义过权限映射。 如果什么都没有找到,紧接着检查 @bob.groupa.subgroup 映射,然后是 @bob.groupa,最后 @bob 将被检查。 如果都没有找到,那么假定映射为命名的权限群组 @alice.active。
一旦一个映射被识别,则使用相关联的签名验证权限。 如果失败了,则跃迁至父权限,直至拥有者权限@alice.owner。

EOS从入门到精通-账户体系(文字稿)
权限示例

我们在看一下上面这张图,我简单讲一下:我们先看左侧,可以看到上面带key字符的就是各种权限,底下的三个方框是命名的消息群组,我们可以看到,这个交易的合约被映射到家庭组这个权限上,而提现这个消息被映射到律师这个权限上,也就是说家庭组里面的成员可以进行交易,但是唯独不能进行取现。因为取现最先匹配上的是律师这个密钥。

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.008.jpeg

好,我们看看EOS的默认权限群组,默认的权限组上面我们也有讲到,是Owner和Active,Owner可以做任何事情,这个权限一般来说不用来做具体的工作,一般用来做冷备份,比如说Active权限丢了,就可以是用Owner权限来恢复。Active权限可以做除了修改Owner以外的所有事情,一般业务都是有Active权限来完成。其他的所有权限组也都是从Active权限派生出来的。

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.009.jpeg

权限的并行评估这部分内容,相对来说没有特别重要,我们就简单讲一下。基本上说的是,由于权限的评估是只读的,因此可以进行并行化处理,同时可以提前到交易广播阶段完成,而不是在打包块的过程中。另外在区块链被重新加载重放交易时由于区块的执行肯定是通过了权限验证的,因此可以忽略,以此来提高执行效率。

好了权限管理这部分就讲到这里,我们在看下一部分,带强制性延时的消息

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.010.jpeg

这部分比较简单,主要说的是,时间是安全的重要属性,EOS允许有时间延时的消息,在特别的时间范围内可以取消消息。这点是比特币和以太坊不能实现的,特别是在网络拥堵的情况下,若手续费比较低,往往一笔交易很长时间得不到确认,而用户完全没有办法取消交易。这种延时消息具体延时多长时间完全有消息的敏感程度决定,比如说买咖啡可能是几秒钟,买房可能是几天,转移整个账户可能是一个月,确切的时间取决于应用开发者和用户。

EOS从入门到精通-账户体系(文字稿)
EOS账户系统.011.jpeg

EOS允许恢复被盗窃的密钥,这在比特币和以太坊上是不可能的,在比特币和以太坊上一旦密钥丢失那么整个账户也随之丢失,EOS提供了恢复密钥的机制。具体来说就是可以使用30天内的任意Owner权限的密钥,注意这个密钥可能已经被黑客换过了,但是在这个场景下这个密钥还是可以使用的;使用任意30天内的Owner密钥和指定的合作伙伴才能恢复密钥。这里面合作伙伴不能在没有Owner协助的基础上恢复密钥。合作伙伴也不会参与任何日常交易,这样可以大大降低法律上的风险。

好了,今天的课程就到这里,谢谢大家的收听,谢谢!下面是问答时间,我会找几个我能回答的问题来进行回答。




作者:王巨
链接:https://www.jianshu.com/p/4a37cf5fcf70
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。