#compile #sierra #version #casm #compilation #tool #ever-existing

bin+lib universal-sierra-compiler

Universal-Sierra-Compiler is the tool for Sierra compilation. It compiles any ever-existing Sierra version to CASM.

7 releases (4 stable)

new 2.4.0 Feb 18, 2025
2.4.0-rc.0 Jan 16, 2025
2.2.0 Aug 2, 2024
2.2.0-rc.1 Jul 10, 2024
2.1.0 Mar 22, 2024

#2 in #casm

Download history 154/week @ 2024-10-29 111/week @ 2024-11-05 168/week @ 2024-11-12 205/week @ 2024-11-19 172/week @ 2024-11-26 116/week @ 2024-12-03 122/week @ 2024-12-10 68/week @ 2024-12-17 21/week @ 2024-12-24 55/week @ 2024-12-31 126/week @ 2025-01-07 410/week @ 2025-01-14 243/week @ 2025-01-21 28/week @ 2025-01-28 89/week @ 2025-02-04 71/week @ 2025-02-11

495 downloads per month
Used in 4 crates (2 directly)

MIT license

1MB
292 lines

Universal-Sierra-Compiler

Crates.io Version

Universal-Sierra-Compiler is the tool/crate for Sierra compilation. It compiles any ever-existing Sierra version to CASM.

Supported Sierra Versions
1.7.0
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:

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:

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:

$ 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:

$ 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:

$ 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:

$ 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<serde_json::Value>
  • compile_raw(serde_json::Value) -> Result<serde_json::Value>

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<serde_json::Value>.

Dependencies

~27–38MB
~546K SLoC