EOS Dawn 3.0上线,BM中文介绍全文发布

in #eos6 years ago

https://zhuanlan.zhihu.com/p/35400040

以下为BM在Medium上发布的文章中文版:

原标题:EOSIO Dawn 3.0 Now Available

Block.one很高兴地宣布EOSIO第一个功能完备的预发行版--Dawn 3.0正式发布。 这是EOSIO1.0在2018年6月份发布之前的一个重大里程碑。为了使EOSIO成为构建区块链应用程序的最强大平台,我们的全球开发团队一直在全天候工作。 距离我们发布EOSIO Dawn 2.0以来已经过去四个月了,这次我们有很多要展示的东西。

构建最先进的区块链架构是一个随着我们开发进度不断调整的过程。 我们在Dawn 3.0中完成的许多功能在最初的EOSIO白皮书中都没有涉及,但是在构建高性能、灵活且易于开发的平台的过程中,我们扩展了这些功能。

可扩展性

可扩展性意味着通过扩展来不断满足市场需求。 我们的团队在每一步都将未来扩展需求纳入设计中。 也就是说,Dawn 3.0只实现了一小部分潜在的优化,可以让EOSIO进行扩展。 我们设计了EOSIO,以便将来的实现可以利用并行计算来加速吞吐量,不需要通过硬分叉就能继续升级。

跨链通讯

跨链通讯是终极的可扩展性功能, 业界一直在寻找诸如侧链,plasma和分片等技术实现跨链通讯。跨链通讯使一个区块链能够以可证实的安全方式验证另一个区块链上的事件的真实性。 目标是让区块链之间的通讯像智能合约之间的内部链式沟通一样安全,我们认为我们已经实现了这一目标。

我们认为,跨链通讯只不过是具备将轻客户端作为智能合约的能力。 轻客户端可以验证区块链中的交易,而无需处理整个区块链。 这反过来意味着需要建立一个具备高效安全的轻客户端验证机制的POS区块链。 因此,轻客户端验证必须纳入协议设计中,否则,跨链通讯几乎不可能实现。

稀疏区块头验证

传统的轻客户端需要处理每个区块头并且验证区块头的特征值。 EOSIO每秒生成两个区块,区块头的处理至少需要2tps。 这不适用于相对罕见的跨链通讯。 为了解决这个问题,我们创建了第一个带拜占庭容错稀疏区块头验证的区块链。 具体而言,至少需要三分之二(比如21个中的15个)的生产节点叛变,才能蒙骗轻客户端。 此外,轻客户端只需处理两种区块的头部:活跃生产节点变化以及包含相关跨链通讯的区块 。 这大大减少了轻客户端维护拜占庭容错的开销,并大大提高了跨链通讯的效率。

“上下文无关”Action

“上下文无关”Action是实现高效跨链通讯的关键功能之一。 它们是特殊的Action,因为它们可以包含在交易中,但不依赖于区块链状态,因此它们是“上下文无关(context-free)”的。 “上下文无关”的一个例子是验证merkle值。 由于这些计算是“上下文无关”的,因此可以并行进行简单验证,并且可以省去那些重复计算。

每个“上下文无关”Action也可以引用一个交易的特殊可删减数据片段。这意味着可以删减庞大的Merkle证明,并且在区块链重复时跳过复杂的计算。

上下文无关的行为使我们能够并行化与跨链通讯相关的绝大部分算力承载。 它们还使我们能够平行处理并修剪昂贵的计算隐私技术,如机密交易,Bullet proofs和zkSNARK等。

为了激励"上下文无关"行为, 当计算作为“上下文无关”的一部分而不是作为传统交易的一部分执行时,区块生产者仅仅只向用户收取部分CPU使用费。

上下文无关的内联方式生成事件

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

交易压缩

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

利用交易压缩,区块链可以更有效地存储和传输大量交易,并且对于记账用户来说,拥有可压缩数据的交易 少于 不可压缩数据的交易。

解释器 & 即时编译器

Dawn 2.0最大的变化之一就是WebAssembly运行时环境的抽象。 Dawn 3.0现在默认使用Binaryen WebAssembly解释器,而不是更快的Just-in-Time(JIT)编译器。 这个决定会降低性能,但会增加稳定性和标准一致性,同时允许我们在需要时轻松交换更高性能的JIT环境。 解释器也解决了我们面对Dawn 2.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个多小时。

BFT-DPOS尚未实施,因为它是非硬分叉优化。 我们将在发布EOSIO 1.0之前实施BFT-DPOS混合共识算法。

BIOS架构

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

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

安全特性

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

安全延迟交易

EOSIO Dawn 3.0最重要的功能之一是增加了用户可配置的延迟以适应不同的操作。 有了这种延迟,交易必须在区块链上广播几个小时或几天,然后才能应用。 在这段延迟期间,用户可以采取措施重置具有更高权限级别的帐户,然后取消交易。 这是一个重大改进:在其他区块链平台上,等你知道你被黑客攻击时,为时已晚。(注:类似于我们通过延迟到账以打击金融诈骗,减少损失。)

