技术分享—— 解析Vite异步架构设计



  • Vite是一个无手续费的高性能公链,率先实现了基于DAG结构的智能合约。原创的异步架构、分层共识及快照链技术,让Vite的性能和成本处于行业领先水平,可以支持商业级应用。在近期,Vite Labs将开展一系列Vite技术分享,向社区展示Vite的技术特点及原理,本期将向大家解析Vite异步架构设计原理,它是Vite公链能同时做到高速和免费的基础技术之一。

    前言:
    Vite 是新一代响应式区块链 (Reactive Blockchain), 采用了基于消息驱动的异步架构,在其生态体系中,异步是一个很重要的概念,也是 Vite 十分重要的一个创新点。

    Vite 中的异步设计主要包括三个方面:

    • 请求和响应的异步设计
    • 交易写入和确认的异步设计
    • 合约间通信的异步设计

    异步请求模型

    Vite 中的交易分为请求交易和响应交易。无论是一笔转账还是一次合约调用,均会在账本上先后生成两笔交易。

    1.png
    异步请求图解

    一笔转账交易可以拆分成一个出账交易和一个入账交易;一个合约调用交易可以拆分成一个合约请求交易和一个合约响应交易;每个合约内部的消息调用,可以拆分成一个合约请求交易和一个合约响应交易。

    这样拆分之后,每个交易只影响一个账户的状态,交易之间不会彼此阻塞,有利于与提高系统的吞吐能力。同时,不同账户的交易可以分布在网络中的不同的节点上,为系统带来了扩展性。

    异步确认模型
    Vite 中,交易写入账本和被系统确认也是异步的。不同的用户可以并行的将交易写入账本,快照链将以固定的速度对账本进行快照。一旦交易被快照,就可以认为是 1 次确认,随着快照链的增长,确认数也会累积。
    2.png
    异步确认图解

    异步确认机制可以削平交易写入速率的峰谷,最大化利用系统资源。

    Vite 采用分层的 HDPoS 共识算法,账本中每条账户链产生候选的局部共识结果,最高层级的快照链从局部共识结果中选择出最终的共识结果。

    异步通信模型
    Vite 的合约间通信采用了一种基于消息驱动的架构,合约间不共享状态,只通过彼此发送消息进行通信。

    3.png
    异步通信模型图解

    一个合约调用另一个合约,需要先发送一个请求交易,在逻辑上类似于向 MQ 中生产一个消息。运行目标合约的节点观测到这条请求交易后,向账本中写入一个对应的响应交易,并更新合约的状态。这个操作相当于从 MQ 中消费一条消息。如果需要返回结果,目标合约会以同样的方式向源合约发送另一条消息。

    在这个模型中,Vite 的账本担任了消息中间件的角色,并且可以保障消息的 Exactly Once 语义。

    基于消息的架构具有高吞吐和扩展性的优势。但与此相应,付出的代价是编程模型变得相对复杂,无法保证强一致性,而且有可能使延迟变大。

    Vite 将提供 Solidity++ 合约语言以及完善的 SDK,降低异步编程的成本。经过认真的研究,我们发现在实际场景中,强一致性语义是可以用 BASE 语义替代的。由于 Vite 的 HDPoS 共识算法可以保障交易确认在 1 秒之内完成,因此,延迟的增加仍然在可控范围之内。

    提示:以上文档仅作为介绍使用,若需要了解具体细节,请点击【Vite白皮书】查看。

    Vite白皮书:https://github.com/vitelabs/whitepaper/blob/master/vite_cn.pdf


Log in to reply