EOS的黎明

EOS的黎明

2017 9月3日

译者:Aimee,peter

在EOS.IO的技术白皮书中,我们认为EOS.IO软件是区块链计算的新时代的黎明。这个夏天,EOS.IO的开发团队都在努力工作。现在夏天结束了,EOS.IO的开发进度也比计划的要快。现在已经可以使用分布式网络配置了。本文我们将报告EOS.IO的诸多进展情况,请读完本文。

性能证明(proof of performance)

现在EOS.IO软件已经可以使用到分布式网络配置中了,所以我们可以对它的性能进行测试。我们的内部测试显示,目前EOS.IO软件在多节点网络中的单线程每秒交易量达到10000笔。这样,在拥有超过100个CPU的机器上就能支持超过100万的tps(transactions per second)性能。

改进设计

我们最新的软件架构做了改进,开发者在上面开发并行应用将会更加容易。开发者们听到这个消息应该会比较开心。

共享数据库访问

我们现在可以允许一个应用去读取另外一个应用的数据库状态,而不需要复杂的异步通信。同时,通过允许每笔交易对它需要读或写的范围进行声明,我们还保留了并行执行的能力。区块生产者们将对交易进行调度,因此网络中不会存在数据冲突。

应用数据的用户本地存储

除了支持跨账户的读操作,应用现在还能把数据保存到其它账户上。这意味着一个现金合约可以把余额保存到每个用户的账户上,而不是保存到现金合约自己的作用域内。从Alice到Bob的交易只需要读/写Alice和Bob的作用域,而不会影响现金合约的作用域。这样就能让很多应用并行地执行,并能让现金转账的处理突破单线程吞吐量的限制。目前就我们所知,还没有其它的区块链支持这样的可拓展的方式来开发并行软件架构。

行内消息传递(inline message passing)

现在,给另一个应用发送消息比任何时候都容易,并且你能确定它一定会被接收和验证。一个应用可以生成任意多的附加信息,添加到当前交易的末尾上去。只要这些生成的消息的读/写作用域相同,并能在分配的时间中执行,那么它们就一定会被分发,否则整个交易将会失效。

这种方式与其它平台使用的同步方式都不一样。同步消息发送有可能产生预料不到的重入性问题。重入性问题已经是无数bug和崩溃的一个来源,因为,对于开发者来说,他们在发起同步调用前,很难确保他们的合约状态是一致的。而使用行内消息传递方式,它把执行操作延迟到当前交易处理器之后进行,开发者就能分发消息,如果分发成功就能进行处理。如果分发失败,整个交易就会失效,而不会产生其它有害到副作用。这意味着你的消息处理器永远不会在一致的状态中调用。

延迟消息传递

有时候你不知道一条消息是否有效,或者,是否有足够的时间,使用当前交易进行行内处理。有时候你需要发送一条能在当前交易作用域之外访问数据的消息。这种情况下,应用可以要求区块生产者对消息进行调度,安排它在下一个周期或未来的一个区块进行分发。如果它是有效的,就会通知你的应用,如果是无效的,它就永远不会被调度,你的应用在超时之后就可以进行清理了。

无限制水平拓展

EOS.IO最新的设计给予了开发者极高的单机性能;能把业务拓展到百万级tps,而不需要复杂的异步架构。

也就是说,EOS.IO软件依然将支持应用组(不需要共享状态)之间的异步消息传递。

异步消息传递(比如普通蔟支持)有很多好处,但是这些好处是有成本的,就是它需要更大的开发复杂度;EOS.IO支持那些需要数百万tps的业务这么做,但是对于性能要求没这么高的业务,EOS.IO提供了一种流水线的简单方式。

下一代网络拓扑

EOS.IO的设计初衷是,让区块生产者提供高性能去中心化架构作为服务。应用开发者需要很多区块生产者来聚集交易,他们需要API 节点,种子节点,数据库索引,存储以及主机服务。

高性能区块链需要高性能网络架构,这种架构跟目前已有的区块链都不一样。要达到百万级tps,每个节点就需要达到100 MB 每秒每链接。这对于大型数据中心来说是很平常的,但是对于普通家庭用户来说,却是不可想象的。

此外,高性能区块链还包含着各式各样的节点,这些节点运行着区块链的不同子集,并且可能会对交易历史进行修剪。这与以往的区块链系统是一个很大的区别,以往的区块链系统要求所有的节点都是一致的,并且保存着完整的历史记录。

一条传统的区块链由mesh网络中随机链接的节点的动态集合。他们的目标是普通家庭用户,带宽有限,它们透过家庭路由器(NAT),动态地往网络中添加节点。我们认为这种架构不符合高性能区块链架构的需求。

EOS.IO软件一开始就假设所有节点都是互相链接的。节点操作者协同工作,确保网络拓扑是安全的,计划良好的,以及是高效的。这就让区块生产者能互相建立起直接的(且安全的)链接,并且能防止攻击者通过扫描整个网络拓扑,然后寻找节点进行攻击。