丢失密码可恢复

每个帐户至少有两个权限级别:“owner”和“active”。

owner的许可级别应该是多重签名脚本的 N of M 机制, 其中所有的N都包含owner的私钥。 任何时候active密钥丢失或被盗,"owner"的权限级别都可以重置active权限。

如果你失去了“owner”密钥,或者您的多重签名合作伙伴不合作,则账户的active权限可以在owner权限闲置30天后请求重置owner权限。 owner则有7天时间通过更新active权限来抵制请求。

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

交易的提案系统

用户可以在他们自己的时间独立添加或移除他们的权限,而不是在有限期限的传统交易窗口必须收集所有的签名,这使得多重签名更加容易。在交易提案系统内,任何人都可以提出一个交易,并且参与交易的各方都可以简单的批准它。在获得你的批准和获得必须的门槛这段期间内的任何时间,你可以移除你的批准。

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

简化合约开发

对于EOSIO,我们的许多目标之一就是让合约的开发尽一切可能轻松。如果开发人员知道如何编写一个C++类的方法,那么他们应该能够编写一个尽可能不复杂的智能合约。

我们很高兴已经简化我们的“hello world”合约到几行简单的代码。我们的工具链已经自动化生成合约ABI的过程,并且调用用户action到定义于你类目的方法。开发合约从来就不是一件容易的事。

#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) )

Hello World Contract

浮点支持

简化智能合约开发的一部分,是使其更容易实现数学算法开发人员的需要。区块链发展最困难的方面之一就是缺乏浮点运算和相关能力、根和三角函数。许多算法,例如Bancor,都是更容易实现浮点方面,而不是强迫所有计算指令容易出错和内存密集定点。

我们用WebAssembly合约集成一个软件浮点库,解决了硬件浮点的不确定性。通过软件浮点,我们可以在复杂的情况下,以不大于固定点的代价获得确定性和易用性的好处。在许多情况下,定点比确定性浮点表示更容易出错或内存密集。

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

计划事务

对于计划事务开发者,只要合约提供了足够的带宽,他们就能够永久运行合约。其他平台需要在链下才能在适当时间唤醒合约。通过计划事务,我们无需开发人员托管自己的服务器来维持合约运行就可以提高效率和易用性。

自动示波器检测

在EOSIO Dawn 2.0下,每个事务都需要声明它将访问的数据范围。这对开发人员来说是易出错和累赘的。在Dawn 3.0下,区块生产者负责确定访问哪些数据范围并解除冲突。这使得所有事务更小,并将调度系统开销移动到区块生产者,而不是将其推回到用户,开发人员或全节点上。

多重索引数据库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 TPS。

正常平均情况——3000 TPS

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

最好的情况——6000 TPS

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

理想情况——8000 TPS

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

无限制每秒事务数

对于TPS的定义就好比比较苹果与橙子。由于跨链通信,我们可以根据需要在不同链之间分配工作量。代币可以可靠并且安全的在不同链之间转移。由于相同(或不同)矿工并行运行1000条链,我们可以看到每秒数百万的交易。这代表了其他区块链提出的理论扩展方案的实际实现。

我们强烈鼓励基于EOSIO的公开网络的矿工根据需要运行尽可能多的链以满足用户需求。所有链都可以使用相同的代币作为权益和资源分配的基础。这将最大可能的创造单一代币的网络效应,并充分利用高市值资本化代币形成经济激励的信任和安全性。

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

未来之路

EOSIO Dawn 3.0的核心在于平台的稳定性。在接下来的一个月中我们将准备最终的智能合约,以能够执行所有的权益、投票和治理机制。我们也将最终确定我们的代币标准。

一旦系统合约成熟到令我们满意,我们将启动一个新的公共测试网络。在此之间,我们会大大简化搭建测试网络和开发应用的过程。在接下来的几周内我们会逐渐关闭当前的测试网络,同时会准备新的测试网络以减少开发人员的困惑。

总结

EOSIO Dawn 3.0是一个拥有稳定API的功能完备的开发者版本。我们认为该平台现在已经足够稳定,可供认真的应用程序开发人员开始构建应用程序。EOSIO已经变得比我们一年前想象的更加强大和容易开发。我们的团队在成长,开发也在以创纪录的速度向前推进。我们的仓库在过去的一个月里一直是github中十大最活跃的C ++仓库之一。为了EOSIO 1.0在六月份发布高质量的公开版本,一切都在稳步推进!

参与的社区将驱逐那些只想着租赁的投票买家;并奖励那些利用选举出来的广播权为所有社区成员带来利益的人,而不是奖励那些为了给特殊的利益群体(如投票卖家)带来利益的人。我坚信在市场份额竞争中这样一个社区远比选择投票买家的社区更有竞争力。

本文由IMEOS.ONE翻译,经HelloEOS精校。