EOS.IO发布黎明2.0版本开发更新

译者:岳利鹏、许莉,原文:https://steemit.com/eos/@eosio/eos-io-dawn-2-0-released-and-development-update

EOS.IO Dawn 2.0 已经发布,此次发布提供了由 block.one 团队维护的一个公开测试网络,对于 2017 年秋季路线图,以及原定于 2017 年 12 月 21 日前完成的大部分功能,此次发布也都提供了 Alpha 实现。正如我们路线图所公布的,“第二阶段 – 最小可行测试网络”将在 2017 年秋季之前展示如下内容:

– P2P 网络代码

– wasm 检测和 CPU 沙盒

– 资源利用跟踪/限制率

– 创世块导入测试

– 链间通信

目前,我们已经完成了大部分功能的初步实现。但是,由于并行开发路线的安排,链间通信的实现在一个单独的分支上进行,所以初始测试网络将不会用上链间通信的功能。

EOS.IO发布黎明2.0版本&开发更新

如果您对 EOS.IO Dawn 2.0 的性能测试感兴趣,可以在 Github 仓库找到启动和操作一个私有网络的所有区块链和网络代码。我们的内部测试表明,在普通硬件上,单线程实现可以承受每秒数千次传输和可处理多个块。即便如此,对于一些已知的攻击方式,我们还没有实现对应的解决方案。比如,首次编译新合约可能需要 34 ms,如果被利用,可能导致网络以超过 30 TPS 的交易速率碎片化。

针对这个问题,我们的解决方案是限制合约代码更新的频率,并限制代码更新与处理使用新代码交易之间的时间延迟。这个时间延迟将在 60 秒左右,以期能够让所有的块生产者有时间从 web assembly 中编译/缓存优化后的 x86 指令。

由于这些不可忽视的攻击方式,私有测试网络的其中一项任务仍然是性能测试,但是功能测试现在已经可以在公开测试网上进行了,我们已经将公开测试网人为地限制在 30 TPS,以确保正常的运行时间和访问。

在接下来的 6 个月里,我们将不断对网络进行测试和调试,以提高稳定性和性能。

Dawn 2.0的新特征

初始状态导入测试

我们实现了一个快照工具,它将根据分布在以太坊网络上 EOS ERC-20代币来导入初始状态。我们的测试网络只包含了注册有效EOS公钥的余额。大概有20%的ERC-20代币已经注册到了一个EOS的公钥中。我们的快照还为以太坊账户所有未注册的ERC-20代币提供了一个恢复工具,这个工具可帮我们从已签署的以太坊交易中恢复公钥。这包含了99%的EOS ERC-20代币,但是还将需要你导入你的以太坊私钥到你的EOS.IO的钱包里。

出于安全考虑,我们的测试网络不会要求用户导入他们的以太坊私钥然后通过恢复工具进行恢复。如果你的EOS私钥在测试的时候受到威胁,你可以随时在以太坊网络上注册一个新密钥。

代币“水龙头”

我们还实现了一个“水龙头”功能,这样就可以允许那些没有代币或者还没有注册一个有效的EOS公钥的人们进行网络测试。

资源使用和费率限制

我们实现了基本的费率限制和资源使用追踪。它追踪带宽、数据库存储以及计算力使用。这个时候我们的费率限制算法存在着一些已知的bugs,但是这不会影响测试和应用程序的开发。

我们知道有很多人都很关心费率限制相关信息,比如谁将会被收费,还有如何将它们的代币租出去以此换来收益等等。

带宽

所有的交易都会消耗掉区块生产者设置的网络带宽的最大值。拥有交易所需权限的所有账户根据交易的大小将会有3天的平均带宽增加。带宽会要求授权账户(不是合约)放置代币或由应用程序提供者委托代币。

计算带宽

所有的交易都消耗计算力。计算可以是并行地进行的,所以你可以把它想象成多个车道的高速公路,每个车道都拥有不同的拥挤程度。每个范围(车道)都会有自己独立的速率限制,并且基于最拥挤的程度,用户将针对同时请求的范围(通道)数量和速率限制来计费O(S^2)。