EOS的黎明

区块生产者将托管公共端点,任何人都可以以此连接和订阅他们想要的交易数据的任何子集。这将最大限度地减少非区块生产者运行的完整节点的带宽需求。不想信任单个区块生产者的节点可以订阅多个资源或者等待2/3区块生产者的确认(约45秒)。

这种架构的好处在于,新的节点可以以非常高的速度从区块生产者提供的高带宽基础设施进行连接和同步。此外,这种架构旨在促进有效的单向流,而不是低效的双向协议。

在规模上,区块生产者将运营一个由EOS.IO提供支持的新的互联网主干网。区块生产者将如同使用跨大陆的专用光纤连接的一级互联网供应者一样。生产者将运行耳机用户可以连接的数据中心。第二级主要包括运行全部或部分节点、大型应用的人员。例如,像区块浏览器、网络钱包和加密货币交易这样的服务将会是区块生产者的二级用户。

我们认为这种有意合作网络建设的架构将使区块生产者在加密货币行业中提供独特、有质量的服务。

前方的道路

今年九月,block.one将发布EOS.IO Dawn 1.0版本,它应该足够稳定,足够记录,足以让任何人启动自己的测试网络,以便他们可以构建和部署应用程序。EOS.IO Dawn 1.0版本将是EOS.IO SDK(软件开发工具包)的第一个预发行版本。

那些关注我们EOS.IO进程的人应该很高兴看到我们提前了。(您可以在(https://github.com/EOSIO/Documentation/blob/master/Roadmap.md查看我们的进程。)第一阶段,最小可行测试环境,包括独立节点、原生合同、虚拟机API、RPC接口、命令行工具(eosc)和基本开发者文档已经完成。我们将作为EOS.IO Dawn 1.0的标签版本。这个阶段预计在2017年夏天完成,实际将于9月22日结束。

我们已经完成了第二阶段——最小可行测试网络的一半。该阶段计划于2017年秋季完成,包括工作网络代码、虚拟机沙盒、资源使用和速率限制、成因导入和区块链间通信。目前我们已经有功能分布式网络和虚拟机沙盒。我们相信能按计划完成第二阶段。

EOS.IO Dawn 2.0的版本,也是下一个主要的预发行版本,将在年底推出。EOS.IO Dawn 2.0将包含1.0中不存在的几个关键功能,包括:

1.资源率限制(防止垃圾邮件/滥用)

2.默克尔树算法(用于跨链通信)

3.升级管理和监管

4.更强大的SDK

5.一般基础设施的改善

6.来自ERC20的代币示例快照

EOS.IO Dawn 2.0版本的目标是足够有效到能启动一个运行中的区块链。还有一件事……

EOS的黎明

EOS.IO存储

开发人员第一次能够创建和部署一个分布式应用和web界面,而不必担心带宽和存储成本,甚至可以自己托管任何服务器。这开创了新的创新性、去中心化的商业模式,比如去中心化的YouTube、Soundcloud或其他存储密集型项目。

除了计算带宽外,本地EOS.IO的基于软件的区块链代币所有者现在可以通过IPFS / HTTPS访问免费的云存储、托管和下载带宽,这种访问可以在不消耗、不交易代币的情况下进行。

为了实现这一点,区块生产者将在IPFS上为用户托管文件,并允许其他用户下载这些文件。存储资源通过区块链发行支付,并按照持有量对代币持有者进行速率限制。像EOS.IO带宽的模式,存储不会消耗EOS.IO的区块链代币,存储量会随着区块生产者硬件的升级而增加。

EOS.IO软件存储解决方案还可以支持那些没有代币的公共托管,更多细节将在上海和伦敦举办的区块链行业峰会上公布。

声明

block.one是一家软件公司,生产免费、开源的EOS.IO软件。该软件可以让人在上面部署后启动基于EOS.IO软件、拥有上述特征的区块链或去中心化应用。block.one不会启动基于EOS.IO软件的公共区块链。实现上述的功能并提供合适的服务是第三方、社区成员和那些想要成为区块生产者的人的唯一责任。block.one不保证任何人实现上述功能、提供上述服务,block.one也不保证EOS.IO以任何方式接受和部署软件。

本文件中的所有声明,除了历史事实的陈述,包括block.one的商业战略、计划、前景、发展和目标的陈述,均为前瞻性的表述。这些声明只是预测和反映了block.one对于未来事件的信念与期望,基于假设,随时面临风险、不确定性和变化。鉴于风险和不确定因素,请您不要依赖这些前瞻性的表述。实际结果可能是,业绩和事件与前瞻性表述中的含义大不相同,产生差异的因素包括但不限于:市场波动、资本持续供给、融资和人员、产品接受度、任何新产品和新技术的成功、竞争、政府法规、经济大环境、市场和商业条件。block.one的任何前瞻性表述在发布之日生效,且block.one没有义务,也明确表示不承担更新或更改表述的义务,无论其作为结果、新信息、后续事件或是其他作用。

来源:peterchen145