Starknet 是一种基于 zk rollup 的 L2 解决方案,非 EVM 兼容,使用自己开发的 Cairo 语言来编写链上的智能合约,而非 Solidity。目前 Cairo 1.0 已经发布,基于 rust 语言实现。之前的版本是基于 python 语言,属于两个独立的代码仓库。
https://www.rust-lang.org/zh-CN/tools/install
git clone https://github.com/starkware-libs/cairo/
cd cairo
git checkout 9c190561ce1e8323665857f1a77082925c817b4c
cargo build --all --release
注:目前这一部分还在旧版的代码仓库中。
创建 python 虚拟环境
python3.9 -m venv ~/cairo_venv_v11
source ~/cairo_venv_v11/bin/activate
也可以采用其他方式,比如 conda 之类的。
若之前已经安装,需要卸载
pip3 uninstall cairo-lang
下载最新的代码包(cairo-lang-0.11.0.1.zip)
curl https://github.com/starkware-libs/cairo-lang/releases/download/v0.11.0.1/cairo-lang-0.11.0.1.zip
本地安装
pip3 install cairo-lang-0.11.0.1.zip
验证
starknet --version
导入依赖
cp cairo/target/release/starknet-sierra-compile ~/cairo_venv_v11/lib/python3.9/site-packages/starkware/starknet/compiler/v1/bin/starknet-sierra-compile
下载 demo 合约
cd ..
git clone https://github.com/starknet-edu/deploy-cairo1-demo
mv deploy-cairo1-demo/hello_starknet.cairo .
编译
// 切换至 cairo one 编译器所在目录
cd cairo
cargo run --bin starknet-compile -- ../hello_starknet.cairo ../hello_starknet.json --replace-ids
编译后得到 hello_starknet.json 文件。
设置环境
export STARKNET_NETWORK=alpha-goerli
export STARKNET_WALLET=starkware.starknet.wallets.open_zeppelin.OpenZeppelinAccount
创建账号
starknet new_account --account <your account name>
领水
去官方网站 StarkNet Faucet 领水。
部署账号
注:每一个 starknet 账户,都是一个合约,因此创建完之后需要部署。
starknet deploy_account --account <your account name>
cd ..
starknet declare --contract hello_starknet.json --account <your account name>
声明后得到 class hash 以及交易 hash 值。
starknet deploy --class_hash <class_hash> --account <your account name>
部署后得到合约地址以及交易 hash 值。
至此,大功告成。
后续 Cairo One 编译器安装与 Starknet CLI 安装应该会融为一体,提供诸如 starknet compile 命令,促使更好的开发体验。
Starknet 的账户使用的是 AA(Account Abstraction) 账户,每一个账户都对应一个合约。
部署合约之前,需要先进行一步声明。
