Ape compiler plugin around the Cairo language.
You can install the latest release via pip:
pip install ape-cairoYou can clone the repository and use setuptools for the most up-to-date version:
git clone https://github.com/ApeWorX/ape-cairo.git
cd ape-cairo
python3 setup.py installFirst, you will need to tell ape-cairo how to use the Cairo compiler.
There are two ways to do this:
- Configure your Cairo manifest path in your
ape-config.yaml. - Build or add Cairo compiler binaries to your $PATH.
Both options require cloning the Cairo compiler source code:
git clone git@github.com:starkware-libs/cairo.git
cd cairo
git fetch --all
git checkout <tag> # e.g. v1.0.0-alpha.6To do the first option, add the following to your ape-config.yaml file:
cairo:
manifest: /Users/home/path/to/cairo/Cargo.tomlNow, when compiling, Ape will use the command cargo run --bin <BIN> --manifest-path <CAIRO-MANIFEST>.
To do the second option instead, build the release binaries for your OS:
cargo build --releaseNOTE: This requires being in the same directory as Cairo.
After the build completes, add the target path to your global $PATH variable.
(You may want to add this to your .zshrc / .bashrc file):
export PATH=$PATH:$HOME/path/to/cairo/target/releaseVerify you have sierra-compile in your $PATH by doing:
which sierra-compileWARN: Note that when using Cairo-lang the python package, it will add conflicting binaries with the same name.
You will need to ensure you are using the correct binaries if you have cairo-lang the Python package installed.
which starknet-compileAlternatively, the first approach avoids this problem.
In a project directory where there are .cairo files in your contracts/ directory, run the compile command:
ape compileIt should create ContractType objects in your .build/ folder containing the necessary Sierra code for contract declaration.
This project is in development and should be considered a beta. Things might not be in their final state and breaking changes may occur. Comments, questions, criticisms and pull requests are welcomed.