介绍

什么是Cairo?

Cairo是一种为同名的虚拟CPU设计的编程语言。这种虚拟处理器的独特之处在于,它不是为我们世界的物理法则而创造的,而是为密码学法则而创造的,这使得它能够有效地证明在其上运行的任何程序。这意味着你可以在一台你不信任的机器上进行耗时的操作,而在一台更便宜的机器上非常迅速地检查结果。 虽然Cairo 0曾经直接编译成CASM,即Cairo CPU汇编,但Cairo 1是一种更高级的语言。它首先编译到Cairo的一个中间表示,Sierra,接着会编译成CASM的一个安全子集。Sierra的意义在于确保你的CASM总是可以证明的,即使计算失败。

你能用它做什么?

Cairo允许你在不被信任的机器上计算值得信任的值。一个主要的用例是Starknet,这是一个针对Ethereum扩展的解决方案。以太坊是一个去中心化的区块链平台,它可以创建去中心化的应用程序,用户和d-app之间的每一次交互都会被所有参与者验证。Starknet是一个建立在以太坊之上的Layer 2。不同于以太坊让网络的所有参与者来验证所有的用户的交互,Starknet只让一个被称为验证者(prover)的节点来执行程序,并生成计算正确的证明。这些证明再由以太坊智能合约来验证,与执行交互本身相比,需要的计算能力要少得多。这种方法增加了吞吐量和降低交易成本,但保留了以太坊的安全性。

与其他编程语言有什么区别?

Cairo与传统的编程语言,尤其是在额外的性能开销和语言的主要优势方面,有很大不同。你的程序可以通过两种不同的方式执行:

  • 当被证明器(prover)执行时,它与其他的编程语言类似。因为Cairo是虚拟化的,而且其操作并未设计为效率最大化,因此可能会导致一些额外性能开销,但这并不是最需要优化的部分。

  • 当生成的证明被验证器验证时,情况就有点不同了。这一步必须是尽可能的少消耗计算资源,因为它有可能需要在许多非常慢的机器上进行验证。幸运的是,验证比计算更快,而且Cairo有一些独特的优势,可以进一步提高验证速度。一个值得注意的是非确定性,这是一个将在本书后面详细介绍的话题。其设计理念是,理论上你无需在计算时和验证时使用同一种算法(译注:即在验证时你可以使用比生成证明时更快的算法来减少时间消耗)。目前开发者还不能编写自定义的非确定性代码,但标准库利用非确定性来提高性能。例如,在Cairo中对一个数组进行排序的成本与复制它的成本相同,这是因为验证器只是检查它是否被排序而不是真的对数组进行排序,所以可以减少计算资源消耗。

使该语言与众不同的另一个方面是其内存模型。在Cairo中,内存访问是不可改变的,这意味着一旦一个值被写入内存,它就不能被改变。Cairo 1提供了帮助开发者处理这些约束的抽象,但它并没有完全模拟可变性。因此,开发人员必须仔细考虑如何在他们的程序中管理内存和数据结构以优化性能。

参考文献

Last change: 2023-06-07, commit: 8361a46