与从传统区块链的架构差别ETH 是一台同步的状态更新机器,由交易触发智能合约,对状态进行共识;而 DFINITY 是一台异步的消息处理机,容器同时进行消息的接收、计算、返回,对消息的处理顺序共识。容器间不会共享状态,只会通过通讯来处理事务。 ETH 2.0、波卡、Layer2 其实都属于分层架构,这种架构依然存在着瓶颈,无法无限扩容,并不是终极方案。即使我们可以把不同的应用分配在不同的 layer2/ 平行链 / 分片上扩展性能,但 layer2 间 / 片间 / 平行链间的通讯依然要通过总线,而总线本身的性能上限决定了系统的性能上线,是确定的。 但与分片 / 多链架构不同的是,DFINITY 没有总线 / 主链 / 中继链 / 信标链的设计,子网之间是完全对等的,任意两个子网都能通过自己的链签名事务,通过事务直接交互,而不需要经过某个上层调度链,因此子网的数量不是固定,可以按需无上限增加,从而最终实现无限扩容。 原子性问题一切即 actor,DFINITY 使用的编程模型与传统区块链有一定差异,反而与传统互联网的 akka 类似。 DFINITY 中的智能合约(即容器)之间的交互也与以太坊不同,DFINITY 的智能合约内部是向存在一个唯一线程,但是容器之间的交互是通过发送异步消息进行,因此容器间可以进行异步操作。如果一个容器向另一个容器发送请求后,需要等待另一个容器的处理结果,才能进行下一步操作。 DFINITY 中存在很多个对等的子网,智能合约会随机的部署上子网。对于部署合约的开发者与使用合约的用户来说,他们并不知道这个合约运行在哪一个子网中,因为片间通讯是无感的。在同一个子网的两个容器的交互,与在不同子网上两个容器的交互,在延迟、安全性、复杂度上都没有差别,因此无法感知到子网之间的差别。这也是异步消息系统的好处。 这样 DFINITY 获得了近乎无限的扩容能力,大大提升了通用计算能力。但这也导致了合约间的交互失去了原子性,而在以太坊上利用原子性特点实现了很多独特的服务,比如 DeFi 的闪电贷清算机制。 在失去了原子性后,开发者面临着新的挑战,特别是在实现 DeFi 应用上,如果依然按照过去以太坊上的编程范式,这导致交易失败后状态无法恢复的问题。 比如,如果在 DFINITY 上实现了设计多个容器交互的复杂应用,比如一个借贷应用,需要与稳定币、借出代币、流动性凭证三个合约交互,三个合约都成功调用才能完成借贷。但如果强行在 DFINITY 实现以太坊范式的调用,如果其中两个合约成功,而最后一个调用没有响应,那么借贷交易会失败,并且前两个合约的状态却已经完成,就会卡住,而不会退回去。表现在用户这边,就是钱已经质押上去,代币已经扣走,却没法完成借贷,也没有收到退款。 (责任编辑:admin) |