EOSIO Dawn 3.0现已推出

原文地址:https://medium.com/eosio/eosio-dawn-3-0-now-available-49a3b99242d7

译者:小平民

声明:未经许可,不得转载(已授权@eosgroup,hi区块链)

Block.one很高兴宣布EOSIO Dawn 3.0的首个功能完整的预发布。此预发布代表了2018年6月EOSIO 1.0发布道路上的一个重要里程碑。我们的全球开发团队为了使EOSIO成为构建区块链应用程序的最强大平台,一直在夜以继日地工作。自从我们发布EOSIO Dawn 2.0以来已经有四个月了,我们有很多需要展示的东西。

构建最先进的区块链架构状态是随着我们学习而变化的设计过程。我们在Dawn 3.0中完成的许多功能在最初的EOSIO白皮书中都没有规划,而是在构建高性能,灵活且易于开发的平台的过程中发现了这些功能的。

可扩展性功能

可扩展性意味着可以扩展以满足市场需求。我们的团队在每一步都将未来扩展需求纳入设计中。也就是说,Dawn 3.0只是实现了部分潜在的优化,这个优化可以让EOSIO进行功能扩展。我们设计了EOSIO,以便将来的实现可以利用并行计算来增加吞吐量,而不需进行硬件更改。

区块链间通信

区块链间通信是终极的可扩展性功能 – 圣杯(无处寻觅的稀世珍宝) – 业界一直在寻找的诸如侧链,等离子和分区等解决方案。区块链间通信使一个区块链能够以可证实的安全方式验证另一个区块链上的事件的真实性。目标是让区块链间的沟通像智能合约间的链内沟通一样安全,我们认为我们已经实现了这一目标。

从我们的角度来看,跨区块链通信只不过是具备将轻客户端实现像智能合约的能力。轻客户端可以验证区块链中的交易,而无需操作整个区块链。这反过来意味着建立了一个拥有有效和安全的轻客户端验证能力的股权证明区块链。因此,轻客户端验证必须纳入协议设计中,虽然在此之前都被认为不可能实现。

罕见的头文件验证

传统的轻客户端需要处理每个程序块头,然后验证这些程序块头关系。现在EOSIO可以每秒生成两个区块,区块链每秒至少需要进行2个交易来处理每个区块头,而有些罕见的区块链间通信的情况不是如此。为了解决这个问题,我们创建了第一个复杂且具备容错能力可以验证罕见头的区块链。具体而言,如果要欺骗轻客户,它需要超过2/3的区块生产者(例如,21个中的15个以上的区块生产者)腐败。此外,轻客户端只需处理有效的块生产者集更改的区块头以及区块头里面包含的相关区块链间消息。这大大减少了维护这个轻型客户端的开销,并显著提高了区块链间通信的效率。

上下文无关操作

上下文无关操作是实现区块链间高效通信的关键功能之一。它们是特殊的行为,因为它们可以包含在交易中,但不依赖于区块链状态,因此它们是“上下文无关”的。上下文无关动作的一个例子是验证merkle proof或签名。由于这些计算是上下文无关的,因此可以并行进行简单验证,并且可以从更新中减少计算。

每个上下文无关的动作也可以引用交易的特殊修改数据的部分。这意味着可以减少merkle proof操作,并在区块链更新期间跳过昂贵的计算。

上下文自由操作使我们能够并行化与区块链间通信相关的绝大部分开销。它们还使我们能够平行运行并减少加密技术的昂贵计算,如机密交易,bullet proofs协议和zkSNARK等。

为了激励使用上下文无关动作,当用户使用上下无关动作部分代替传统交易部分时,快生产者只会向用户收取一小部分CPU使用量。

上下文无关内联操作作为事件

EOSIO Dawn 2.0开发人员寻找的功能之一是生成由外部处理的事件的有效方法。在以太坊,这些事件用于报告关于合约内部运作的结构化信息。通过增加上下文无关的动作,我们也有可能做上下文无关的内联动作。内联动作是由合约代码生成并作为当前交易的一部分执行。一个上下文无关联的行为可以廉价且并行地处理。由于所有内联操作都包含在Merkle根中,因此可以将这些操作用作可证明的通知给外部服务和其他区块链。

