注意!由於 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