美文网首页
(BM)EOS Dawn 3.0介绍...

(BM)EOS Dawn 3.0介绍...

作者: 大圣2017 | 来源:发表于2018-07-31 17:36 被阅读142次

    2018-6-28 EOS暴力入门(五)| 解读EOS白皮书2.0之TPS性能奥秘

    EOS Dawn3.0 正式发布,对于EOS的百万TPS之路,又更进了一步!本部分就针对白皮书2.0的性能奥秘做相应解读,EOS为何可以达到百万的TPS。

    交易确认

    典型的DPOS区块链可以保证有100%区块生产者参与。一个交易从广播开始后平均 0.25秒就可以 99.9% 被认为是确认了。在DPOS共识机制下,EOS.IO 通过增加异步拜占庭容错更快的实现了交易的不可逆。异步拜占庭容错算法在1秒内便可确认这种100%的不可逆性。

    交易作为权益证明

    EOS.IO软件要求每个交易都包括最近的区块头部分哈希。 这个哈希有两个目的:

    1. 防止不包含引用区块的分叉上出现重复的交易记录;
    2. 通知整个网络用户和权益都在某个特定的分叉上。

    随着时间的推移,所有用户最终都会直接确认区块链,这使得伪造链变得困难,因为伪造者无法将合法链中的交易迁移。

    概念解析
    1. 异步拜占庭算法(aBFT)——此前的BFT算法,如实用拜占庭容错算法PBFT是基于同步假设,性能很差,实用性低。而基于异步假设的BFT算法,弱化了假设,使得性能大幅提升。

    2. 区块头(block header)——区块数据在逻辑上分为区块头和区块体,我们先来看看比特币、以太坊、EOS数据结构对比:

    从三个区块头结构,便可以看出三者之间的对比。

    比特币和以太坊都需要挖矿去寻找随机数nonce,但EOS的区块头中却不需要浪费算力去挖矿。取而代之的是21个超级节点作为生产者,去生产区块。

    1. 交易作为权益证明(TaPOS) ,交易包含最近的区块头哈希,具体来说由以下三个部分构成:Reference block number (引用的区块号)、Reference block header (引用的区块头)、Expiration time of transaction (交易过期时间)。

    从这段交易的示例来看,ref_block_num、ref_bolck_prefix(区块头哈希值的前缀)、expiration, 构成了这个交易,确保一笔交易在所引用的区块之后和交易过期日期之前能够发生。

    1. 每秒交易数(transactions per second,简称TPS,又叫吞吐量),影响tps的因素有三个:出块速度、确认时间、容量。以比特币为例:其出块速度为10分钟、确认时间为60分钟(需要六个节点确认)、容量为1M。如果把出块速度由10分钟降为1分钟,则tps提升10倍;如果把容量1M扩容到8M,则tps提升8倍。比特币的分叉也正是因为扩容争端引起,可见tps对于区块链性能起着一个至关重要的作用

    大圣注:TPS是性能方面的一个重要指标,其他指标还有相应延迟,并发用户数等。

    2018/04/06 EOS百万TPS的终级奥义!EOS Dawn 3.0终于上线了

    版权声明:

    本文由IMEOS首发,搜索“IMEOS”即可订阅,转载必须保留以上声明,仅授权原文转载。本译文由IMEOS提供翻译。
    本文于4月6日发表在Daniel Larimer的medium上,标题为《EOSIO Dawn 3.0 Now Available》。Daniel Larimer是EOS的创始人,简称BM。

    Block.one已经激动地宣布EOSIO第一个功能完整的预发布——EOSIO Dawn 3.0。

    此预发布版本代表着即将在2018年6月发布的EOSIO 1.0道路上的一个重要里程碑。为了使EOSIO成为构建区块链应用程序的最强大平台,我们全球的开发团队一直在全天候工作。 距离我们发布EOSIO Dawn 2.0以来已经过去四个月了,而我们有很多要展示的东西。

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

    可扩展性

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

    跨链通讯

    跨链通讯是终极的可扩展性功能, 业界一直在寻找诸如 侧链,plasma和分片等技术实现跨链通讯。

    跨链通讯使一个区块链能够以可证实的安全方式验证另一个区块链上的事件的真实性。目标是让区块链之间的通讯像智能合约之间的内部链式沟通一样安全,我们认为我们已经实现了这一目标。

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

    稀疏区块头验证

    传统的轻客户端需要处理每个区块头,然后验证区块头的证据。 现在EOSIO可以每秒生成两个区块,区块链至少需要2 tps才能处理每个区块头的数据。 这不适用于存在相对频率不高的跨链通讯上。 为了解决这个问题,我们创建了第一个带拜占庭容错稀疏区块头验证的区块链

    • 具体而言,为了试图欺骗轻客户端,它需要超过2/3的区块生产者(例如,21个中的15个以上)腐败。
    • 此外,轻客户端只需处理两种区块头数据:活跃区块生产者们发生的变化以及那些包含相关跨链通讯的信息 。 这大大减少了维护拜占庭容错轻客户端的开销,并大大提高了跨链通讯的效率。

    “上下文无关”行为

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

    每个“上下文无关”的动作也可以引用一个事务的部分特殊可修剪数据。这意味着可以修剪大型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的私钥。任何时候活动密钥丢失或被盗,"owner"的权限级别都可以重置active权限。
    • 如果你失去了“owner”密钥,或者您的多重签名合作伙伴不合作,则账户的active权限可以在,owner权限闲置30天后请求重置owner权限。 owner则有7天时间通过更新active权限来抵制请求。

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

    交易的提案系统

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

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

    简化合约开发

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

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

    浮点支持

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

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

    C++ 标准模板库支持

    对于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在六月份发布高质量的公开版本,一切都在稳步推进!

    相关文章

      网友评论

          本文标题:(BM)EOS Dawn 3.0介绍...

          本文链接:https://www.haomeiwen.com/subject/eelfvftx.html