交易压缩

有很多事务有很多可压缩数据。其中最不可避免的例子是WebAssembly合约代码本身。其他例子包括ABI规范和与账户/合约相关的Ricardian合约。某些应用程序(如社交媒体)可能还希望在区块链中把用户生成内容压缩。

通过利用交易压缩,区块链可以更有效地存储和传输大量交易,同时,进行可压缩数据的交易比进行不可压缩数据的交易花费更少的钱。

解释器和即时编译

Dawn 2.0最大的变化之一就是WebAssembly运行时环境的概念。Dawn 3.0现在默认使用Binaryen WebAssembly解释器,而不是更快的Just-in-Time(JIT)编译器。这会降低性能,但会增加稳定性和标准一致性,同时允许我们在需要时轻松交换更高性能的JIT环境。解释器也解决了Dawn 2.0所面临的最大挑战之一:编译合约所造成的延时。将来,当我们在后台编译和优化合约,我们可以使用解释器,此时合约编译较慢,但执行延时低。这种双重实现意味着我们所有的单元测试都针对编译和解释代码进行了测试,因此我们可以在部署混合方法之前发现潜在的非确定性或非标准合格性行为。

资源测量速率限制

随着3.0的发布,我们现在有一个全新的资源速率限制系统。也许最大的改变是引入了客观指令计数算法。当我们着手构建EOSIO时,我们的目标是完全采用主观限速和执行。我们发现,主观执行的成本几乎与更客观的方法相同。我们现在使用混合解决方案,其中用户需要为客观执行方式使用而付费,但块生产者也会在合约中放置主观挂钟时间限制。这些主观限制防止产生泛滥的客观计费。

我们采用这种方法的主要原因之一是允许单个交易执行比以前更多的计算。从理论上讲,现在块可以包含一个需要100 ms运行的交易,而在旧模式下,每个交易必须在1 ms以内运行完成。

限速的另一个变化是将限制与定义代币的需求分开。这使得EOSIO可以在区块链没有使用任何代币的情况下被私人使用。公共区块链可以采用系统合约,通过放权来实现限制,社区可以动态升级如何分配资源,并且不影响分配的实施。

500 ms块休息时间和BFT DPOS

随着3.0的发布,我们已经从3秒的块休息时长隔升级到0.5秒的休息时长。这大大缩短了确认交易之前的延时。与BFT DPOS结合使用时,交易可在1秒内得到不可逆的确认。不可逆确认之前的等待时间对区块链间的沟通有重大影响,因为另一个区块链必须等待不可逆确认才能结合来自外部链的证明。两个基于EOSIO的区块链应该能够在3秒内执行往返通信。以太坊的类似通信模式需要9分钟,比特币需要3个多小时。

BFT DPOS尚未实现,因为它是软叉优化。我们将在发布EOSIO 1.0之前实现BFT DPOS。

BIOS架构

BIOS架构是EOSIO Dawn 2.0以来最大的架构变化之一。在EOSIO Dawn 3.0下,绝大多数区块链业务逻辑已经移植到智能合约,智能合约可以由社区动态更新,而不需要硬叉。一个简单的EOSIO区块链现在是一个单一的生产者,没有任何代币,投票或权益证明。核心区块链代码中唯一实现的是权限系统,它包括创建帐户,部署合约和强制执行资源分配的功能。现在一切区块链的授权权益的证明(包括代币,投票,股权和资源分配)由Web Assembly的基本系统合同定义。

借助这种新架构,我们能够将开发重点放在区块链的静态非WebAssembly部分。这些是稳定性最关键的部分 ,也是最难升级的部分。在发布EOSIO Dawn 3.0和EOSIO 1.0之间,我们将制定系统合同的最终细节,股权和投票。

安全功能

