# Starknet Cairo语言解读

By [Albert WANG](https://paragraph.com/@ww941019) · 2022-08-05

---

StarkNet是一种利用zkSTARKs进行扩展的Layer2解决方案，它通过增加吞吐量和降低交易费用来缓解以太坊的网络拥塞。利用零知识证明技术，还增强了数据的安全性和隐私性。开发人员可以在去中心化环境中构建、部署和运行高性能智能合约。

STARKNET的基础设施和智能合约均使用的是Cairo编程语言。Cairo是一种相对较新的语言，其功能在未来可能会发生变化。以下是Cairo语言的特点：

*   **表现力强**: Cairo语言具有强大的表现力，可以表达复杂的计算和逻辑。
    
*   **内置函数**: Cairo语言内置了许多常用的函数，如哈希函数和加密函数，这些函数可以方便地在智能合约中使用。
    
*   **隐式参数**: Cairo语言支持隐式参数，这使得智能合约编写更加简单和直观。
    
*   **提示**: Cairo语言支持在程序中嵌入Python代码，这些代码只能被Prover看到，而Verifier看不到，这使得一些零知识应用成为可能。
    
*   **嵌入式测试函数**: Cairo语言支持在程序中嵌入测试函数，这使得工程师可以直接在Cairo中实现单元测试，而无需编写单独的测试文件。
    

StarkNet通过使用zkSTARKs、本地编程语言Cairo和Cairo虚拟机(VM)提供了许多独特的优势。

[https://book.cairo-lang.org/ch01-01-installation.html](https://book.cairo-lang.org/ch01-01-installation.html)

Cairo语言的优势和缺点如下：
================

### 优势：

*   Cairo是一种专门为智能合约设计的、可证明的语言。
    
*   Cairo具有强大的表现力，可以表达复杂的计算和逻辑。
    
*   Cairo语言内置了许多常用的函数，如哈希函数和加密函数，这些函数可以方便地在智能合约中使用。
    
*   Cairo语言支持隐式参数，这使得智能合约编写更加简单和直观。
    
*   Cairo语言支持在程序中嵌入Python代码，这些代码只能被Prover看到，而Verifier看不到，这使得一些零知识应用成为可能。
    
*   Cairo语言支持在程序中嵌入测试函数，这使得工程师可以直接在Cairo中实现单元测试，而无需编写单独的测试文件。
    
*   Cairo语言的证明系统可以高效地生成STARK证明来验证程序的执行。
    
*   Cairo语言的虚拟机和语言具有STARK友好性，可以在StarkNet平台上高效地执行智能合约。
    

### 缺点：

*   作为一种相对较新的语言，Cairo的生态系统和工具链相对较少。
    
*   Cairo语言的学习曲线可能较陡峭，需要一定的学习成本。
    
*   Cairo语言的功能在未来可能会发生变化。
    

总之，Cairo语言具有许多优点，如强大的表现力、可证明性、内置函数和嵌入式测试函数等，这些优点使得智能合约编写更加简单和直观。同时，Cairo语言的证明系统和STARK友好性也使得其在StarkNet平台上具有高效性。然而，Cairo语言的生态系统和工具链相对较少，需要一定的学习成本。

Cairo语言与其他编程语言的比较如下：
====================

### 与Solidity相比：

*   Cairo是一种专门为智能合约设计的、可证明的语言，而Solidity则是以太坊上最常用的智能合约编程语言之一。
    
*   Cairo具有强大的表现力和内置函数，可以表达复杂的计算和逻辑，而Solidity则相对较为简单。
    
*   Cairo语言支持隐式参数和嵌入Python代码的功能，这使得一些零知识应用成为可能，而Solidity则不支持这些功能。
    
*   Cairo语言的证明系统可以高效地生成STARK证明来验证程序的执行，而Solidity则使用基于Merkle树的验证方法。
    
*   Cairo语言的虚拟机和语言具有STARK友好性，可以在StarkNet平台上高效地执行智能合约，而Solidity则需要在以太坊虚拟机上执行。
    

### 与Vyper相比：

*   Vyper是另一种专门为智能合约设计的语言，与Solidity类似，但更注重安全性和可审计性。
    
*   Vyper缺乏Solidity所拥有的广泛社区支持，并且目前还没有Solidity原生工具。
    
*   Vyper还缺少修饰符、类继承和递归调用，并且编程语言不是图灵完备的。
    
*   与Vyper相比，Cairo具有更强的表现力和内置函数，支持隐式参数和嵌入Python代码的功能，以及更高效的证明系统和STARK友好性。
    

### 与Yul相比：

*   Yul是支持EVM的以太坊中间层语言，旨在直接转换为字节码，擅长为更高级的Web3开发人员优化智能合约和降低gas成本。
    
*   Yul缺乏工具和生态系统支持，而Cairo则有更完整的系统和用户友好的数据库。
    
*   Cairo具有更强的表现力和内置函数，支持隐式参数和嵌入Python代码的功能，以及更高效的证明系统和STARK友好性。
    

Cairo的转账代码示例：
=============

    mod transfer;
    
    use debug::PrintTrait;
    
    fn main() {
        let sender_balance = transfer::get_balance(sender);
        let receiver_balance = transfer::get_balance(receiver);
    
        if sender_balance >= amount {
            transfer::set_balance(sender, sender_balance - amount);
            transfer::set_balance(receiver, receiver_balance + amount);
            'Transfer successful!'.print();
        } else {
            'Insufficient balance!'.print();
        }
    }
    

这段代码首先调用了一个名为`transfer`的模块，该模块包含了获取账户余额、设置账户余额等函数。然后，它获取了发送方和接收方的余额，并检查发送方的余额是否足够转账。如果余额足够，则更新发送方和接收方的余额，并打印出“Transfer successful!”的消息。如果余额不足，则打印出“Insufficient balance!”的消息。

需要注意的是，这段代码中的`sender`、`receiver`和`amount`变量需要在调用该函数之前进行定义和初始化。此外，该代码示例仅供参考，实际的链上转账代码需要根据具体的需求进行编写。

**总结**
------

总之，Cairo语言具有强大的表现力和许多方便的功能，使得智能合约编写更加简单和直观。与其他智能合约编程语言相比，Cairo具有更高效的证明系统和STARK友好性，支持隐式参数和嵌入Python代码的功能，以及更完整的系统和用户友好的数据库。

Citations:

\[1\] [https://www.gate.io/zh/blog\_detail/2558/投研导航-读懂以太坊-layer2-扩容解决方-starknet-技术架构-生态版图-layer3-概念](https://www.gate.io/zh/blog_detail/2558/%E6%8A%95%E7%A0%94%E5%AF%BC%E8%88%AA-%E8%AF%BB%E6%87%82%E4%BB%A5%E5%A4%AA%E5%9D%8A-layer2-%E6%89%A9%E5%AE%B9%E8%A7%A3%E5%86%B3%E6%96%B9-starknet-%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84-%E7%94%9F%E6%80%81%E7%89%88%E5%9B%BE-layer3-%E6%A6%82%E5%BF%B5)

\[2\] [https://book.cairo-lang.org/zh-cn/ch01-02-hello-world.html](https://book.cairo-lang.org/zh-cn/ch01-02-hello-world.html)

\[3\] [https://foresightnews.pro/article/detail/21291](https://foresightnews.pro/article/detail/21291)

\[4\] [https://blog.csdn.net/weixin\_44600198/article/details/131075704](https://blog.csdn.net/weixin_44600198/article/details/131075704)

\[5\] [https://hackernoon.com/zh/Starknet-生态系统是否被高估了](https://hackernoon.com/zh/Starknet-%E7%94%9F%E6%80%81%E7%B3%BB%E7%BB%9F%E6%98%AF%E5%90%A6%E8%A2%AB%E9%AB%98%E4%BC%B0%E4%BA%86)

---

*Originally published on [Albert WANG](https://paragraph.com/@ww941019/starknet-cairo)*
