EOS.IO发布黎明破晓Dawn2.0版本 & 开发更新

原文:https://steemit.com/eos/@eosio/eos-io-dawn-2-0-released-and-development-update

随着公共测试网络的发布,EOS.IO黎明2.0也已经发布。此次发布的版本提供了我们在2017年秋天的路线图中描述的多数功能的alpha实现,当初路线图的目标是在2017年12月21日完成的。在我们的路线图中,“阶段2–最小可行测试网络”会在2017年秋天前完成如下功能:

  • p2p网络代码
  • Wasm Sanitation与cpu沙盒
  • 资源使用追踪/比率限制
  • 源输入测试
  • 区块链间通信

此时,我们已完成了多数这些功能的初始实现;然而,由于我们是并行开发,区块链间通信的实现是在独立的分支中进行,所以,此次的初始测试网络不包含此功能。

对EOS.IO黎明2.0的性能测试感兴趣的人,可以在我们的github代码仓库里找到所有必须的代码,来运行一个私有的网络。我们内部测试显示,在平均硬件条件下,使用我们的单线程实现,可以维持每秒数千笔交易以及1秒出块时间。他们说,对一些已知的攻击我们还没有解决方案。比如,首次编译新的合约可能需要34毫秒,如果被滥用的话可能会导致网络破裂,使得性能只有30tps。

对于这个问题,我们的方案是限制合约代码可以更新的频率,也就是在代码更新和合约使用新代码之间设置一个时间延迟。大约会有60秒的时间延迟,让所有的区块生产者安排时间从web assembly对x86指令进行编译/缓存。

由于存在这些攻击行为,性能测试将只能在私有测试网络中进行,而功能测试现在可以在公共测试网络中进行了,我们会把性能限制在30tps,以保证运行时间和访问。

接下来的六个月,我们会持续地进行测试和debug,以提高稳定性和性能。

黎明1.0中的新功能

源输入测试

我们实现了一个快照工具,它能输入初始的基于在以太坊网络上分发的EOS ERC-20代币的状态。我们的测试网络将只包括那些注册了有效EOS公钥的账号。目前大约有20%的ERC-20代币已经注册了EOS公钥。我们的快照工具还实现了一个回退工具,对于那些没有注册的ERC-20代币,我们可以从以太坊交易中恢复公钥。这功能覆盖了99%的EOS ERC-20代币,不过将需要输入你的以太坊私钥到你的EOS.IO钱包里去。

处于安全考虑,我们的测试网络将不会要求用户输入他们通过回退过程恢复的以太坊私钥。如果在测试的过程中,你的EOS私钥不安全,你可以在以太坊网络上注册一个新私钥。

代币水龙头

我们还实现了一个“水龙头”功能,能让那些没有代币的人或还没有注册有效EOS公钥的人也能对网络进行测试。

资源使用与比率限制

我们实现了基本的比率限制和资源使用追踪功能。这能追踪带宽,数据库存储,和计算的使用情况。目前,我们的比率限制算法海有些bug,但是,这不影响测试和应用的开发。

我们知道,很多人一直在问关于比率限制是怎么运作的问题,由谁来付费,他们怎么样出租他们的代币来获得收入等等。

带宽

所有的交易都会消耗网络带宽。交易需要的所有账号将会根据交易的大小,平均多拥有3天的带宽。只有拥有代币或由应用提供者代理代币的授权账户(不是合约)才能拥有带宽。

计算带宽

所有的交易都会消耗计算资源。计算可以并行执行,所以它能被视为多道高速公路,每条车道的路况都不相同。每个scope(车道)都拥有独立的比率限制,一个用户将会根据并发scope(车道)请求的数量的O(S^2)来计费,并且基于最拥堵的scope进行比率限制。

数据库存储

EOS.IO合约能访问内存数据库,该数据库可以保存应用状态。该合约根据他们存储的总数据进行计费,再加上对每个独立数据库入口的一个固定的管理费用。这个内存数据库是独立的,与EOS.IO Storage协议–用于去中心化托管与存储—分离的。

