我们在前面的文章中介绍了Zilliqa,市面上第一个利用分片技术实现了比较高的TPS的区块链公链。我们曾经提到,Zilliqa的智能合约语言叫Scilla,是一种主要针对基于区块链并行计算的应用而设计的语言。这篇文章我们就来聊聊Scilla。
Zilliqa公链的分片架构,是很适合高效的运行偏重计算的任务的。不像传统公链上的智能合约,比如以太网的智能合约,所有的全节点必须完整运行一个智能合约的所有逻辑,从而在整体上对运算结果达成共识。这种方式很安全,但在进行大规模运算的时候则会非常的昂贵。Scilla可以约定分片的部分节点参与计算的运行,比如搜索、排序、人工智能里神经网络的训练、数据挖掘、建模等等。
Scilla其实不是一种图灵完备的语言,它遵循的是数据流编程(dataflow programming)的模式。在这种模式下,智能合约是用有向图来表示的。有向图的节点表示的是对数据的操作,而有向图的边则代表出入的数据。如图所示:
当运行在Zilliqa的链上的时候,有向图的节点可以分配个一个分片中的多个节点。Zilliqa的这种架构特别适合分布计算(MapReduce)的要求,部分节点做mapper,部分节点做Reducer。
在此之外,Zilliqa还为更好得控制计算的成本,Scilla可以指定每个计算节点需要参与的共识节点数,这样可以有不同的gas支付费用。比如,一个人工智能神经网络训练的计算,可以指定较少的计算节点,从而支付较少的gas费用;而一个经济模型建模的计算,则可能需要跟多的节点参与共识,以防止结果的不当或者被篡改,从而需要支付较多的gas费用。