EOS Dawn 3.0 (翻译稿)

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

翻译方式:机器翻译。

block.one很高兴地宣布eosio的第一个功能完整的预发布,Dawn3.0。这个预发布代表了eosio 1.0发展道路上的一个重要里程碑,旨在于2018年6月发布。我们的全球开发团队一直在全天候工作,使eosio成为构建区块链应用程序的最强大平台。我们发布eosio Dawn 2.0已有四个月了,我们还有很多需要展示的东西。

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

可扩展性功能

可扩展性意味着可以扩展以满足市场需求。我们的团队在每一步都考虑到了未来扩展需求。那就是说,Dawn3.0只实现了一小部分潜在的优化,可以让eosio进行扩展。我们设计了eosio,以便将来的实现可以利用并行计算来加速吞吐量,而不会造成硬件更改。

区块链间通信

区块链间通信是最终的可扩展性特征 - 圣杯 - 业界一直在寻找诸如侧链,等离子和分片等提案。区块链间通信使一个区块链能够以可证实的安全方式验证另一个区块链上事件的真实性。我们的目标是让区块间通信像智能合约之间的内部链式通信一样安全,我们认为我们已经实现了这一目标。

从我们的角度来看,区块间交流只不过是具备将轻客户作为智能合约来实施的能力。轻客户端可以验证区块链中的交易,而无需处理整个区块链。这反过来意味着建立一个有效和安全的轻客户端验证的股权证明区块链。因此,轻客户端验证必须纳入协议设计中,因为在事实之后几乎不可能实施。

稀疏标题验证

传统的光客户端需要处理每个块头,然后验证相对于这些块头的校样。现在eosio可以每秒产生两个块,区块链每秒至少需要2个交易来处理每个块头。这并不适用于区块链间通信相对不频繁的情况。为了解决这个问题,我们创建了第一个带拜占庭容错稀疏报头验证的区块链。具体地说,它要求块生产者中超过2/3(例如15个中的15个以上)腐败以试图欺骗轻客户。此外,轻客户端只需处理活动块生成器集更改的块标题以及包含相关区块链间消息的块标题。这显着降低了维护拜占庭容错轻客户端的开销,并大大提高了区块链间通信的效率。

上下文自由行为

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

每个上下文无关的动作也可以引用一个事务的特殊修剪数据部分。这意味着在区块链重播过程中可以修剪大型Merkle证据并跳过昂贵的计算。

上下文无关操作使我们能够并行化与区块链间通信相关的绝大部分开销。它们还使我们能够并行化和修剪昂贵的计算隐私技术,如机密交易,子弹证明和zksnarks。

为了激励使用上下文自由动作,当作为上下文自由动作的一部分执行计算而不是作为传统事务的一部分执行计算时,块生产者将仅向用户收取一部分cpu使用量。

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

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

事务压缩

有很多交易有很多可压缩数据。其中最不可避免的例子就是合约webassembly代码本身。其他例子包括与帐户/合同相关的abi规范和ricardian合约。一些应用程序(例如社交媒体)也可能希望在区块链中包含可压缩的用户生成内容。

通过利用事务压缩,与具有不可压缩数据的事务相比,区块链可以更有效地存储和传输大量事务,并为使用可压缩数据的事务处理用户的费用减少。

转义和即时编译

来自Dawn2.0的最大变化之一是webassembly运行时环境的抽象。Dawn 3.0现在默认使用binaryen webassembly解释器,而不是更快的即时(jit)编译器。这个决定会降低性能,但会提高稳定性和标准一致性,同时允许我们在需要时轻松交换更高性能的jit环境。口译员也解决了我们面对Dawn2.0所面临的最大挑战之一:编制合同造成的延误。在将来我们可以使用解释器来获得新部署的合同的较慢但较低延迟的执行,同时我们在后台编译和优化合同。这个双重实现意味着我们所有的单元测试都针对编译和解释代码进行了测试,因此我们可以在部署混合方法之前发现潜在的非确定性或非标准符合性行为。

资源计量速率限制

