EOSIO Dawn 3.0 是一个面向开发者的功能完整预发布版本,拥有显著的可扩展性、安全性和开发便利性。该版本引入了多个关键特性,如跨区块链通信、稀疏头验证、上下文无关的动作、交易压缩等,以提高区块链应用的性能和安全性。EOSIO目标在2018年6月推出1.0版本,现已成为构建区块链应用的强大平台。
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,以便未来的实现可以利用并行计算来加速吞吐量,而无需引入硬分叉的变化。
区块链间通信是终极的可扩展性特性——行业一直在寻找的“圣杯”,如侧链、plasma 和分片等提案。区块链间通信使一个区块链能够以可证实的安全方式验证另一个区块链上事件的真实性。我们的目标是使区块链间通信与智能合约之间的链内通信一样安全,我们认为我们已经实现了这一目标。
在我们看来,区块链间通信仅仅是作为智能合约实现轻客户端的能力。轻客户端能够验证来自一个区块链的交易,而无需处理整个区块链。这反过来意味着构建一个具有高效和安全的轻客户端验证的权益证明区块链。因此,轻客户端验证必须考虑到协议设计中,因为事后实施几乎是不可能的。
传统的轻客户端预计会处理每个区块头,然后根据这些区块头验证证明。现在,EOSIO 每秒可以生成两个块,区块链至少需要每秒处理 2 个交易,以处理每个区块头。这在间歇性区块链间通信的情况下并不可扩展。为了解决这个问题,我们创建了第一个具有拜占庭容错稀疏头验证的区块链。具体来说,它要求超过 2/3(例如,21 个中的 15 个及以上)的区块生产者必须腐败,才能试图欺骗轻客户端。此外,轻客户端只需处理活动区块生产者更改的区块头和包含相关区块链间消息的区块头。这大大减少了维护拜占庭容错轻客户端的开销,并大幅提高了区块链间通信的效率。
无上下文操作是使高效区块链间通信成为可能的关键特性之一。它们是一种特殊的操作,因为它们可以包含在交易中,但不依赖于区块链状态,因此它们是“无上下文”的。无上下文操作的例子包括验证Merkle证明或签名。由于这些计算是无上下文的,因此可以轻松进行并行验证,并且可以在重放时修剪计算。
每个无上下文操作还可以引用交易的特殊可修剪数据部分。这意味着大型Merkle证明可以被修剪,并在区块链重放过程中跳过其高成本计算。
无上下文操作使我们能够并行化与区块链间通信相关的大多数开销。它们还使我们能够并行化和修剪计算昂贵的隐私技术(例如机密交易、子弹证明和 zkSNARKs)的开销。
为了激励使用无上下文操作,区块生产者将仅在进行作为无上下文操作的计算时向用户收取少量的 CPU 使用费,而不是作为传统交易的一部分。
EOSIO Dawn 2.0 开发者所期望的某一功能是高效地生成由外部资源处理的事件。在以太坊中,这些事件用于报告合同内部操作的结构化信息。随着无上下文操作的增加,我们也有潜力进行无上下文内联操作。内联操作是由合同代码生成并作为当前交易的一部分执行的。无上下文内联操作可以以低成本并行处理。由于所有内联操作也包含在Merkle根中,因此可以将这些操作用作对外部服务和其他区块链的可证明通知。
许多交易具有大量可压缩数据。这其中最不可避免的例子是合同 WebAssembly 代码本身。其他例子包括 ABI 规范和与账户/合同相关的里卡尔迪合同。一些应用程序(如社交媒体)可能还希望将可压缩的用户生成内容包含到区块链中。
通过利用交易压缩,区块链可以更高效地存储和传输大量交易,并且向用户收取的费用低于包含不可压缩数据的交易。
与 Dawn 2.0 的最大变化之一是我们的 WebAssembly 运行时环境的抽象。Dawn 3.0 现在默认使用 Binaryen WebAssembly 解释器,而不是更快的 即时编译器 (JIT)。这个决定降低了性能但提高了稳定性和标准符合性,同时允许我们在需要时轻松切换回高性能 JIT 环境。解释器还解决了我们在 Dawn 2.0 面临的最大挑战之一:由于编译合同造成的延迟。在未来,我们可以使用解释器获得较慢但低延迟的 freshly 部署合约执行,同时在后台编译和优化合约。这种双重实现意味着我们所有的单元测试都在编译和解释代码下进行测试,因此我们可以在部署混合方法之前发现潜在的非确定性或不符合标准的行为。
随着 Dawn 3.0,我们现在有了全新的资源速率限制系统。或许最大变化是引入了一种客观指令计数算法。当我们着手构建 EOSIO 时,我们的目标是完全采用主观速率限制和执行。我们发现主观执行的成本几乎与更客观的方法相同。我们现在利用一种混合解决方案,用户按客观使用付费,但区块生产者也为合同设置主观的挂钟时间限制。这些主观限制造成的变差使用得到了防止。
我们采纳这种方法的主要原因之一是允许单个交易执行比以往更多的计算。现在,在理论上,一个区块可以包含一个运行 100 毫秒的单一交易,而在旧模型下,每个交易必须在 1 毫秒内运行。
速率限制的另一个变化是将限制与定义Token的需要分离。这允许 EOSIO 在私有的、授权的区块链中使用,而无需任何Token的使用。公共区块链可以采用一个系统合同,通过抵押实现限制,社区可以动态地升级如何分配资源,而独立于如何执行分配。
随着 Dawn 3.0 的发布,我们将区块间隔从 3 秒减少到 0.5 秒。这大大减少了确认所需的延迟。结合 BFT DPOS,交易可以在 1 秒内不可逆地确认。直到不可逆的延迟对区块链间通信具有重要影响,因为另一个区块链必须等待不可逆性才能纳入来自外部链的证明。两个基于 EOSIO 的区块链应该能够在 3 秒内进行一次往返通信。在以太坊上进行类似的通信模式需要 9 分钟,而在比特币上需要 3 小时以上。
BFT DPOS 尚未实施,因为它是一种无硬分叉的优化。我们将在发布 EOSIO 1.0 之前实施 BFT DPOS。
BIOS 架构是 EOSIO Dawn 2.0 最大的架构变化之一。在 EOSIO Dawn 3.0 中,绝大多数区块链业务逻辑已移入一个智能合约,可以通过社区动态更新,而无需进行硬分叉。最基本的 EOSIO 区块链现在是一个单个生产者,不需要任何Token、投票或委托的权益证明。实现的唯一内容是权限系统,其中包括创建账户、部署合同和执行资源配额的能力。所有使区块链成为委托权益证明的内容(包括Token、投票、抵押和资源分配)现在由基于 WebAssembly 的系统合约定义。
有了这个新架构,我们能够将开发重点放在区块链的静态非 WebAssembly 部分。这些部分对于稳定性至关重要——也是最难以升级的。在 EOSIO Dawn 3.0 和 EOSIO 1.0 发布之间,我们将处理系统合约、抵押和投票的最终细节。
安全对于任何计算系统至关重要,我们已将 EOSIO 设计为市场上最安全的区块链。安全是一个多维问题,必须考虑黑客攻击、硬件故障、硬件丢失和密码丢失的风险。硬件钱包在防止黑客攻击方面表现良好,但如果它们发生故障可能会锁定你退出账户。此外,硬件钱包的纸质备份可能会丢失或被盗。
EOSIO Dawn 3.0 的一个重要功能是增加了用户可配置的延迟,用于不同操作。在此延迟期间,交易必须广播到区块链一段时间(小时或天)才能得到应用。在此延迟期间,用户可以采取措施以更高的权限重置账户,然后取消交易。这比其他区块链的显著改进在于,你无法知道你已经被黑客攻击,直到为时已晚。
每个账户至少有两个权限级别:“所有者”和“活动”。所有者权限级别应为 N 的 M 个多重签名,其中没有不包括所有者密钥的 N。所有者权限级别可以在活动密钥丢失或被盗的任何时候重置活动权限。
如果丢失所有者密钥或你的多重签名伙伴不合作,则账户活动权限可在所有者权限无效 30 天后请求重置所有者权限。所有者权限在此后 7 天内有权通过更新活动权限来挑战该请求。
在此模式下,使用一个或多个硬件钱包控制的账户所有者权限将安全地抵御黑客攻击和设备故障。如果设备是搭载硬件的 Apple iPhone 且安全私钥通过指纹/面部识别保护,则攻击者需要妥协你的多重签名伙伴、物理盗窃你的手机以及盗取你的指纹或面孔。理想情况下,你的多重签名伙伴也在使用生物识别安全的硬件设备。
多重签名变得更加简单,用户可以独立于自己的时间增加和删除权限,而无需在传统交易的有限到期窗口内收集所有签名。通过提议系统,任何人都可以提出交易,交易相关方可以简单地批准它。在添加你的批准和获取必要阈值之间的任何时候,可以撤回你的批准。
为了实现这一系统,我们添加了新 API,允许合约评估一组账户权限是否足以授权交易。这使我们能够通过部署新的 WebAssembly 来升级多重签名流程,而无需进行硬分叉。
EOSIO 的多个目标之一是使合约开发尽可能简单和无痛。如果开发者知道如何编写带有方法的 C++ 类,他们应该能够以尽可能少的样板复杂性编写智能合约。
我们很高兴能够将我们的“你好,世界”合约简化为几行简单的代码。我们的工具链自动化了生成合约 ABI 以及将用户操作分派给你类上定义的方法的过程。开发合约从未如此简单。
你好,世界合约
简化智能合约开发的一部分是使实现开发者所需的数学算法变得更容易。区块链开发的一个最难的方面是缺乏浮点数学以及相关的幂、根和三角函数。许多算法,如 Bancor,使用浮点计算实现会简单得多,而不是强迫所有计算用容易出错且内存密集的定点计算。
我们通过集成一个软件浮点库来解决硬件浮点的非确定性特性,该库由 WebAssembly 合同透明地使用。通过软件浮点,我们在复杂情况下的代价并不高于定点计算,同时可以获得确定性和易于开发的好处。在许多情况下,定点要么更易出错,要么比确定性浮点表示更占内存。
在 EOSIO Dawn 3.0 中,我们投入了大量精力增加对大多数 C++ 标准模板库的支持。这意味着开发者可以使用他们熟悉的工具、库和算法,同时消除了由于非标准实现这些算法而导致的潜在错误。
通过定时交易,开发者现在可以编写永续运行的合约——前提是合约有足够的抵押带宽。其他平台要求离线解决方案在适当时机唤醒合约。而通过定时交易,我们能够在无需开发者托管自身服务器以保持合约运行的情况下获得效率和易用性。
在 EOSIO Dawn 2.0 下,每个交易都必须声明其将访问的数据范围。这令开发者易出错且冗长。在 Dawn 3.0 下,区块生产者负责确定哪些数据范围被访问,并进行区分。这使所有交易变得更小,并将调度开销移至区块生产者,而不是将其推回给用户、开发者或全节点。
EOSIO Dawn 3.0 引入了一个新的数据库 API,它镜像了 boost::multi_index_container。通过这个 API,支持按多个键排序的数据库表、查找项目、使用下限/上限,及在数据库中正向和反向迭代变得非常简单。这个新 API 使用迭代器接口,极大提高了通过表扫描的性能。
现在还可以在 64 位、128 位、256 位和 512 位整数以及 64 位浮点数(双精度)上拥有索引。字符串索引的支持将在 EOSIO 1.0 发布之前添加。这在灵活性和开发难度方面显著改进,因为现在可以在同一表上有几乎无限数量的索引字段。
我们的团队一直密切监控实际性能,并对目前的结果感到非常满意。我们对软件进行了多种配置的基准测试,以了解性能的下限和上限,因为我们启用未来的优化。所有这些测试假设代币转账的计算复杂性可以与比特币或以太坊 ERC20 代币转账相比较。
这是在没有任何优化下的基线性能。我们能够在运行解释器进行单线程签名验证的多节点网络中维持超过 1000 TPS。
一旦我们启用 JIT 编译器,我们可以在运行解释器的多节点网络中维持 3000 TPS,并进行单线程签名验证。
一旦我们实现并行签名验证,我们可以假定每个签名的挂钟时间将接近 0,因为并行性和签名数量的增加。我们可以通过禁用签名验证来模拟该环境。在此模式下,我们可以在一个多节点网络上以 JIT 编译器达到 6,000 TPS。
如果我们将网络代码从方程中移除,仅关注 CPU 在关闭签名验证和使用 JIT 时所能做的事情,那么我们可以达到每秒 8,000 个单线程交易。在单链上要超过此性能,需要实现 WebAssembly 的并行执行和更高级的调度器。在相同场景下,使用解释器而不是 JIT,我们可以达到 2700 TPS。这表明,相对简单的启用 JIT 的改变将为转账提供约 3 倍的性能提升。这些测量在一台 MacBook 2.8Ghz i7 上进行。
“每秒一笔交易”的定义常常是苹果与橘子的比较。通过区块链间通信,我们可以将工作负载分配给任意多的区块链。代币可以在不同链之间可靠、安全地转移。通过同一(或不同)区块生产者并行操作的 1000 条链,我们可以看到每秒数百万笔交易。这代表了其他区块链提出的理论扩展提案的实际实现。
我们强烈鼓励开发基于 EOSIO 的公共网络的区块生产者根据用户需求操作尽可能多的链。所有链可以使用相同的代币作为抵押和资源分配的基础。这将围绕单个代币创建最强的网络效应,并利用高市值代币所创造的经济激励所形成的信任和安全性。
像交易所、货币和社交媒体等应用可以轻松地在多个并行链上平衡其负载。
在 EOSIO Dawn 3.0 中,重点是核心平台的稳定性。在接下来的一个月中,我们将准备实现所有抵押、投票和治理机制的最终系统合约。我们还将最终确定我们的代币标准。
一旦系统合约达到我们满意的成熟度,我们将启动一个新的公共测试网络。在此之前,我们大大简化了启动自己的测试网络和开发自己的应用程序的过程。在我们准备新测试网络期间,即为减少开发者混淆,我们将在接下来的几周内关闭当前的公共测试网络。
EOSIO Dawn 3.0 是一个以开发者为中心的发布版本,旨在“功能完整”和稳定的 API。我们相信,现在平台足够稳定,适合严肃的应用开发者开始构建他们的应用。相比一年前的设想,EOSIO 变得更加强大且易于开发。
我们的团队正在壮大,开发以创纪录的速度进行。我们的代码库在过去一个月已经成为 Github 中活跃度前十的 C++ 代码库之一。一切都在为 6 月发布高质量的 EOSIO 1.0 准备!
- 原文链接: medium.com/eosio/eosio-d...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!