Blockchain technologies are facing a scalability challenge, which must be overcome to guarantee a wider adoption of the technology. This scalability issue is mostly caused by the use of consensus algorithms to guarantee the total order of the chain of blocks (and of the operations within each block). However, total order is often overkilling, since important advanced applications of smart-contracts do not require a total order of all the operations. Hence, if a more relaxed partial order (instead of a total order) is allowed under certain safety conditions, a much higher scalability can be achieved. In this paper, we propose a distributed concurrent data type, called Setchain, that allows implementing this partial order and increases significantly blockchain scalability. A Setchain implements a grow-only set object whose elements are not totally ordered, unlike conventional blockchain operations. When convenient, the Setchain allows forcing a synchronization barrier that assigns permanently an epoch number to a subset of the latest elements added. With the Setchain, operations in the same epoch are not ordered, while operations in different epochs are. We present different Byzantine-tolerant implementations of Setchain, prove their correctness and report on an empirical evaluation of a direct implementation. Our results show that Setchain is orders of magnitude faster than consensus-based ledgers to implement grow-only sets with epoch synchronization. Since the Setchain barriers can be synchronized with block consolidation, Setchain objects can be used as a sidechain to implement many smart contract solutions with much faster operations than on basic blockchains.
翻译:封锁链技术正面临一个伸缩性挑战,必须克服这一挑战才能保证更广泛地采用技术。这一伸缩性问题主要由于使用协商一致算法来保证块链链(和每个块内作业)的总体秩序。然而,总秩序往往过份,因为智能合同的重要先进应用并不要求所有操作的总顺序。因此,如果在某些安全条件下允许更宽松的部分顺序(而不是总顺序),那么可以达到更高的连锁性。在本文中,我们提议一个分布式的平行数据类型,称为Set链,允许执行这一基本链链条的伸缩性,并大大提高块链的伸缩性。一个只设增长的固定目标,其元素并非完全订购,而不像传统的链链条操作那样。当方便时,Set链可以强行设置一个同步性屏障,将一个小数永久分配给添加的一组元素。随着Set链链条的启用,同一行将无法按更快的速度进行操作,而不同行进。我们提出了不同的Byzent-ca-liste-listal 运行一个比我们Set-se-se-slevlevel 的连续执行过程的进度要正确,因为Set-se-se-se-se-se-se-se-tailal 能够正确地显示其执行一个稳定的执行结果的进度可以显示其执行过程的进度可以正确地显示其执行。