本文参考并精炼 2017年9月3日的文章https://steemit.com/eos/@eosio/the-dawn-of-eos-io
在EOS.IO的技术白皮书中,我们认为EOS.IO是区块链计算的新时代的一缕曙光。
能力验证
EOS.IO 内部测试表示已经能够支持每秒超过10,000单线程传输在多点的网络中。
更有信心让我们达到在100个CPU的支持,达到超过每秒一百万个交易的目标。
设计进步:
通过最新的软件构架的提升,让EOS更容易构建�并行应用和应用间的交流。
分享式的数据库读取能力
现在已经可以实现在无需复杂异步通讯通过一个应用程序读取另一个应用数据库的能力。同时保留了通过运行每一个交易声明自己的需要读取和写入的data range的方式实现并行交易。声明信息会让Block producers更好的规划交易的传输而不会出现数据冲突。
用户本地对应用程序的存储能力
应用程序目前可以把data存储在其他非程序的个人账户中,以便支持跨账户读取数据。一个现金合约可以把余额信息存储在和该合约有关个人账户中,而不只是记录在合约本身上。 Alice到Bob的转账只需要对Alice和Bob的范围进行读/写访问,不会影响现金合约的范围。这使许多类应用程序平行并行,并且可以处理超过单线程吞吐量限制的货币转移。 目前,没有其他的块链设计像EOS一样支持这种可扩展和简单的方法开发并行软件体系结构。
内联消息传递
现在比以往任何时候都更容易向另一个应用程序发送消息,并确定它将被接受和验证。应用程序可以生成任何数量的附加消息来附加到当前事务的结尾。只要这些生成的消息共享相同的读/写范围,并且可以在分配的时间内执行,系统讲保障整个交易和传输顺利完成。
这种方法与其他平台使用的synchronous方法不同。同步消息传递,直到返回可靠值之前会一直阻止当前线程的执行,这很有可能造成reentrancy。Reentrancy一直是许多错误和漏洞的来源,因为developers难以确保合同和进行同步调用之前的状态一致。使用内联消息传递,这将延迟执行消息,直到当前事务处理程序结束,才可以成功发送消息。如果失败,整个交易将被解除,解除不会带来任何副作用。这意味着你的消息处理程序从不被调用在不一致的状态。
函数可重入性(Reentrancy)
Wikipedia的解释
reentrancy: if it can be interrupted in the middle of its execution, and then be safely called again ("re-entered") before its previous invocations complete execution.
一个程序在执行过程中被中断,仍然能够重新安全的运行
Reentrancy :A function is said to be reentrant if there is a provision to interrupt the function in the course of execution, service the interrupt service routine and then resume the earlier going on function, without hampering its earlier course of action. Reentrant functions are used in applications like hardware interrupt handling, recursion, etc.
消息传递延迟
不知道消息是否有效,或者是否有足够的时间与当前事务并行。其他时候,您需要发送访问交易范围之外的数据的数据。在这种情况下,应用程序可以请求block producers调度在下一个周期或几个周期的区块进行消息发送。
如果被确认有效,您的申请可能会被通知;如果没有,那么该消息将不会被安排,并且您的应用程序超时后会被清理。
无限水平扩张
EOS.IO软件的最新设计进步为开发人员提供了高性能的单机性能,每秒可以扩展到一百万次事务,而无需复杂的异步结构。
也就是说,EOS.IO软件仍然支持在不需要共享状态的应用程序组之间异步消息传递。异步消息传递(如简单的群集支持)有许多好处,但是这些好处的代价就是系统会变的异常复杂。
EOS.IO软件为每秒需要数百万次交易的企业提供支持,但仍然为没有这种需求的企业提供简易的途径。
下一代拓扑结构
EOS.IO软件旨在使块生产者能够提供高性能分散式基础设施作为服务。 developers不仅需要block producers来处理交易,还需要API节点,种子节点,数据库索引,存储和托管。
高性能块链需要与现有块链有非常不同要求的高性能网络架构。 每秒需要百万次事务,每个连接需要每个节点达到每秒100 megabytes。 这对于大型数据中心来说是微不足道的,但对于家庭用户来说却是不可思议的。
此外,高性能块链由运行不同子块的异构节点组成,并且可能会修改交易历史。这是与所有之前的节点相同并具有完整历史的先前区块链系统有明显不同。
传统的块链由网状网络中的动态节点随机相连组成。它们服务的目标群体是家庭用户,并设计为遍历家庭路由器(NAT),并向网络动态添加节点。但这种架构不太适合高性能块链基础设施。
NAT: Network address translation (NAT) is a method of remapping one IP address space into another by modifying network address information in Internet Protocol (IP) datagram packet headers while they are in transit across a traffic routing device.
网络地址转换: NAT:网络地址转换(NAT)是一种将一个IP地址空间重新映射到另一个IP地址空间的方法,通过修改Internet协议(IP)数据报包头中的网络地址信息,并通过流量路由设备进行传输。
EOS.IO软件从假设所有节点有意连接起来。节点运营商协同工作,确保网络拓扑安全,计划良好,高效。这允许block producers建立彼此的直接(和安全)连接,并防止攻击者扫描整个网络拓扑结构,寻找节点进行攻击。
block producers将托管公共端点,任何人可以连接到并且订阅他们想要的交易数据的任何子集。这将最大限度地减少非block producers运行的完整节点的带宽要求。不想信任单个块生产者的节点可以订阅多个源或等待块生产者的⅔确认(约45秒)。
45 seconds:
For absolute certainty that a transaction is irreversible, a node may choose to wait for confirmation by 15 out of the 21 block producers. Based on a typical configuration of the EOS.IO software, this will take an average of 45 seconds under normal circumstances. By default all nodes will consider a block confirmed by 15 of 21 producers irreversible and will not switch to a fork that excludes such a block regardless of length.
为了确保一个交易绝对不可逆,一个节点可以选择等待 21 个区块生产者中的 15 个给出确认。 基于通常的 EOS.IO 配置,在一般情况下这需要平均 45 秒的时间。 默认情况下,所有的节点将认为当 21 个生产者中有 15 个给出确认后这一区块就是不可逆的了,并且不管长度如何都不会切换到没有这一区块的分叉。
这种架构的好处是,新的节点可以以非常高的速度和block producers提供的高带宽基础设施建立连接和同步信息。此外,该架构旨在产生高效的单向流,而不是低效双向协议。
第一级的producer包括block producers和第二级的Subscriber
subscribers:
a person who receives a publication regularly by paying in advance.
在规模上,block producers将运营一个由EOS.IO软件提供支持的新互联网骨干。block producers将如同跨大陆的专用光纤连接的一级网路提供商。这些producers将运行的数据中心以便位于第二级的subscriber连接。第二级的EOS用户包括要运行全部或部分节点或大型应用程序的人员。例如,像区块浏览器,网络钱包和加密货币交换商这样的服务的第二级用户将是block producers的subscriber。
我们认为这种有意合作网络建设的架构将使block producers在加密货币产业提供非常有价值并独特的服务。
前方
在近年9月,EOS.IO会发布EOS.IO Dawn 1.0,会成为一个足够稳定并有完备文档的版本,足以支撑用户测试他们的网络并创建并部署应用程序。
EOS.IO Dawn 1.0会成为第一个释放的EOS.IO SDK
我们已经在计划之前了,Phase 2我们将完成最小可用测试环境的建造。我们设定的最小可用测试环境包括standalone node, native contracts, 虚拟机API,RPC interface,命令行工具(eosc),和其他基本的developer文档。 这Phase 2阶段会在2017年的9月22日完工。
standalone node: (of computer hardware or software) able to operate independently of other hardware or software.
RPC: causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction.
EOS IO Dawn 2.0版本会在年底出,包括一些关键性能:
- 资源限制(防止spam和滥用)
- 产生Merkle Tree(用于跨链交流)
- 管理和监管升级
- 更加强大的SDK
- 基础设施提升
- 基于ERC20 tokens 示例快照
2.0的目标是成为让EOS.IO可以真正上线的区块链应用
存储方法
developer可以在第一时间创造并部署一个去中心化的应用和网络接口,而无需担心�带宽和存储费用。这样的设计为高存储需求的商业模式提供了去中心化的结局方案:类似Youtube,SoundCloud。可以通过IPFS协议或HTTPS协议获取免费的云存储,hosting服务,而无需支付EOS token。
block producers 会通过IPFS/HTTPS来host文件给用户并允许其他用户也下载。
存储的资源会通过blockchain emissions的方式支付给producers。并根据token持有者的token数目进行限流。每一个token的可以获得存储空间的大小会随着block producers的硬件水准的提高不断增加。
更多的细节,会在上海和伦敦的路演中展示出来。