随着Dawn3.0,我们现在有了一个全新的资源速率限制系统。也许最大的改变是引入了客观的指令计数算法。当我们着手构建eosio时,我们的目标是完全使用主观限速和执行。我们发现,主观执法的成本几乎与更客观的方法相同。我们现在使用混合解决方案,其中用户按客观使用计费,但块生产商也在合同上设置主观挂钟时间限制。这些主观限制防止了客观账单中的方差滥用。

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

速率限制的另一个变化是限制与界定令牌的需要的分离。这允许eosio在没有任何使用令牌的情况下用于私人的,许可的区块链。公共区块链可以采用系统合同,通过放样来实现限制,社区可以动态地升级如何分配资源与执行分配的方式无关。

500 ms块间隔和bft dpos

在Dawn3.0时,我们已经从3秒的块间隔移动到0.5秒的间隔。这大大减少了延迟,直到确认。当与bft dpos结合使用时,交易可在1秒内不可逆转地得到确认。直到不可逆转性对区块链间通信产生重大影响为止,因为另一个区块链必须等待不可逆转性才能结合来自外部链的证据。两个基于eosio的区块链应该能够在3秒内执行往返通信。以太坊的类似交流模式需要9分钟,比特币需要3个多小时。

bftdpos尚未实施,因为它是非硬性优化。我们将在发布eosio 1.0之前实施bft dpos。

bios架构

bios架构是eosio Dawn 2.0中最大的架构变化之一。根据eosio Dawn 3.0,绝大多数区块链业务逻辑已经转变为智能合约,可以由社区动态更新,而不需要硬分叉。一个简单的eosio区块链现在是一个单一的生产者,没有任何代币,投票或委托证明。在核心区块链代码中实现的唯一功能是权限系统,其中包括创建帐户,部署合同和强制执行资源配额的功能。所有使得区块链委托包括令牌,投票,放样和资源分配在内的股权证明现在由基于web组件的系统合同定义。

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

安全功能

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

安全延迟交易

eosioDawn 3.0最重要的功能之一是增加了一个用户可配置的延迟,用于不同的操作。有了这个延迟,交易必须在区块链上广播几个小时或几天,然后才能应用。在这段延迟期间,用户可以采取措施重置其拥有更高权限级别的帐户,然后取消交易。与其他区块链相比,这是一个重大改进,您不知道自己已经被黑客入侵,直到对此做任何事情都为时已晚。

丢失密码恢复

每个帐户至少有两个权限级别:“所有者”和“主动”。在没有n不包含所有者密钥的情况下,所有者许可级别应该是m multisig中的n。主动权限级别可以在主动权限丢失或被盗时重新设置主动权限。

如果您失去了所有者密钥,或者您的多合作伙伴不合作,则在拥有者许可30天后,帐户活动许可可以请求重置所有者权限。所有者权威机构则有7天时间通过更新活动权限来挑战请求。

在这种模式下,由一个或多个硬件钱包控制的账户所有者权限将可以安全地防止黑客攻击和设备故障。如果该设备是带有硬件和指纹/脸部识别的安全私钥的苹果iphone,则攻击者需要妥协多人合作伙伴,窃取您的手机,窃取您的指纹或脸部。理想情况下,您的multisig合作伙伴也正在使用生物识别安全硬件设备。

交易提案制度

当用户可以在自己的时间独立添加和删除权限时,多重管理变得更加容易,而不必在传统交易的有限到期时间范围内收集所有签名。通过提案制度,任何人都可以提出交易,交易涉及的各方可以简单地批准。在增加您的批准和获得必要的门槛之间的任何时候,您的批准可以被删除。

为了实施这个系统,我们添加了新的apis,允许合同评估一组帐户权限是否足以授权交易。这允许我们通过部署新的webassembly来升级multisig进程,而不是要求使用hardfork。

简化合同开发

eosio的众多目标之一就是使合同开发尽可能地简单和无痛。如果一个开发人员知道如何用方法编写一个c ++类,那么他们应该能够编写一个尽可能少的样板复杂性的智能合约。

我们很高兴将我们的“hello world”合同简化为几行简单的代码。我们的工具链已自动生成合同abi并将用户操作分派给您班上定义的方法。开发合同从未如此简单。 

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;

