更多干货内容请关注微信公众号“区块链前哨”,(ID:blockchain-666)
在区块链创新这个系列里,我们会挑选几个能代表区块链未来的项目解读。首先出场的是风头最大也是争议最多的 EOS(Enterprise Operation System),他的目标是作为企业级去中心化应用(DAPP)平台底层, 他是以太坊的直接竞争对手。
挑战者的出现必定是因为现行平台不足以满足目标需求。让我们先来梳理梳理现行区块链平台的不足:
-
交易性能低,难以满足巨量交易。比特币和以太坊因为共识算法(PoW)的设计造就了其交易性能不足,虽然以太坊从比特币的每秒处理 7 笔交易增加到大约 30 笔每秒。但是对照现有的支付宝、VISA 等支付平台,交易性能还是有着数量级的差别。并且随着交易的增多,势必造成网络的拥堵,又进一步降低了网络的流畅度;
-
交易手续费。比特币和以太坊的交易不是免费的,或多或少都会向矿工支付手续费。且手续费的多少视网络拥堵情况而定,网络越拥堵,矿工只会择优选择交易记录,而不是按照提交时间记录。这样就造成手续费激增,不利于商业应用的落地;
-
升级就是分叉。比特币与以太坊的升级是以分叉的形式进行,一分为二,如果更新过多,网络会变的非常复杂;
-
高延时确认。比特币与以太坊采用的工作量证明(PoW)共识算法不是一个结果确定性的共识算法,因此需要多区块确认才能确保一笔交易成功达成;
正因为有以上这些不足,阻碍了区块链在商业领域的发展,EOS 正是为了解决以上问题而出现的。接下来的篇幅,我将给大家介绍一些 EOS 的杀招。
所谓委托权益证明,通俗的讲,我们可以理解为“人民代表大会制”。拥有 EOS 币的“人民”不直接参与挖矿,而是投票选举一些“人民代表”去挖矿。相比于比特币等使用的工作量证明机制(PoW),委托权益证明有什么优势呢?
比特币相比于传统法币,其最重要的一个特性就是去中心化,只有当它是去中心化的时候,比特币才是安全的。但真实的情况是这样的么?几年前,任何人都可以使用自己闲置的台式机甚至笔记本来挖矿。后来,随着比特币不断被大众熟知,价格越来越高,挖矿变得越来越专业,先是显卡(GPU)挖矿,接着就是专业矿机的问世,催生出了完整的挖矿产业链。不仅有矿机生产商,还有大型矿场的问世,比特币世界的话语权逐渐被这些大型玩家把控,去中心化程度越来越低。之所以还没有出现大的问题,是因为还没有出现需要大家一起作假的事件出现。但是一旦出现,对比特币来说将是致命的打击。
DPoS 就是在这样的大背景下产生的共识算法,由 Dan Larimer 提出,首先被应用在比特股(BitShare),EOS 在其基础上又做了些许延伸。
见证人(人大代表)选举在 EOS 网络中,存在一个不间断的选举大会。每位 EOS 链的“人民”都可以选举一名授权代表,代表自己行使产生区块(挖矿)的权利。当然,不是每个被投票的人大代表都可以被选中,EOS 网络只选取选票最高的前 20 名代表作为这一轮的区块生产者,还有一名通过得票比例选出。这里解释一下,每位选民手里不止一票,选票数跟 EOS 币持有量成正比。这样来看,选中的 21 名区块生成者其中 20 位代表更多的 EOS 币资源,而最后 1 名是代表了更多的选民。个人认为这个比例太大了,这也是有人诟病 DPoS 是富人游戏的原因。为了保证更高的公平、均衡,选出来的 21 个代表随机打乱顺序排列。
区块生产按照之前选举的 21 人随机排列后,每隔 3 秒时间生成一个区块,在这个时间段内有且只有一个区块生产者(1/21)。如果在规定时间内区块未产生,则会跳过该区块。当然,区块生成者的不作为是有惩罚的。如果一个生产者错过了一个区块,且在过去 24 小时内没有生产出任何区块,那么他会从 21 人中除名,直到他恢复服务。
DPoS 共识不同于 PoW,EOS 区块链不会产生任何分叉,区块的结果是确定性的,区块的生产是通过合作而非比特币的竞争方式。即便是真的出现分叉,区块产生的速度是与生产者的多少是成比例的,分叉链因为区块生产者较少,势必造成等待交易增多,单个区块生产速度降低,随之会与正常链有高度差异。也就是说,拥有更多生产者的区块链分叉会比拥有较少生产者的分叉链增长速度更快,检测到差异后,随后 EOS 网络自动完成切换。
交易确认比特币的交易确认一般需要 6 个区块,也就是大约 60 分钟时间,在商用领域,这完全是不可行的。之所以需要 6 个区块确认,是因为比特币网络有分叉,6 个区块确认是防止交易所在区块被抛弃从而导致交易无效的妥协。
然而 EOS 网络是防分叉的,因此一般情况下,区块是确认生产的,所以平均一个交易从广播开始后 1.5 秒就可以认为是确认了。解释一下为什么是 1.5 秒,因为区块的生产速度是 3 秒一个,区块生产者会将这 3 秒钟收到的所有交易都打包成块,那么最先和最后被打包的交易相差 3 秒,一平均也就是 1.5 秒。
以上是一般情况下,但是也不能排除特殊情况,诸如软件 bug,网络拥堵或者恶意分叉。为了确保交易绝对不可逆,节点可以选择当交易被 21 个区块生产者中的 15 个确认后才有效,这种情况下需要大概 45 秒时间进行交易确认。而且规定,只要区块进行了 15 次的确认,那区块就是历史链的一部分,不可再被替换,即便有分叉发生。
交易证明(TaPoS)不同于其他区块链的底层数据结构里,后一区块包含前序区块哈希依次组成区块链。在 EOS 中不止如此,它要求所有的交易都必须包含前序区块哈希。这样做主要有两个目的:
-
防止不包含区块引用的交易在分叉是重放,因为不包含区块引用,该交易可以被加入到任意区块,任意分叉链;
-
标识用户和他们的资产在哪条分叉上。
因为伪造的链条不能迁移交易,那么他就只能追加交易。前面已经提到,追加交易的速度是跟区块生产者的数量成正比,速度慢,分叉链增长慢,最终就会被替换。
EOS 的账户支持人类可读的名称,长度在 2-32 个字符之间,由账户创建者自己选择,可以理解为昵称。账户的创建不是免费的,必须用少量的 EOS 币注资。如果是通过 DAPP 注册的用户,一般是应用开发者为新用户注册成本买单。在传统的商业应用中,商家为了吸引新用户花费了太多精力,比如广告和免费试用等,和这比起来,在 EOS 中注册账户的花费微不足道。而且,已经注册过的用户不需要创建新的账户。
命名权限分组EOS 的账户名称可以支持命名空间,这是一个非常好的设计,基本可以无限拓展。命名空间与权限管理结合为 EOS 的账户模型创建了无限可能。授权和权限管理被标准化和脱离应用的逻辑是不可取的,但是过多的耦合也是不恰当的。命名空间与权限管理结合,一定程度上解耦商业应用逻辑,创建了分层级的权利结构,这与现实生活中的权限分配方式非常契合。账户定义的命名空间权限级别,每一个都是有更高级别的命名权限派生而来。比如 @accountname.car 由 @accountname 派生而来。
消息处理群组与权限映射EOS 的消息系统也是与命名权限挂钩,被称为命名消息处理群组。其他账户如果想要与该账户通信,必须拥有访问账户特定的消息处理群组权限。在 EOS 中,最高级别的消息处理群组是账户名称,最低级别的是某个单独的消息类型,比如 @accountname.group.subgroup.MessageType。消息处理群组与权限的绑定被称为权限映射,打个比方,一个帐户所有者可以将自己社交媒体应用(DAPP)与自己的“朋友”权限群组(@accountname.friend)建立映射。 有了这个映射,任何朋友可以以帐户的身份在帐户的社交媒体上发帖。 当然朋友们还是使用他自己的秘钥对消息签名,账户很容易知道是哪个朋友使用了这一功能。
权限验证当账户 A 发送一条“EAT”类型的消息给账户 B 时,首先会验证是否 A 为 @b.group.subgroup.EAT 定义过权限映射,如果没有找到,紧接着检查 @b.group.subgroup 映射,然后是 @b.group,最后是 @b。如果都没找到,那么会被映射到默认的权限群组 @a.active。一旦映射被识别,则开始验证权限映射的正确性。如果失败,则跳至父权限,直至拥有者权限 @a.owner。“owner”权限分组与“active”权限分组是两个默认的分组,相当于两个管理员分组。其他分组都是派生自“active”分组。
因为权限验证的过程是只读的,并且通过交易改变权限是在区块结块之后才生效。也就是说,对所有交易的权限验证可以并行执行。我们都知道,在区块链中,对交易的正确性校验占据了很大一部分计算量,EOS 通过只读验证和并发验证使得性能得到极大的提升。而且从历史中重构世界状态的时候,也不再需要进行重复的权限验证,区块本身没有问题,包含在其中的交易也就没有任何问题,这将极大的减少 EOS 网络中新节点同步区块的速度。
强制性延时消息EOS 中提供了一个有趣的功能,非常类似于 IM 中的消息撤回功能。EOS 用户可以在交易被广播之后,在被加入到区块之前,可以授权取消交易。这个功能主要是用于兼容时间敏感的应用,比如购买一杯咖啡,我们可能不会后悔,几秒钟时间就完成交易不可逆了。但是购买一套房子,可能需要 72 小时的结算周期等。具体的延时选择有开发者和用户自己做出决定。
EOS 的密钥找回功能也非常的接地气,而且好像在比特币或者说以太坊中没有类似的功能,你被黑客攻击了都不可能再获得账户的控制权。而 EOS 则不太一样,提供类似 QQ 密码找回功能,你只需提供过去 30 天中有过交易的任何一个密钥与事先指定的关联账户一起重置账户密钥。当然关联账户在没有所有人的帮忙也是无法单独重置账户的。而且黑客是无法进行账户重置的,因为他已经控制了账户,而且另一方面,关联账户在恢复过程中也会询问一些只有当事人知道的信息,因此黑客也无法重置账户。
EOS 号称可以每秒处理 100 万笔交易,不仅仅靠的是权限并发验证,并且使用并行模型使得 DAPP 可以并行执行。区块链可被看做是一个分布式的状态机,交易顺序一定,就能得到一致的结果。因此在并行模型下,对同一账户的交易处理必须放到同一个线程中,否则不能达成一致性。EOS 中由 21 个区块生产者组织分发交易到不同的线程,并行执行。
基于最简单的交易模型,即只修改单个账户的状态,在并发模型中是没有问题的。但是一旦涉及到账户间的交互以及互相引用的情况,显然有些不足。因为在单个线程中,账户交易是顺序执行的,多个线程之间互不影响。如果涉及到账户交互需要被分散到两个区块及以上,肯定是不合适的。为此 EOS 设计了嵌套的区块交易模型,称之为最小化通信延迟模型,能够在单独一个区块中包含两个账户交换的所有消息。EOS 将每个区块划分为多个循环顺序执行,每个循环内部划分为线程,线程当然是并发执行,每个线程包含一系列的交易,交易中包含了待发送的消息集合。
在一个循环中生成的交易可以在后续任意一个循环或者区块中被发送,区块生产者会持续不断的向区块中添加循环直到全局 3 秒或者没有更多的交易为止。
EOS 中将资源分为以下三种:
-
带宽和区块存储 (磁盘);
-
计算与计算储备 (中央处理器);
-
状态存储 (内存)。
带宽与计算有两部分,瞬间使用和长期使用。一个区块链维持着所有的历史交易(区块)日志,这些日志最终由全节点存储。新加入的节点可以根据历史重现最新应用状态,这就是历史重放,如果交易增长过快,会造成区块链过于臃肿,这时可以通过状态快照记录区块链状态,并丢弃交易历史。
EOS 有一个有趣的功能就是应用发起的交易不可能造成 EOS 网络的堵塞,这点设计与以太坊不同,以太坊中虽然有 GAS 提高了交易发起的成本,但是挡不住有钱人的“DDOS”,大量手续费高但无效的交易可以充斥整个以太坊网络造成整个网络堵塞,这个设计很不友好。EOS 是怎么做的呢?EOS 中有 EOS Token,应用能使用多少带宽、存储,完全取决于应用开发者持有的 EOS Token 的多少,如果持有 1% 的 Token,则可以使用 EOS 网络中的 1% 的带宽和存储。此外,因为 EOS 网络没有交易手续费,除了首次购买 Token 以外,基本没有消耗,而且当应用不再需要如此多的资源时,完全可以将 Token 转手,回收最初的投入。
以上就是 EOS 中比较重要的特点,EOS 主网现在还未上线,可能会有更多更优秀的设计未被披露,可以持续关注。
再美好的事物也做不到十全十美,被所有人喜欢。EOS 也不例外,我总结了大家担忧比较多的几个点:
去中心化程度低
EOS 采用的 DPoS 共识算法,在每一轮中只在全网选出 21 个节点作为区块生产者,也就是说在这一段时间内,所有的交易都由这 21 个节点说了算。因此被诟病不是去中心化,而是多中心化。个人认为这些担心者走入了误区,他们认为比特币采用的 PoW 才是完全意义上的去中心化。不可否认,多年以前的比特币是这样的。但是,正如上文中提到的那样,随着比特币挖矿专业性的提升,挖矿逐渐变成了产业链,话语权把握在了矿机生产商和大型矿场手里。相比于 EOS 的 21 个中心,比特币网络中能作为区块生产者的节点可能还不到 21 个,而且权利大小还是不一的。而在 EOS 网络中,这 21 个节点权利是平等的,话语权是一致的。同时联合 11 个节点作恶是可能的,但是可能性较小。而且即便他们联合作恶了,他们在 EOS 网络中的公信力也就丧失了,在下一轮的投票中(或者永久),已经无缘作为“人大代表”为人民服务了。而且他们作恶的链也会因此被抛弃,被其他正义代表纠正。
ICO 涉嫌暗箱操作
EOS 的 ICO 模式比较奇葩,是一种类似于拍卖的模式。EOS 发行总量是 10 亿枚,除了第一次分发 2 亿枚以外,剩余的 8 亿留 1 亿给团队,其余 7 亿分为 350 个周期拍卖,每个周期拍卖 200 万枚代币,由接收到的 ETH 的数量均等分配。被人诟病的是每个周期的前一段时间接收到的 ETH 比较少,但是到周期快结束时会有大量 ETH 进入,直接拉低投资人获得的 EOS 数量,被人认为是 EOS 开发团队暗箱操作,将之前收到的 ETH 转手又投进当前周期,回收 EOS。个人认为这种模式有些不可取,但也是一种维护 EOS 价格稳定的手段,见仁见智。
看好 EOS 的人很多,看衰的人也不少。平台的发展不仅仅是技术就能决定一切,社区建设、推广也必不可少。在 18 年 6 月份 EOS 主网上线前,一切都是未知。当然,我们还是愿意看到 EOS 能够挑战以太坊的地位,垄断总是不利于市场的发展,只有相互竞争,相互学习才能有更健康更完善的区块链未来。