随着0.11 版在 Starknet 上的推出,您现在可以在 Starknet 上部署您的第一个 Cairo 1 合约!极好的!
... 但是怎么办?
在我们整理文档之前,这是一个非常粗略的指南
您将需要:
在特定高度克隆 Cairo 存储库(编译 Cairo 1 合约的工具)
安装最新版本的 Cairo-lang(与 Starknet 交互的工具)
使用 cairo 将你的合约从 Cairo 编译到 Sierra
使用 cairo-lang 声明你的 Sierra 合约
使用 cairo-lang 部署你的合约
使用 Twitter 向您的朋友吹嘘
git clone https://github.com/starknet-edu/deploy-cairo1-demo
cd deploy-cairo1-demo
如果您是第一次安装 Cairo:
git clone https://github.com/starkware-libs/cairo/
cd cairo
git checkout 9c190561ce1e8323665857f1a77082925c817b4c
cargo build --all --release
如果您已经安装了 Cairo:
cd cairo
git fetch && git pull
git checkout 9c190561ce1e8323665857f1a77082925c817b4c
cargo build --all --release
此时,您已在此存储库中安装了 Cairo。
返回回购的根文件夹
cd ..
搭建python虚拟环境
python3.9 -m venv ~/cairo_venv_v11
source ~/cairo_venv_v11/bin/activate
如果您之前安装了 cairo-lang,请将其卸载
pip3 uninstall cairo-lang
安装开罗语言
pip3 install ecdsa fastecdsa sympy
pip3 install cairo-lang
检查您是否已正确安装
starknet --version
您可以使用这个小的演示合约来完成这个测试。这是一个非常基本的事件记录器。
演示合约代码如下:
#[contract]
mod HelloStarknet {
use starknet::get_caller_address;
use starknet::ContractAddress;
#[event]
fn Hello(from: ContractAddress, value: felt252) {}
#[external]
fn Say_Hello(message: felt252) {
let caller = get_caller_address();
Hello(caller, message);
}
}
从您的终端,在您安装 Cairo 的文件夹中
cd cairo
cargo run --bin starknet-compile -- ../hello_starknet.cairo ../hello_starknet.json --replace-ids
恭喜,您已经编制了从开罗到塞拉利昂的合同!
export STARKNET_NETWORK=alpha-goerli
export STARKNET_WALLET=starkware.starknet.wallets.open_zeppelin.OpenZeppelinAccount
您需要确保您的 starknet CLI 设置了适当的账户合约和资金。为了安全起见,我将为本教程创建一个新的。
starknet new_account --account version_11
你应该得到你期望的合约地址
发送 0.1 ETH 给它
监控转账交易。一旦通过“pending”,继续
starknet deploy_account --account version_11
监控部署事务。一旦通过“pending”,继续
返回教程的根文件夹,然后尝试声明
cd ..
starknet declare --contract hello_starknet.json --account version_11
您应该收到新声明的类哈希!
好的,所以我遇到了问题。使用 declare 发回:
Error: OSError: [Errno 8] Exec format error: '~/cairo_venv_11/lib/python3.9/site-packages/starkware/starknet/compiler/v1/bin/starknet-sierra-compile'
原因是 cairo-lang 需要编译你的 sierra 代码,它为此使用了导入的 rust 二进制文件“starknet-sierra-compile”。但就我而言,导入的二进制文件不是为我的架构构建的:-(。
所以,很简单:我从本地构建的 cairo 存储库中获取了“starknet-sierra-compile”,并将其替换为 python 包。这是一个应该起作用的命令:
cp cairo/target/release/starknet-sierra-compile ~/cairo_venv_v11/lib/python3.9/site-packages/starkware/starknet/compiler/v1/bin/starknet-sierra-compile
然后再次尝试声明。它应该工作!
此时,您又回到了习惯的流程中。使用您之前收到的类哈希:
starknet deploy --class_hash <class_hash> --account version_11
监控您的交易。如果由于费用估算而失败,请重试。一旦您的交易被 accepted_on_l2.... 恭喜!你已经部署了你的第一个 Cairo 1 合约!