正文
行内消息传递(inline message passing)
现在,给另一个应用发送消息比任何时候都容易,并且你能确定它一定会被接收和验证。一个应用可以生成任意多的附加信息,添加到当前交易的末尾上去。只要这些生成的消息的读/写作用域相同,并能在分配的时间中执行,那么它们就一定会被分发,否则整个交易将会失效。
这种方式与其它平台使用的同步方式都不一样。同步消息发送有可能产生预料不到的重入性问题。重入性问题已经是无数bug和崩溃的一个来源,因为,对于开发者来说,他们在发起同步调用前,很难确保他们的合约状态是一致的。而使用行内消息传递方式,它把执行操作延迟到当前交易处理器之后进行,开发者就能分发消息,如果分发成功就能进行处理。如果分发失败,整个交易就会失效,而不会产生其它有害到副作用。这意味着你的消息处理器永远不会在一致的状态中调用。
延迟消息传递
有时候你不知道一条消息是否有效,或者,是否有足够的时间,使用当前交易进行行内处理。有时候你需要发送一条能在当前交易作用域之外访问数据的消息。这种情况下,应用可以要求区块生产者对消息进行调度,安排它在下一个周期或未来的一个区块进行分发。如果它是有效的,就会通知你的应用,如果是无效的,它就永远不会被调度,你的应用在超时之后就可以进行清理了。
无限制水平拓展
EOS.IO最新的设计给予了开发者极高的单机性能;能把业务拓展到百万级tps,而不需要复杂的异步架构。
也就是说,EOS.IO软件依然将支持应用组(不需要共享状态)之间的异步消息传递。
异步消息传递(比如普通蔟支持)有很多好处,但是这些好处是有成本的,就是它需要更大的开发复杂度;EOS.IO支持那些需要数百万tps的业务这么做,但是对于性能要求没这么高的业务,EOS.IO提供了一种流水线的简单方式。
下一代网络拓扑
EOS.IO的设计初衷是,让区块生产者提供高性能去中心化架构作为服务。应用开发者需要很多区块生产者来聚集交易,他们需要API 节点,种子节点,数据库索引,存储以及主机服务。
高性能区块链需要高性能网络架构,这种架构跟目前已有的区块链都不一样。要达到百万级tps,每个节点就需要达到100 MB每秒每链接。这对于大型数据中心来说是很平常的,但是对于普通家庭用户来说,却是不可想象的。
此外,高性能区块链还包含着各式各样的节点,这些节点运行着区块链的不同子集,并且可能会对交易历史进行修剪。这与以往的区块链系统是一个很大的区别,以往的区块链系统要求所有的节点都是一致的,并且保存着完整的历史记录。