p2p网络代码

对于网状网络代码我们有了一个基本的实现,这 在我们的公共测试网络中有所展示。Block.one运行了21台独立的服务器,每台服务器都由初始生产者中的一个进行配置。

EOS黎明3.0

EOS黎明3.0将会通过安全的区块链间通信重新定义单链的水平拓展和无限拓展。有了这两个特性,在区块链上进行开发将不再有限制,如何把区块链网络去中心化也不会再有限制。

无限拓展与无限去中心化

区块链技术的最高目标就是能确保两个独立区块链之间的通信是安全的,而不需要两条区块链都去验证另一条区块链上的所有信息。这个要求就需要把一条区块链变成另一条区块链的轻客户端。

轻客户端只使用区块头和默克尔证明来验证交易。EOS.IO将是第一个支持轻客户端验证的pos协议。更重要的是,它将是唯一一个生成完整性证明(proof-of-completeness)的协议。这意味着,它将可能证明你收到了从其他链发来的所有相关信息,而不需要等待。

传统的轻客户端需要处理所有的区块头,而EOS.IO将让轻客户端只需要在生产者改变,或者当一个更新的区块需要一条新消息的时候,才去处理区块头。这将能让链之间能实现高效的频繁通信。在最坏的情况下,两条区块链间每500毫秒的通信成本将只比所有发送信息的数量多2tps。

在这种模式下,只要至少1/3的区块生产者是诚实的,通信就是安全的。而且,即使有一个生产者不诚实,如果他们签署了任何可能腐化轻客户端(外部区块链)的信息的话,他们就会自动地受到惩罚。

最后,与另外的区块链进行通信的往返时间,取决于延迟,直到每条链都是不可逆的。一条基于EOS.IO的链将能把消息发送给一条外部EOS.IO链,然后能在3秒内获得经过加密验证的回复。

这个级别的区块链间通信和安全性,能创建低延迟的链之间的双向锚定。除了双向锚定这个最显而易见的例子之外,任何b2b的通信都能使用这种方法来执行。

公共/私密通信

通过链间通信,就有可能让私有区块链能与共有区块链进行安全的双向通信。这适用于所有那些不适合公有的传统区块链的区块链应用。比如,人们可能创建区块链的瑞士银行,它对每个人都是顶级机密,除了该银行的拥有者。

开发过程

为了发布我们的公共测试网络,我们把我们的开发分成了两个并行的分支,这样我们就能对重要的部分进行 重构,让它更易读,性能更高,同时实现区块链间通信。这个重构的工作在eos-noon分支中进行。

在过去的更新中,我们提到我们专注于共享存储架构,这样开发者就能轻松地与其他合约执行同步读访问与原子事务。这么做就让单台后端机器丧失了水平拓展性。

在EOS 黎明3.0中,我们通过使用高达65000个不同的region,来恢复多机水平拓展能力。所有的region拥有相同的账户和合约代码,但是在内存数据库中是独立的。一个region中的合约必须使用一步事务与他们在其他region中的对应方进行通信。使用这种架构,单个区块生产者就能作为簇来实现。

集成苹果的安全硬件

在我们的上次更新中我们宣布了我们将支持苹果,安卓和很多智能卡都使用的椭圆曲线。我们的eos-noon分支现在包含了一个完整功能的概念证明,在这个证明中,消息都经过最新版的MacBook Pro的Touch ID(以及Face ID)的签署和验证。相似的代码也会用在iphone原声应用上。这意味着,基于EOS.IO的移动应用将跻身于已知的最安全的区块链钱包之列。

而且,eos-noon分支现在已经集成了对多签名类型的支持,也就意味着,可以使用安全硬件来对将会在eos-noon上进行 验证的交易进行签名。

500毫秒区块验证

在我们的eos-noon分支,我们已经实现了对底层dpos框架的多个改进,以支持500毫秒区块验证(每秒2个区块)。这个改进将提高去中心化应用的反应能力。为了做到这一点,我们对区块如何调度进行了修改。

