# Starknet编程语言Cairo 1.0：设计原理

By [神荼社区](https://paragraph.com/@0x7a88a1376fa85a0010e9ccd2ca660b1cb780e9a6) · 2023-11-15

---

CryptoSix
---------

2023/11/06 16:58  11万

Cairo 是一个图灵完备的 ZK 友好高级语言，也是以太坊 L2-Starknet 的合约开发语言。**Cairo 1.0**版本。引入一种改进的语言，其功能将增强可用性、安全性和便利性。它旨在支持 StarkNet 作为无许可网络的要求，使协议变得更简单、更安全。

### Cairo的诞生

Cairo 的诞生源于这样一种认识：应向世界各地的开发人员提供可验证的计算。Cairo 使开发人员能够利用 STARK 的力量。

此后，开发者社区抓住cairo的机遇，热情地进行建设。如今蓬勃发展的 StarkNet 生态系统中的一切都基于Cairo。在STARKNET 和 STARKEX之间 ，Cairo 驱动的应用程序已经处理了超过 2.2 亿笔交易，铸造了超过 6500 万个 NFT，并处理了价值 700B 美元的交易，所有这些交易都在以太坊上结算。

### Cairo 1.0

对于 Cairo 1.0构建了一个全新的编译器，它将为开发人员提供安全功能，并允许他们以更简单、更具表现力的方式编写合约。

#### Sierra 简介：确保每一次开罗跑步都能得到验证

Cairo  **1.0**中主要添加的是**Sierra （安全**中间 **表示**）\*\*。\*\*Sierra 构成了 Cairo 1.0 和 Cairo 字节码之间的新中间表示层。Sierra 的目标是确保每一次 Cairo 运行（即 Cairo 程序及其输入）都可以得到证明（请参阅下文）。

Sierra 承诺开罗开发人员提供更好的面向未来的代码。在底层系统改进的情况下（例如，CPU AIR 架构更改、从 Sierra 到 Cairo 字节码的最终翻译的改进），StarkNet 合约不需要重新编译，这一事实提供了进一步的稳定性。

在旧版本中，Cairo 运行可能会导致三种情况：正确、错误或失败。无法证明失败的运行。Sierra，确保开罗运行永远不会失败，并且只能得出 TRUE 或 FALSE。这反过来又确保了每次Cairo 运行都能得到验证。

Sierra 的引入对于 StarkNet 作为无需许可的网络具有重要意义。Sierra 确保即使是恢复的交易也可以包含在 StarkNet 区块中。这一特性将使 StarkNet 协议保持精简和简单，而无需添加复杂的加密经济机制。两个有意义的例子：

1.  Sequencer 将能够对恢复的交易收取费用，从而使 StarkNet 能够以完善的方式防止 Sequencer DoS。
    
2.  实施强制 L1 交易将成为可能，从而使 StarkNet 继承以太坊的完全抗审查能力。
    

### **语言特点**

Cairo 1.0 将对编程语言本身进行许多改进。并非下面列出的所有内容都将成为第一个版本的一部分，但它是路线图的一部分。

#### **改进的语法**

*   删除_本地_和 _临时变量_。现在我们只需要 _let_ 来规则所有变量。
    
*   改进的 _if_ 语句语法
    

Oldif cond != 0 {   tempvar x = x+1;} else {   tempvar x = x;}\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_Newif cond { x = x + 1; }

#### **类型安全保证**

编译器将使用强类型来提高代码的安全性。例如：

*   指针将始终指向已初始化的内存。
    
*   字典总是会被压缩，而不是将调用squash\_dict的责任留给程序员。
    

#### **更容易使用语言结构**

例如：

*   For 循环
    

let sum = 0for x in iter {   sum = sum + x;}

*   布尔表达式
    
*   整数（具有常规整数除法）
    
*   相关类型的溢出保护
    
*   布尔条件
    

OldIf cond1:   if cond2:        # Some code   else if cond3:        # Same code\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_NewIf cond1 && (cond2 || cond3) { … }

#### **一个成熟的类型系统**

*   抽象数据类型（即类似 Rust 的枚举）
    

enum Option {  Some: T,  None,}match result {  Some(r) => {..},  None => {..},} 性状 trait Add {     fn add(…) { … }}let a: Uint256 = 1;let b: Uint256 = 4;a + b; // Evaluated to 5 of type Uint256. **更直观的库** （例如字典、数组） 字典<Uint256，MyStruct>； 数组; **更优化的代码** 无需显式声明局部变量的分配——自动检测并自动完成。 **更好的编译器集成** 实现更好的 IDE 支持、包管理和更好地促进社区贡献。 **结论** Cairo 1.0 提供了改进的可表达性、安全性和语法。它将让开发者能够更轻松地编写他们的 StarkNet 合约。

---

*Originally published on [神荼社区](https://paragraph.com/@0x7a88a1376fa85a0010e9ccd2ca660b1cb780e9a6/starknet-cairo-1-0)*
