Cairo 是一种受 Rust 启发的语言,可以编译为字节码,在 Cairo 虚拟机上运行。Cairo 虚拟机是一种零知识虚拟机(ZKVM),由 Starknet 区块链用于执行智能合约。在本教程系列中,我们不要求读者具备 Rust 或零知识证明的先前经验。不过,本教程系列假设读者具备 Solidity 的基础经验。我们期望读者知道如何编写 ERC-20 和 ERC-721,并对像 Uniswap V2 这样的去中心化应用(dApp)的工作原理有概念性的理解。
Cairo 经过精心设计,帮助 Solidity 开发者快速学习这门语言,本系列教程突出它们之间的相似之处,从而让 Solidity 开发者能够复用在 Solidity 中获得的思维模式,快速理解 Cairo。
Cairo 入门指南
要开始编写 Cairo 智能合约,你需要安装 Scarb(Cairo 的包管理器和构建工具)以及 Starknet Foundry(一套用于开发、部署和测试 Cairo 智能合约的工具链)。
安装方法
最简单的安装方式是使用 starkup,它可以通过一条命令自动安装 Scarb、Starknet Foundry 和 Cairo 编译器。
然而,截至本文撰写时,starkup 安装的是 Scarb 版本 2.11.4 和 snforge 版本 0.48.1。asdf install scarb 2.12.0在本教程系列中,为了避免兼容性问题,我们需要使用 Scarb v2.12.0 和 snforge v0.48.0,因为本系列中使用的某些语法在其他版本中可能会表现不同,甚至导致部分示例无法编译。
为了使用这些特定版本,我们推荐通过 asdf 进行安装,因为它支持精确的版本控制,并能同时管理多种编程工具的不同版本。如果你尚未安装 asdf,请参考其官方安装指南。
注意:本指南要求使用 asdf v0.16.0 或更高版本。如果你当前使用的是旧版本,建议升级至最新版。
Set up Scarb version v2.12.0:
Add the Scarb plugin to asdf:
asdf plugin add scarb
Install Scarb version 2.12.0:
asdf install scarb 2.12.0
Set the version for 2.12.0:
# Set globally for all projects
asdf set scarb 2.12.0
Setup Starknet Foundry v0.48.0:
Add the Starknet Foundry plugin to asdf:
asdf plugin add starknet-foundry
Install version 0.48.0:
asdf install starknet-foundry 0.48.0
Set the version for 0.48.0:
# Set globally for all projects
asdf set starknet-foundry 0.48.0
Restart your shell for the changes to take effect:
exec zsh # or exec bash if using bash
Verify the installations:
scarb --version snforge --version

创建你的第一个项目
创建一个仅包含小写字母和下划线的空目录(例如:hello_world)。
请避免使用大写字母或连字符(-),因为 Scarb 的包名必须遵循 snake_case 命名规范。
进入该目录,然后运行以下命令:
scarb init
当提示选择项目模板时,请从选项列表中选择 Starknet Foundry(默认选项)。

这将生成一个简单的 Cairo 智能合约,用于存储和更新一个余额值(类似于 Solidity 中 Foundry 默认提供的 Counter 合约)。
项目结构
当你在代码编辑器中打开该项目时,会看到如下目录结构:
hello_world/ ├── src/ │ └── lib.cairo # Your main contract code ├── tests/ │ └── test_contract.cairo # Test files go here ├── Scarb.toml # Project configuration and dependencies ├── Scarb.lock # Lock file for exact dependency versions ├── snfoundry.toml # Starknet Foundry configuration └── .gitignore # Git ignore file
src/:存放智能合约源代码的目录。
lib.cairo 是项目的主入口文件;默认情况下,Scarb 会生成一个名为 HelloStarknet 的简单合约,用于管理一个余额(balance)值。
tests/:包含用于验证合约功能的测试文件。
Scarb.toml:定义项目的依赖项、Cairo 编译器版本、包元数据以及构建配置(类似于 Node.js 中的 package.json 或 Rust 中的 Cargo.toml)。你在这里管理合约所依赖的库。
Scarb.lock:记录所有依赖项的确切版本,确保构建的可重现性。
snfoundry.toml:用于配置 Starknet Foundry 的相关设置,例如 RPC 节点地址、账户配置和测试执行选项。
简而言之:Scarb.toml 管理项目本身及其依赖,而 snfoundry.toml 配置 Foundry 工具链的行为。
设置语法高亮
如果你使用 VS Code 或其衍生版本,请安装 Cairo 1.0 扩展以启用语法高亮。安装完成后,VS Code 将识别 .cairo 文件,并提供自动补全和错误高亮等功能。请注意,假冒的 VS Code 扩展是一种常见的社交工程手段,请务必仔细核对扩展的发布者。

打开 src/lib.cairo 查看 Scarb 生成的代码。我们将在下一章解释其语法。

要编译你的合约,请运行:
scarb build
该命令会编译你的 Cairo 代码,并在 target/ 目录中生成已编译的合约文件。这些文件将用于部署到 Starknet。
你还可以通过以下命令测试项目:
scarb test
Cairo 中与 Solidity 类似的概念
Cairo 智能合约具有“存储变量”的概念,支持 Solidity 开发者熟悉的类型,例如整数、字符串、映射、数组、布尔值等。
以下概念在 Cairo 中有与 Solidity 一对一或几乎一对一的对应:
存储变量和存储槽
触发事件
public、internal 和 view 函数
require 语句
msg.sender、block.timestamp 和 block.number
构造函数
用于声明外部函数的接口
合约可以调用其他合约,并使用 ABI 来了解如何调用其他合约
合约可以创建其他合约
交易消耗“gas”以抑制垃圾信息
OpenZeppelin 是该语言事实上的“标准库”
与 Solidity 的主要区别
与 Solidity 相比,Cairo 合约具有以下能力或差异:
Cairo 支持内存中的哈希映射(Solidity 仅支持存储映射)
Solidity 的内存数组在声明时必须指定大小,而 Cairo 无此限制
Cairo 拥有从 Rust 继承而来的更富表现力的控制流语法(例如模式匹配)
与 Rust 类似,Cairo 不是面向对象语言,因此不支持继承。不过,Cairo 提供了其他代码组合方式
Solidity 合约通过代理模式升级;而 Cairo 合约可以在保留存储不变的情况下直接升级字节码
Cairo 中没有“原生代币”,因此没有 msg.value。默认情况下,gas 使用 STRK 代币支付,这是一种 ERC-20 代币。你可以在浏览器中查看该代币:[链接]
Starknet 在协议层内置了账户抽象,因此不存在“外部拥有账户(EOA)”的概念
最后一点可能会让来自 EVM 兼容链的开发者感到困惑,但不用担心,我们将在后续详细探讨。
来源:https://rareskills.io/post/cairo-install
免责声明:本文为c2e Labs的第三方内容,仅供信息分享与传播之目的,不代表我们的立场或观点且不构成任何投资及应用建议。版权归原作者或来源方所有,如内容或素材有所争议请和我们取得联系。