讨论 Vibe Coding Cairo 面向 Solidity 开发者

Cairo 面向 Solidity 开发者

Joe 发表于    阅读:14    回复:0


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.0snforge 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的第三方内容,仅供信息分享与传播之目的,不代表我们的立场或观点且不构成任何投资及应用建议。版权归原作者或来源方所有,如内容或素材有所争议请和我们取得联系。

我来评论