# 部署 Starknet Cairo 1 合约

By [0xpowpos.eth](https://paragraph.com/@0xpowpos) · 2023-03-28

---

前言
--

Starknet 是一种基于 zk rollup 的 L2 解决方案，非 EVM 兼容，使用自己开发的 Cairo 语言来编写链上的智能合约，而非 Solidity。目前 [Cairo 1.0](https://github.com/starkware-libs/cairo/) 已经发布，基于 rust 语言实现。[之前的版本](https://github.com/starkware-libs/cairo-lang)是基于 python 语言，属于两个独立的代码仓库。

Cairo one 编译器安装
---------------

### 本地安装 Rust

[https://www.rust-lang.org/zh-CN/tools/install](https://www.rust-lang.org/zh-CN/tools/install)

### 本地安装 Cairo one 编译器

    git clone https://github.com/starkware-libs/cairo/
    cd cairo
    git checkout 9c190561ce1e8323665857f1a77082925c817b4c
    cargo build --all --release
    

### 本地安装 Cairo one 编译器

Starknet CLI 安装
---------------

注：目前这一部分还在旧版的[代码仓库](https://github.com/starkware-libs/cairo-lang)中。

*   创建 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](https://faucet.goerli.starknet.io/) 领水。

*   部署账号
    

注：每一个 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) 账户，每一个账户都对应一个合约。
    
*   部署合约之前，需要先进行一步声明。
    

参考
--

[https://github.com/starknet-edu/deploy-cairo1-demo](https://github.com/starknet-edu/deploy-cairo1-demo)

---

*Originally published on [0xpowpos.eth](https://paragraph.com/@0xpowpos/starknet-cairo-1)*