相同的生产者现在能接连生产12个区块,然后交给下个生产者。这解决了区块生产的最大瓶颈,也就是生产者到生产者切换的问题。在这个新的结构中,每次切换的时候,不可预期的延迟可能会导致少数丢块,但是,在切换之间,就能快速确认。我们将会进行不同的切换期实验。切换期越长,正常操作的丢块就越少,但是如果单个节点宕机的话,宕机的时间就越长。有了500毫秒确认以及每12区块切换的性能,“宕机时间”不会比steem和比特股上的单个生产者丢失一个块的情况更差。在这种情况下,需要6秒的时间来做首次确认。

移除备选生产者

区块链间通信要求轻客户端对所有活跃生产者集合发生变化的区块进行追踪。“备选生产者列表”导致一个新的生产者每分钟都会被加上或删除,这就强制轻客户端每秒至少处理一个区块头,如果不是更多的话。为了减少生产者集合变化的频率,我们改变了区块的调度,改为只包含前21位生产者。我们考虑给予备选生产者某些补偿,但是他们将不会再生产区块。

一秒不可逆性

每个区块生产者会签署每个区块,一旦2/3的生产者签署了它,它就是不可逆的了。每个区块高度,生产者只能签署一个区块头。这意味着如果产生了分叉,生产者不能在两个分叉中的相同高度上签署区块。这种签名会被认为是不当行为,做出这种行为的生产者会受到惩罚,比如自动丢失生产者地位,潜在的奖励损失,以及在仲裁中承担损失责任。

与其他协议不同,他们要求在生产下个区块前能得到超过2/3的签名,EOS DPOS允许区块链在征集签名的时候同时推进“挂起状态“。这些附加的签名在区块链之外进行,并且能在一个区块是不可逆的之后删除。

在这种模式下,就可能实现拜占庭容错,因为没有拜占庭节点的加密学证据,任何区块都不可能达到超过2/3的签名。

移除生产者调度洗牌(shuffling)

为了把生产者切换之间的丢块数量减到最小,就需要把连续生产者时间的延迟最小化。如果一个在纽约的生产者被安排在一个在中国的生产者之后,正常情况下它就需要250毫秒去接受区块(50%的区块间隔),如果网络拥堵的话时间可能更长。另一方面,纽约和德州的生产者只有50毫秒的延迟(10%的区块间隔)。这意味着在从纽约到德州之间的切换比从纽约到中国的切换的丢块可能性要低得多。

如果我们如此安排区块生产,从纽约开始,到德州,到加州,到夏威夷,到日本,中国,印度,以色列,意大利,英国,冰岛,再回到纽约,那么生产者切换之间的延迟就不会超过50到100毫秒。然而,如果顺序是随机的话,平均的切换时间会显著提高。

生产者洗牌(shuffling)是为了把一个生产者挑选继任生产者的可能性最小化才引入的。这个风险存在于假定生产者可能是恶意的情况下,而在一个高度审查,公开,生产者具有高质量数据中心的情况下,这种风险便不复存在。如果生产者故意的伤害了其他人,我们会有宪法和其他的措施来解决争端。

在EOS下,生产者会对生产循环顺序进行投票,以最大限度地减少平均延迟,并减少由于因特网网络拥塞造成的总错失块。

已知问题

EOS黎明2.0存在一些已知的问题,而对于早期版本的不稳定性也在预料之中。这次发布的目的在于演示基本功能,我们的团队将会在接下来的6个月中,修复bug提高稳定性和性能。

为了保证测试网络的稳定性,我们禁掉了生产者投票的功能。

结论

感想我们的开发团队,加班加点,通力合作,发布了EOS 黎明2.0,一个将来会是最健壮,性能最高,最去中心化的应用平台的alpha版本。我们会执行我们的路线图,发布更多的功能。我们希望在2018年,在EOS代币销售结束之前,能完成所有功能,修复所有bug,我们对此很有信心。

此条目发表在 未分类 分类目录。将固定链接加入收藏夹。

评论功能已关闭。