数据库存储

EOS.IO合约有访问内存数据库的权限,它们可以在该数据库存储状态。合约收费是根据它们存储数据的总和以及每个独立数据库条目的固定开销 ,这个内存数据库是独立的并且与EOS.IO的存储协议是分开的,这样做是为了让内存的膨胀不那么集中。

P2P 网络代码

对于mesh网络代码,我们已经有了基本实现,并且这些代码正在公开测试网络中试运行。目前 Block.one 运行了 21 个独立的服务器,每个服务器都配置了一个初始生产者。

EOS黎明3.0

EOS Dawn 3.0将通过安全的区块链间通信,重新解释单链水平扩展和无限扩展。有了这两个特点,对于区块链技术可以建立什么样的东西,以及区块链网络如何去中心化就都没有限制了。

无限扩展与无限去中心化

区块链技术的圣杯是在两个独立区块链之间实现安全通信,而不需要某一区块链验证另一个区块链上的所有内容。这需要使一个区块链成为另一个区块链的轻客户端。

轻客户端只使用块头和Merkle证明来验证交易。 EOS.IO将成为第一个支持轻客户端验证的POS协议。更重要的是,它将能首次产生Proof-of-Completeness。这意味着您可以证明您已经提前收到来自其他链的所有相关消息,无需等待或接受挑战的时间。

而传统的轻客户端必须处理所有的块头,EOS.IO将使轻客户端只需要当出块人改变、或需要一个更近块的新消息时再处理块头。这将使得高效率的频繁通信成为可能。在最坏的情况下,两个区块链每500毫秒一次通信的开销将比发送的消息总数高出约2个交易。

在这种模式下,只要至少有三分之一的生产者是诚实的,通信就会得到保证。此外,即使一个生产者腐败,如果他们签署任何可能破坏轻客户(或者叫外部区块链)的消息,他们会自动受到惩罚。

最后,传递到另一个区块链的往返时间取决于每个链不可逆的最终确定性等待时间。一个基于EOS.IO的链将能够发送一条消息给外部的EOS.IO链,并在3秒内得到一个密码学验证的响应。

这种级别的链间通信和安全性使得能够以非常低的延迟在链之间创建双向挂钩。虽然双向挂钩是最常见的例子,但任何商业之间的通信都可以用同样的方法进行。

公有/私有通信

通过跨链通信,私有区块链可以与公有区块链进行安全的双向通信。这使得各种不适合公有性质的传统区块链应用成为可能。例如,有人可以创建瑞士银行的区块链,除了银行业主和个人之外,对每个人都是超级秘密。

开发进展

为了交付我们的公共测试网络,我们将开发划分为两条平行路径,以便我们可以重构代码的重要部分以实现可读性、性能和跨链通信。这个重构工作已经在eos-noon分支上开展。

在过去的更新中,我们表示我们打算专注于共享内存架构,以便开发人员可以轻松地与其他合约执行同步读取访问和原子事务。这种方法的后果是丧失了单台高性能机器的水平扩展性。

借助EOS Dawn 3.0,我们将通过使用最多65000个不同的分区region来恢复执行多机横向扩展的能力。所有分区将共享相同的帐户和合约代码,但在内存数据库中是独立的。一个分区内的合同必须使用异步交易与其他分区的合作伙伴进行通信。有了这个架构,一个块生产者可以作为一个集群来实现。

集成苹果的安全硬件

在上次更新中,我们宣布了我们打算支持Apple,Android和许多智能卡使用的椭圆曲线。我们的eos-noon分支现在包括一个全功能的验证概念,在最新的MacBook Pro上使用Touch ID(也包括Face ID)对消息进行签名和验证。类似的代码也适用于本机iPhone应用程序。这意味着基于EOS.IO的移动应用将成为已知最安全的区块链钱包

此外,eos-noon分支现在已经整合了对多种签名类型的支持,这意味着可以使用安全硬件来签名需要在eos-noon上进行验证的交易。

500毫秒区块确认

