Starknet编程语言Cairo 1.0:设计原理

币小圈2023-11-0652阅读0评论

温馨提示:这篇文章已超过615天没有更新,请注意相关的内容是否还可用!

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<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.

更直观的库

(例如字典、数组)

  • 字典<Uint256,MyStruct>;

  • 数组<MyOtherStruct>;

更优化的代码

无需显式声明局部变量的分配——自动检测并自动完成。

更好的编译器集成

实现更好的 IDE 支持、包管理和更好地促进社区贡献。

结论

 Cairo 1.0 提供了改进的可表达性、安全性和语法。它将让开发者能够更轻松地编写他们的 StarkNet 合约。