Diamond

Posted on Sep 14, 2022Read on Mirror.xyz

Cairo 1.0

原文:Cairo 1.0 翻译:「StarkNet 中文」社区

概要

  • 自两年前 Cairo 推出后,Cairo 1.0 是第一个重大版本更新

  • Cairo 1.0 将为开发者提供一种更安全、更简单、更实用的编程语言

  • Cairo 1.0 的核心是 Sierra,这是个中间表示层,承诺为 Cairo 程序提供更大的长期稳定性

  • Sierra 提升 Cairo,推进无需许可网络:

    • 保护网络:更稳固的 DoS 防护

    • 保护用户:继承以太坊的抗审查性

  • Cairo 1.0 在许多方面都将影响 StarkNet,也会影响到网络重置。我们将在几周内发布更多关于重置的信息。

简介

我们在 2020 年发布了图灵完备编程语言 Cairo,向 STARK 可验证计算迈出了一大步。今天,我们宣布 Cairo 1.0,这是迄今为止 Cairo 最大的改进。Cairo 1.0 将引入一种改进语言,其功能可以提高可用性、安全性和便捷性。Cairo 1.0 旨在支持 StarkNet 作为一个无需许可网络的要求,让协议变得更简洁、更安全。

开发工作已在进行中,我们预计第一个版本很快就会出来。

在这篇文章中,我们将讲述迄今为止 Cairo 的发展历程,以及即将推出的功能细节。

Cairo 的发展历程

2020 年以前,建立 STARK 通用计算可验证程序需要专项知识。只有那些了解 STARK 背后复杂数学原理的人才有可能做到这点。具体来说,对于每一个业务逻辑,即每一次计算,都需要生成一个代数中间数表示 (AIR),这是一组代表特定计算的多项式约束。

可验证计算应该让世界各地的开发者都能使用,Cairo 正是出于这样的想法而诞生了。Cairo 让开发者可以随心驾驭 STARK 的力量。

自此开发者社区就对 Cairo 充满热情。今日 StarkNet 生态系统中的一切繁荣都建立在 Cairo 之上。在 StarkNetStarkEx 之间,由 Cairo 驱动的应用程序已处理超过 2.2 亿笔交易,铸造了超过 6500 万个 NFT,处理交易总价值超过 7000 亿美元,所有的这些都在以太坊上结算。

虽然 Cairo 让 STARK 变得可用,但最初是作为汇编语言而设计,因此就写成了一种低级语言。

用 Cairo 编写的一个早期程序示例

在开发者的反馈和 StarkNet 兴起的推动下,我们逐渐改进 Cairo,让它变得更具表现力,对开发者更友好。

一个 ERC-20 Cairo 合约示例,展示了对变量、if 语句、错误和 UINT256 库的支持

但很快我们就确定,需要向前更进一步,与其对 Cairo 做渐进式的改进,不如来一次更大胆的转型。

Cairo 1.0

从 Cairo 1.0 开始,我们从头开始构建了一个全新的编译器,为开发者提供安全功能,且允许以更简单、更具表现力的方式编写合约。

隆重推出 Sierra:保证每次 Cairo 运行程序都可验证

Cairo 1.0 主要新增 Sierra(Safe Intermediate Representation,安全中间表示)。Sierra 构成 Cairo 1.0 和 Cairo 字节码之间的一个新的中间表示层。Sierra 的目标是确保每一次 Cairo 的运行(即一个 Cairo 程序和它的输入)都能得到证明(见下文)。

Sierra 保证 Cairo 开发者的代码未来一定可用。底层系统改进的情况下,StarkNet 合约不需要重新编译(例如,改变 CPU AIR 架构,改进 Sierra 到 Cairo 字节码的最终转译),这进一步带来稳定性。

证明每一次 Cairo 运行。 在之前的 Cairo 版本中,Cairo 运行可能导致三种情况:TRUE、FALSE 或失败。 失败的运行无法证明。 Sierra 能确保 Cairo 运行永远不会失败,并且只会得到 TRUE 或者 FALSE 的结果。 同时反过来又确保了每次 Cairo 的运行都可以被证明。

Sierra 的引入对于 StarkNet 作为一个无需许可的网络来说具有重要意义。 Sierra 确保即使是撤回的交易也可以包含在 StarkNet 块中。 此属性将允许 StarkNet 协议无需添加复杂的加密经济机制仍旧保持精简。

两个形象的例子:

  1. 排序器会对撤回交易收取费用,从而使 StarkNet 能够以既定的方式防范排序器 DoS 攻击。

  2. 可以实现强制 L1 交易,让 StarkNet 继承以太坊的全面抗审查性。

语言特色

Cairo 1.0 将对编程语言自身提供很多改进。 下面所示内容并非在第一个版本一次更新,会按路线图逐渐更新。

改进后的语法

  • 不再有 localtempvar,只用 let 来处理所有变量

  • 改进 if 命题语法

Oldif cond != 0 {
  tempvar x = x+1;
} else {
  tempvar x = x;
}__________________________________Newif cond { x = x + 1; }

类型安全保证

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

  • 指针将总是指向初始化的内存

  • 默认压缩 dictionaries,而不需要程序员调用 squash_dict

使用语言构造更容易

例如:

  • 循环
let sum = 0
for x in iter {
  sum = sum + x;
}
  • 布尔表达式

  • 整数(常规整数除法 👯)

  • 相关类型的溢出保护

  • 布尔条件

一个全面的类型系统

  • 抽象数据类型(即类似 Rust 的枚举)
enum Option<T> {
 Some: T,
 None,
}match result {
 Some(r) => {..},
 None => {..},
}
  • 特征
trait Add<Uint256> {
    fn add(…) { … }
}
let a: Uint256 = 1;
let b: Uint256 = 4;
a + b; // Evaluated to 5 of type Uint256.

更直观的代码库

(e.g. dict, arrays)

  • Dict<Uint256, MyStruct>;

  • Array;

进一步优化的代码

自动检测并自动完成局部变量分配,无需明确说明。

更好整合编译器

启用更好的 IDE 支持、软件包管理以及更好地促进社区贡献。

结论

Cairo 首次发布并应用两年的同时,我们也在开发 Cairo 1.0,将大幅提升可表达性、安全性和语法。这是 StarkNet 向前迈出的一大步,更方便开发人员编写 StarkNet 合约。

在即将发布的文章中,我们将详述 Cairo1.0 对 StarkNet 网络重置影响,以及开发人员应如何为其发布做好准备。