安全对于任何计算机系统都至关重要,我们已经把设计EOSIO成市场上最安全的区块链。安全是一个多维问题,必须考虑到黑客攻击,硬件故障,硬件丢失和密码丢失的风险。硬件钱包擅长防范黑客入侵,但如果防护失败,他们可能会将您锁在帐户外。此外,硬件钱包的文件备份可能会丢失或被盗。

安全延时交易

EOSIO Dawn 3.0最重要的功能之一是增加了用户可配置的延迟以适应不同的操作。有了这种延迟,交易必须在区块链上广播几个小时或几天,然后才能应用。在这段延迟期间,用户可以采取措施重新设置权限更高的帐户,然后取消交易。与其他区块链相比,这是一个重大改进,这可以在您被黑客入侵时进行补救。

忘记密码恢复

每个帐户至少有两个权限级别:“所有者”和“活动”。如果所有N都有所有者的密钥,则所有者许可级别应该是M 多重签名的N。任何时候活动密钥丢失或被盗,所有者权限级别都可以重置活动权限。

如果您失去了所有者密钥,或者您的多重签名合作伙伴不合作,则活动帐户允许你在所有者账户闲置30天后请求重置所有者账户。所有者权威机构则有7天时间通过更新活动权限来反驳请求。

在此模式下,由一个或多个硬件钱包控制的帐户所有者权限将可以安全地防范黑客攻击和设备故障。如果该设备是带有硬件和Fingerprint / Face ID安全私钥的Apple iPhone,则攻击者需要通过窃取您的手机并窃取指纹或脸部来破解多重签名合作伙伴。如果您的多重签名合作伙伴也正在使用生物识别安全硬件设备那更加难以破解。

交易提案系统

当用户自己安排独立添加和删除权限时,多重签名变得更加容易,而不必在传统交易的有限到期时间窗口内收集所有签名。通过提案系统,任何人都可以提出交易,交易涉及的各方可以简单地批准。在获得您的批准和其他必要的批准之间,您可以随时取消您的决定。

为了实现这个系统,我们添加了新的API,允许合约评估一组帐户权限是否足以授权交易。这使我们可以通过部署新的WebAssembly来升级多重签名程序,而不需要硬叉。

简化合约开发

EOSIO的众多目标之一就是尽可能简化合约开发。如果开发人员知道使用方法编写C ++类,那么他们应该能够编写一个尽可能少的复杂引用的智能合约。

我们很高兴将我们的“hello world”合约已经简化为几行简单的代码。我们的工具链已可以自动生成合约ABI并将用户动作分派给您定义的类上的方法。开发合约比以往都简单。

Hello World Contract

浮点支持

简化智能合约开发的一部分是使开发人员更容易地实现必须的数学算法。区块链开发最困难的一个方面就是缺乏浮点数学和相关的幂、根三角函数计算。对比强迫所有计算进入容易出错和内存密集型的固定点,许多算法(如Bancor)在浮点方面实现起来要容易得多。

我们集成软件浮点库来供WebAssembly透明地使用从而解决硬件浮点的非确定性性质。有了软件浮点数,我们就可以在复杂算法下获得确定性和易于开发的好处,其代价不会高于固定点。在许多算法下,固定点比确定性浮点表示要么更容易出错,要么更耗费内存。

C ++标准模板库支持

对于EOSIO Dawn 3.0,我们付出了巨大的努力来增加对大多数C ++标准模板库的支持。这意味着开发人员可以使用他们熟悉的工具,库和算法,同时消除由于这些算法的因非标准实现而导致的潜在错误。

计划交易

对于定期交易开发者,现在可以编写永久运营的合约 – 只要合约具有足够的带宽。其他平台需要脱链才能在适当的时间唤醒合约。通过计划交易,我们可以提高效率和易用性,同时在没有开发人员管理的服务器的情况下,合约也可以正常运行。

自动的权限范围检测

在EOSIO Dawn 2.0下,每个事务都需要声明它将访问的数据范围。这对开发人员来说很容易出错也很啰嗦。在Dawn 3.0下,块生产者负责确定访问哪些数据范围并解除冲突。这使得所有交易更简小,并将调度开销转移到块生产者,而不是将其推回到用户、开发人员或完整节点上。

