注意!由于 Cairo 语言变化,此教程已经过期。1.10 语法请参考此文 https://starknetastro.xlog.app/Starknet_Shanghai_Workshop_DAY1#
学习资料推荐:
-
文档类
- Starknet Astro Boot Camp,
本次 Boot Camp 的文档。 - cairo-book, 社区中的成员模仿 rust-book 写的一本书,目前是相对较全面的一份资料
- Cairo Github 仓库里的文档,这是官方文档,但是还在撰写中
- 一位来自 Argent X 的非洲励志哥总结的文档
- Starknet Astro Boot Camp,
-
代码案例类
- starklings 交互式教程 运行于本地环境的交互式教程。Starknet Basecamp 的作业之一。
- starknet-cairo-101 针对 Cairo 合约的教程。Basecamp 的作业之一。
- awesome-cairo 汇总了很多开源的 Cairo 项目,包含很多优秀的实现案例
- Openzepplin 的合约仓库
- Cairo 核心库源码
最小安装选项:
系统:curl,git
IDE:VSCode 或任何你喜欢的编辑器(唯独不要使用 windows 自带的 notepad)
MacOS:homebrew
可选项:
如果你想要尝试将 Cairo 合约部署到 testnet 和 mainnet 上,你还需要安装以下支持
账户抽象钱包:Braavos 或 Argent X
Cairo 0.x 的 CLI 工具。
安装 Rust#
建议通过 rustup (docs) 来安装 rust。rustup 可以切换 rust 版本和升级。
~ $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
之后重启命令行终端即可验证是否安装成功,或者在终端内执行以下命令:
~ $ source "$HOME/.cargo/env"
验证版本
~ $ rustup --version
rustup 1.25.2 (17db695f1 2023-02-01)
如果你没有安装 curl,也可以在此处下载 rust 的各种系统的安装包
https://forge.rust-lang.org/infra/other-installation-methods.html#rustup
安装 Cairo#
在终端中输入如下命令,从 Github 上 Clone 最新的 Cairo repo
git clone https://github.com/starkware-libs/cairo/ ./cairo
注意,alpha 的一些版本可能是 starknet 不支持的,所以我们需要指定特定的 tag,现阶段 starknet 支持的稳定版本是 v1.0.0-rc0。
cd ./cairo
git checkout tags/v1.0.0-rc0
之后我们就可以 build 整个 Cairo 了
cargo build --all --release
测试是否成功
cargo run --bin starknet-compile --help
或者
./target/release/starknet-compile --version
执行 .cairo 文件#
让我们先编写一个测试用 Cairo 文件。在当前目录下创建一个新的文件。
文件名为:hellostarknetastro.cairo
内容为:
use debug::PrintTrait;
fn main() {
'Hello, StarknetAstro!'.print();
}
执行如下命令:
cargo run --bin cairo-run -- hellostarknetastro.cairo
或者使用上面编译好的 relese 中的来进行执行
target/release/cairo-run hellostarknetastro.cairo
这时,终端里会输出类似以下内容
[DEBUG] Hello, StarknetAstro! (raw: 105807143882116536446217580363080108601441594273569)
编译 .cairo 文件#
Cairo 自带了一些范例,我们可以用如下命令编译:
首先我们在 cairo 根目录下创建一个文件夹用来保存输出
mkdir output
之后使用 cargo 进行编译
cargo run --bin cairo-compile examples/fib.cairo output/fib.json
或者使用
target/release/cairo-compile examples/fib.cairo output/fib.json
这里我们输出的其实是中间代码, Cairo 称之为 Sierra。
如果想输出可以直接在 Cairo-VM 上执行的文件,我们需要进一步把 Sierra 编译称 Cairo 汇编(casm)文件。
cargo run --bin sierra-compile -- output/fib.json output/fib.casm
或者
target/release/sierra-compile -- output/fib.json output/fib.casm
当然,一般来说,只有需要部署到 starknet 上时才需要编译 Cairo 合约到 casm。无特殊需求我们一般不需要编译单纯的 Cairo 代码到 casm。
安装 Python#
旧 Cairo-CLI 需要的是 python 3.9 版本。为了避免和已经安装的冲突,和 rust 一样,我们推荐使用 python 版本管理工具 pyenv 来安装 python。
MacOS:
brew update
brew install pyenv
或者
curl https://pyenv.run | bash
之后
pyenv install 3.9
pyenv global 3.9
Linux:
curl https://pyenv.run | bash
之后
pyenv install 3.9
pyenv global 3.9
验证是否安装成功
python3.9 --version
或者直接简单的安装一个 py3.9 版本
https://www.python.org/downloads/release/python-3915/
可选内容:安装 Cairo 0.x CLI#
此 CLI 用于部署 starknet 合约。我们需要先安装 GMP 环境支持
linux
sudo apt install -y libgmp3-dev
MACOS
brew install gmp
之后我推荐创建一个虚拟环境。让我们先创建一个 test 文件夹:
mkdir -p starknetastro/camp1/
cd starknetastro/camp1/
接着创建一个 python 虚拟环境:
python3.9 -m venv venv
启动虚拟环境:
source venv/bin/activate
此时你应该可以看到终端的前面带上了一个(venv)。让在虚拟环境中升级 PIP
(venv)camp1 $ pip install --upgrade pip
安装 CLI
Linux:
(venv) camp1 $ pip install cairo-lang
MACOS (M1~芯片)
(venv) camp1 $ CFLAGS=-I`brew --prefix gmp`/include LDFLAGS=-L`brew --prefix gmp`/lib pip install cairo-lang
检验是否安装完成
(venv) camp1 $ starknet --version
输出:
starknet 0.11.1