struct hello : public contract {
    using contract::contract;
  
    void hi( name user ) {
        print( “Hello, “, user );
    }
};

EOSIO_ABI( hello, (hi) )

HelloWorld Contract

浮点支持

简化智能合同开发的一部分使得开发人员所需的数学算法更容易实现。区块链开发最困难的一个方面是缺乏浮点数学和相关的权力,根,和三角函数。许多算法(如bancor)在浮点方面实现起来要容易得多,而不是强迫所有计算进入容易出错和内存密集的固定点。

我们通过集成由webassembly合约透明使用的软件 - 浮点库来解决硬件浮点的非确定性性质。有了软件浮点数,我们就可以获得确定性和易于开发的好处,而且复杂情况下的成本并不比固定点高。在很多情况下,固定点比确定性浮点表示要么更容易出错,要么内存更密集。

c ++标准模板库支持

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

预定交易

对于定期交易开发商,现在可以编写永久运营的合同 - 只要合同具有足够的带宽。其他平台则需要非连锁解决方案在合适的时间启动合同。通过定期交易,我们可以提高效率和易用性,而无需开发人员托管自己的服务器以保持合同运行。

自动范围检测

在eosio Dawn 2.0下,每个事务都需要声明它将访问的数据范围。这对开发人员来说很容易出错和冗长。在Dawn3.0之前,块生产者负责确定访问哪些数据范围并解除冲突。这会使所有事务更小,并将调度开销移至块生产者,而不是将其推回到用户,开发人员或完整节点上。

多索引数据库API

eosioDawn 3.0引入了一个反映boost :: multi_index_container的新数据库API。使用这个api,支持按多个键排序的数据库表,查找项目,使用下限/上限,以及在数据库上向前和向后迭代都很简单。这个新的api使用了一个迭代器接口,它极大地提高了扫描表的性能。

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

性能

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

最坏的情况 -  1000 tps

这是我们的基准性能,没有任何优化。我们能够使用运行具有单线程签名验证的解释器的多节点网络维持超过1000 tps的速度。

平均情况 -  3000 tps

一旦我们打开jit编译器,我们就可以使用运行具有单线程签名验证的解释器的多节点网络来维持3000tps。

最好的情况 -  6,000 tps

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

理论案例 -  8,000 tps

如果我们从等式中删除网络代码,并只关注cpu在关闭签名验证和使用jit时能够执行的操作,那么我们可以达到每秒8,000个单线程事务。要在单个链上比这更高,需要实现webassembly的并行执行和更高级的调度程序。在这种情况下,使用解释器而不是jit,我们可以看到2700 tps。这表明启用jit的相对简单的改变将使我们的转移性能提高约3倍。这些测量是在Macbook 2.8ghz i7上进行的。

每秒无限次的交易

“每秒交易次数”的定义往往是桔子比较的苹果。通过区块链间的沟通,我们可以根据需要在区块链之间划分工作量。令牌可以可靠和安全地在不同的链之间转移。由相同(或不同)块生产者并行运行的1000条链,我们可以看到每秒数百万的交易。这代表了其他区块链提出的理论扩展方案的实际实现。

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

应用程序(如交易所,货币和社交媒体)可以轻松平衡跨许多并行链的负载。

前方的路

随着eosioDawn3.0的重点是核心平台的稳定性。在接下来的一个月中,我们将准备实施所有投标,投票和治理机制的最终系统合同。我们也将最终确定我们的令牌标准。

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

总结

eosioDawn 3.0是一个开发人员发布的版本,旨在“功能完备”,具有稳定的apis。我们认为该平台现在已经足够稳定,可供严肃的应用程序开发人员开始构建其应用程序。eosio的功能比我们一年前想象的更强大,更容易开发。

我们的团队不断壮大,发展正在以创纪录的速度发展。我们的仓库在过去的一个月里一直是所有github中十大最活跃的c ++仓库之一。一切都在为6月份eosio 1.0的高质量公开发布而努力!



猜你喜欢

转载自blog.csdn.net/xc70203/article/details/79915363
eos