在我们的eos-noon分支上,我们对底层的DPOS框架实施了一些改变,以支持500 ms的块(每秒2个块)。这一变化将大大提高去中心化应用程序的响应速度。为了实现这一点,我们在区块调度发生方面进行了一些改变。

同一个生产者将连续生产12块,然后交给下一个生产者。这解决了从生产者到生产者交接的块生产中最大的瓶颈。在新的结构下,意外延迟可能会导致每次切换时都会丢失几个块,但是在切换之间应该有非常快的确认。我们将尝试不同的交接期。交接期时间越长,在正常操作期间丢失的块越少,但是如果单个节点停机,则停机时间越长。在500毫秒的时间内,每隔12个区块,“停机时间”也不会比单个生产者在Steem和BitShares上丢失单个区块时更差。在这种情况下,首次确认可能需要6秒。

去除替补生产者

跨链通信需要轻客户端跟踪活跃生产者集合发生变化的所有区块。“替补生产者名录”造成每分钟会增加或删除一个新生产者,这迫使轻客户每分钟处理至少一个块头。为了减少生产者变更的频率,我们改变了区块调度结构,只包括前21名生产者。我们正在考虑为替补生产者提供某种待命薪酬,但他们实际上不会负责生产区块。

一秒不可逆

每个区块生产者将签署每个区块,只要大于2/3的生产者签署了该区块,这个区块就可以被标记为不可逆的。生产者只能在每个块高度上签署一个块头。这意味着,如果有分叉,生产者不能在两条分叉的相同高度上签名区块。任何这样的签名都是生产者不当行为的密码证明,可以通过多种方法处理,包括自动丧失生产者地位,潜在的抵押损失,以及仲裁可能造成的损害赔偿责任。

不像其他协议需要在出下一个块之前收集大于2/3的签名,EOS的DPOS流水线允许区块链在“等待状态”中前进而签名收集。这些额外的签名发生在区块链之外,并且在Steem或BitShares的传统DPOS规则下,区块在变得不可逆转之后可以进行修剪。

在这个模型下,有可能实现拜占庭容错,因为任何块不可能接收到大于2/3的非拜占庭节点的密码证据签名。

删除生产者洗牌计划

为了最小化生产者切换期间丢失块数量,我们希望可以最小化两个生产者之间的延迟。如果纽约的生产者计划跟随中国的生产者,在正常情况下(块间隔的50%)可能需要250ms的时间才能接收到该数据块,如果网络拥堵,可能需要更长的时间。另一方面,纽约和得克萨斯州的生产者只有50ms的延迟(块间隔的10%)。这意味着在从纽约到德克萨斯的交接比从纽约到中国的路由丢失的可能性要低得多。

如果我们安排从纽约到德克萨斯州、加利福尼亚州、夏威夷、日本、中国、印度、以色列、意大利、英国、冰岛,然后回到纽约的区块生产,那么从来没有超过50到100ms。但是,如果顺序是随机的,那么平均交接时间将显著增高。

生产者洗牌被引入,以最大限度地减少一个生产者选择后续生产者的潜力。这个风险存在于一个生产者被认为是恶意的世界,但在高度审查公有的生产者与高品质的数据中心的世界里,它不再有意义。如果一个生产者故意伤害他的邻居,会有宪法和可预期的行为流程来解决争端。

在EOS下,生产者将以平均等待时间最小化的方式对生产者排序进行投票,把网络拥塞而导致的总丢失块最小化。

已知的问题

EOS Dawn 2.0 存在一些已知的问题,不过早期版本出现严重的不稳定性也在预料之内。 这次发布的目的在于展示基本功能,在未来的 6 个月,我们的团队将会致力于解决 bug,提高稳定性和性能。

为了支持测试网络的稳定性,我们已经禁止了生产者投票。

结束语

在这里要感谢我们的开发团队,为了开发交付 EOS Dawn 2.0,全球范围内展开了通力工作,,这是一个将成为最强大,性能最高,最分散的应用平台的 alpha 版本。 我们正在按照我们发布的路线图执行,并提供比原计划更多的功能和能力。 我们期待到2018年,并且有信心在EOS令牌分发完成之前,所有功能都将完成并解决错误。