/starknet_in_rust

A Rust implementation of Starknet execution logic

Primary LanguageRustApache License 2.0Apache-2.0

πŸ¦€ Starknet in Rust πŸ¦€

Starknet transaction execution library in Rust, featuring ⚑cairo-vm⚑

Report Bug Β· Request Feature

codecov license pr-welcome Telegram Chat

Table of Contents

⚠️ Disclaimer

🚧 This project is a work-in-progress and is not ready for production yet. Use at your own risk. 🚧

πŸ“– About

starknet_in_rust is an implementation of Starknet in Rust. It makes use of cairo-vm, the Rust implementation of the Cairo virtual machine.

πŸŒ… Getting Started

Dependencies

  • Rust 1.70
  • A working installation of cairo-lang 0.12 (for compiling the cairo files)
  • [Optional, for testing purposes] Heaptrack

Installation

Run the following make targets to have a working environment (if in Mac or if you encounter an error, see the subsection below):

Linux (x86-64)

$ make deps
$ make build

OSX (Apple Silicon)

$ make deps-macos
$ make build

Check the Makefile for additional targets.

RPC State Reader

In order to use the RPC state reader add an Infura API key in a .env file at root:

INFURA_API_KEY={some_key}

How to manually install the script dependencies

cairo-lang requires the gmp library to build. You can install it on Debian-based GNU/Linux distributions with:

sudo apt install -y libgmp3-dev

In Mac you can use Homebrew:

brew install gmp

In Mac you'll also need to tell the script where to find the gmp lib:

export CFLAGS=-I/opt/homebrew/opt/gmp/include LDFLAGS=-L/opt/homebrew/opt/gmp/lib

πŸš€ Usage

Running simple contracts

You can find a tutorial on running contracts here.

Using the CLI

You can find an example on how to use the CLI here

Testing

Add an Infura API key.

Run the following command:

$ make test

Profiling

Run the following command:

$ make flamegraph

to generate a flamegraph with info of the execution of the main operations.

Benchmarking

Read the 'bench_integration.py' file to identify which lines need to be commented out for accurate results. Comment out those lines and then run the following command:

$ make benchmark

πŸ›  Contributing

The open source community is a fantastic place for learning, inspiration, and creation, and this is all thanks to contributions from people like you. Your contributions are greatly appreciated.

If you have any suggestions for how to improve the project, please feel free to fork the repo and create a pull request, or open an issue with the tag 'enhancement'.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

And don't forget to give the project a star! ⭐ Thank you again for your support.

🌞 Related Projects

  • cairo-vm: A fast implementation of the Cairo VM in Rust.
  • cairo-vm-py: Bindings for using cairo-vm from Python code.

πŸ“š Documentation

Starknet

βš–οΈ License

This project is licensed under the Apache 2.0 license.

See LICENSE for more information.