# Universal-Sierra-Compiler ![Crates.io Version](https://img.shields.io/crates/v/universal-sierra-compiler?logo=rust) Universal-Sierra-Compiler is the tool/crate for Sierra compilation. It compiles any ever-existing Sierra version to CASM. | Supported Sierra Versions | |---------------------------| | 1.6.0 | | 1.5.0 | | ~1.4.0 | | ~1.3.0 | | ~1.2.0 | | 1.1.0 | | 1.0.0 | | 0.1.0 | ## Installation To install the latest stable version of `universal-sierra-binary` run: ```shell curl -L https://raw.githubusercontent.com/software-mansion/universal-sierra-compiler/master/scripts/install.sh | sh ``` Alternatively, to use USC as a Rust dependency, just put it in your `Cargo.toml` like so: ``` universal-sierra-compiler = "2.1.0" ``` You almost always want to install the latest stable version. In rare cases where a prerelease with a new unstable sierra version exists, and you want to use it, run the following command with the requested prerelease version: ```shell curl -L https://raw.githubusercontent.com/software-mansion/universal-sierra-compiler/master/scripts/install.sh | sh -s -- v2.0.0-rc.0 ``` > 📝 **Note** > > If the script can't add installed binary to the PATH, it will print the instructions about adding it manually. ## Using as a binary ### Command line tool Tool consist of two subcommands: - `compile-contract` - `compile-raw` The first one compiles Sierra of the Starknet contract, while the second one compiles Sierra of the plain Cairo code. ### `compile-contract` subcommand The input of this subcommand is a path to a file with Sierra of the contract (`cairo_lang_starknet_classes::contract_class::ContractClass`) in json format: ```shell $ universal-sierra-compiler \ compile-contract \ --sierra-path ./path/to/sierra.json {"bytecode": ...} ``` > 📝 **Note** > > Please, note that the output is in the JSON format. To automatically save CASM, pass `--output-path` argument: ```shell $ universal-sierra-compiler \ compile-contract \ --sierra-path ./path/to/sierra.json --output-path ./path/to/casm.json ``` ### `compile-raw` subcommand The input of this subcommand is a path to a file with Sierra program (`cairo_lang_sierra::program::Program`) in json format: ```shell $ universal-sierra-compiler \ compile-raw \ --sierra-path ./path/to/sierra.json {"assembled_cairo_program": ...} ``` > 📝 **Note** > > Please, note that the output is in the JSON format. To automatically save assebled cairo program, pass `--output-path` argument: ```shell $ universal-sierra-compiler \ compile-raw \ --sierra-path ./path/to/sierra.json --output-path ./path/to/casm.json ``` ## Using as a library Library crate exports two functions: - `compile_contract(serde_json::Value) -> Result` - `compile_raw(serde_json::Value) -> Result` They do the same as their CLI counterparts. However, they accept the whole program in json format as a parameter, precisely a `json_serde::Value`. Return value is the compiled program inside `Result`.