MultiIndex数据库API

EOSIO Dawn 3.0引入了一个映射boost :: multi_index_container库的新数据库API。使用此API,可以很简单地支持按多个键排序的、查找、使用下限/上限以及在数据库上前后反复迭代的数据库表。这个新的API使用迭代器接口,可显著提高扫描表的性能。

现在也可以在64位,128位,256位和512位整数以及64位浮点(双精度)上使用索引。在发布EOSIO 1.0之前,会添加对字符串索引的支持。这是灵活性和开发简便性的显着改进,因为现在可以在同一张表上拥有几乎无限数量的索引字段。

性能

我们的团队一直在密切关注真实世界的,我们对目前的结果非常满意。我们通过几种不同的配置对我们的软件进行了基准测试,以了解未来优化时性能的上限和下限。所有这些测试是在假设代币传输在计算复杂度方面与比特币或Ethereum ERC20代币相当的情况进行的。

最差情况 – 1000 TPS

这是我们的没有任何优化基本性能:我们多节点网络运行单线程的签名验证的解释器可以支持超过1000 的吞吐量。

平均情况 – 3000 TPS

打开JIT编译器后,我们多节点网络运行单线程的签名验证的解释器可以支持3000的吞吐量。

最佳情况-6,000 TPS

一旦我们实现了并行签名验证,随着并行度和签名数量增加,我们可以假设每签名的时间将接近0。我们可以通过禁用签名验证来模拟此环境。在这个模型下,我们可以用JIT编译器在多节点网络上达到6000的吞吐量。

理论情况 – 8000 TPS

如果我们从等式中删除网络代码,并只关注CPU在关闭签名验证和使用JIT时能够执行的能力,那么我们可以达到每秒8,000个单线程交易。要在单一链上实现性能更高,需要实现WebAssembly的并行执行和更高级的调度程序。在这种情况下,使用解释器而不是JIT,我们可以达到2700 的吞吐量。这表明简单启用JIT将使我们的传输性能提高约3倍。这些测量是在MacBook 2.8Ghz i7上进行的。

每秒无限次交易

“每秒交易次数”的定义就好比苹果跟橘子比较。通过区块链交流,我们可以根据需要在区块链之间分配工作量。代币可以可靠和安全地在不同的链之间传输。随着相同(或不同)块生产者并行运行1000条链,我们可以看到每秒数百万的交易。这代表了其他区块链提出的理论扩展方案的实际实现。

我们强烈鼓励基于EOSIO的公共网络的区块生产者根据需要运行尽可能多的EOS链以满足用户需求。所有EOS链都可以使用相同的代币作为股权和资源分配的基础。这将围绕单个代币创建最大可能的网络效应,并利用高市场资本化代币形成的经济激励影响信任和安全性。

像交易所,货币和社交媒体这样的应用程序可以在许多并行链上平衡他们的负载。

未来之路

借助EOSIO Dawn 3.0,重点在于核心平台的稳定性。在接下来的一个月中,我们将为实现所有股权,投票和治理机制的终极系统合约做准备。我们也将最终确定我们的代币标准。

一旦系统合约成熟到我们满意,我们将启动一个新的公共测试网络。直到那时我们大大简化了开始自己的测试网络和开发自己的应用程序的过程。在接下来的几周内,我们将正在关闭当前的公共测试网络,同时准备新的测试网络启动以最大限度地减少开发人员的困惑。

概要

EOSIO Dawn 3.0是一个开发者版本,旨在通过稳定的API来实现“功能完整”。我们认为该平台现在已经足够稳定,可供认真的应用程序开发人员开始搭建应用程序。EOSIO已经变得比我们一年前想象的更加强大和容易开发。

我们的团队正在成长和正在以创纪录的速度发展。我们的资源库在过去的一个月里一直是所有github中十大最火热的C ++资源库之一。一切都在6月份的EOSIO 1.0中高质量公开发布!